pax_global_header00006660000000000000000000000064145244126350014520gustar00rootroot0000000000000052 comment=7df42ed86e4ce5ff48f58846d086b4cf36d241e1 i18next-23.7.6/000077500000000000000000000000001452441263500131175ustar00rootroot00000000000000i18next-23.7.6/.babelrc000066400000000000000000000001761452441263500145160ustar00rootroot00000000000000{ "presets": [["@babel/env", { "targets": { "browsers":[ "defaults" ] } }], "@babel/react"] } i18next-23.7.6/.circleci/000077500000000000000000000000001452441263500147525ustar00rootroot00000000000000i18next-23.7.6/.circleci/config.yml000066400000000000000000000010231452441263500167360ustar00rootroot00000000000000version: 2 jobs: build: docker: - image: circleci/node:latest-browsers environment: CHROME_BIN: '/usr/bin/google-chrome' steps: - checkout - restore_cache: key: dependency-cache-{{ checksum "package.json" }} - run: name: install-npm-wee command: npm install - save_cache: key: dependency-cache-{{ checksum "package.json" }} paths: - ./node_modules - run: name: test command: npm test i18next-23.7.6/.codeclimate.yml000066400000000000000000000012011452441263500161630ustar00rootroot00000000000000engines: duplication: enabled: true config: languages: - ruby - javascript: mass_threshold: 58 - python - php eslint: enabled: true fixme: enabled: true ratings: paths: - 'src/**/*' exclude_paths: - test/ - coverage/ - dist/ - 'i18next.js' - 'i18next.min.js' - 'index.d.ts' - 'rollup.config.js' - 'karma.conf.js' - 'karma.backward.conf.js' checks: file-lines: config: threshold: 300 method-lines: config: threshold: 70 complex-logic: config: threshold: 5 nested-control-flow: config: threshold: 5 i18next-23.7.6/.coveralls.yml000066400000000000000000000000561452441263500157130ustar00rootroot00000000000000repo_token: SHBhCq4BLOpxJww3DG6g7dtKcuhG62zcK i18next-23.7.6/.editorconfig000066400000000000000000000002641452441263500155760ustar00rootroot00000000000000# EditorConfig is awesome: http://EditorConfig.org root = true [*.{js,jsx,json}] end_of_line = lf insert_final_newline = true charset = utf-8 indent_style = space indent_size = 2 i18next-23.7.6/.eslintignore000066400000000000000000000000471452441263500156230ustar00rootroot00000000000000**/dist/* **/node_modules/* **/*.min.* i18next-23.7.6/.eslintrc000066400000000000000000000014621452441263500147460ustar00rootroot00000000000000parser: "@babel/eslint-parser" // parserOptions: // requireConfigFile: false extends: - airbnb - prettier rules: max-len: [0, 100] no-constant-condition: 0 arrow-body-style: [1, "as-needed"] padded-blocks: [0, "never"] no-unused-vars: [2, {vars: all, args: none}] prefer-arrow-callback: 1 no-plusplus: 0 no-param-reassign: 0 no-unused-expressions: 1 import/extensions: 0 comma-dangle: 0 prefer-destructuring: 0 default-param-last: 0 prefer-spread: 0 no-continue: 0 no-constructor-return: 0 consistent-return: 0 no-nested-ternary: 0 react/prop-types: - 0 - ignore: #coming from hoc - location - fields - handleSubmit globals: expect: true describe: true it: true before: true beforeEach: true after: true window: true sinon: true i18next-23.7.6/.github/000077500000000000000000000000001452441263500144575ustar00rootroot00000000000000i18next-23.7.6/.github/stale.yml000066400000000000000000000014311452441263500163110ustar00rootroot00000000000000 # Number of days of inactivity before an issue becomes stale daysUntilStale: 7 # Number of days of inactivity before a stale issue is closed daysUntilClose: 7 # Issues with these labels will never be considered stale exemptLabels: - "discussion" - "feature request" - "bug" - "breaking change" - "doc" - "issue" - "help wanted" - "good first issue" # Label to use when marking an issue as stale staleLabel: stale # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: falsei18next-23.7.6/.gitignore000066400000000000000000000005411452441263500151070ustar00rootroot00000000000000# Ignore specific files .settings.xml .monitor .DS_Store *.orig npm-debug.log npm-debug.log.* *.dat .vscode # Ignore various temporary files *~ *.swp # Ignore various Node.js related directories and files node_modules node_modules/**/* coverage/**/* dist/**/* # Ignore IntelliJ based IDEs project files .idea // is generated on build index.v4.d.tsi18next-23.7.6/.husky/000077500000000000000000000000001452441263500143405ustar00rootroot00000000000000i18next-23.7.6/.husky/.gitignore000066400000000000000000000000021452441263500163200ustar00rootroot00000000000000_ i18next-23.7.6/.husky/pre-commit000077500000000000000000000000721452441263500163410ustar00rootroot00000000000000#!/bin/sh . "$(dirname "$0")/_/husky.sh" npx lint-staged i18next-23.7.6/.npmignore000066400000000000000000000005711452441263500151210ustar00rootroot00000000000000src/ test/ coverage/ assets/ .circleci/ .babelrc .editorconfig .eslintignore .eslintrc .gitignore bower.json gulpfile.js karma.conf.js karma.backward.conf.js sample.html .codeclimate.yml .coveralls.yml tsconfig.json tsconfig.nonEsModuleInterop.json .prettierignore .prettierrc rollup.config.js rollup.config.mjs tslint.json CHANGELOG.md CONTRIBUTING.md .github .husky examples/i18next-23.7.6/.prettierignore000066400000000000000000000001151452441263500161570ustar00rootroot00000000000000i18next.js i18next.min.js src/PluralResolver.js test/locales/en/nonjson.json i18next-23.7.6/.prettierrc000066400000000000000000000002171452441263500153030ustar00rootroot00000000000000{ "bracketSpacing": true, "bracketSameLine": false, "printWidth": 100, "semi": true, "singleQuote": true, "trailingComma": "all" } i18next-23.7.6/CHANGELOG.md000066400000000000000000001740271452441263500147430ustar00rootroot00000000000000## 23.7.6 - types: CustomInstanceExtenstions ## 23.7.5 - fix types export for TypeScript v4 in combination with react-i18next ## 23.7.4 - fix for TypeScript v4 in combination with react-i18next ## 23.7.3 - fix: consider importing '\*.js' ## 23.7.2 - types: optimize mts ## 23.7.1 - fix some mjs typings ## 23.7.0 - fix: separate cjs and mjs typings [2010](https://github.com/i18next/i18next/issues/2010) - fix: consider importing './typescript/t.js' [2048](https://github.com/i18next/i18next/issues/2048) ## 23.6.0 - add interpolation data to response if returnDetails is true [2053](https://github.com/i18next/i18next/pull/2053) ## 23.5.1 - types: use unknown to better infer types on nested t functions also for older typescript version [2032](https://github.com/i18next/i18next/issues/2032) ## 23.5.0 - types: use unknown to better infer types on nested t functions [2018](https://github.com/i18next/i18next/pull/2018) ## 23.4.9 - fix: preload languages also on cimode, if configured also as fallbackLng ## 23.4.8 - fix: preload languages also on cimode, if configured ## 23.4.7 - preload languages also on cimode, if configured ## 23.4.6 - pass correct language for custom i18nFormat ## 23.4.5 - types: named export for FlatNamespace ## 23.4.4 - types: add customisation of contextSeparator also on v4 t types [2019](https://github.com/i18next/i18next/pull/2019) ## 23.4.3 - types: add customisation of contextSeparator [2017](https://github.com/i18next/i18next/pull/2017) ## 23.4.2 - types: export some types for next-i18next ## 23.4.1 - types: fix typescript imports ## 23.4.0 - types: Support const modifier for options and key [2007](https://github.com/i18next/i18next/pull/2007) - types: Support context [2006](https://github.com/i18next/i18next/pull/2006) ## 23.3.0 - types: Fix performance issue that affects flat object with multiple (thousands) keys [2004](https://github.com/i18next/i18next/pull/2004) ## 23.2.11 - types: Fix $TFunctionBrand [1997](https://github.com/i18next/i18next/pull/1997) ## 23.2.10 - types: emit function can have additional arguments [1993](https://github.com/i18next/i18next/issues/1993) ## 23.2.9 - types: Add brand to TFunction type so different namespaces' TFunctions are not treated as compatible [1994](https://github.com/i18next/i18next/pull/1994) ## 23.2.8 - types for hasLoadedNamespace ## 23.2.7 - fix utils import (for Deno) ## 23.2.6 - Re-allow unknown keys, when a defaultValue is provided [1867](https://github.com/i18next/i18next/issues/1867) ## 23.2.5 - Clean language code before passing to formatters [1988](https://github.com/i18next/i18next/pull/1988) ## 23.2.4 - types: Constrain return type when returnObjects is true [1985](https://github.com/i18next/i18next/pull/1985) ## 23.2.3 - types: Optimize logic for fallback ns [1984](https://github.com/i18next/i18next/pull/1984) ## 23.2.2 - types: try to fix fallbackNS type handling also for older TS version [1981](https://github.com/i18next/i18next/issues/1981) ## 23.2.1 - types: fix fallbackNS type handling [1979](https://github.com/i18next/i18next/pull/1979) ## 23.2.0 - types: add fallbackNS type handling [1975](https://github.com/i18next/i18next/pull/1975) ## 23.1.0 - cloneInstance: introduce `forkResourceStore` [1974](https://github.com/i18next/i18next/issues/1974) - types: default argument values for ParseKeys type ## 23.0.2 - refactor: static createInstance for wider browser support [1973](https://github.com/i18next/i18next/pull/1973) ## 23.0.1 - types: export ParseKeys ## 23.0.0 **This is a major breaking release:** - redesigned TypeScript types [1911](https://github.com/i18next/i18next/pull/1911) - removed `setDebug` function in the logger: [1954](https://github.com/i18next/i18next/issues/1954#issuecomment-1537117407) - changed `returnNull` default to `false` [1885](https://github.com/i18next/i18next/pull/1885) - drop support for old browsers and Node.js < v12 [1948](https://github.com/i18next/i18next/issues/1948) - ordinal plural keys are now prefixed with `_ordinal` to help translators (non-breaking, because of fallback) [1945](https://github.com/i18next/i18next/pull/1945) ➡️ check out the [migration guide](https://www.i18next.com/misc/migration-guide#v22.x.x-to-v23.0.0) ## 22.5.1 - ResourceStore addResource: offer possibility to pass keySeparator via options [1968](https://github.com/i18next/i18next/issues/1968) ## 22.5.0 - extend hasLoadedNamespace function options to pass optional lng to optimize server side usage of react-i18next ## 22.4.15 - fix: function t() passed options alteration [1947](https://github.com/i18next/i18next/issues/1947) ## 22.4.14 - fix: pass lng to format function used in nesting [1938](https://github.com/i18next/i18next/issues/1938) ## 22.4.13 - fix: deepFind as fallback for interpolation [1930](https://github.com/i18next/i18next/issues/1930) ## 22.4.12 - fix: getBestMatchFromCodes when dev is a supported lng [1927](https://github.com/i18next/i18next/issues/1927) ## 22.4.11 - types: fix postProcessor key argument type, fixes [1919](https://github.com/i18next/i18next/issues/1919) ## 22.4.10 - format options are optional, fixes [1913](https://github.com/i18next/i18next/issues/1913) ## 22.4.9 - fix: getFixedT with keyPrefix and fallback keys usage [1604](https://github.com/i18next/react-i18next/issues/1604) ## 22.4.8 - fix: nested interpolation with data model "replace" ## 22.4.7 - fix: interpolation with data model "replace" ## 22.4.6 - types: missing dir function export for typescript ## 22.4.5 - types: allow als general options as second argument for t function ## 22.4.4 - types: fix some strange t function overloads fixes [1882](https://github.com/i18next/i18next/issues/1882) ## 22.4.3 - types: t function overloads fix (open issue is still calling t with optional options argument) ## 22.4.2 - types: t function overloads for call with ns option in combination with objects ## 22.4.1 - types: more t function overloads for call with options argument but without ns value ## 22.4.0 - types: more overloads for t function ## 22.3.0 - offer possibility to define a language detector's detect function as promise ## 22.2.0 - types: extend the init method with a generic parameter for backend options [1878](https://github.com/i18next/i18next/pull/1878), [105](https://github.com/i18next/i18next-http-backend/pull/105), [34](https://github.com/i18next/i18next-fs-backend/pull/34) ## 22.1.5 - types: ability to pass ns as option instead of prefix i.e. `i18next.t('bar', { ns: 'alternate' });` ## 22.1.4 - dir function executable also without initialization ## 22.1.3 - named export for dir function ## 22.1.2 - revert: guess if languageDetector is async if no info provided ## 22.1.1 - guess if languageDetector is async if no info provided ## 22.1.0 - extend backend connector to accept also backends with promise / async-await signature ## 22.0.8 - fix options for continuous nesting [1876](https://github.com/i18next/i18next/issues/1876) ## 22.0.7 - Expose some types [1871](https://github.com/i18next/i18next/pull/1871) ## 22.0.6 - fix CallbackError type ## 22.0.5 - Change DefaultTFuncReturn to return null if returnNull typeOption is true [1865](https://github.com/i18next/i18next/pull/1865) ## 22.0.4 - Add type for Formatter.addCached [1862](https://github.com/i18next/i18next/pull/1862) ## 22.0.3 - Make getFixedT type-safe [1860](https://github.com/i18next/i18next/pull/1860) - types: Omit object from t function [1858](https://github.com/i18next/i18next/pull/1858) ## 22.0.2 - [TypeScript] Add default value for TDefaultResult [1853](https://github.com/i18next/i18next/pull/1853) ## 22.0.1 - Fix normalize type options [1850](https://github.com/i18next/i18next/pull/1850) ## 22.0.0 - Make the translation function fully type-safe [1775](https://github.com/i18next/i18next/pull/1775) BREAKING: Since this is a major rewrite for [TypeScript usage](https://www.i18next.com/overview/typescript) we decided to create a major version. For JavaScript users v22.0.0 is equivalent to 21.10.0 ## 21.10.0 - Add formatter cache [1843](https://github.com/i18next/i18next/pull/1843) ## 21.9.2 - optimize single quotes replacement for $t() nesting [1836](https://github.com/i18next/i18next/issues/1836) ## 21.9.1 - defaultNS can now also be set to false ## 21.9.0 - Add Customizable Retry Logic [1810](https://github.com/i18next/i18next/pull/1810) - types: extend compatibilityJSON with v4 ## 21.8.16 - types: fix getDataByLanguage type [1810](https://github.com/i18next/i18next/pull/1810) ## 21.8.15 - fix: make sure retry logic ends for failed backend reads ## 21.8.14 - allow overriding keyPrefix option t function returned from getFixedT (does not work for normal t function) ## 21.8.13 - types: new optional unescape option for react-i18next ## 21.8.12 - fix: respect pluralSeparator for special \_zero handling ## 21.8.11 - fix: types should always come first in exports [1796](https://github.com/i18next/i18next/pull/1796) ## 21.8.10 - types: fix loaded event result ## 21.8.9 - fix: deepFind for null values [1790](https://github.com/i18next/i18next/issues/1790) ## 21.8.8 - fix: loadNamespaces() doesn't keep resolving order when the second request completes before the first one [1785](https://github.com/i18next/i18next/issues/1785) ## 21.8.7 - fix: allow formatters having '' for string options eg. `this is an {{val, array(join: ' | ’)}}` ## 21.8.6 - fix: regression introduced in v21.6.11, respect `appendNamespaceToMissingKey` for `parseMissingKeyHandler` [1507](https://github.com/i18next/react-i18next/issues/1507) ## 21.8.5 - fix: interpolation with $ in values resets nextIndex to wrong position with skipOnVariables [1782](https://github.com/i18next/i18next/issues/1782) ## 21.8.4 - types: keyPrefix in react options ## 21.8.3 - prevent chrome warnings because of `window.navigator.userAgent` usage [1778](https://github.com/i18next/i18next/issues/1778) ## 21.8.2 - types: add saveMissingPlurals option [1774](https://github.com/i18next/i18next/issues/1774) ## 21.8.1 - fix regression introduced with [1768](https://github.com/i18next/i18next/pull/1768) ## 21.8.0 - add maxParallelReads option, default 10 [1771](https://github.com/i18next/i18next/pull/1771) - reduce CPU usage loading large numbers of items [1768](https://github.com/i18next/i18next/pull/1768) ## 21.7.1 - types: missing returnDetails option in init options [1765](https://github.com/i18next/i18next/issues/1765) ## 21.7.0 - introduce returnDetails option [1764](https://github.com/i18next/i18next/pull/1764) ## 21.6.16 - fix: defaultVariables were not accessible inside plugin parse function [1751](https://github.com/i18next/i18next/pull/1751) ## 21.6.15 - fix hasLoadedNamespace when providing inmemory resources and a backend but partialBundledLanguages is not set ## 21.6.14 - fix formatter for false inline options ## 21.6.13 - make sure resolvedLanguage is set if lazy loading resources ## 21.6.12 - fix ordinal-suffixes for saveMissingWithPlurals [1734](https://github.com/i18next/i18next/pull/1734) ## 21.6.11 - make sure key and additionally optional defaultValue are passed to parseMissingKeyHandler function [1445](https://github.com/i18next/react-i18next/issues/1445) ## 21.6.10 - fix: types for hasLoadedNamespace [1724](https://github.com/i18next/i18next/pull/1724) ## 21.6.9 - fix: respect skipOnVariables option passed in t function also for $t() usage ## 21.6.8 - fix: respect skipOnVariables option passed in t function ## 21.6.7 - fix: consistently lowercase new formatter names internally ## 21.6.6 - fix: deepFind fallback when accessing missing flat dotted key [1719](https://github.com/i18next/i18next/issues/1719) ## 21.6.5 - fix: passed format parameter value truncation in options argument for custom formatter [1715](https://github.com/i18next/i18next/issues/1715) ## 21.6.4 - fix: skipOnVariables (and all other interpolation options should respect defaults) [1711](https://github.com/i18next/i18next/issues/1711) ## 21.6.3 - types: wait option does not exist anymore for react-i18next ## 21.6.2 - remove console.log statement ## 21.6.1 - fix when completely lazy loading namespaces [1709](https://github.com/i18next/i18next/issues/1709) ## 21.6.0 - add \_zero suffix lookup if count === 0 [1705](https://github.com/i18next/i18next/pull/1705) ## 21.5.6 - fix: correct defaults for plural forms (if supplied) [1703](https://github.com/i18next/i18next/issues/1703) ## 21.5.5 - fix: prevent TypeError when using `returnObjects: true` with non string values [1702](https://github.com/i18next/i18next/issues/1702) ## 21.5.4 - include version info in generated package.json of esm dist ## 21.5.3 - do not use options.interpolation reference ## 21.5.2 - missing named exports for TypeScript usage [1692](https://github.com/i18next/i18next/issues/1692) ## 21.5.1 - add package.json to exports subpath ## 21.5.0 - named exports for esm usage [1681](https://github.com/i18next/i18next/pull/1681) ## 21.4.2 - trim multiple formatters, fixes [1689](https://github.com/i18next/i18next/issues/1689) ## 21.4.1 - rtl fix for -arab language codes ## 21.4.0 - bind all i18next functions to this, this way you can for example just use t() instead of i18n.t() [1682](https://github.com/i18next/i18next/issues/1682) ## 21.3.3 - apply default interpolation formatter when interpolation options don't specify one [1680](https://github.com/i18next/i18next/issues/1680) ## 21.3.2 - formatter typescript declarations [1679](https://github.com/i18next/i18next/pull/1679) ## 21.3.1 - get rid of internal isDummy check to prevent react-native issue [1675](https://github.com/i18next/i18next/issues/1675) ## 21.3.0 - adds support for formats provided by Intl API (number, currency, datetime, relativedate, list) ## 21.2.6 - optimize do skip natural language detection also if user provided nsSeparator option is passed via direct options ## 21.2.5 - do skip natural language detection also if user provided nsSeparator option is passed [1665](https://github.com/i18next/i18next/issues/1665) ## 21.2.4 - optimize Intl api check ## 21.2.3 - fix Intl.PluralRules fallback ## 21.2.2 - log error if Intl.PluralRules API is not available ## 21.2.1 - do skip natural language detection, if user provided keySeparator option is passed [1670](https://github.com/i18next/i18next/issues/1670) ## 21.2.0 - provide bundled esm distributable [1667](https://github.com/i18next/i18next/issues/1667) ## 21.1.1 - optimize natural language detection [1661](https://github.com/i18next/i18next/issues/1661) ## 21.1.0 - A new RTL support added for `ckb` language code ## 21.0.2 - fix defaultNS regression if translation namespace is defined in ns option, fixes #1658 ## 21.0.1 - fix typescript typo for skipOnVariables ## 21.0.0 **This is a major breaking release:** - introduce new v4 json format (intl plural forms with ordinal support), simplifyPluralSuffix not used anymore - `skipOnVariables` by default now is true - automatically detect natural language keys (no need to set nsSeparator or keySeparator to false) - remove deprecated whitelist features - introduce new i18next.resolvedLanguage property ➡️ check out the [migration guide](https://www.i18next.com/misc/migration-guide#v20.x.x-to-v21.0.0) ## 20.6.1 - fix deepFind if looking for nesting array item ## 20.6.0 - feature: key prefix option [1644](https://github.com/i18next/i18next/pull/1644) ## 20.5.0 - introduce missingKeyNoValueFallbackToKey option ## 20.4.0 - change to return false when a nullable argument is passed [1635](https://github.com/i18next/i18next/pull/1635) - make sure parseMissingKeyHandler is called when defaultValue is provided [1354](https://github.com/i18next/react-i18next/issues/1354) - types: Fix i18n.use() cannot pass module constructors in TypeScript [1442](https://github.com/i18next/i18next/pull/1442) - types: fix TypeScript definition for "loaded" event handler [1637](https://github.com/i18next/i18next/issues/1637) ## 20.3.5 - change init warning to only trigger if not using useSSR on react-i18next ## 20.3.4 - fix(types): only use readonly array of strings in API [1629](https://github.com/i18next/i18next/pull/1629) ## 20.3.3 - add transWrapTextNodes to types [1626](https://github.com/i18next/i18next/pull/1626) ## 20.3.2 - context can also be a number [1622](https://github.com/i18next/i18next/issues/1622) ## 20.3.1 - add 'ns' to the 'returnedObjectHandler' options [1619](https://github.com/i18next/i18next/pull/1619) - disable warn 'accessing an object' when the 'returnedObjectHandler' is defined [1617](https://github.com/i18next/i18next/pull/1617) ## 20.3.0 - add simple toJSON function to fix uncontrolled serialization, fixes [1322](https://github.com/i18next/react-i18next/issues/1322) ## 20.2.4 - fix types for LanguageDetector detect function ## 20.2.3 - if detected lng is falsy, set it to empty array, to make sure at least the fallbackLng will be used ## 20.2.2 - fix plural equations for Kazakh [1608](https://github.com/i18next/i18next/pull/1608) ## 20.2.1 - fix lastIndex in regex when skipOnVariables is true ## 20.2.0 - add ignoreJSONStructure into the types - stop recursive interpolation also for "{{variable}}" when skipOnVariables is true [1595](https://github.com/i18next/i18next/issues/1595) - old browser fix for "includes" usage [1597](https://github.com/i18next/i18next/pull/1597) ## 20.1.0 - Add alwaysFormat into the types [1586](https://github.com/i18next/i18next/pull/1586) - Add interpolation key name to format function [1571](https://github.com/i18next/i18next/pull/1571) ## 20.0.0 - add support to proper augment PluginOptions type [1583](https://github.com/i18next/i18next/pull/1583) - introduce ignoreJSONStructure flag, to automatically lookup for a flat key if a nested key is not found an vice-versa [1584](https://github.com/i18next/i18next/pull/1584) (MAJOR: because of ignoreJSONStructure is true by default) ## 19.9.2 - try to fix another edge case issue [1570](https://github.com/i18next/i18next/issues/1570) introduces by fixing [1552](https://github.com/i18next/i18next/issues/1552) ## 19.9.1 - Fallback on singular defaultValue [1563](https://github.com/i18next/i18next/pull/1563) ## 19.9.0 - Improve updateMissing default plural behavior [1558](https://github.com/i18next/i18next/pull/1558) - typescript: type definitions improvements for backend [1560](https://github.com/i18next/i18next/pull/1560) ## 19.8.10 - try to fix another edge case issue [1570](https://github.com/i18next/i18next/issues/1570) introduces by fixing [1552](https://github.com/i18next/i18next/issues/1552) ## 19.8.9 - warn if i18next gets initialized multiple times ## 19.8.8 - fix for cases when calling changeLanguage before finished to initialize [1552](https://github.com/i18next/i18next/issues/1552) ## 19.8.7 - use "Object.prototype.hasOwnProperty" instead of "object.hasOwnProperty", fixes [1542](https://github.com/i18next/i18next/issues/1542) ## 19.8.6 - regression fix because of last prototype pollution fix in v19.8.5 ## 19.8.5 - fix potential prototype pollution when backend plugin resolves a malicious language value - use fallbackLng as default lng ## 19.8.4 - update format function signature for TS [1520](https://github.com/i18next/i18next/pull/1480)) ## 19.8.3 - fix prototype pollution with constructor ## 19.8.2 - allow nesting recursively with context (could theoretically generate infinite loop, prevented in [1480](https://github.com/i18next/i18next/pull/1480)) ## 19.8.1 - fix "no languageDetector is used" log statement - do not log "initialized" on cloned instances ## 19.8.0 - allow fallbackLng as function [1508](https://github.com/i18next/i18next/pull/1508) ## 19.7.0 - resource manipulation functions are now chainable ## 19.6.3 - plural rules for ht and iw ## 19.6.2 - fix interpolation with option skipOnVariables when there are multiple placeholders [1490](https://github.com/i18next/i18next/issues/1490) ## 19.6.1 - extend interpolation option skipOnVariables [1488](https://github.com/i18next/i18next/pull/1488) - typescript: Change bindStore to bindI18nStore in ReactOptions type and update default values [1489](https://github.com/i18next/i18next/pull/1489) ## 19.6.0 - fix prototype pollution - introduce new interpolation option skipOnVariables [1483](https://github.com/i18next/i18next/pull/1483) ## 19.5.6 - fix local usage of nsSeparator option ## 19.5.5 - fix: recursion when passing nesting to interpolated [1480](https://github.com/i18next/i18next/pull/1480) ## 19.5.4 - typescript fix: getDataByLanguage typings & test [1472](https://github.com/i18next/i18next/pull/1472) - typescript fix: type declaration of exposed EventEmitter#off methods [1460](https://github.com/i18next/i18next/pull/1460) ## 19.5.3 - fix Macedonian plural formula [1476](https://github.com/i18next/i18next/pull/1476) ## 19.5.2 - fix nesting interpolation with prepended namespace, fixes #1474 [1475](https://github.com/i18next/i18next/pull/1475) ## 19.5.1 - getBestMatchFromCodes: use fallbackLng if nothing found, fixes #1470 [1471](https://github.com/i18next/i18next/pull/1471) ## 19.5.0 - language detectors can return an array of languages and let i18next figure out best match - rename option whitelist to supportedLngs - rename option nonExpicitWhitelist to nonExplicitSupportedLngs - rename function languageUtils.isWhitelisted to languageUtils.isSupportedCode These changes are made with temporal backwards compatibility and will warn your for deprecated usage of old terms to give users and plugin providers some time to adapt their code base. The temporal backwards compatibility will be removed in a follow-up major release. Learn more about why this change was made [here](https://github.com/i18next/i18next/issues/1466). ## 19.4.5 - Add store events to typings [1451](https://github.com/i18next/i18next/pull/1451) ## 19.4.4 - typescript: Allow passing retry boolean to `ReadCallback` [1439](https://github.com/i18next/i18next/pull/1439) ## 19.4.3 - fix regression introduced in "support formatting in nesting" [1419](https://github.com/i18next/i18next/pull/1419) ## 19.4.2 - fix for deno [1428](https://github.com/i18next/i18next/pull/1428) ## 19.4.1 - add getLanguagePartFromCode as in language fallback resolution [1424](https://github.com/i18next/i18next/pull/1424) ## 19.4.0 - support formatting in nesting [1419](https://github.com/i18next/i18next/pull/1419) ## 19.3.4 - fix cloning of service.utils binding to clone [1415](https://github.com/i18next/i18next/pull/1415) ## 19.3.3 - backendConnector extend initial retry from 250 to 350 ## 19.3.2 - fix the nested string options parsing introduced in v19.2.0 which broke having multiple options ## 19.3.1 - typescript: add `options.interpolation.nestingOptionsSeparator` ## 19.3.0 - Double fix for 1395 issue [1399](https://github.com/i18next/i18next/pull/1399) - adds `options.interpolation.nestingOptionsSeparator: ','` to specify that separator ## 19.2.0 - Add ability to use commas in nested keys [1398](https://github.com/i18next/i18next/pull/1398) ## 19.1.0 - explict warning when no languageDetector is used and no lng is defined [1381](https://github.com/i18next/i18next/pull/1381) - Add option to always format interpolated values [1385](https://github.com/i18next/i18next/pull/1385) - pass all options to format function [992#issuecomment-577797162](https://github.com/i18next/i18next/issues/992#issuecomment-577797162) ## 19.0.3 - fixes retry interval in backend connector [1378](https://github.com/i18next/i18next/issues/1378) ## 19.0.2 - typescript: Type ResourceStore [1366](https://github.com/i18next/i18next/pull/1366) ## 19.0.1 - ignore non valid keys in saveMissing [1359](https://github.com/i18next/i18next/pull/1359) ## 19.0.0 - typescript: Typescript use `export default` for esm-first approach [1352](https://github.com/i18next/i18next/pull/1352) ## 18.0.1 - check loadedNamespace only once per lng-ns inside using `t` for better performance ## 18.0.0 - When calling `i18next.changeLanguage()` both `i18next.language` and `i18next.languages` will be set to the new language after calling `loadResources` -> means when accessing `t` function meanwhile you will get still the translations for the previous language instead of the fallback. - **When is this breaking?** this does not break any current test - but if you depend on accessing i18next.language or i18next.dir during language change and expect the new language this will break your app. - Reasoning: In react-i18next we get in a not ready state for loaded translations while we would prefer just waiting for the new language ready and trigger a rerender then - also a triggered rerender outside of the bound events would end in Suspense... - How can I get the language i18next will be set to? `i18next.isLanguageChangingTo` is set to the language called ## 17.3.1 - typescript: Add missing `cleanCode` option to TypeScript def [1344](https://github.com/i18next/i18next/pull/1344) ## 17.3.0 - pass used language & namespace to postprocessor [1341](https://github.com/i18next/i18next/pull/1341) ## 17.2.0 - Support using ImmutableJS Records as the data model in interpolation [1339](https://github.com/i18next/i18next/pull/1339) ## 17.1.0 DX improvements: - warning if accessing t before i18next was initialized or namespace loaded - warning and cancelling save if saveMissing key before i18next was initialized or namespace loaded Both are a clear sign you render your app / call t to early not waiting for the callbacks or Promise.resolve on i18next.init, i18next.loadNamespace or i18next.changeLanguage. ## 17.0.18 - Improve performance of EventEmitter.off [1333](https://github.com/i18next/i18next/pull/1333) ## 17.0.17 - fixes: missing nested key fails if no nested value found and defaultValue contains interpolation -> results in endless loop [1332](https://github.com/i18next/i18next/issues/1332) ## 17.0.16 - typescript: fix incorrect callback type for backend module read callback [1322](https://github.com/i18next/i18next/pull/1322) - typescript: add getDataByLanguage into index.d.ts [1326](https://github.com/i18next/i18next/pull/1326) ## 17.0.15 - Fixed default value as string in IE [1325](https://github.com/i18next/i18next/pull/1325) ## 17.0.14 - typescript: Allow TFunction to receive 1-3 parameters [1317](https://github.com/i18next/i18next/pull/1317) ## 17.0.13 - fixes: Interpolation defaultVariables not recognized on t() [1314](https://github.com/i18next/i18next/issues/1314) ## 17.0.12 - remove unused Interpolator#init reset param (only used internally) [1313](https://github.com/i18next/i18next/pull/1313) - Cope with null interpolation (unescaped case) [1310](https://github.com/i18next/i18next/pull/1310) ## 17.0.11 - fix issue with unset value in interpolation throwing exception - typescript: Allow augmentation of TFunction to be able to add overloads [1308](https://github.com/i18next/i18next/pull/1308) ## 17.0.10 - Update Interpolator.js to use regexSafe for unescaped interpolation [1307](https://github.com/i18next/i18next/pull/1307) ## 17.0.9 - typescript: use() should accept a class or object [1301](https://github.com/i18next/i18next/pull/1301) ## 17.0.8 - typescript: Correct `use(module)` types [1296](https://github.com/i18next/i18next/pull/1296) ## 17.0.7 - typescript: Typescript imports [1291](https://github.com/i18next/i18next/pull/1291) - Disabled default returnedObjectHandler [1288](https://github.com/i18next/i18next/pull/1288) ## 17.0.6 - support montenegrien "crn" plurals ## 17.0.4 - typescript: ResourceKey type should allow top level string value [1267](https://github.com/i18next/i18next/pull/1267) ## 17.0.3 - don't do named exports for umd ## 17.0.2 - typescript: Allow null as TResult [1263](https://github.com/i18next/i18next/pull/1263) - bring back ./i18next.js and ./i18next.min.js -> used by wildcard unpkg users...<= bad idea doing so - main export in package.json points to cjs dist ## 17.0.1 - adapt ./index.js to 17.0.0 export ## 17.0.0 - removes checking in build files (umd) into source code - for CDN usage use: [https://unpkg.com/i18next@16.0.0/dist/umd/i18next.js](https://unpkg.com/i18next@16.0.0/dist/umd/i18next.js) - removes named exports in main file - avoids issues in mixed exports makes usage better in commonjs scenarios (node.js) - no strange `const i18next = require('i18next').default;` - **impact** you can't no longer `import { changeLanguage } from 'i18next'; changeLanguage('de');` you will have to `import i18next from 'i18next'; i18next.changeLanguage('de');` - **note** if can create a own file providing the named bound functions and use that instead, sample: [https://github.com/i18next/i18next/blob/v15.0.0/src/index.js#L5](https://github.com/i18next/i18next/blob/v15.0.0/src/index.js#L5) ## 16.0.0 - removes deprecated jsnext:main from package.json - Bundle all entry points with rollup [1256](https://github.com/i18next/i18next/pull/1256) - **note:** dist/es -> dist/esm, dist/commonjs -> dist/cjs (individual files -> one bundled file) ## 15.1.3 - typescript: Fix type error when init with locize plugin options [1248](https://github.com/i18next/i18next/pull/1248) ## 15.1.2 - typescript: types(ReactOptions): Add missing props to React Options interface [1247](https://github.com/i18next/i18next/pull/1247) ## 15.1.1 - typescript: Update BackendModule interface to allow null or undefined for the callback [1244](https://github.com/i18next/i18next/pull/1244) ## 15.1.0 - trigger a languageChanging event ## 15.0.9 - IE: <=IE10 fix (unable to call parent constructor) [1227](https://github.com/i18next/i18next/pull/1227) ## 15.0.8 - typescript: adding init function to 3rdParty module typings and enforcing type property [1223](https://github.com/i18next/i18next/pull/1223) ## 15.0.7 - typescript: Add useSuspense to ReactOptions, fix error throwing on test [1219](https://github.com/i18next/i18next/pull/1219) ## 15.0.6 - typescript: add Interpolator interface [1213](https://github.com/i18next/i18next/pull/1213) ## 15.0.5 - typescript: Add `hashTransKey` to `ReactOptions` [1208](https://github.com/i18next/i18next/pull/1208) - Expose error on reloadResources [1212](https://github.com/i18next/i18next/pull/1212) ## 15.0.4 - add default export on node.js entry [1204](https://github.com/i18next/i18next/pull/1204) - typescript: Add defaultValue tests and allow second arg string as defaultValue [1206](https://github.com/i18next/i18next/pull/1206) ## 15.0.3 - typescript: accept templatestringsarray as TKey [1199](https://github.com/i18next/i18next/pull/1199) - allow arrays on addResources ## 15.0.2 - try fixing UMD build ## 15.0.1 - fix export name on global (typo) ## 15.0.0 - update build process (while all test passes feeling more save making this a major release) ## 14.1.1 - allow empty string for array join [1191](https://github.com/i18next/i18next/issues/1191) ## 14.1.0 - support plurals in returning objecttree array [1196](https://github.com/i18next/i18next/issues/1196) ## 14.0.1 - typescript: Parameterized use of TFunction fails while WithT use works [1188](https://github.com/i18next/i18next/pull/1188) ## 14.0.0 - typescript: BREAKING Refactor generics usage [1180](https://github.com/i18next/i18next/pull/1180) ## 13.1.5 - es modules: Fix bug when import by ES Module [1179](https://github.com/i18next/i18next/pull/1179) - typescript: Add module property [1176](https://github.com/i18next/i18next/pull/1176) ## 13.1.4 - fixes plural rule for JSON compatibility v2 introduced in 11.3.3 https://github.com/i18next/i18next/commit/d4d329fd7042f932eedf8bba1d92234707efd04c#diff-e171f9b8b4e0f5df027bd8bd7b962f1bR1140 [1174](https://github.com/i18next/i18next/issues/1174) ## 13.1.3 - TypeScript: Pull up WithT interface allowing for overrides [1172](https://github.com/i18next/i18next/pull/1172) ## 13.1.2 - Add typescript testing [1165](https://github.com/i18next/i18next/pull/1165) - Add `transEmptyNodeValue` to `ReactOptions` [1166](https://github.com/i18next/i18next/pull/1166) - Run prettier on typescript files for easier diffing in PRs [1167](https://github.com/i18next/i18next/pull/1167) ## 13.1.1 - fix init() attributes typings [1158](https://github.com/i18next/i18next/pull/1158) ## 13.1.0 - Support interpolation for defaultValue as parameter [1151](https://github.com/i18next/i18next/pull/1151) ## 13.0.1 - update typedefinitions [1152](https://github.com/i18next/i18next/pull/1152) ## 13.0.0 - pass options to missingInterpolationHandler [1146](https://github.com/i18next/i18next/pull/1146) - refactor non valid keys handling [1143](https://github.com/i18next/i18next/pull/1143) BREAKING: - adds typescript definitions directly into this repo - no longer need to grab them from definitlytyped [1142](https://github.com/i18next/i18next/pull/1142) - promise API added for all functions providing a callback [1130](https://github.com/i18next/i18next/pull/1130) -> means those will now return a Promise and not this -> so you can't chain eg. i18next.init().on() anylonger as init returns a Promise ## 12.1.0 - adds partialBundledLanguages flag in init options [1136](https://github.com/i18next/i18next/pull/1136) ## 12.0.0 - add hebrew update [1121](https://github.com/i18next/i18next/pull/1121) ## 11.10.2 - revert hebrew ## 11.10.1 - Adds Hebrew plural support [1121](https://github.com/i18next/i18next/pull/1121) ## 11.10.0 - Allow missingInterpolationHandler to be provided as t() option [1118](https://github.com/i18next/i18next/pull/1118) ## 11.9.1 - fixes allow overriding of fallbackLng when in options passed to t functions call ## 11.9.0 - merge load and reloadResources functionality to allow an optional callback in reloadResources ## 11.8.0 - deeper support for i18nFormats - add getResource function from format ## 11.7.0 - allows defining defaultValues for plurals -> same logic as using pluralsuffixes in translation files [details](https://www.i18next.com/translation-function/plurals#how-to-find-the-correct-plural-suffix) using eg. defaultValue_plural / defaultValue_2 based on request [1096](https://github.com/i18next/i18next/issues/1096) ## 11.6.0 - expose new store function getDataByLanguage [1087](https://github.com/i18next/i18next/pull/1087) ## 11.5.0 - EventEmitter.prototype.on returns this for chaining calls [1079](https://github.com/i18next/i18next/pull/1079) ## 11.4.0 - Allow to pass raw value to the custom interpolation escape function [1076](https://github.com/i18next/i18next/pull/1076) ## 11.3.6 - fix support zero for saveMissing plurals [1072](https://github.com/i18next/i18next/pull/1072) ## 11.3.5 - trigger loaded event only once per loaded namespace - consolidate all the loaded and done queued load calls [react-i18next 456 ](https://github.com/i18next/react-i18next/issues/456) ## 11.3.4 - fixes simplifyPluralSuffix: false cases for languages having only singular, plural [1069](https://github.com/i18next/i18next/issues/1069) ## 11.3.3 - pass down resolved to i18nFormat.parse as last argument ## 11.3.2 - Properly handle arguments containing arrays while listening to a wildcard event [1052](https://github.com/i18next/i18next/pull/1052) ## 11.3.1 - Fixes allowing setting keySeparator to false in calling t function [1051](https://github.com/i18next/i18next/pull/1051) ## 11.3.0 - Option to skip interpolation when calling t. [1050](https://github.com/i18next/i18next/pull/1050) ## 11.2.3 - Remove unnecessary warning when value is empty string [1046](https://github.com/i18next/i18next/pull/1046) ## 11.2.2 - adds used key to call parse of i18nFormat ## 11.2.1 - fixes for i18nFormat plugin ## 11.2.0 - allows new plugin of type 'i18nFormat' to override i18next format with eg. ICU format ## 11.0.0 - 11.1.1 (fixing version mismatch cdn.js - npm) - **[BREAKING]** removes plugin of type cache. Can be replace by [i18next-chained-backend](https://github.com/i18next/i18next-chained-backend) example cache for localStorage [i18next-localstorage-backend](https://github.com/i18next/i18next-localstorage-backend#getting-started) - **[BREAKING]** removes the support for multiload (multiRead) in backends - will just use read per language-namespace. You can enable multiRead support in backends again by using [i18next-multiload-backend-adapter](https://github.com/i18next/i18next-multiload-backend-adapter) ## 10.6.0 - adds missingInterpolationHandler [1039](https://github.com/i18next/i18next/pull/1039) ## 10.5.1 - fixes call to getPluralFormsOfKey if called with unsupported language [1032](https://github.com/i18next/i18next/issues/1032) - Avoid mutating whitelist array. [1037](https://github.com/i18next/i18next/pull/1037) ## 10.5.0 - Adds options.silent to addResources and addResourceBundle [1024](https://github.com/i18next/i18next/pull/1024) ## 10.4.1 - forward options in backend.create saveMissing ## 10.4.0 - fixes combination of returnObject and context by returning original value for deep translation when lookup for inner returns a key (failed to translate proper) [1014](https://github.com/i18next/i18next/issues/1014) - _[EXPERIMENTAL]_ additional you can pass `tDescription` to the `t` options or as a third param to calling `t` -> `t(key, defaultValue, tDescription);`. Those will get forwarded to the backend and can be submitted on saveMissing to provide contextual information for translators. ## 10.3.0 - new option saveMissingPlurals (default true) will enable submitting plural forms on saveMissing if t call is for plural (count passed in options). ## 10.2.2 - fixes Context and nested lost initial options [1009](https://github.com/i18next/i18next/issues/1009) ## 10.2.1 - optimize update output in log ## 10.2.0 - _[EXPERIMENTAL]_ init option updateMissing: enable to update default values if different from translated value (only useful on initial development or when keeping code as source of truth not changing values outside of code) ## 10.1.0 - return boolean, number from translator - initial set language on translator if non set yet (after that only if loaded) [#998](https://github.com/i18next/i18next/issues/998) ## 10.0.7 - support all overloadTranslationOptionHandler in getFixedT [react-i18next/issues/332](https://github.com/i18next/react-i18next/issues/332) ## 10.0.6 - native browser es modules via adding .js where needed [PR980](https://github.com/i18next/i18next/pull/980) ## 10.0.5 - should fix sync of options in clone and its translator ## 10.0.2 - fixes issue in object return when passing in multiple keys ## 10.0.1 - fixes support for using suffix `_0` on languages only having "singular" form ## 10.0.0 - **[BREAKING]** brings pt, pt-PT, pt-BR plurals in line with, new pt reflects pt-BR and pt-PT gets a special case for plural handling http://www.unicode.org/cldr/charts/26/supplemental/language_plural_rules.html ## 9.1.0 - support for using suffix `_0` on languages only having "singular" form enables easier convert in tool chains ## 9.0.1 - propagate changeLanguage to translator after loadResources ## 9.0.0 - **[BREAKING]** removes the compatibility options to i18next v1 you can add that back like we do in our backward compatibility tests: [https://github.com/i18next/i18next/blob/master/test/backward/v1.11.1.compat.js#L45-L52](https://github.com/i18next/i18next/blob/master/test/backward/v1.11.1.compat.js#L45-L52) - removes the compatibility options to i18next v1 - allows passing in second param as string on getFixedT returned t function so we could use that as defaultValue - add setting maxReplaces in interpolation options to prevent endless loop in interpolation ## 8.4.3 - getFixedT lng parameter of array type -> pass as lngs to t function [PR949](https://github.com/i18next/i18next/pull/949) ## 8.4.2 - fixes merging options in clone instance...do not override passed values by values on main instance ## 8.4.1 - emits correct lng to changeLanguage event (fixes async detection behaviour) [PR933](https://github.com/i18next/i18next/pull/933) ## 8.4.0 - expose i18next.options.interpolation.format on i18next.format - i18next.dir if not passing lng use first of i18next.languages before using i18next.language ## 8.3.0 - allows nesting objects/arrays into objects [#925](https://github.com/i18next/i18next/issues/925) ## 8.2.1 - fixes issue in async lng detection ## 8.2.0 - supports now async language detection - when language detector has member async = true ## 8.1.0 - option to disable nesting by calling `i18next.t('key', { nest: false })` [PR920](https://github.com/i18next/i18next/pull/920) - fixes passing lng from options to formatter function if available ## 8.0.0 - nonExplicitWhitelist flag now not only gets considered on a fallback lng but also on user language. Eg. userlng 'de-AT' and whitelist ['de'] will now let de-AT pass as whitelisted if nonExplicitWhitelist is set true. ## 7.2.3 - rebuild seems we had a mistake in pushing latest build ## 7.2.2 - fixes issue in accepting string as a result of "nested" lookup [PR909](https://github.com/i18next/i18next/pull/909) ## 7.2.1 - fixes iterating over object's own properties [#904](https://github.com/i18next/i18next/pull/904) ## 7.2.0 - new init option simplifyPluralSuffix - setting it to false will treat all plurals using suffix numbers even for locals only having singular and plural - even if no lng set or detected at least load the fallback languages - delay init call on createInstance if not set initImmediate to false [#879](https://github.com/i18next/i18next/issues/879) ## 7.1.3 - fixes issue in returnObject tree called with options including ns: [react-i18next #240](https://github.com/i18next/react-i18next/issues/240) ## 7.1.2 - remove regex escape from format separators [#896](https://github.com/i18next/i18next/pull/896) ## 7.1.1 - change to named plugins for 3rd party - just calling init ## 7.1.0 - add option to include plugins not directly related - they get called their init function with current instance of i18next on init ## 7.0.1 - fix issue in fallback lng detection if no code was detected - check for having a lng in append when searching locals to load on loadResources - avoid error on express middleware ## 7.0.0 - [BREAKING] Removed special cases for norwegian which resolved nb-NO to nb-NO, no will now resolve to nb-NO, nb [#870](https://github.com/i18next/i18next/issues/870) using norwegian you could migrate to old behaviour like: fallbackLng: { 'nb': ['no', 'en'], 'nn': ['no', 'en'], 'default': ['en'] } - adding exports for named import (destruction es6) [#873](https://github.com/i18next/i18next/issues/873) - change entry point for umd build to /src/i18next to avoid mixed export - replace cloning in interpolation nesting to use object assign instead of json.stringify/parse so circular structures can be used [#875](https://github.com/i18next/i18next/issues/875) - update all build dependencies ## 6.1.2 - fixes fix in 6.1.1 ## 6.1.1 - patching same separators to lookup if the ns exists - else guess the first item is just part of the key and not meant as a namespace ## 6.1.0 - you now can use same nsSeparator and keySeparator (eg. use a dot for both) ## 6.0.3 - do not loop over objectTree if keySeparator is set to false ## 6.0.2 - fixes init flow of clone ## 6.0.1 - fixes issue in event emitter, assert all emitters get called even if one called get removed and changes the array index ## 6.0.0 - Return namespace in cimode with appendNamespaceToCIMode option (default now will only return key without namespace - independent of call to t function) [#863](https://github.com/i18next/i18next/issues/863) ## 5.0.0 - Nested keys should not be escaped by default [#854](https://github.com/i18next/i18next/issues/854) - Make sure i18next.init() runs for i18next.cloneInstance() [#860](https://github.com/i18next/i18next/pull/860) ## 4.2.0 - adds i18next.isInitialized when isInitialized - triggers backend loaded event before initialized ## 4.1.3 / 4.1.4 - smaller changes suggested to still inofficial support ie8 [#852](https://github.com/i18next/i18next/issues/852) ## 4.1.2 - fixes same interpolation object with multiple getFixedT() in different locales yields wrong translation [#851](https://github.com/i18next/i18next/issues/851) - updated all build deps ## 4.1.1 - remove subs array from logger - no longer keep changing debug flag on subs if changing on main ## 4.1.0 - Custom escape function, single-quotes in nested [#843](https://github.com/i18next/i18next/pull/843) ## 4.0.0 - [BREAKING; only webpack2-beta users] will add module entry point used by webpack2, this might break your current build with webpack2-beta if configured incorrectly, see: [#836](https://github.com/i18next/i18next/issues/836) ## 3.5.2 - remove the module entry point again will be added in 4.0.0 ## 3.5.1 - fix build output add a test file to test the generated build ## 3.5.0 - Setting options on individual translations override, rather than merge global configs [#832](https://github.com/i18next/i18next/issues/832) - Create an new translator when cloning i18next instance [#834](https://github.com/i18next/i18next/pull/834) - allows fallbackLng to be an string, an array or an object defining fallbacks for lng, lng-region plus default, eg fallbackLng: { 'de-CH': ['fr', 'it', 'en'], 'de': ['fr', 'en'], 'zh-Hans': ['zh-Hant', 'en'], 'zh-Hant': ['zh-Hans', 'en'], 'default': ['en'] } ## 3.4.4 - Fix Interpolator.escapeValue defaulting to undefined in some cases [#826](https://github.com/i18next/i18next/issues/826) ## 3.4.3 - Fix Interpolator formatter exception error propagation due to not reset RegExp indices [#820](https://github.com/i18next/i18next/issues/820) ## 3.4.2 - assert dir function does not crash if no language available ## 3.4.1 - fix issue with format containing formatSeparator for interpolation formatting ## 3.4.0 - adds formatting 'format this: {{var, formatRule}}' having a function on options.interpolation.format: function(value, format, lng) { return value } like suggested here [#774](https://github.com/i18next/i18next/issues/774) ## 3.3.1 - fixed an issue with several unescaped key in the interpolation string [#746](https://github.com/i18next/i18next/pull/746) ## 3.3.0 - allows option `nonExplicitWhitelist` on init [#741](https://github.com/i18next/i18next/pull/741) ## 3.2.0 - adds api function i18next.reloadResources(), i18next.reloadResources(lngs, ns) to trigger a reload of translations ## 3.1.0 - emits missingKey always (like console.log) even if saveMissing is of -> use missingKeyHandler if you only want the trigger only on saveMissing: true ## 3.0.0 - **[BREAKING]** per default i18next uses now the same index as used in gettext for plurals. eg. for arabic suffixes are 0,1,2,3,4,5 instead of 0,1,2,3,11,100. You can enforce old behaviour by setting compatibilityJSON = 'v2' on i18next init. - **[BREAKING]** AMD export will be unnamed now - don't call saveMissing if no lng ## 2.5.1 - fixes rtl support [#656](https://github.com/i18next/i18next/pull/656/files) ## 2.5.0 - allow null or empty string as defaultValue - init option `initImmediate (default: true)` to init without immediate ## 2.4.1 - if passing resources don't immediate loading fixes [#636](https://github.com/i18next/i18next/issues/636) ## 2.4.0 - support now language code variants with scripts and other exotic forms: zh-Hans-MO, sgn-BE-fr, de-AT-1996,... - trigger of changeLanguage, load of data with a setTimeout to allow other operations meanwhile ## 2.3.5 - Only add language to preload array when new [#613](https://github.com/i18next/i18next/pull/613/files) ## 2.3.4 - get babel 6 output IE compatible: https://jsfiddle.net/jamuhl/2qc7oLf8/ ## 2.3.2 - add index to make export compatible again ## 2.3.1 - build /dist/es with included babelhelpers ## 2.3.0 - change build chain to use rollup...allows 'js:next' and reduces build from 45kb to 33kb minified (/lib --> /dist/commonjs folder, new /dist/es for rollup,...) - fixes detection when using both context and pluralization and context not found. [#851](https://github.com/i18next/i18next/pull/581) ## 2.2.0 - return instance after init for further chaning - make init optional on backend, cache - package.json entry points now to /lib not to mangled version...this might be the better solution for most use cases (build chains built on npm, webpack, browserify, node,...) ## 2.1.0 - allow keySeparator, nsSeparator = false to turn that off ## 2.0.26 - extended emitted arguments on 'added' event ## 2.0.24 - fixes unneeded reload of resources that failed to load ## 2.0.23 - fixes returnObjects in case of multiple namespaces ## 2.0.22 - add options for context, pluralSeparator ## 2.0.21 - clear done load request in backendConnector ## 2.0.20 - pass full options to detectors as third arg ## 2.0.19 - do not callback err in backendConnector if no backend is specified ## 2.0.18 - check for fallbackLng exist ## 2.0.17 - adds cimode to options.whitelist if set - emits failedLoading on load error ## 2.0.16 - adds addResource to i18next API - fix init of i18next without options, callback ## 2.0.15 - avoid loading of resources for lng=cimode ## 2.0.14 - enhance callback on load from backend...wait for pendings ## 2.0.10 - fixing build chain - do not post process on nested translation resolve ## 2.0.5 - fixing allow nesting on interpolated nesting vars ## 2.0.4 - don't log lng changed if no lng was detected - extend result on arrayJoins ## 2.0.1 - assert defaults are arrays where needed - assert calling lngUtils.toResolveHierarchy does not add undefined as code if called without code param ## 2.0.0 - complete rewrite of i18next codebase --- ## 1.11.2 - replace forEach loop to support IE8 [PR 461](https://github.com/i18next/i18next/pull/461) ## 1.11.1 - fixes issue in nesting using multiple namespaces and lookups in fallback namespaces - Fix use of sprintf as shortcutFunction when first argument falsey [PR 453](https://github.com/i18next/i18next/pull/453) ## 1.11.0 - Add nsseparator and keyseparator as options to translation function [PR 446](https://github.com/i18next/i18next/pull/446) - Resolves issue #448 - TypeScript errors [PR 449](https://github.com/i18next/i18next/pull/449) - Fixing \_deepExtend to handle keys deep existing in source and target [PR 444](https://github.com/i18next/i18next/pull/444) - `resource` to `resources` in addResources function [PR 440](https://github.com/i18next/i18next/pull/440) - Runs multiple post processes for missing translations [PR 438](https://github.com/i18next/i18next/pull/438) - Add support to override Ajax HTTP headers [PR 431](https://github.com/i18next/i18next/pull/431) - Fixed mnk plural definition [PR 427](https://github.com/i18next/i18next/pull/427) - Add dir function to return directionality of current language, closes… [PR 413](https://github.com/i18next/i18next/pull/413) ## 1.10.3 - fixes issue where lng get fixed on data-i18n-options - [SECURITY] merges Reimplement XSS-vulnerable sequential replacement code [PR 443](https://github.com/i18next/i18next/pull/443) ## 1.10.2 - streamline callback(err, t) for case where resStore is passed in ## 1.10.1 - fixes Adds jquery like functionality without the jquery plugin. [PR 403](https://github.com/i18next/i18next/pull/403) by adding it to output ## 1.10.0 - [BREAKING] new callbacks will be node.js conform function(err, t) | Forward the error from sync fetch methods to the init callback function [PR 402](https://github.com/i18next/i18next/pull/402) - fix fallback lng option during translations [PR 399](https://github.com/i18next/i18next/pull/399) - Adds jquery like functionality without the jquery plugin. [PR 403](https://github.com/i18next/i18next/pull/403) ## 1.9.1 - fix fallback lng option during translations [PR 399](https://github.com/i18next/i18next/pull/399) - Adds jquery like functionality without the jquery plugin. [PR 403](https://github.com/i18next/i18next/pull/403) ## 1.9.0 - i18n.noConflict() [PR 371](https://github.com/i18next/i18next/pull/371) - fix fallback to default namepsace when namespace passed as an option [PR 375](https://github.com/i18next/i18next/pull/375) - cache option for ajax requests [PR 376](https://github.com/i18next/i18next/pull/376) - option to show key on value is empty string [PR 379](https://github.com/i18next/i18next/pull/379) - Add isInitialized method [PR 380](https://github.com/i18next/i18next/pull/380) - Null check for detectLngFromLocalStorage [PR 384](https://github.com/i18next/i18next/pull/384) - support for adding timeout in configuration for ajax request [PR 387](https://github.com/i18next/i18next/pull/387) ## 1.8.2 - fixes build of commonjs with jquery file ## 1.8.0 - [BREAKING] adds custom build for commonjs with jquery...default will be without require for jquery - fixes issue [issue 360](https://github.com/i18next/i18next/issues/360) - expose applyReplacement on api - save resources to localStorage when useLocaleStore is true - add support on key is a number - added getResourceBundle to API - allow multiple post-processors - fallback to singular if no plural is found fixes issue [issue 356](https://github.com/i18next/i18next/issues/356) - access localstorage always with try catch fixes issue [issue 353](https://github.com/i18next/i18next/issues/353) ## 1.7.7 - fixes issue with stack overflow on t(lng, count) - fixes empty value fallback when processing secondary ns ## 1.7.6 - fixes lng detection (i18next-client on npm) ## 1.7.5 - adds option to define defaultOptions, which gets merged into t(options) [issue 307](https://github.com/i18next/i18next/issues/307) - optimization of size added by plural rules - handle error on json parse when using internal xhr - fixes plural/singular on count if going on fallbacks eg. fr --> en - fixes global leak of sync in amd versions - apply options.lowerCaseLng to fallbackLng too - added hasResourceBundle(lng, ns) to check if bundle exists - added experimental i18n.sync.reload --> resets resStore and reloads resources - catch issues with localStorage quota - changes detectlanguage to support whitelist entries ## 1.7.4 - add resource bundle gets deep extend flag i18n.addResourceBundle(lng, ns, { 'deep': { 'key2': 'value2' }}, true); - new functions to add one key value or multiple i18n.addResource(lng, ns, key, value);, i18n.addResources(lng, ns, {'key1': 'value1', 'deep.key2': 'value2'}); - lngWhitelist merged - override postMissing function - allow floats for count - added indefinite functionality for plurals - optional set replacing vars to replace member to avoid collision with other options - experimental optional detectLngFromLocalStorage - fix for norwegian language ## 1.7.3 - solves issue with ie8 not providing .trim function on string -> added to shim - set data using \$(selector).i18n() on data-i18n='[data-someDataAttr]key' - more bullet proof state handling on failed file load - corrected latvian plurals based on [issue 231](https://github.com/jamuhl/i18next/issues/231) - allow array of fallback languages - allow int in values passed to shortcut sprintf - setLng to 'cimode' will trigger a CI mode returning 'key' instead of translation ## 1.7.2 - introducing option fallbackOnEmpty -> empty string will fallback - added function removeResourceBundle(lng, ns) -> removes a resource set - fixed issue with no option passed to setLng - added ability to prepend, append content with data-i18n attributes - introducing objectTreeKeyHandler - fixes issue with i18n.t(null), i18n.t(undefined) throwing exception - returnObjectTrees does not mangle arrays, functions, and regexps - optimized structure for bower support ## 1.7.1 - fixed some typo - allow translate to take an array of keys - take first found - allow numbers in object trees ## 1.7.0 - test if initialisation finished before allowing calling t function - setting option fixLng=true will return t function on init or setLng with the lng fixed for every subsequent call to t - grab key from content if attr data-i18n has no value - setting shortcutFunction to 'defaultValue' allows calling i18n.t(key, defaultValue) - empty string in defaultValue is now valid no longer displaying key - allow option cookieDomain - fixes issue #115 out of stack exception in IE8 by recursing \_translate in objectTrees ## 1.6.3 - option to parse key if missing - fixes issue where plural don't get translated if language is passed in t options - fixes issue where key or defaultValue aren't postProcessed with itself as value - fixes issue with fallbackLng = false in combination with sendMissingTo = fallback - fixes namespace fallback loop to only loop if array has really a ns in it ## 1.6.2 - fixes some var typo - fixes sendMissing to correct namespace - fixes sendMissing in combination with fallbackNS ## 1.6.1 - PR #106 optionally un/escape interpolated content - PR #101 automatic gettext like sprintf syntax detection + postprocess injection - customload will get called on dynamicLoad too - fixes namespace array settings if loaded resourcebundle or additional namespaces - lookup of not existend resources can be fallbacked to other namespaces - see option fallbackNS (array or string if one ns to fallback to) - defaultValues get postProcessed - BREAKING: per default null values in resources get translated to fallback. This can be changed by setting option fallbackOnNull to false - PR #81 added support for passing options to nested resources - PR #88 added an exists method to check for the existence of a key in the resource store - fixed issue with null value throws in applyReplacement function - fixed issue #80 empty string lookup ends in fallback instead of returning result in language - fixed issue with null value in resources not returning expected value - optimized tests to use on server (nodejs) too - allow zepto as drop in replacement for \$ - using testacular as runner - upgraded to grunt 0.4.0 - fixed optional interpolation prefix/suffix not used in plural translation cases - optimized check if there are multiple keys for the data-i18n attribute to parse ## 1.6.0 - option to specify target to set attributes with jquery function by using 'data-i18n-target attribute' - function to set new options for nesting functionality - function to add resources after init - option to lookup in default namespace if value is not found in given namespace - option to change interpolation prefix and suffix via translation options - fixed issue with using ns/keyseparator on plurals, context,... - fixed issue with posting missing when not using jquery - post missing in correct lng if lng is given in translation options - proper usage of deferred object in init function - fixed issue replacing values in objectTree ## 1.5.10 - BREAKING: fixed plural rules for languages with extended plural forms (more than 2 forms) - merged pull #61 - custom loader (enables jsonp or other loading custom loading strategies) - escaping interpolation prefix/suffix for proper regex replace ## 1.5.9 - functions to load additional namespaces after init and to set default namespace to something else - set if you don't want to read defaultValues from content while using jquery fc - set dataAttribute to different value - set cookieName to different value - some smallbugfixes - typesafe use of console if in debug mode ## 1.5.8 - disable cookie usage by setting init option useCookie to false - accept empty string as translation value - fixed bug in own ajax implementation not using proper sendType - fixed bug for returning objTree in combination with namespace - fixed bug in plurals of romanic lngs ## 1.5.7 - pass namespace in t() options - interpolation nesting - changable querystring param to look language up from ## 1.5.6 - typesafe check for window, document existance - runnable under rhino - seperated amd builds with/without jquery ## 1.5.5 - **BREAKING** added all plurals: suffixes will new be same as in gettext usage (number indexes key_plural_0|2|3|4|5|7|8|10|11|20|100), additional if needed signature of addRule has changed - added sprintf as postprocessor -> postProcess = 'sprintf' and sprintf = obj or array - set default postProcessor on init - redone build process with grunt - drop in replacement for jquery each, extend, ajax - setting fallbackLng to false will stop loading and looking it up - option to load only current or unspecific language files ## 1.5.0 - pass options to sync.\_fetchOne, use options for fetching - support for i18next-webtranslate ## 1.4.1 - post processor - **BREAKING:** localStorage defaults to false - added localStorageExpirationTime for better caching control - few bug fixes ## 1.4.0 - preload multiple languages - translate key to other language than current - fixed issue with namespace usage in combination with context and plurals - more options to send missing values - better amd support ## 1.3.4 - set type of ajax request to GET (options sendType: default POST) - set cookie expiration (options cookieExpirationTime: in minutes) - read / cache translation options (context, count, ...) in data-attribute (options useDataAttrOptions: default false) ## 1.3.3 - optional return an objectTree from translation - use jquery promises or callback in initialisation - rewrote all tests with mocha.js ## 1.3.2 - options to init i18next sync (options -> getAsync = false) - replace all occurence of replacement string ## 1.3.1 - pass options to selector.i18n() thanks to [@hugojosefson](https://github.com/jamuhl/i18next/pull/10) - close [issue #8(https://github.com/jamuhl/i18next/issues/8)]: Fail silently when trying to access a path with children - cleanup - debug flag (options.debug -> write infos/errors to console) ## 1.2.5 - fix for IE8 ## 1.2.4 - added indexOf for non ECMA-262 standard compliant browsers (IE < 9) - calling i28n() on element with data-i18n attribute will localize it now (i18n now not only works on container elements child) ## 1.2.3 - extended detectLng: switch via qs _setLng=_ or cookie _i18next_ - assert county in locale will be uppercased `en-us` -> `en-US` - provide option to have locale always lowercased _option lowerCaseLng_ - set lng cookie when set in init function ## 1.2 - support for translation context - fixed zero count in plurals - init without options, callback ## 1.1 - support for multiple plural forms - common.js enabled (for node.js serverside) - changes to be less dependent on jquery (override it's functions, add to root if no jquery) - enable it on serverside with node.js [i18next-node](https://github.com/jamuhl/i18next-node) ## 1.0 - support for other attribute translation via _data-i18n_ attribute - bug fixes - tests with qunit and sinon ## 0.9 - multi-namespace support - loading static files or dynamic route - jquery function for _data-i18n_ attibute - post missing translations to the server - graceful fallback en-US -> en -> fallbackLng - localstorage support - support for pluralized strings - insertion of variables into translations - translation nesting i18next-23.7.6/CONTRIBUTING.md000066400000000000000000000021171452441263500153510ustar00rootroot00000000000000# Developer's Certificate of Origin By making a contribution to this project, I certify that: - (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or - (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or - (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. - (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. i18next-23.7.6/LICENSE000066400000000000000000000020621452441263500141240ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2023 i18next Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. i18next-23.7.6/README.md000066400000000000000000000071601452441263500144020ustar00rootroot00000000000000# i18next: learn once - translate everywhere [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Awesome%20i18next:%20learn%20once%20-%20translate%20everywhere%20-%20the%20internationalization%20ecosystem%20&url=https://github.com/i18next/i18next&via=jamuhl&hashtags=i18n,javascript,dev) [![CircleCI](https://circleci.com/gh/i18next/i18next.svg?style=svg)](https://circleci.com/gh/i18next/i18next) [![Code Climate](https://codeclimate.com/github/codeclimate/codeclimate/badges/gpa.svg)](https://codeclimate.com/github/i18next/i18next) [![Coveralls](https://img.shields.io/coveralls/i18next/i18next/master.svg?style=flat-square)](https://coveralls.io/github/i18next/i18next) [![Package Quality](https://packagequality.com/shield/i18next.svg)](https://packagequality.com/#?package=i18next) [![cdnjs version](https://img.shields.io/cdnjs/v/i18next.svg?style=flat-square)](https://cdnjs.com/libraries/i18next) [![npm version](https://img.shields.io/npm/v/i18next.svg?style=flat-square)](https://www.npmjs.com/package/i18next) ![npm](https://img.shields.io/npm/dw/i18next) i18next is a very popular internationalization framework for browser or any other javascript environment (eg. Node.js, Deno). ![ecosystem](https://raw.githubusercontent.com/i18next/i18next/master/assets/i18next-ecosystem.jpg) i18next provides: - Flexible connection to [backend](https://www.i18next.com/overview/plugins-and-utils#backends) (loading translations via xhr, ...) - Optional [caching](https://www.i18next.com/how-to/caching), user [language detection](https://www.i18next.com/overview/plugins-and-utils#language-detector), ... - Proper [pluralizations](https://www.i18next.com/translation-function/plurals) - Translation [context](https://www.i18next.com/translation-function/context) - [Nesting](https://www.i18next.com/translation-function/nesting), [Variable replacement](https://www.i18next.com/translation-function/interpolation) - Flexibility: [Use it everywhere](https://www.i18next.com/overview/supported-frameworks) - Extensibility: eg. [sprintf](https://www.i18next.com/overview/plugins-and-utils#post-processors) - ... For more information visit the website: - [Getting started](https://www.i18next.com/overview/getting-started) - [Translation Functionality](https://www.i18next.com/translation-function/essentials) - [API](https://www.i18next.com/overview/api) Our focus is providing the core to building a booming ecosystem. Independent of the building blocks you choose, be it react, angular or even good old jquery proper translation capabilities are just [one step away](https://www.i18next.com/overview/supported-frameworks). ### Documentation The general i18next documentation is published on [www.i18next.com](https://www.i18next.com) and PR changes can be supplied [here](https://github.com/i18next/i18next-gitbook). The react specific documentation is published on [react.i18next.com](https://react.i18next.com) and PR changes can be supplied [here](https://github.com/i18next/react-i18next-gitbook). ---

Gold Sponsors

--- **From the creators of i18next: localization as a service - locize.com** A translation management system built around the i18next ecosystem - [locize.com](https://locize.com). ![locize](https://locize.com/img/ads/github_locize.png) With using [locize](https://locize.com/?utm_source=i18next_readme&utm_medium=github) you directly support the future of i18next. --- i18next-23.7.6/assets/000077500000000000000000000000001452441263500144215ustar00rootroot00000000000000i18next-23.7.6/assets/i18next-ecosystem.jpg000066400000000000000000014016651452441263500204510ustar00rootroot00000000000000JFIFHHCC  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??yvP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@&GP@P@P@P@P@P@$R6POQ?*m{r 6C/ +t'qoձu}Gzn>Wvw?/kTkOBzë{.]:~?WB__.G-7z(Pw€#~bz(޾ uP@Pq?I@d瞾}QX[~*~KM}:{)9_[+;glݹ~B7iy=:'޾>hmNKt٨'Npz|Pnkvy%Q]qUyFEcG-E|Kߧz=ZtqK]~=ә껦ͳeQb ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (~BgP@P@P@P@P@P@r&Ko=6.? ֺQZ^}.cTO,n~;A`4y+aIXf@rvTJ<ǷN_ԥy4=m+{gߞ6uZ{e~d~D_{3z~98{<&]X֋P((3f=r=@3MM/.E߿M綁E`';2`>L`q@8}q;t~?>܀: (#faN== 2c;myOwڏ]|?5jv?i Jya[&)M>G}}=iϭ~X}0N"iO|6)7}_ŅV}4Z;53n`|ν>\ |St/GYoQN45a^ K|o7-C^3VKio8+ʪ9_g^7wem[4Y{ bN.c$|Y\0{\aerp5pWK~k5YmUR>l׶In{O̾P@P@&GCk럨#5-Vs_uc7|)}7. iW*O~mq@?~~P۪٧PTi=5~þ.xw0jQtm{\\`xx;CYM Gʳ-/7O[o_`z>@ (<ص^׻-9g\ F+`卌MjU?yWk+a*dTx5}C-s&$2K-[xT(%nw})ޜ^|V܏oSFedb.`}m3n3Ds9xPX<GU |eB|OE2i%Ӯ5N]ZocվR_x 9Lfz>h{InMJ*%ۯGߊo'<6?CI10(585;sӼ=_bࡿ lO xOԾŤ>:𿉥y8͎c=Fmhoij,gx* 8{J-֨ӯ9NըA4mTi>,'ks:f؋BN1gV%Qsה?OI@@3'|%`kij؍.]ut-H{sP-棶I3c`:7҆S]r%^^oT'u{NըqVsSU9}^[Ѡʊ>]㬃<Ӌny%o]4mkoro\)omi5|Mgyl.39^2Eۑs9mme՗šq*~.>.uGž?]߀mtt|?MhP&M;[ӵtR\\kDZe7_heu3g?/ ϊxAu{Zޥam$~m}4p# [ێ0MArCuuexz*Ts?ձPF=%'/aԤykF=Nqg yP@tE/5Iǯ;s'^#(ԡt RUZEsʚ_}Yϱsτ+wYg]?Ly ܟfյM?Jdt@0\rq_c 8 wQQSRBssCKM&'YlqǟRhΓs˧fFygs; *QIXKmQ4Q>n|eW|.gP(RNHB(rrC_tg]eSw9p58s )Ӈd%[ӚPʬRvu> Yqğ*r%;QsV'=鵺ϸ8X OOg}*O\.1>uȽojo65{Q%ޡ,WSq,t?N]t2~-mkN%F/SZ~aM/izЭR/.v۫V/WZGWƴ=зձn_<+f'4?GCŏX]ê"1Ta>ig,ÇgsSO`m<֞Y[Ox2+[ 9gx{<+k>?sqmROS]М?q 5STJwv_imRYsAJ`ZuoխC] d{rq|ޡ'I.Dmko{*sRXzzRn'giPP@FOV?/oCprR2{vː(rkKE]-IUyeJ/k_?_q[Y,5)_Gռ+ X-4ptjZ]n}_{I+}2bRi6쒫J^W{G|L%'x;X/+I3K4>"xQ<SAk:+F5kmrtMnմ=j\ѷ[m=ӽ/}JEoc_kIj)SnF oOnOxd}[Z~z]+hݫu}n-um#cz3-#>? NO}0?'~&P1d1^T5e}}9ݟo@ۉ8ǫӦp0:ldP30'?f wҀ qd)T~Q>,ZfQW>gO?^ր?7J|/y Zv8˂sp=|絿_ÛBZs__~륀(x;y8#` 9wRvߵ^7qn8# h1o[i}+^ۮ|K+/]/No^g3M2 dP:Bs}u24&y ׿;@x&Pli=Ӝj( ( ( ( (?G 〸\`*ERyk]/gT=T3ۯG̟} 5&?g>Ե R"x]Eo$hh<:6fln!>GRۂkiiYÛ~5?zM&c<%p|[Ia08b.%_ףM#'N_<o[5(Ůͤ󍕼Iأ3]xnyELJ繷Ԯѽf@l*}XӻWҢz/u;9oؾ~q9]jtg3| !Rs>USЄm_?i/ |>Zhߍ?Vzs ڼ>Ӕov7^]CB 9juC;گ_'Zh_-Mx!>'%$_"X֬6m8eJ:Fr'o{.k(=jGAʳԨSԪ88mFt=Mv|Na_?w7Lquz ^]Z5 bcA{bR":2&9՛F9A/MNm%o{+i78E3ĵT97_-9Iϓ8Z5M>RvN? xJ񎁥xzƏI B)o=hV X>]Jnݷ׽i,}5h<=iA~ޫӞ>'xëe'tIᆵ:ne_?_3?6 O=NsA-P@xƫO7wьT8G<I÷Jmߖ-shm{W{^>>m'6{]gY5C\Ycv??8l#R}A9ښ-dJXzBNɵ.\NO;YRe^Cbl"Iy}ӡOdvNg|Gv|rSOxőxŰ|yFH"(%ΨRh㫭]"uQh'D.ty{_B8$J?[ˆ/FG=IOyU|wɸ.c_t֛a͍o_UQo͟r|o񧉭~[)ҿn?}^h爢A⌉muO[J]xoM]R#R~ <-]zn GZ1Y&v}lNohRk01R~Woi;Bxӌ' 5N~*kݟ p|߁.[ThhrC K;޶:t-GVNz:?cV~S׿h H>&Zxs-4(7P5ٴS~u{[yklZc9箷15z+FG{~yQfqę׆Iv ^|g㭃/}zNy֩:33'Sߴwe|P~%O| h;3 10HBkNt~̟w}"ōLw? xn;{F5]7KW+6iM>/i/gYr\Ri#rܥPO W-}8 N(UUzt!VѧCFSCJ\~Nh߳?h7~ Ꮗ4#g?LӬ?%M+^-MƇ*][*m^KR4N3#V"/թգMEδ(wO~ޤm%_μFpE8xⱸ\!*8o2܋*RpЌ'Z_r̿e ߋiGhx;E?\W:Emxu/TGZAtS|>Z܅׊aoܹ=:_?<9خۍS p>aÕ2`Y#' aK 0jҭ9{eN5?QߋGqkSO19,t[ޣk1Gm/i:ֳnfWv<4[ !J*pםNpi}5ZR7?c8[]OW5C7arKsAB㚍8y7ѿG_W~2jYWHw{s]wCeFhJ ][&نmJ5ߢ0%'Exk{^|+x`9+`TgBŽ2u#إWr뫇,&WK .|E^xsO ;>)JZhnukuipsxQg-sws_q8 d9v:5L\eZ==ʕo_H>;|B5pyG灧[3OBHA𼐜(9NQZ{us;mW5P@dn18WΧO4VHL"Ɖ^ OL[&rPZ}{r_\k5N.yMY8[}_aJ~_? z,%;k-&z$7?70 JjtgF ZJsTQ~2qbr{LEѲ8FN Q[9R0^ϓiie |<|Vl? `W:\,'V>BjIhNUl,mKG.^%ȋKӠHsxZdXJ4#R.HrNvP^[rtShoĕ)Tٗ <R'>~i^1¾'WR_^"$}ii6eKke˸gO0\sW{(N;^K_{q/or 崷_ۛ٨.z)m.:֩MIj?ơ }iР.gX&3G.Y_h=14S]K.'L~Jp܅]a/_|[Vz+;3mSyTCoXxI(r5T}]<2 4_vM=:7-;hw8~LF~#cԶo}v}Y?Q>OKVeP@_+G=#O =uf^^}k EI[]/~NvﭜO5%/DԗqbZH xtmbҭRG~k^=Db(R/I|ѯ*W:7go\|2Ym]/|QcK9xoUח^TtWϷ7ٴMoMb }=!˔爧\ _o;8C?'_4<%7]3A~YUоx7G|+_hz76six㈳V]pZ孓tU˝LBil8/yҒ~]C8|,}SX/_~9<?&8\[v~|ЉTmK~n_kɿE7?_g= (7.oKwKxIiF{.9,M<='Mrzk]]_Wg+lMlT"^]iۻ=|jx׼:ӧݔ[=*\zK_[:+FT\L| / S/m/⯋?oS?~A*D!ek:hFwߧӮ7m-ߖG"8F}։+(٩Cu/?^ľh6Aoi?iil.s0\y9%S5+wMrj7ys+Ǔ7W)kh;ӫT.oQ"|5xS[Z'u]O\Og6u!9i5K_պ?/}t+ee[Y4BV9@Gׂ* C(ooi_~ך<3þ!ωw7zW&#P״sACna6ݸ6Ǣ mEKO[{o]tW̾2#_4F+M4٢qw֒Hoejx?_P JX{Ÿ5dfsZEJ>+￞(__hkƟ\i?cҴ#֛m;R-hj0<"tۛ\}]/JӦSOKNr~Z)-}9=kGܼ4[_k|1Mq28??+uoG}} .|)s.mƿt+K+^3l09eǝ,x]FxS](Aq_b.߾>T]z^v|'.j?/q*,>.d#ʗ'ْWvW'@|JҿgOr>&+hb+|H.A%bwZV^^~4T#q2zenm;s'o{Acwuek=bPN#dRe|Dq=~khٮ ׇ&*ixwOy_]y#fYelϒqo쿹ҷݯ\k6Z摬[hzhzƟ{kjzj'صG.f:tCqCoqo;/y=V_͢JZGۭYmzz|?l|>BqOpGʵk^׷N'}ZmOiTkp'ލ|\d}w>2;ݵ߆٫YYwwഽҲ;1T8-8K!-G{?KJYMCMԭ-l/l!!-յ"Xgh 4d`@;'Ivf6 /y.)s_J.O*RzrA9Fݕ__O|#|Qyscg-4WMUk^2t5E7jWqN m;Ir܏6z?y]$yY7*-=K7添*p9PX(a؏8ۃgd߭vWk^)2PI坾55v.P@P u`=U0j4ܽ2CҴV^7KG>!*I_w_?]oaZ( }_ڳ1.j|+meK{)-9s }}}$~ =sCҭ?@ŭDP+O_joߨsA_UOCWCI擾r[iO~ gMo^7|nhézET(?oox_GG#uxN_(1MTMBKO_~KX\9ϿռJ 8a+m[S?}o}VNEPLu-Z;d`{ AyhRv(zɵiAĘ'BJj²SB>_hK: 㟆Q;Xs:ZG9xY{/b OWwKFu4>_w9[)HI{xF],N*':?}sSNzi[5BU[T(8Cƚ˟o> ~~/?uh.2 qv ?ʼn ]],t OMJeo-\񗲧W)W:몾ѫ)N=j,2jkaџ,}(<wV?A mvO6?pz|G3ӄ}/UVcQU0ʅT4*䕝{]^?3[v$THdnihI+|;8iuW%>5:Ҽ-9Y  `5_pJXb/ fu+΢;Rǚ8Z_n}ĶWjO 󜩯'>/%՝۟ƫOf mzKi=[oW'KN[2 ﭗ^d :\Q9={[Wg~b>jz{6F`S:js_vޒ搸<vc9=^2?m]n~WM;=x{k}_"1Q,z-{]u%xpOoȞO\zqRIr4ZiW6dݤInV|w=>c=NwӝJrj]7ޛә٥m{]lo}ے)#w 8*~~%mޖGwkN)%yI抾W{_WN c=y=svU^)z]]K4. &.sZuj+*do^7Gaw!^v}*K[i'b#G)ܙCLEEmwZ.B?e{U0*mÞUsߣѭi=Uz8`SgNn:4thIr?4߉:|q7ĸ~6dfiW#AtsGUsCsiMjW"kre|k\VgsK~OF[ Ӿ͵i8ir\r{TZUg6S?$zhhZ֏X~5凊{/R2hZ&5Nt}u?k]k帶ԭ|'0**=/9a9WKRI帙`{8f1KTS}#W$Oxo;|;]~׺{/Kfg'}JQ6y70Aqpu/̳ buJ<ӆg;gμ*ᜇ  YBXGK-jt9’|խɪT6oM-N~Gbw5 D,|st^ZiwC'6o'8 /K[WМ%5znov?\\|Hs?ÉO]JWE:UMjZ>m6mmo}DY aeZU?qI+Ǭ..ר?np,#S0KTɺЊҝBw^O{+FR:XvJEFmd!xZiFm9Wρ/k?yu;r9{]O)<1.WÚ_0 r?IӟU 5R2Ǥ3$wO<<Y3L44Uyp~o9O.| _¿q(nnAMXneMZSXb%o7n cio?e/#,*Qun~k(=۱Yxwgپ{G :W,*gҶX)ލ*R!xӜiC-.㲺SiCq2lu>l)U~΍L7$\r%Inmǀ|' cadx`nwIK]`?~1JWsFP9UK1VSܟ+_KiV~:Cς&Xt+R=CJo./~]eL,X<*6bb굩qj.#2 Q(sE5?1$ڵ fĶx-㧆YƔ۩Y9ʵ;P&Qq4?+k8Gq|>(CɁ!/9;,0O_.w8~>=Siۚ=bVwʖQѫ6 (+H lv?q)9i/tvbk}N/ ~ï@zng}S G@|Eo9 ?Q|o? X>ӡwQEoW;$՛N'RhZڽiVgÿ&h.NलCyOŋ WY ⿌C6u{𕭷ٮui֚m]]hP\w<\؅u^Ӿ;+^˭ڔ{_ڇNjk^ZBi]GP>W{,:~p./84Ҟ*M_g}7ijmZ; myrEuznk4 ?Thn߻ܐ׭zk߂_59]8y~T~}ĚzDѬk*?5]bLnHQ]-M;߷Y|E9W73J֝Y0+^.Ye|F=s׍A!|Gc@K,x?G|+q;MƏqs1EzUeg{.[7Ihr*ZC3i}2wN1 Gd8 [k^뗛]|R1?힃5Mr߯߶ֶw}t웽[ŏ[gH|GUG{WŚ_wOhe'}LQe$iuw}o6F-M5Mydף f|cx?>-z?Gkm|Y=t׳/Cy({oy8KUnh>O<'m/ƞ|W=&ZM_JtMSwЋ>ݥ궶zxw[#7YJ]֛mnkO~JBs+J O{ZɥgZ3hTC8==|K)~ļ,i zyә~Idjؾ3P#XrKr~;Wӗmyz}r"ң{z;|?/Ў#N%>SrWm}gkJk[/ݷp?[W0j?1W|x5;E{ZWaNQRVpQ}Ut~Ϸ o d` 9ǣk䴻v})A_g[KF|:$~nwC{L0;}o\}e S{Qoi-+צ?+MG'g~]}/[oT{j/ٲ D~C4:N|G$v,g]Lmps~[n˿yw2W^1FTr{8Uը>=O7oq3Vvgqgφ "kzܰXE ii:V5+ ?N?īojEs=+h|kxb3%~?ӎkW\V+|-TMoiZŶ'׼U=cZesȞ Pץ۟&q=\F+yfW\l. y?zZ~_{s(ޣ}}{{-7ŔE5ۭK] 0z?6NWNWt?>o{wEGv]z_O_FLӴ}NtK-+K(tQZ@>?>Zԛmڧdӟitc\͗:porvnVwN;BL`dn`1ӑ6zsKknv uU(TvoH,`SρS_k#`OrMx{m4.]ϗMSO{{_iZn~~Z>gi麧KtJ; CO_[^#4B>q"Mj/|*Vz}otyb*{S治ZN]cR>'h߳.g?:̖5I?~'nN]\|9/ [ċ7?ٷqքq*N+W٭Z;Z3LG.&퉓_ȹUjkYXoOn~}xSo@38qc|kcK/--*}t٤rm3({=2:_?QIN˥~J=eJu.ݯ|P@Pi6j4a--w}q(bO2G0* bkq}}?%iW7kd06p:Gw@ dcoW<^WӖ4z붺d1 [OѭZSIVwy<6EIq26iv8l0˻NkSͷm"6#g'9o?1ޝG6Z鵺[WBZ٤@B p8:dno~@,h h>>%ݟ[Iim?Qo/&>2:'itZ?ڴink_ py+^5t^7Nѧ~_8QR>z a֤*:IPK1km2^ ##J.kA`K2@ai-NMϮhm-l28CG3TgIџOg N!K1+S?wT?}Y>O |uozfTW=ƫ?Tg$i*~(k65>{h>mQOnRּ뙆?\佣ȟ7(XpFwyVc?r0 dK(̭*< ,+Rsӄߍ:?|ex7g c[ILѴȅhnt*'6RBU^?sWe-{Y{<ӣJ 4({iSUu9՝IM& dyrg\{sݜ9L%=kS/iS݄t| >vPY:J1o][2Z-o%%?fُO=Kou޵txF_ [˰_"|:<mt=p4]noo?3̰J4骓gȷ|M~Ί馥uo wfUԥQ..ޤ!)8 o(ÞKB; XM>?kaZH|#d> .y8\xUFpg?bos&۔`sOݨ2ҝ5vMܿ/OZx\r= gW8mO(?%Q朡>Hj֙/P5=+K5=B+; ?O̺Q]M1Ib2M|){e-ﵻz-?^2ތPם8=r:( i>/ arw?2KK]c 4uΩxAOt =%ByT$=Wo_KtEpCrS>% ԣq4r8tש2O,xⷁ ᵪ<έJ[9i>eα'ßk>%_0n,<7Hp Ӵ]@іJ;N-Tc\6MùXLLLMXTT^1/}G ZuKiOx!? |6|/Ψc-wS4Vw w24MmܟmzOhko%->o<&_֓fWki[]w'|c|EGZZj3?M[XamkKk{079s~7^>a-m$s8E(ԥztUoz`sx gss=U:k:2K]Gҝ*O.}tvȟ4xƏgm]y>)MF_ ]km,ʳ\9rN TrEakQ7(Jn^P7Fx/ß[Oq7q»UPuO^!dԴf(uoE8|EqҖM/8TWGu^O¨u6vϯ] \|\K?>1^#߆톇ƯjWia{6,tMCP|Askkkouom\ptP¨{KoQ{:ig.Lq~Yu+E+rCM}HGM~ SşSi}}M;=(|S? >`u=#mr$j,?sMj%fNHJnQ4}G(EԜ|Ѫ܊ $>>ݴRi٦w [彅 -YE|Zm=szci}u;B?i:<9rk%VZ9Y|.۹kk ˳x:9moOi rN8Fܱ~4]vPkmK{k,A-r~ <#2#"BM%lb߻~6qƾeKvvzO뿊)< 'Vo|Ym.;#ؽGT$) EH۞NEd⹬J5q+{JSwiz-G?+:~/jk'>;F׵;]*Iu=Nxu/LmgXN-TԮ~Zzy;+֮*IitV۴\}i_m//>^|7s@xƿ5>U'O5_> ׼ ?@5-%躟-u:Xl:e+y?}[y{ϖ Bbyx|~g^ ?|ii>[9> jx/@uvo_᱓^'^ӚQ5NjmM] ٩Z7#a#^6o^ω~|7}}^iڌ^x[ͤ-Θ2p8 :t+Շ_?N'vQǓhx9L$.V]m/x^Cs+m9>7Z-^)rؼ3En?yqÍ#=we~_1&ZZVOq(tKebׯyJ6 pzSx~lӝ6J?+kK^u&R J?i'intդxv6W\L7u&Yw' vz9R}^Xԥ+TrV6ս5ZGx:Բa}iSQrR>ZJ2=qocO=K] |(wL\HOs0_Ù\zgp!GyU:k"J )T+fۍk_mlK>e$_.U[ d~x1zt P J*TAF*\% SwM_H5<DZgV)t%N4䮴^Ÿt?χ~y\{qx'úGoOӭl`R3de}  QFN~ҦYy$vVymribb\o#I?;B4u{]&䲩?m?WWM>/YjP@CP-M v~}̅wvWQʚH0 F77!{rl~a:{9^f漗=$n듔 ЕB磧<B=y>kFRq|h+݇cٵM3(hbJ̓rAo7y6$\ KWZq%k8rSTysRvTXYB27Z]Jn•Ϝ4fgaɆH3sW C|w}MI&?g[$Ho49ӛ 0 r8qя>[SJ˧r5|~z/,0rb(sUZ?!xB4҄aMcl;_u 5/5  jqEXi`tAeUGuN+Xn4q8}Zt1UKq'/~$ԏx*Sa0YG;WIB FWG4P_?,>5mMD(D8| fAo嶴&Vx`2µgN3iU ˞  M 8&qF42 xbe'nNhiߟY^uno.dCOި1vwj)-*f 5֗76c4H:j-6sw;{эi_[{o qUن!YKK`9-UB OsWd~S,=Alc8 nwZGEOkmӝ8J4)۟Zݻ~^nP@Apsq:Irta|^R~iﵼ׳տj7> Ѯ.[E?Z5'+Yvjຶӳqy\zE e#Zoӵ֧{G_xK^ zyIt/x'vPo{:F[\}}IɤNJ^^_Z)/޷>uo+P+K6[ xl-(1( aǡ#sMG&i8r.jq"T)ܑk뵧{ivow^C7O̺t_u=>g {N-24 [km6\woDG=mVe2pUላ֤'׎_z^oWg=32hf^;?PSM͆gex4bJaYEf+VilmMVkG =:ג̹du8'=;tYuIvW~i*o_=zJ1}w3u{_׺ֆ~v콣oJ 'k^F/- [Rĺ]ſfT1uvW+t+j֐m>C1,eC+U߻dtiΜeeŲd)ӐI>&OS~Z4MjM.oc/ezNh{h׿gk鷿Z: |,?vKv|7_#z!}{\H{|a񖛥߲W/xJ(~P| x}H!T|;smu[A>ji[OvxJ|/uܖWVtT#H&H"]0GF7~_nO~+2[}g?SËizZ"B{GN}RK&t?6g%;r|Wի7޺.^Ӌ˕A8I}cI>~n⩢]ǃhgt!Kˤվ ~Gŗ!}'>8xF kXڥf.?uͳ^pհIk%JWv[ouk/xInZ^l~5R}|;lvj]kC RuSjOm(q9aKtM[N$#O {KSv^涩Y)@@X|:FsGJd֤-'}[|WKTӍ?iO Rq8սRvҦXP@PFA:z.zn(lo[7k{&mv1xK//<-XwܚX5kX.K}kNhL}7=dfm9}_的9eJ)gR/̱qNֶV_}t\ܲ9}K INu\f塱t^嗞 s|/aô}UލWS?黵ETy*fV}/?ܷ8xsA4Vݧ<4GN7zzy[ϟvEdIƪkIae[|*P{ﴝ A=}]]z~믽ѨoTNF|Q<;k? >3)d~2fSólfηň}d0Qj|i\VΒ|_aONRV";jﯽK7}N:πPzpr.IǒY哻}$t%}?9R:+w{} P@xgS> ~;L|Ie?ƺ>ZrH!w:ΓzlnmIvh.7_K^a֎#.UsNr,^aե5զrV PpQҜ߿RufN~џP]_ƾ ~~ Os&ψ_|midou,y3,Li !tNf]˵b*:oٯ;7nxJ9}'S ќ?Yx}OM}7n^^I~q$,7;|ϷϚ=ZWq~'~ufq,:q;?movkޡ:һ-!xm`.ֶI#"i'0t&^+v{sͶNZ?A`2YhzխY}}|G H>rgVW1 '$_j"<GE:ε\*Os_#齹y\5ocф }JhѧSTqt#:BPpP5HPSxgV:|ѥ!{G}k[C46\͊Gˏs\7hN8s=MÞi~isSҔ'/3|faf9U'P}J,-g3v85%9g/(VisN-'[ZL߄<_qW_x^jQ<l?kX?ҵc[ h6ۮϵ6ҿ/K/oХ9״qNSs&z;>y 6~|> i~xԒŅO;\U>ogeArє]y:ůkiy<)r,2߶rSҩ*Vzck-iEMgZ::%ΧgItmt:ϩjS|.'ŢӪ)E\-F"W|FӵG珉nxI|5ȿUim3V++:]1 ym=濱G#fEW=u"ҏreJ6ҳ%Jp|>6Ҡ~~!xM<w <jxR,ޗm.q&arg}y;so]61*O,N|e{Gg$?7?+$g_}߄??$>cNk[;Z,Y/=[n^YIW?7!^7#޹o t(o#Ě~1Ki*񅷍KͷԼzԩ\k:q[~쵌7.^kΙ_LuWםzky]m,?d 瑎ǮWU&tڻ罭VʚQ+Jiwﵶ߭tW;K=F{+{[9⸶x{asК)DܮO<EJZoZj/kymնtAmuZ1QFwsu+?<67^ɧSHw|/e?[oߥ}WeT=9tvOw{.e,z 6n^IoMe\'fx׎=?+*R&IoRJENW*o{OCQq|MIsW^zNc4N*o_ɮgv([>۹>A9Ƕzo^1L7A@ߠ P({a g^VI[˧gqӞS#m4v]:J$޾ 7€@WRӵ`I׿@ O1Fzt\s9ry2P֒W{>KzVjϖ;Y?7_q62K)wX+8>'ZV֕~[[ARݕ̚m ~1)Cy]*gnE/|=X3<7&//m }ZbnIjv?·p`ϞPtO}˽WF~pVxź7m]|+,w)V.cɤxL7gܨ8EMԴ}¦e\fYfe:I䟰U(U sr򸯵 Zx&QX̗ZnDײ\ehB*!=)B~{\K[*8\֛R~orM~rI/v+mW}y=Yy=e.+*jxC}㗄 SoY_2Ok}m{kN۫=ҵϚej5^ө ]}vIZ7jN1ƛ_ oWi?l)&L֖uƭ5 ?F/vt;j) II%wz^+dcJtӑX]?_IB>!_ |fҵO P6c cΟlj4+bmGڽolk97Wo4OW;istM͡('ݬ>9B;Wgn&r.~ G-< /ROj݄ǧxޣ DZmڮ}o]kz޳mml.J1rRMogֿi٣uWa]9ya^||KnwyO3?Oi~!xWRX_>Ӭ! #:Շ2kWmi_v40|\ro/*vWgqEα'7{_ BWt#~Ե-v(n/PԆjZqqm%sq<>'{-/uikr}˴jeO>[Y]sj'!'\>?mV_+_>ݒMeݯV>67l'Ӝc?*%m_Uo˘R$6o{wc4]W׾j?gg?j^gXhzO]bm>?#LIJ<0;kɵԖoW ֗l87ٿhioo A>JrC xǨ*;󉩌۽/U _ZQz?c7][4}%wm_ voߊ]k2k ?aخciz> :<M`]jW#>n*svQv]tK{l/QK[B㛾{NocMÿ4-ƥkwR֯.qz~oinlaiOm<l6,<[iMYt8 R+fN;KK=ʾFaHl"H,4 o> H, a 95,ƝsӮMQ>ip)r]/ĭ峩-2״[MDӵ~K>sjv2η1piF\ikM;<{K>v4ފw'!Nfs9u'9WVO_4vm_ozKަҏ*^Ѯu۫T6>*~2sSIxPQ@9ꚞc <+O4:ăvm\ZB!$t[h秣ms0uuzڍ^^<׷T۶O}i\(4nyzqӆ>-z1ᅱ~nl* V&;~}'}pS|'%/h/wz=Ɠ[ƚ7~"gkMmtߚKNߟgc|DFNJ4ZÞ'ҌƓ(@ ڍFɿwN߅z'=G'nIx>|*?]j^񝅾Zo麠W>o)7ͦY'4+j1Xb0ҤQ嵓Ӳm}$ޯԬc"+[H\y1EjGRm8t:p7Ml#񏄼9k nisu摫љ,l/0]C? 0{}ibTJo~ꭽ5ekt|f]6KKyJ\υ?xW~:O,f5?j0bM&˨Ai`%=6[mK_(}Hӭy.'yifMzm򳶛#Ia𪜽}VmrY-5ת8;2F.+EZ7K560GUm%ko+,kOxgmLu|"z2vi&q?S7^wTZ-󿞖AIU9_G&xsyq??0~WĿ MD^#߀ْ']X٥޺:45jx&=W}I>'|5ΑsI𷅼=tM; 82O4^^3\_N~r:B֮+Y$ӻ='pqFɭu}ժVHHI=q9c`xsv%~ַO]-ww}ZzImvwV?|fƻ[aU/_:İI5 [>!ngmgk;puqu_*ڻ=՝z󾤾뻻M$I'ήXd ;l}rO=zpے=}{wP~d>hͮWz-^u/?M(߬:eZyQ^)_*S`-o5սͶ \[lx(8vR缝̾얋K_u6yX +}lߒp#m^ڥx"'}?Eps9M_^m7=58wބ`‡D{vժf@P~_@ cyQrUG WdMz(VwiU>|3g}nUp<9@K@éB?Tt)9㿍uSUUF Qu)tז[qwoTjȷo<I񿉴]vK֞$ֿz0)Ym#_ۉE{12f7ˈ1떖:S+}Z滒oU&v5Wەk*|]|֔y(]>.u[U3t)|%nh*V^ԫ[߄y9=?s׽E*5-Z[N>?ntZG3eƓ|[ ^NhKb]b\cxisjU>(N:=e.h_]} uWݽufzhܒwזk]8oϕwl?f?7e࿊ *ӗ myT?+ptշW٣_(v^ywC|}]M~⪧VTev+hMݬ  %y5N?h"__}W]?~cK .uBKxfi7NiW}?#ٖss qX<,"Nz|$&R$u'>N~鿳?Sͭd: w~m$i{:YYs%qEP(s_{N[u>?eOֹ}cEχƿ|ay|<_16<"3CPnēCj5a0uO.xSSSv]Ϩ|F4*GYZ|WW]W??b?oj:} Kh=XM~i~[:E]c?t2&|SFt\F u\?gR~l߽~Q*g22jÖIT$PĿ%?sT_Mg9?˫jږeS pH%9l!J:_M[/-WJ<>› k.OrW;%?Z_vڷkR2jtM5>vhE KmD>է9gRϞV}zE[_-d/eqJu'gLE^}W̭eU "`c3w#<e{gǽD73]wڂ"jݲݫ_vZK/ڳ&k| h_~^ixcNioVAo]b'zNK德 ͩd ؘ`F~R4 r4=o)}i _=ߍO¿zlIk~4k_ |9ǭ|74UɺE-ONsol߸ΆY7Qk_hkeewO,<N2u{>OFsֻ+9||9e#U7[Y ?9i-pnJL_K /rMzr%ӼIvm'r|X<Ȣ&'4sr{Y{:U7Ӕ;J~f_߱#˯0O&Xx3 Ox+OCzF?š'+0k:ΕmO ZV ^ bFpո.n9^}9Ge BTJ*U`׳Υy}㟍? xn>:!k;i.Z.Tqrym&7^,ыin}x\5̱<6<)²ٸ?~4mAJ49??h+.?v3/>#oES>,&ƍ þխG5(}M5{kа8haR3w>9s٭(8ox&u͗Vr}fJ xUyay7/o~r'񛿵GNFbϞFq}2.%Zmg{[_T_mx3U(=Zk].Wt?_OڟigٮS6F_hTznO `F1wj䜮/ǐc0|%lSm9^sk/'C荫7摩]b_G߁Hw{+R>]{NMž[z}-L?+\?MצL2\vkSK}$bBz+622xprO#nGR;Zlڥ^_iJu^Wk /k~~? ~3~+rS⢫)Js8B4;|Ec_cV)Mּ+Zzux3Y݄  hvyћnjTj{jM|.{|*Ӗr},^0I_]{{G}-i{;[N|e$`ό4mc/fy?sWEoCM Gg:M 'CV-er/2wU5}aҕ-讀W)uz~wo ~>;i% Kil[W(xXkҼ[}N[}gLԭG@}PQmHx]ju*QQvZouhRueT=+_Uf{?k|(>tPn"[jGsLg׼aHn ^ +r`v\MͷwJB"fd.Ѥ|sυyTxǚ2i7[_eqCTIe*O_*Tg[տ[ݺm^Pw&}?i^<>gPzd/ѿm_.z==udlOqe.HiғV{j~dV]^5볷-?OkI>_}ڣhY ( ( (-.?Cq@ eQׁq~؛j~޿k'O n],~^j Vn#<S,P@Tr1럧cӒ:;Q(&Z=yv9ԗ5R}4[ZW~YZ{9쮢h剁`"h-r#ۄE;sSmdɻhްߕ[2(g41j;OK~}s^T>mdNao ?9xګ[J!NoG i*i_mI)spNW`eESM~nzm{?jFi6Z#^hW: 3G{lJsj?gԘ>dj6ʬֺJtrY'w9{Zt:Z.ә?S_J( d?8w;;k|{zkd3|t?0 ga>H@ 6/ƀ@ [Qր#}?]Ccz~i&N>e^Uo?^Pv7?ƀ~?#~b QIY_0"tNz憮Z@:s=0b:PP+zoמwg ? GO~ܺz}-|nݷm۶UO8f>FH |( 0x樕*~۾}W*NϪz_3mrRH< c<=i+X|_j]u[^>˕oק.[;mR^H|EOĬzڦBam'?;am\#5y:~j=sc/Zӟ7dˍ:pz{un۷ѯ YZin$3̒I?}$9:cg٦yR^¤?TNrRU6.Eݒ{=/ |<о붚eeUOF{+cgomKߒwJ>?Vڜ=ڛnP_;ߥh~\_G鱽?Q5_UQ/i a 5칾֔d_.C>(о;¾&D.bk2huw$P#e ȸlMn&.C0 wCയ=w*bڋZE~zZK3ď iD6g,nJ\h:ŪE,Emٿv@Ygq|+ԪUҩR9KNN> 6"^>M7w w֏Uv=C'uM.dl?b[eU)J^ӷ[m~J񽟼+mI] F6w ƫW7ۥ2$=:֞,W{j潆:?<VZ0-E%煼Id%}ĚfI"Gqv:Ga{1ݻ|Ƅ}/ݗ優y_mE5o'Ǿ vMu}?­FPx|/qx$"7gGkgχR6b.g|HЎUME7WMO|׌4@Q\M].M.벒ߖ75gg :{~x,?<;sx]NX Ikix5 Z?dAhYԉDžkOy?o{YPa(ݥQ:P62s5+KnWKyKXi`7m &4|C VU t>[."׼MR {mwZݶ>/aє/6ۂiP;Ws9峼8*0m;_K{{8]^[<';h/O7~ſGV亳\vuz%αUvۏ$c+Gv+^5ml5]JÌc\چsc!K(AzlvWzVۢ l\%\ɷZuT;YQg2| 7q6O|!|=7O"'&+M`О,7ڵ6r]jWF1Wq/cF ޔhC_6> şu_m5 /G5`=WH&Ҵf 6}_Uv'|umX;k[|O{Z><~.t,SV־Va(mƜ~:y𧏼#wAa MQ]i$m)W)E}b_mVexUUpOrWׯ=)&懲O|/9Nm ͟twOeoot͠$3Ǣ 9_Fknk>7պ[X_iY˟1o7SH Xhn_[W&>#ּgfxS5jЬ5M_H|9_iSMRumSK !XUw9}JK1,\N`һ9[M5xɸ%cb`w4E?3חH-EۼG-@DR5ټz+Ok')O EtڒONHt8z :|Σ?w_w_j*z??\ 6k_oifyķ n.p_-w^kՕFgQSQMomwo\? xwIxOzU i_ oz>a ʼn<=;OߟA V.yc{}Io֟'{uV$;t>-|ib?*]?C]ZE_#OK&Q˽mHj.MO˿/#^W77|+:¯|9 DΫo@t+T޹kj6VU爵]K$qiz^J7=AX{g=ފܮ/խc{Y^C'gt)C_?͈&-N!,qFH+ iAsJޞ%+Gӫ]nvxms8>_s'nqzW3R-:5}ݾ.V ǹ¾JLka VVWSȽN:t@굗ReWu]m){-nD_w 2\*OL~xꠜsrJĿ]i{v)S*hd$k7湚PSw''=FNqɲHZg~6ia{:RZ}a-5{'pYǿ~csYJN2߶Oٻ-=.[=׹v:ЙJtPbW灒|<RcO] _ל=?zKnO%tgEV||Yo?O|a>[?j =JxjRΡiKMf?&!m6p/iZRӪJEe! ՜<4B\`ZxeZ…ۛ(~ƿ]ڿ}OVi>|@31Khֺ;G&&|-/<cu.F(BY^e>ZnR+"9ފ:}/vNH?bҞ ӷ{65 *T7ǯ҇42=G+SA7€L_l6n_~'(CAwt|c׍vmkߧ@B?>׎;oj[˷M^ ֍~n`m?q;$5w gױqfѭ6}yV 7@ޟ+hP@P@R9'QX{@v$ؔ:1h ( (2=G(h (!]:JB7T'TַVw$rnbbm/>!"ɳ9`*Gތ/~\SXCݓoo/.Ͽ/}%.'G[:j:o-oOʂm&b>ЯEk`7^㽞ΧGV^VBow*)rƯZ4muOI~r NG4WZG'מ]mw*/@lX+ݼ7=3>:ОEzWװ~4+T&2 ZQ|g% /&^[>k9}];ZU|J/<=?A OM. f8 /th'[D竞8 RR #Ui,z^Hwۯ/i8\D蕝=}|zw&NMnnoo|8?ܗc9kma/w]u\'>_Oa_;{о--[z]ݏTPG9۞@1s%M8Տ>O;kMݺo]eD,*8߿0{}=">p:.{;^Zt8;M|\[EıDxl:=ZIO~_;^7],}>.8ի悞$乪7wj]ǒzz;qПg<9BR[>[z[Gݤ줚z]v[׃|_:%nw=ki_X隥jZM'ɚ{nmn{v?.Z{&էNPvIN-RWZI;kJ4g|;c/~ '!4M-;Mx+AmK٥}V?M%_fa_18| }]R%ύ\]Yg9]mun Z_C\ӒK?"H㿶NFzۢ~Pg=3vyI-6yk, N6Ww_$a#ci'wsء$VM=7%:o]9vwqjC'Oa8ԓn[E>j黽^m~jP9l.y>_حROܯ~v'co^s2}q֥~p[ߛlL)GJ?'CtF߷Jw[-j0%W߅+W譻WV';ǧOqf-_xՇ_O0Zm~_H98QV;7ӵ_;px>o-r˶巭\VAzCfxٶW]~宖׻QI_?M91y $is'wDtk].ﲵmRZ)1?O4wk|nuh!]~>JH_{գemW1ANo2OB,ݙ|oV6_km?鷯ϊ|6m>{-W$r$<Y~,ypFS5ﮞM+soVM3{zM^/mȯY~Uٹ }W'Q@b89o:YG NO#k'5oyJeB^Վ⥛NT}(rm>ʜO엽H6z ŤwI#uuPJ)jvk?UJ~Ӵo+uN=nκ%(*9˻rx8zUdcM<ܶ[>umk˼lӔ/eCfһ}MK_##e~!ɆOiw=5_E(,L6A.᷷r{<>2⬿-ʥ)?{XBaJN,U2Jߵy)[tvVk;f;k+MK5SX̒yͩ06}L dD8jZpai4<^"Zefk\CJ[xBz^󝦽4⇤=?B(~z6&ݵ+aӼq4<$ik70ڮ~O|^qTBJxCiRc8]ASjp>T1s7;Jy$޶ޥ'OjmmkjYMosZ}sUx頁mߘM]][ӥ%ڏ9D̗bi<osj2ܥSrIr;?g?ԿiIC֦ўMح %XEzg2MZ:4yk(N'Q| B.;XzW :OLQo~zm5NS:C (+~xK/6qj~Tp˛sYޏ[*|.-mu+䙇 SxIeԽy=&m9/i>O[[4s3Ubq359Bj<6(og ]'IڳUf/ xkxK-ܞv x쥋þ1$ךsw~s-Z)mmqlƮ<[YP 9' i —!)ߚKߵGT8!LK[> p9җ~(~+(r~qWi_Ǧ?@IY~o=?ϯj+7'g۪YO럮@Ϸsߞn+v}4 '0}? ӠN>$ގVkiRր[A@P@P@P@P@Pz^[zMz>?f'ÿ]KTj1k|Gmzܿ³5 ^_>#vr*N=;oI4JRNk8ŭ,ߚvWKxS-mm'[s xž9Ь|Exž!F jn孆.w (=sJ-j&ޛ~ڦeR|pqVzۭkΣv<=}g R^ז_7ouTsʤO>uZv]SvxCq~F08jWn=?-ugwGح$$E c#G|ΝOio~g=aZ9Z?ۍgzO_>j)š'e]wѷ?1AB@P@P@P@P-⫉l7^[q=Mny|;/:/_NU}I_4rJ5;M3wi<$K:Y$_ԂU#4=ֹRg}J_ϤNHdwO-ˊv9i?swdNIߑ`JZ%Kx--`ub7}߁OW><8_ϟU۳/]WM$C$ܟofܟo>? ?OA~{_~_2//נ,X< 9ί{Y:M_/(Z-mtG6ɦBˋzon8n[*FU7G.Vz{S,S~О(,cSm;ͯ鮫Khڮ儯WSw^: l3՘,X7o^0ҧk9I?{>z-.w裗<**k]s gQu|$?5K$5*Tҵ)lݣ*+}CNİi?a>#xĘEϚPW:uKύ~|6'xÆHz^w_էxӯ ZOc>h'z\,=W!E=+5F$S7ºFW<3 f&jmE>ӹ$8(pTSJm:t%Rk^0B̎a_ Gxz|}GNuT=MsX׵[ixwVo{Mk{m;Etoy!Q%Mq eq?Y2踏l0~Q=o W<%.O7w,:\#ҥV%i*,d{ޥ_^ wwIZy~t*ih=-ģBx^(nm>yqIc˩?r Y0d\[n-{}?3;_Sr xԄ1Q9%'Fn~U~ov&3\–q ^xHO|妮q)|csZA/h~ǚYjMӼp|/KctG577![4]N*5i؞.2ܗ /oZr AέVjTZ2rlE:5U֯'gyZG'e|O*>/h^D i?W*l2L$0tNy+;(G#cW -u}N>ͭkQGُ8#&t.&1uqc<$^_J9nRou'kMe5ڿ4˟8iK/`4=rܜ׻ F=ٿuu@DŽF [쯭4>'uxmosxG_T\jՂB֧GnXfXxuX)ݧv_rV{h|q#~_={uCIN tԗFׯiXK<ΗP&N>NcR^]v};} !ƒ*rN v[2e[~&<զIi*3E[^G#wlN~._Wmi= -H5OixsZX-mah9/R"~ iZF,8>V4~+yf?c|c*T%:Sv}l?8E՝a5 M/(GO*k;!,ub]|syPs ki:Y'iv=u\ѯiFٴnZnViv!@P@P@P@P@P99evaWF---yiwu]WH>/@8[xXƍ?τZηh7$i?"6oeGm+aܯUЂnѼo5޺Oϗ>GJ<ߥ)w/x=%fW{KT㿊 >#ɼ, >[To7oNtiKk~Пh>$؟ٶGIoiCeJ+M6:po 86J G]޷ *_v=ǫOo[{oս/:M=Uki?Ql}7 Qv?:/o~~-O×h:>/?[3_s|BJ2Zgoc7}u??\0?59{ryRtJhU/%gsK8|=M5mO*4='΁G6|μc99JneNѷf>14ǒ,.UO]J_WV)W#_gkzo4oi t/|i5ɴxڗ%Q<]sL<'ƙo Z>5?gGז嶟av]9]UIV`jnsrO~uxKOط Tl>]}*Gu,gfXzYw:.uJK|,5;v꧿5/'_-O9c?->)(O>ĚoG&_R07孯Ycz|37N19Of7]i.c}>( ( ( ( ( ( (>G?S{~Z/=.W/8G9I=:agWm:ih|ŻYޛK꡵Ϥڪ;̎=鴌c_3UtWmᷟWuE*kV4)>+zF˺_]KEUKl?;g>90v3ӻvno-յ~~EBjЧǿS Kmuhj ?Ů1FK~o5-2K9kr{丿!YMM_ݝJJJ?;|xW1~Z8zҭz3 oOt*TZ />l|IZ#_j#v֛6xQ =RԽαuM-brF"8~z?k.K^mC񜸟1,6+ˣ콟<ʴ,6j'}IZ3?3QWURԴ}; iSjeA6"(iFK^טg##Ğ$/?8Ư8STi!)S]i \!t{H$|C8-k'z_7 7VCeM7SԴLS~msjpcN9?B6aZi>m7ncܷ:t,U:K'ʡRwgassg J~Ͽl>xQԧgOv2Ğui|O_aMlOiSO0mͨ~-\*咒:/NpIZm;w_xt?Gy:sZ0g,?RB?w>]cPMzw+ _{o 8?-):Թ/[O$RS*3UTեu]M(GM/^ m$kK[zV rOלep%R/9}:p4[˥K ;(~m O>F&Ե+F7Oau?F Hns U95SP԰=Ob$)z5''`8%X_?ywtiOEe+%fwq&4֌ݗZIԯ?ÒyNZ#>Q8cĸ6 Qi(=ohץ5B?K;|m 6es/|sows={a5>X'SSHeh4kyv*(ik/]ym sψ5GWr3 49'hZH}vkqmөNX:U'Ntڒ_y+Ok>N|L!*}ιy{[N3ŹJتU' b)):|M_KO~|6G?z~CLs4+6og4ZA&x|PiMMkɋQ%i(Ro?k1k+޲q~>*5k~>=/~:<`~Dռ+{Co_Wz~kj-4돴_hwŗWU8 oiOMukm߷_oڻ<?|S6%|l|K_x?Got~ rQSV_kχmܜpNKʞs_ kUe/$/nї<+e^O`ziMZny+ gx?WlH'uXk>x9mqqyS/"FL5=;kEr4<2{ 0V?Ԍ*ztK'00i~^oD.j!oSxٿgvO^u4 m׆4OFu`°M> 㶶%Km;H/}_kZm'kܮx '|\A=bYDҵϵY#Mnk? Wb2&"l5Ϯ&Z5n?x7S8SфvV?x#Wip|*Ú\^_.TK-2{Mi7Me]qigBUr{q*t0{NМ>'dݍ.WX_;{G T=w况]_Ǜٷ7I|Os||V-^]u?_D'4kRP}V6)nkG8C9o?y[ثrV߳[+庌>|GMGZH=6ƪ7Kz?++xcNa ^*_a ˫|wvq|K O⶙D2<|KLx'N? t+i&95s *q+iYRwM֋Hͷ8~e uFxݽVV Uo }*|!~Yj~5kZ?=Şcom2/_5>>s{{|-׉57~ ׉pԡE҇*ӿ{h{1!{)V^4q6տs˚/8Z,k+ χ[8b_5-KQԦTյ[]ظZ[x6TNWA'5gn<>>zB=߻-:-|OOgg Öxÿ/MlnW"hD!KG?j\8EȜ?v?ϬTm:gw.SEF,6؇co{3O⎉io'u+P=cZ>kAZnyZ&+{}ZXvqmT|9,KOϒv:-wn_3q5lonw.䶴?ߺ|?asT'a|2l%~>^x%u]{LG=3_*=Gx{υUy9Nc[\mPR,4rNgQZzwգ;y%V)T5O]r+zޤ6&B,qbe$ںݫ_].5Ry^gӧ6;L`= R6^I~D6)P@P@P@P@ x?CCW8[7{'miR 撿fwV5''d>:~/hvӲDɨKe_G-k:K0mZ魓kϒXõub  I\MzCu='M5wfVNN.,_R>'翁1"?6y9h03K4!=:~旯{Gͬ/~Ɵp$cS0ե.;鿎٫jk^?^-]󩥽,ky:t>^YpQrb쯦mHݨ{P@P@P@P2׶F=0`RN7ED緹|5"Jmw3p:۞}zI7%B@P@4{Eg(^-[{?cOwN}/Wd\O/_jirOw wNR?L~1~Zmi]Y/#JtaI j6J敮5ao0U7m8¼vk^YUi}r5gwq8)v| IW̷/it4z)`|Ui:N|=g7 xFK+=OVK9uCǾ%8DErAw$Xŭ~Ld눼+p 0ѣ9}VǸ>ɸJ_ILrʞU!NuSt\kJ̲x}ִV~"xg_RG7}N[oISALR2:m1fK ɶ3iqtUOэH{ Nן$Ϫz8^/.[^x})|>s≯”`!OkS8TSBY҅OgR+߄'9ּUSc6zkC?LXb{TqA+ػwi+V|ޤ/?~X<<0ZJ:E~K>Z%wr|[?>)kχHqnp|ؾۙ'Kq!Oqj_Un6n4X5:8OV|mkIYYEhYy4%CN%;=,˨}0$'2̃Ш '?>V?#]c<|8go|8-"#ֹa|HRpy5|_p[)Rh7yß+JvYۛw=9xù)Np̹)QRy:䇿&|.k'zmEc4XY[iq_/$#Oop>Rt3 .ikkNלTs[?c WT2 0;Sҝ4Gvj Ii(`OyIodq\\Fo5R$hd5C:s/= iV$}a[Ns|z^{!Ƹ8|?>Ou! SoNX hr+&p}>M;DcQlbьQbviq?!qsi p6;;qg]asөgɻp"._'(sV3;A¯ң'gS'3h}/ =bM?cNn\~ĦZN[o|kg5܆:+)Ҽ'R,y(b9 S\'Ů)SaN'?E}tZۖY_ДQGmcTH@H';/<לb*]{]]S7G*PJ( j ^m;Z-y 9&${~/)3SŠ3\߃\mCGΖғkvNn˯ {k{~oFa;?iO?g9⣬R/>ִ wphA/|nϬxLm0H藞#?i5xiTu=&;lG<%95n~ о-Co֓#K+ EAǕ G ;E[aqq_'qW8_$O~g ܗpp] Wڌ9>wiy<e{F-S*y+h~sZ C/<ִ˭ &_byn[JOS8Ku8+vwn#2#{:usۚnGV۾iя_e?gw:ֵ⟉K~#ֵ%(k!/aOxmgJ2gŸӭx!,Φ#Xԇ9gJV-5#(rZk*5=Cv|^[z|ȆB}O=O gܿNoOG;ZWݾꮢ9km{}ܒ.__Y P@P@P@P@s럘?SX.4VVkytj7K$+%m/U[qX?g(9lSHBiv}o _[iM#Iah_ZMպiUKJTg 'pV^瓽93Fۇ6|sө{r>R|h5|6o|2fƷ_5?Pbzǃ뺾G":5/O][n/ԕQX|UtY5Su(k;]+#jX~֗O<)῍clg74SKv~Ow\Ӿ*ۏw[7:Vs友εN&:aoxqR(ҍM9A#J NTǼ> }nڶG'O> X5O5 j':4ώΚt}CPCKt?xG-bӇ՛H8{([Oft26q֓=vvv_x!Cz,$[M#^ &!|#.l\fLw|9iNWHN-5n,.kS~3_jߏm^^xwlu/xηͧ^*[h}5<]mx¾*mNG4x ifΙ/l|EU-n4":i4#Vڌ{_Iz7 E?^:Gl|gG|焴E?  WX'm~>F?|9i8xO(RO>~Wq:(/q=:ϨT U' {wI묞ڟu'j&jY?yRcw4O&Ӻsr iʤ5ynbRۂs'oC->/OB]G]xMuѪE%s7X=[Cѭ2R۹6Kݟ2{)?u3N9Euhi-ڃV㏠{ nznW_xI+{ˮG|*ϖP@P@P@P@׈4hz4p lkiRrGo|n:MFxyïXw熽]KӋt濚M7&-wT,4cH r?7!C}/_Ob$̢ώ|[nkpc?CDeͯ~ꕟF_uxGK[ğⲚ9`̸M2̒-o۾.z>op9%֊U}au:[}GkZ-s┵\?NӏQkn{v;׊FA@1qs}3^Ps,-eB_HN|z\Z0#b׾ ,UV'+;IkkkmWc<.z$L/B.) ~hn+׺=k+o[irt( LQMPdzP?1@ }CLQO}=(,罵{6H{K~R} s- wZ+s_+ߣK]t}۲ҒoZKqAX + x,0>"-{2G?/8ܖy'wy7ޟ),+~I[ի)J1:mbި58R9pWKn#6brHm},,6jϳkWu~Ѷ֩˾2+p_@I]x }8OP@ _1u)qͳ/PH_ۧ&j:SmR~w{]g?쿯&'<7q]D4K٣iXD |om9FGq1 c"b?FhWӜV_+}wne?@|0hyx[H5.E= Ÿ -mRrk*b֜'T':|˷ngis\\4\O g6>&."4><4a^\k>4MRԿ<-7MԬ״3x;KX:4ޞEnsq~2J8Jzm)E 6wqXG`q8JfaFW|+ҥwهhdk,x:NJx?sym[RQ4ig7wzVx~ᧅ4Vszf\??w.aZ>d5۟:LruYhO'Oߞ>ӓ?U?e/ڪ_ϪS@jM4Gz9hC\B.R@0OpNsHNq\-~R[I/Oooyhgu(ŭ*s{] ( ^Z7 u\cӿrpGF^qR^'tVq-t[8lv]/w",Ǒ8O՜*ɸͺn_bZkzE5e }lWOmhK[N`Þ=q.F:8?'MR{O9I:I-KE~4a?%v=O`9RsZ>UNkѧ}5)SuZ)pM-o~u$-.Z{$~3iSg̮'ִ{k s^\ҷvݖkm:i۠ ɗ>qzb%jK>ftfpzs%{]yV.2{qsG#21ןrXL71K1ddTe8.v;ojҴzߵNK W*ϕItWw\Ƹ=FYKk.?6xa):ۛn~o]-q.oN~sZ~U2 4>|DMσ;3_k <[>%Ʒu$&DD 7'Uaj{_b7}/IPqy^I҅L_~p_J麕c pք]!{I7_Sû_<{-2|W?<p2ͧjZŸӂӏq/kGQu Aݵ$yq8x y_oM"-7%r,>}')_{KQ~aVwZ wcyiwI)P*:u)Q 't?+:i$.~eӟ^s[޼{8~~u=Zm[O3`<y+k ~Z_pbǎs~)_oq]K%6?#~b ( (c$9GDrIKm~];\լ ڧ iOx;v ?|9M.{°GҵSJ5 7>-GjQ"_ܽm/et}tN+ۮ]ӽӏG#'[Ö?%ߏ?Ri|]ĚZ?ٟ iSxLA|Hg[?sqO aZmZx_88:UQ|p־!9fuc?%?(>O΋K]yN6^8񵞇[׍|]x^ÿƝ(NυSjZ6=ڧ⛋5j۷pׇL{nr=Gi~'7<];p-}|t…ȷ嶞ĝ> M{dI ~'}A,_K5a2VKs7/q[I/uw';,ʭ}?)>G~n{F'/.+Ҿ&XhG~3V(_=FfUym5x3v[wS/śR '!OO}5[1  ZяRw)QІ>ܑD|~Yឪ<I!z(_;MA4mo\g,ly䬯b'':;?v?x!Pz4~}N7+ߴoGv{n?+Y>W?u SAtçxFL?ۚտs[CVib*JҶ{giNﮊGIYtqhO?\=ʚ'EZ){īOxN߀kzlj|YxsL);, k4sC{Q]=Jutx;v^E{ݭO4m|1Ⲭ'NSب//tMMNJ?U6垗࿏!߁<+O·gCϊ%JϞ;7}S\T?>4e:دiG䅭:}'|Klw_{5wb奅ygiwjW YG,^^\s8Ȗyx_\p[XL& V>kGעRO9F;ДBN;.WH:^iq/E4;x42^%_Bayܟܓ026|?j8?{զ(I(}6V}}{Fk{6M'E4+E &0vYV8"N xd즞Yy;NץU]/1kQP?)e?iGz4:u:M436Rق5I󷡤=~u*?>& 'C3K%|Qm3Ē wAҴ0Lm.Eź-ž媴Otôa>-φpxo5᷆GeOJ~5jzlڼNnmi6.DSGDd~̟K=ᦳ-|EzM k/z-6 8ϯ!?nE-U#Yy/N7\?raſ ק:ey#'zϏgOG%pxWO_#e@ JTU[e~]ZkvU෾]`e?ϋ>1\Ho'Km_D{m*QpiwQ^q.."}OQ qC$Muͻ[o{$+C;>?ntx:Ʃ {ai&}XJ+OOnkވ~E|gsW߃7j? >(AkyYTzǀOxb]R_ \[èˤaoc'Pi;-^wZj ou> |B">$isx^u?OO?.tsU:u=\fM>1TU߿hݫ>y{/y;ٖJώ^2}׋4iIjdԧH|d&.|r^M.ke\Qi+~zvv}UVz~mG'E1|aK F+[ EqMS0:̺lYH÷.}'/WTnY^d[[?-x@O/hgP0z}z=ӎ륵޼zaS i v5oUmWݿKXg/ioxy>nug{[]ݝNOn_?-N+wWhG:OZ:okKYE,Pm'2|kajBZ'>UkuZyj|>§d*Usy'Oߡ^[紹._M+_{K!I, ]BO*O+͊HgXH?8 xaXzXrPnvujiza$|9Tx BricNKݹ[x'/|-h˒?y $ooGĜ t*WWrߍRz[_[}Jo.sϗ'uo`=#ӛQChAHx ]<,4pG!մUFcjN<=j5 pWa,,:冮mvA}_iS3.GRQV'2߹9>~HIےpx~|/_hLڤcUw&+\!aSZ>ϛIYin//ϸ?Y!O~u9[ѥC|ҏ;R=!*:n ~{A_brW_K]^Z_k/7*n ߒ馒i8VJIA@a3N)s5+i}t}I;k׶f$l$ϾӃ6onwmݮX;Ke}.ʂ0u=93,9JFv|5i[ChyGVM/|-N|Sߋ?j?Zğ8α_ִ- ?u toEK!b./4#ºjhQ͵]foŵjeX g:8^5*0j˛_ 57< h d'Yk(9/%jăOֿf_a+wŞ=6?~'Cïm?o~TU&wMv)ఘ,fXFxeN|'/T^ NiEONC5!l,qYhS+`A3PS8B⾲^ o-'OvY^b}"EM˧̿kq4s5C^|%еH^p9:ߊ33^WTQQ2Nf}B(|׿;$ܾ{q}{׸|5P@ƺNyKMiO_a9#.:`_q8U7Q]rz)^mF կ9r%UlRgk{-oOوAOg_s=p6{fԍ')+9; v_=/%[GOݟ}(h"ǬGa[G̲JP<Y+iIl9v-u>2vVzWwa8UcI[UU 㯃uߵz/σ=18ۂ[q)*a՛{өoO^NGO?oٿd ߝ?sk5_~THia}, i?4_̱0.n 7~y 2M| ֤r?[֝j:f|i5oaxCS#Tk^񆹥uJ-=\e:x4h(TZ{w[=!gޚ33+8AYhާVO[s 8~:狾rz/5\Ǭx}e猿Upw5+m6VKGZ%?=KwO]6uxe(O'J.a/v%׏ߴW?f[?oĚ&%4MSC-{úLihfSK׭k[[KK1?M?uwaWw90|oU\dsr:t_g/>5o ]xMڵdž5 /N|b.4v׵ yr5_{<U-Q۸󺾭ۘ*էb/?T>ƫ쫨/Ų?54~/QnڮY<[- YҌ3麙t>0In4}&ͷ٭s=Ljm6{MJxTTeNQ7#>_uB?A_pk9;_PdzPy%HFH7G$30 ~"wO _x'¾'M_^3X׌6[P a /g◌S]'qGDžGBjpxZ jz7k/ټAo[[ړG-P@ ?1@ @RcO8z7zලMo4:q^:?DIRV~VouWҬ$2x#$.y>^~aaZP$Q>;JK[ƼҒ[.^>gŚŧ_ Z_âug szdE?/Ǚ/͏~ ^m`yW[LVcwSO5p= +-]z&9={x<`Ϣ[ĸξ"8wg Mi}7WO -k~ bGc:PFp$>pYZҧ;|ó-qٵ{)84iF1nͫcdtv~=w~:>jJ޲y&}}ֻZBwݺ{쓓S_}>`T+>7󾞚kɀA@YQHi]Jp<1D~ f+ [><[Vqǣω/,WX:G7-z=tW[ſ;Ю$񎏠xkᧇ&-6 }yռa6G5mJnQw}:ٴ;Yk\JWo6??N~ n{?<#o>BO0Im /H>G\TjL;t{f엟vJ _XR/h2i5;RhnqRN}]-N%0| ߉!A׼?i$2ybAW:StVOiy\}xSsUỿ 혖Fn48OōzTMD4>ap>F۾BT@<*V΃nM寇}/GXڥOLGDDRrZ֫TWk)6qNxhN+O,uÄl:ņq|}ԋ]ߪ^ "[Kc~MMiu/.tRj[['=|0k]oW_<$)/a,ZeZ jVv:mնml\8'g[kݳk{t_䮭/|23+/5VRk+#mƫgWObӦ|a_EoPѭh7=TT{:K]Oҍ((ܶmW 8Jxaopʤ#q*sƴYa5Jgioo0x}Ys?mտZnm5 V|ӊ^7Z%K+sv,*p]O^?mV^*Upy}je+T^fї뚝|ZoU?v7Wr>E?SGGԯo[kU%e2gG}98N<-*~~zչx*vqR_ȞO-~i=VF7៊KwyA> `1izFMkڝ&iͪp?5K[5ki^ݸ ]f-<7g㯎V<7 /? i~Ek^KKm.-۹ΉjnuQ?#?/udwzƃE4zI]{NDzcIҮ4?\[;te+'=yyw5g Ӫ (9aШNV Rkg{K~;i;v-jr6wg>eeMwv6MaNM*s_NR~4kdܩRXmuVWfoE RPnB-o-$ ""SA4 o??8%V.dӽݮӵ;^^yggps-+t4/^sp1gpx_0"J9-\o[Yjgk8Z5 O?jZaFM>MWD:5m;S&ӧ>u4v'6-yQ&Z]ݴz0ЩW].G{]=5O_O>p|9 o7![b-Pѯ[uarS%g{] j_qpWsՇ̳X\eGɗCN. GJ4~KdU~Zj;=&kyWmDqh,BHg?^|NWKk(jIluwHV¶ϧ(OUپɮ[Ot?>  03̇3?O=z vN2|zs΢y7g=7i/OioO><|@~bu.??Ԕ[T?P@V ?Q?j)U[t+4+VOsj AqAy\YG=Bo WL=i|.#EG/Z2ߕ/gw_9ZWi?xNu(Nь?}z_NV式 !a|d7OmK\>i6>I__~7_&>x&p4n[ĖM|QOR>֊~ħIz|3T~s{d)P|"/J_?i?RcqkZ?GUyaMBO 4 Z S6}bo5ƛm8_nyi8'i3%ї,*jVc䕕iгqC[[i}මu0hU[CO~Ŀ]f9T5bƒK~W_7ES?hRio[ˑ-'eО9,G i߻|0qתVIִ.y}|6U_(>$Nlu+T<'x~R/~RZ5N?ԅ;mi^duگOxψh ^ O+y=yrxX jottMOԵ-jT[K{_NNGף^87(iNNy}/m6Wx{gv2_}'žxĚ'<#6^Ih}>:S5MRxt;LӢ qq{spmHU@_?|[yT6w%us%))Yljun"}pKuwV?%O6ož 0d1n#=6  | Oo!hO5І@X*oʾ)=?_oQi}%*Ou}3ӒE|Sur|RW_hN.n\gawg=>n3_L "SZRTSVS/N-cG |Ԥ ׈q=:r1P~e "u9CK_nSSoڧ~oekkۻ+٘D}qk8^?>fSjѫ*N:ng&oNگUN|7솥h_ʮ?]y 3Ƿ_r~6)Gލ^mgdr~wtMV(Go_>/VOZ(o~@PO& SmCӜdړ^^]+~[k`/8AkO&fyK#%ZM.ᾑ.箏'^+qqq4Ỷ}aH&<,o#j,VͼjlXW<O=g':7Zmkaݕd3~~7?߷g_>O᥷u8/>z{Z)o& MĖD_~i%7Gxvkz-׉|Oxy5x*3TL-B<"Q*X6u`.jos._^dW;|5kըaasbOo'qm&?u{es9k]FpI_Ԥܮ_2+R$Nk;]+tkK~M 5?mJ=#EZ vnrQqH|E'Va-_ks/ؓ4Ǐ5яdS_,/KQ;ߗO}ݻ'CYvSs K 3=}l6̫Q:Y0c rOWfAƯ_ [2Ǥ|SҴmt_u8|chv}ͮJm g.Ծ+)^QwimoۑvFbq_ZʾKKYjc9k5){IZ~h_¿{r{wo7)i9oXi6u=+QӦv7;<sC)~:ZRҵG[_-ReB)]t6owv.[v~ tgռsWíwKþƙ/wx53>>xrn|71gK={[wY?j>?>? R'/ i$Ҟ0&|K#7^֯XXl(|*jݽW]y_PP$GX>t@P@ݿ7@#o_yqÊ (8xG¾%MM_ZH,HԦۖ :B/^]NX] 5,֥ }乧NOjj1vo3yJ'BsZMYu\5i&~~;e<+xG{ fky"k}Raoooklu<[ɖQW(B*}'S$=we9_c?c>uͥ 6O{[ے)ɮO|Fֿc)gYc]^\|97Uw◳[k^$Ʊ~1B/ FV:8<}mz>e>RoV4=*ЛL=>HUoV/(UzҤ:/E-VCOǓchVr ׈ɏR\jx?R9mnJ;{Ns~ǐCfRHޚpy?ˊڥf*N;w?Cy<-٠Ye{76~wH8_qz`⊫^vZ}nZ]&rݻ8ZҶm{4`=~N07ZW~M;Hݸgu^L`nd׮E[k1pk:uKD׾FNS}vig{[P"Em][|g>8pHVJj/7{ߥZǶҍDݕk&RɻY퓀O}C(1\u9Hk:q8{5u|-h|Ŀ _ |?g|-&v-|o?x3^|%UB#j^PEն0G)V~U>}_ui.oS)Ϛ5䷭-9 EyٟCx[[KO iy WLx])q@HԿ|7崍٤sluOiS5O܏;ᥛP#*yާV鿾vq??j:y2׼'?g N"$4/jeyl m&Gi=>USzϩtjnGY7_ඕ?Ƿ,>?~*z3- }Qh ;Q|ۈi܋7*59r瞷+W;ӧm~GڵKw}׭߽<2xKR +<ˍ>aW_ϑkfӮt;uWVnͿ-V+;tFamy_K(_9".Un薻5O φX¾0м7#ʹо7.4 > ijF/ E} KAԼ\~q j^g:u0W|Hmn~nbuBTïiuQooh4׻ճw¯7GO'{gC7 ;T/&>/b.'ѿ$[[mr:ZXLy~j>տ{C9e%T]Myo8>OF|LuK͡2_[G&/f乼bmOcxS旽s{k}߻ɫ|6ꥭ؛:'ۻk>I7_1ueg k_uh_C/>#_0-ƙ_\xkV:'ٟZʼ՜}9kOvݓ?7*+5S^oyiuk%k[l/#<7cʟaٿSxO|i3˪jxk>*׵ ks7[mmukk[hKѭ謬9I;𶷴~mQ ujk:Җ>JS.U7m0iI+_)A-k uKo%ϔkrSQ5fV򺨚{Y@'Nү5Dsޗ|q]h+)~ӱkAW(Ʃ__L~#xWH&y\~# o OvO4j!ssK>O@ |{g?ݓx&FOM?<4}c M5{U}Iꚞa[}4C <\wp?_HOxLj1o:BxOa/Wf|+q=ˬx#z'0>h?f#ß ''_> Sm>i~GC@:ɛS^nm^'ZnnOh_? 7|6w_k-[¾95.H'W麌3mVX {[6XULhWįxG_'a?;ul%x:j~/W\_XexD&]x@7?zNJ'I-Fk.o2փȿfπ<Fcֱoh.{]OWï> ߇<1^46!1%<\ 潦x@.M^i#H]ҬO%uK 3S1֚nn!puPjĜQՏ85)stiFw[z+z] RƒDʻDyY杌pN9po5Z1N_ XSjo~ӿ*=_ķo7[y6_2>v>HLzK,/4)+ere5' U*UW"9ԟ?IiyqK/|J.vѨTmc ?G<>lwk oF}_#$xGƟɈz [cmҝpT;-o?_ã|t:V?&4d44[е/O.2E ^*XRK7ɜb(wIJ+_s>]?Oz P@P@WVqKkym  mplrnj2)O7t:nɿtXi:\gӬ-,-Crm-#?<=M8zFWvIii{YuNI#R|3y>N;'LCYtH,Eϧ˓d>V&"qamS Щb;WmeW9u4Z-[ӻƥ z?%P?rHE@q/t)es, %Ieͱy;+7o,y]o{뭯nQ\#eb#M*6#!8%}ӌwsE9u{-ҴZL ½w\]؉Iwz鯒]-鿽gΡRJ^씧FTtnvpjRkq2tȄA4@m70G䒙>E%ߦ-θ㱎sWp{~h|6=XT!]APy Ў2*칝mFLLcSܕnZ{-Q4=o_Tfڒi|ʓ5ciϝI-{-wKW{;K)k^- K`U]G&y_.sI\;jgaoogcimakX[ S$TqIP@P@P@P@xB>'n'4]WDTny~<,,.kKR<[[ͩJ[>sig津SR+h7ny;˭؋8|bދ#_e^?4xa陸tp麏u $ʩWO{iSŬZmmesם8<0_[>'HUG \sF'JWCyk FӥZw-ռh"Eco!hf]1lhWVw?fԭC1_&&~߿Q; ~3ͫNsgwp2q7ǞTDN/ovgG߆?M_.uox`G3ϡjWQ GTVpOLq\O3|={iӆ>zsŒaSISφyJ3Z*ʣi۞OukewNX9O<-Aм9?qxI|[Oxcvߍ$gʕLZ~sS9;4--%r\c_Sue__ſc-į)?f?F2uGŝB#icxO4'炴ukGC\xȵNݳ[k~#~ʖaNp%I|J*vQNܜ1co,QVƷ3!h gr{/ѝ7OJc2Pdc9^?!]AL1'NHߖ5]ҖD"_>.өۜז_n6JO'mOl {3jy]fWϵ}tI.IK{:{ , t {[%WJ*ѽ;M[-4mwn8gsÎ;õwowN+ZXp/}r. $@G#tgۣ/rZom:Z^7q,l=:݇A R˯ZP@P@݋ OAe٨ַD@Μr!bX?0zq!EFIKpkMvyloѷkI}|). I]iҞKjsx3{s}zX$$^ΚMЋo]}>fTmu{-<ּxG9~^4eFWb8cBo{#yeNTwףyӳzCsI(S]R= d)NG?pqF&!Jx:p.zn_ߒxϪT*S::S#Gfv\'/׶鴵}o.^VoTKyz'-t?.ݷ ߧ( "\7pCs#9#_OX ƚ~o^ I o=dž<j4|G6,_֟ٴIܙU:o:֕5̯tM-]} -c(`c.iKrr Z3?MkRON/XK|Cm_u,K coxZO~>eg ^9y$my|n<]O^~!x'ڮkvSYxb {Luu(}n?I}{3O5]v>":vjVY_ݻ7TH4ۛ3mZEힱ_ 5݄PG)?Λ?N}|snwy9VnxJz[M/UGM7N-0qeÔa2|%/CIx5z_VjwC%-\ yc5>'~YoJ彗&.rW/kt+6K8e{GTy=/;\ܶOHEc 8V׵,q^cҬՌa|sWF?r +7*/Gb4fMTl#?C/ >)\\q.ҴPRW A#j~ 9u{Ҽ^)|7آ:gmAmC8@ mg5jugO[MA˴1w᝱fY> xCυ4KG!Tƀ iB ?fY~tB>$ÿ?⶘e%0$xK"o -( l>25:l'O|ok=ST47<:m'OG0?텣j׿n~*`ŶW ] UG#x쩾ߥ6·koU}{?1@ @݋|14rw$[LDߒs jΝ(88kNq[Mu}uzfF8zjig.>{Gkc32,p?a׃s܃J/Ռk+BSR+nUy'έ*֧ ;FnOKeA$0b>OC} Z4Orv|kMWU̩(Wk+I>}>_Av^A=:H 1ٹxװ-[:MtMw+4[[ҥzt*(zIOhݣlQ"088=ׯV{u׿dm9q'yBַo[wUi5^ r$]uWKO}GDZ#9w%Ak~{ek^˿o^k%gAlg$㏯PCf ޼~Z>]m[>P;O':N_m[~tu)B0J^m-;bCw= }F[Y;{~Zݫ;Ym)=K˭/#~b@@ }CdzDbzoo/`\ヂzq;d \+r_vc#`W98=x$9ӣinǤ-/]J8ݶ7(w{zr A94}Kk{kk{{LKqrZOlpEg~Ӧ:wݑ~K+]i5/i}:y N7^*YGWk|ɻ:E 1^7z_1zy>#~b 8?Z-4y_{;nڳ32r]JwWz(>Zv2 B^W6J~o5Qߋ3RMo }CEr˷z(YvP?A# ( ( ( j}3@} s}co=DNs^˶Jrmk5}&]/'Lj?WྃqiZ%yϧZ}⍍\i50>2y\[?| x_1JrĽj0\isi:׍~׫)֗Ҝn'~0VWi5Y1?\Z6cZ74MƋ8ί-܈SLLUY[6my}M&so7\7/w S1Jw>JK7Excn'-O&}Ò$!S0LӼ?k>{Wï?h? i|6~r&kg캞il& 5m R>οO^__ *2]JhNԣRekN{M {:XԔ[ ߞt($uͥWQf߂^UK(I|WaEn3$:ɦK=?2 N*MN4% )ӽYb8S;V*91}9Tmڻ{7oګQ R_ <_|et'ye*Aӱ{bGEƉgiԮt<1S˜5R4ԮҥHj]s|8ӣ|cO;_/W*=coi>o# y4SfP@gQ\*Rz۫{}Viʥ_V?SoxƶO;D$ {Il w 7%*ӏG܌b&OZi~ Ŝ=_C<ܷT{F#:>~ϛs}{Opi練 us^ExOPWt,WMc'̺fNEo.NX9rS9ޝgӕK~G~,|.xQ[ ^qƒО{ >OB{n*qo[ ¿aM_<j?vx24mAsM7xPOqo íi/K-C:ͧ궴|y[VppHWķNp8JpsU9Ⱥmrs(~hEs㧇~51h?>!?h{Tǀ%ͧG lO"!~t}DӴhe 7}ڮ뭯he9{9G؆بҷ{4gį7G5moii2f{ˆ5R;DǕ<O 隑s|1>[8(w)::?=gSN2c wN;mdxo}x'YH>}#.h4yv`/x}X>֟vJ/M3 xWCԯ߭Cgi4zƷCOx^{pa?ws*oGm]'ݵ8sO]t䡧3rH"KUr>㢓3(ЩF2Ѿ{[+Tk{JuYswUa=}Y?#2$ (_^cK^xzT_ Saq ԡ;Dզط8?x@\𞽠O _|7XI=CG4mCSKl%m;Qx?_|'Z߆_Eö?3MFpTռ- [intt4u@&msL$P۾8ǟx#gp $wNo2~[ 8֪/xω"M]Vz"?2ளGs|a|L?τ~->(~_ ~rizǎҀ>6aٻմC/ >/_,"F:vsx_Tu/މsl>Πǟُ{&>07iVt}+>,G<'^xYBsp!v⯇?ax↏[j^ߍC@P@QsYsq]՚Ub}uzh׻M-皊k_yk4ne}'ͻ+?[W<[xX[Doŧk<+c~"rMVK=VͱzkKqstmkB,vwrwzދoI { 2~$'j3u_E QZ%GdQTֿh/]W uo2j>%YiXۆWVeݶCrmKx*)`*7$S›K_)U3o=_T}<6{/[?.8x'Oe(w㻿_o4=oh:^X= 5m6g>1i0tmcxY,izaOyk¥Ҳ}t䗟QxX _=?q~+KVVaշz>9wc*+qR糗oԂhNpf;58bRS({oim=y?gut8 8" 8%~QfB^ǫ[r}V8յo߳QV~ooPt. KRNl--{5Ai 1sq0Y${sL翸<9K_e~_&+]JHws}#qT^}{FU*}+_ &~\0lc< #FxGN?ЊU7~k4_U'4 iS&ִC0%ޱze&C yⷅ}F G{ߣWWvVY(F/G-[h=۵ ]m(ϡzW]cB,5#P]ew}2]Y^O-@1\5TkO^qLj[;0٦,x^tDЯC{Yjť~d?iPKڌ]F؋^8ᇝOoٹJ8zF5,;'wncـs'8'>v=roU}4wo_Wh"Qwfg .ߐV~xD?}'oVҿ5;ZUj:ߖLV3mӔKg5wcs:XXEVm;~|1K[3D b#?\^qaJǿ_<:;bx x;GqU8ߞs!hO:gڂI ( ( ( (`N3c|h5(5~m[E_3nk{bhã'R'͎Q g䊪jSajJhJyun,%8;ru5ݼY5o ThSj&'4MW74>ޭ> K7oMM44/Kl"ѷwK_N>Xio+v?}O.Saﭭ)TVWN͞v106pSOEւ (~ϿۯOpQAs?W,w$"|k.4cFu[^UĹmzY9P)|M m5||jJ\GA,OO'hI:Oş>h>q%>xFo,)32SnC̸/WUxeӯ ,}({jf|-w3*U;K4=oS;+B}ʓǷk-g777QEmli>&|97ܟ ?b;N]Z/MгhIӚݵ+mJPo .S ZЃ?'O#r*pU/i!۽Zs(y|UQ*֬-#|km#!Ǖ%ajgԴ.9_$ 2֊ta?4ְNvi93sl* ν ͷYw+7GmO_%=~cyzmn.75ogk`d;_HS;B ONP@P@Pwߕ:}CN qs&(x!A/9V/O?-~ %]*qOusz\4KAڌ [m/[{5/ǂ&cV_ xsƾ-<3}żlfK Eown{\@5+b8NuNq/}tUΞ74.cV]:տvi|7KK4 ZKn? x~G5EvZƥ 5ƭ%ͅ5@(Ƨ;iK;>NuW4\+v޶J:kz|z`#aWsP>1~׶ƀH}?/#璻7I]l~}' O=[ U^s֠e>@ ( j&|~xO &jO6ϮxWvES j:==L^nlupRtP@_<)ῈRߊ^j??fMRE, UL_tktO}Ľtjڀ?Ze x~ݝO^:?O:U</Qi0/ă<ޞv;5$f<EP kۻl$گdc07c(%LS7ԧ{{΍Z&m$g1 rAG-w I/ &i5'oqeg:ns>;EqH@P@>5߄~xgYɬ?}yyڗg,&oe9s{YkVoI8E?IŸ,Ѽg^E[@o:yo<+>7>y|U(дuo/(ю7#q\>gBkӭՇ:?f5' %y_6[)d5k[0_ncߟ x:|q|Leÿ>$k? xTqohE\;g>0^ρ[ 5ĺ>k/pSv [c=>V~KI{V$\~c8X*4po' ƄYZ9`jt5Jr]/gW3U5okw?|H=fQsjkkS>$kI񖭡_%-KDΙynqYfea4mZOT= O{r& s#`1Tp[ BFkfsރCg㵇)wwK/xg¿5Ϛע%$)_x]]k:n5 nW92<7ai*8ҥL=J8lΣyYӏƧd7\ ^ |E10|c O>5Ʌ9?-ڣGÿ_|7 ڥ{LL}:+ ?ܩ)W~D/HAOj}:t'ƾJePo?R{(sbpt59a# T;V~s(Q>a/w;Os!ԗZޥ{uA>pu;k-5K[rZ(WOи*/0Xi?a*Nz9^U< (sfmjG0:qStgFվ `ZHGSZvgl4lMqobjvxC28c8jQ(ӴNOԆ4&7=y*IRvr&d<]ѽMꚌlS{iϗޗq1LOQ A? Nܜ!t=Kp+( V!n˕-|{c?O$EdYmCPTT*eN5}GQ٭L֣#&gaζ"'+8)Ώ-jz*ggX^6+hGF(Um-*p䵓kS_ O0xK/1NV~TVs4qr|O)bӍ d*~ǓE7)No([;hncGj*C2U!\UDuU1}˜5[cl*4)-r,LP٘WP6P&>MpeK4{ү:<;J)5>KMTOU}~OrK?ceO [ J,J$$́NS>O*OC+_?N 0Z|69M_0]6hFA?V9i/ij[tua(+/K mtwZ—Ni~L5+ V<%ko "ky_YtS'٤)~G?W%}ZGTwiӇH>Xw5gGGX#ws^&M9~| cq_^̺b?1'FDdǽoN9 8œ5mO鼿8:d<]z"? s?~|2if<1Sw2?$MRF2qZ{ocr|T%׿)9|>>3]G~)xC@IJs_$w[ w\M;?$-Jʰ\I|E%WFSŸSt=Ԍ]EFNUo yՎ45 \??:0 URXAs, R{F@|ACcleRMuiMt|}Ϳ[Y;9C_60^N< mӨ'P?[^U555x+?|g⫿'6A'D}bOcXT͇>Ny{UcR^Ox,+b.:)L=C>;mK)4_xs_~ |}gF='DwAxi%oZf-I 3[+̜]Fhs{VwI'w<{ʰ8&4] 'K'ġ]# ]G+Aaχ^/iioXuji^/;mnE_a1_^#F!_jS&|6}d$PokFsWֳww~[_F{ o{Ÿ?7l|M<% DIu/E<]AC-ﯶq[ϧ\?`#)f & {>U;G iڥ}%ΤްkOx/*y`ho^Xz>k(a5ki몴?߶gπZXs3kMK?.9aO#廷ٖ.Ofl{>x':o٦N>z)^/9>BjoٔAc uV&6%N<'᷎~!i_ IYZ%&|<$ar|]TOζ25ek ;KV䛋?AeϦNў*&ŚC (x4-M?{-tҶ~N؀6z_5NI]m}fTBZ[_[ytC鎹6ZEKG}6.c~A??ʹN55+Mߤ{lW}EKӧ׏Lv?OֈJj?k'ki~MuqvLH`rǯ<N;һ7/uMlZiחh̥F箮o Î8'8sJPm?{]u7][mwY!/cwMV=[%wz*: L+7>u g'̟g߅?d3_2<%lt}g~<|=ܟKNok{ "nWU5Ozګ-ړWTZzmëz<Jd?h(Q|8f/ZKޫ,>'sF<; kNouE2}5k}rVvɮ]v8Q匢wvk(RIJW2{_+?k~ÿ\-[?_%7?NJ>4 ZN ]FOũtuu?:s uD6e:VUԾiE{6'n'u^~ xcYGE捫k;|SxMŮzFKt{[+m}4g調֣_Bo _g[_8hiwï6Co5i{iq7څ=6sMs+4o˴n{ݼoo~X{7lB1/) ,h=sL⏊<|4S Gn,5)/gGV6Il]PݹuW趓]ſ~^:um>'m|mtRe ;O^}zV*Wz;^'}t篝r~g/?=߫Ÿ8ǂWfk$aM-}m{_~ 28kաjCׯ֕?[Ri'^ng >oeOKFZqg',Z>‹+⮇ Cu 28n ڌ?]&kE{0.n-?8#,✗NUZs[\OIb?*tQޥ/C+ͥ0rGi/8NН?-_=/3| xiri#Hg;hj~?s6j -ιM>Tgxjt{nYK~:[:̧hIC|G2YF_8Y҇;|.MFI{jkiF?]\_]]_^\\^]\]_<חחלK͂&@pq +aGi;_}E(SY{wZ9EJØELUJsקh]sVгmE} Ɨ_G]KǾi{cZÚ"ΖK}qŹ6-tQMksY KXY/Nk *3VЩ&9y8 *9mX{?~sJ<Z蓕Āc1<׎GRQ_tjqmo+[4xj4ῳ)Vymg}tЭ N?iviP@P@| ()^}Og?z_5Yߪx.}t#^G۵_:57pt=Hz(?Txֿl拑Ee:t[}C>Ze{OYBk]iCh uOBo?x,[cV<3?ko|iuo\Ÿz|-qxW;i|E 4oh)ծ"~c7⟊$Ot4ˁ_O xSB=x}s>񎏣s ߲IqyOp뺶o=+z)#>%Q@!;>[Kӿn;xGo~B3Og/+"x_i_ ܗu/\tt0k{j8njnoU̿wMNz9s&~Yxw_ه⟇+k?>x> ~ YǷ~ѴkZ!Hu{{#w[_??<1ax,> a.Zќi濳UJ|dNIsN ._ Q/a$'MS_\~bg$NۚqjȇG0>(<$W>82 z_Ļ;[ĺƧYCQ]r WG.~mjZY '⌻qR>5OʎahlMQ%)3᪜_xqVY~U9|/h_Iw~}/}L5s}BT[$~axnOҮ&Q4fi>ƥiw_K&xl=:ζ3[ت:8Xz}RwK1>TEQ ΏuyNw7ˤSOcG[?;xj>2j3j?$4v1ѼU.+J|Is J5x)<YFo šСF~}՟:!NxA|??"l˪s./SZ Џ$!gVVVNp)}+^%_o?#PI_z?<7G<_'owjkjhzq[LiI^pN{ǝFʞ$nE$b33QN<_k\6'{4=sd(.S=G5.6FF9n>#i5: ߣ?'fz^7{g)UV#Sت4a=ħ/G{W~N|e~|Bš5qui2qG/GLXtnq3)|vrσNΜ}c%̞3OxF8՚bkVӅ?NECZ^i y%-iü-J@Hw׾|i.]WJ^?4oRԴ}Vp[yW6s5ohv8ֺx F<;ќyZ'K7O<| rZ|5ȸ XiɗsB*U,VV=C~'_쳠INi>_|MP*M^mVY7mio4OD$ٵOnk\sфjld=ZTI~4"4}9sS^,Ս/@GÖZ =_ڗ-1;p>S*׫:ӌ>&R*rNKx]r6.'Xjx7<饏_%t}*?F[F#L[aJ?gٰ+῟*fX]]nnQY.a:^…Ө 7[W | Sa\cbx7d==sGOutܿt捏(? 1,?\ tvzRWN~WGu?~/=I Ckpm.,Ck ^ͤkFo #ɵmt=kT~EQb LowOm Uѫ?|9 zSKsi G=;yv6S :\`N: Ӎ8^l?!DG/"x7⇇Pi6#%z>T:m :7 U1|=l=B<}.P\߿:_ϜE^33cF7Y[ ڣpWV-=-'?ρ<A| /_OQ<+z6o STdl>o럴KMΆpSe9&X2HΏ`SOg7p׿'%*_՞$,mùU<*N8{aa)/G[mO?(^ Z_vwWO[ň`b%>6pS ~m>7beON")ݩ zNN/s _qV{(edSGjׯ;v>lo~s <%xe2nc3վ|fѨi֯\O3#N]9zۢ_xχ_= N?}h^ZZALUOɰF>ojxÝ?]qՔsOTͪ:Piֽ.w~?Ύ[dxjjhTaNݮ{(ࡺm7헢E$ᗍ- 2HYǟ7w_xƛU-~k7ٲgўC2uV7"t U߿:i/ҭ\׌p?"zP\Jp\ޞ?N}%xT1d1Eڗ?dǫO-{6[ Ά t%53R+q I?w .1B>z?#p B S?}Sҿكn] sG ~Һa?z}W~֩-.m-?~!ӵ(oq}toG2<>3WNNHC>zS4Jr9˸ZvvY~/s?a%l*N N45+|7ߴ㶛|{ W_xK>K/[j;}bi#w?k\Lawo֯{zkNwtO*Ǝ;Sn˾kԲen>iCσ?~.UԴռ{$oaϝq%YS.I]G{d<zijy.xϵ?mT>M[,)GJr; 6s[>m`ۿ|!cg;{Z_w?sqpl` u0:P\|GV|i-:R4]F+GAwdq=*=HI;-ﭒݮy># `qў#R#nG vKW'w+i˧X(2mQ{Ls=Vnkkz/?\[Om?fO&GxSKAx{~5 \i:FPU<snOV2T{=nX/6k_զhzQ;urh⽟?kho?C(ُI (O mi[\VR|Kܜ$;[コ[[zB< 8~ǿW/|.3ogxᆳWCƋ V/_k¶i |c ơ-ѠԊ,KUo:Qץ{;KXUenuu}c,1esz.3{;/ZOuuklJ틋Km0%a Lܯ jݴ^{W30~ğw¯ٯ>ooŨP.">2Ljǟ.{7gV-i+Z?u[wZ)j:_[9ǿ?cm>)-5wI"oIV ӷѿӽIyFߏv%0O_[.s?y]}KM/h:[o4xq=#N [PKSԯml4i5CP%6661yMO7 0[Dq‰Lp_Y˟JSjmH Rmeng!l|o;=;]5$$uMidO_u0n1GŷnA:>CT1U(vɽ9 OsP9x{n=L˗G׸Iṟ3_7G_/ïj&ӼL/-q_4˹n忋fRYfV[͖-/U~>-R"A9bn9R-tp9̡s)Bq{rOaSV})u~%/ _^ΞO/W{|xq7Hѣ>t[O {4|p֣cb=j/+Poʜ43O<ASӭ({oW ->Dn]\O{ῇ/-K5%Dadɏ|?YGMV>Hڗ,-X8N~{cܺqjsӝ)8C.i^ޮ.YsRٳLC$EF^?[6s Hɇ~qO\gnU'S)jI{Є0VKA{{^-b*rFR&{yzsR  ( ( (av}2rJINJRJ=kmbz_|mC9|#؂8|h*Qþ Ӻo]X0񛨩)[JϛXr{WrpOxR8(>B pNmJJm]%mkm^Äh3 $~D~o~(F;/wʏu;'#YEv)7nhzyj˻i.e3mRWWI=Cnl P[Ji7h٤/wg8M(jiEs)-wv},\vh7~> / _Ql7 XIͺH]4i !+x-Y[/N~ lTT89O u/eH47fMNJ>3dž<0C:|3i{Vu{y^K&eώ2Dݯ@ 7,Լ7\={Uכ:t6C¼iRɱ+ YrA{:1sO0>W+Ηoi7^(x[M:Ÿ6VwiόUߝWLGmg^j~!Mg^A@W?~ 46Ğ2'ׅ<6'҄!{7np??oc6?}}OSҼIc#YЎKj˫`&}GI`EYYӣ5iesp!FVSMNposNpoa~>O}bqiksϽ.X{0ch߀vqGB<09~iRz(ԬmW}Ҷ\6VmYK{MB.(SPӯw+oz o>1WCσ [kR˨ǦɬKcmcYroGLsN~55!ΜZKr ˊlfO( p{F/Vk꽖7zj7 _J֬d7{˿:+s1v>!c8g,2 …(iȩK٥}݇pL XB*y֭Vu4m߄4o[߉mNNu.YN}i|~9O¿~5_ |\V%i*0 WP%Ə˦[Kj5[mOwq\y(SU^ݣrMҩZ洩 G_ aĹ0k)Ώɳl6e8O5H{ͤď |7? |#ǣ_q[lZ%doV7[]x=)b,FCBӧSj?v)/NP2p8G%\~z²f4nėQw(ݹydګ. G~>OKAA|5'ufsY5 LZ/-Ak>O.u-1w8 gNuk'xJkڴJ Μ'.K]^g^aN\I^׽Swa&Uǚͩ7c~źf[~_5ؼa+VҮu iI74MCOՆhw_}Xq`eqfW,_SxgY)s2ӧjv2o_g19a#*ӃVPş&zW+FP?헃[ZhoÔ⍧$C,:q¿eqgoEZug3L dXߍ7)jKپmٸN_̀^|xoWΗ_ȿwLO%\>Lִ[ U Cu.MZ /"-5_i rV˿ q3y>Fp9ʍ?es&7/So*rupTRܘUv]BomBK>|>_VW-9[x^4 Oegͧ[ f5.s(-uo8g!G1Ɲ>I8>欭gy~}|mm=Kx> Go|[o &mO֙|YǦzƍ ?T͔.-tls5OвOsuzF>xYFsK֥^SiwGF"'9*?fZi~dҧ鿴wa?/uÏ>fzĞO庚O_ss^.A<Oa>׷R~*Jw өeƾ̳e8ga-Ƚ:(C|NaJy~{7D?j/_AVogs}~Ho}AZյM2MUuj,_jxusF~.l<=Sn|M DҴ> | xqr[ p\$,ܴB~h<cO |IcSZ7b&GѮL&qw4څ(sC=gHJ&i{iK 9N3ZittKNk%/ 1gXG1>~c mh ]R+į gƿ)_׆u? 0h|K}'-/zfk@/txt鿱1ۛOf^0YcS΢-9'4QkEmvnYyy{`2SSS`ay֭Z6?ן+'-7uC{$i6y_vcjXP=z7|gxhbu?i^5'e,ԚǒOjlR 3~񅧈|Z> x~#\׼`t˛ o,ttJnuMfQF7nQ-w58K8SݣϤ(a޾(Ժd:x'Ѡ50 7Mԭ!8\<~ kʔ~NRv'HW9sU%4&>t(Ywז֭Arxˤ|Ajľ]_^kOĒ^Mssh'ݮmͮjVw]x,pU0_jKsVjVv=Ofi|'Ug8\ÊFMOQrn՟/y8O^ -@PQ1#>ޘ$96te-ZOG+9ӏhi{^WnwTF>&j_ëυ{-s2YW0\yW6o#@Ҭ7]m}y?똨Z49'Wjs\hrS}aپnNX6xƸY|үN:ÒZVT:oeiR|S|HDžn/,oҲ GⰻI 8`{n3\|Sa6T+RN:ԍ=ی9TO+9s=YVc >:Um9\A$~۾'7RԴWSk 7%ΝiM.{/7&AվЫ{{Lj@[?q{ɲf2Edh>߾O w8x;im߶[Fn.$|)t>Ru/{6:u}~|^^O7.*0w{Pͷ~Txso;ۗmsOg﷞jW[O[}tOؓG񯍭to4}>QahviIsi]GMͼOͿdĶ~CXx(FZ~m~)^:4߂x~ONu?yk)yyuwuw}uswyx%{Yd ۉ}5 JXz8J 8xƛ_[ۭ?1ټʸ'UmTzCw?+~ZX,,!kN~{o~[Ewy t0$}f-ӛ~|XIh:>m& _h>/M?.?WoI~f/>G8Zu)N:VT-B˦^}f?.""jV+R𸞐I宑~ . _ o/5_ksg'5ljԋοZ~ +͸o5=ར_:0ؤKy5 ru!j8QjNtdO%}f3Oӏ+ k_|?!k?=ᖫkw:Կd|ibjR\'[O~?K?# )x?þ?m<#*Z~Zfc[]X`^5]R=I5qӿf(oL|cgᾱm]mN6O~LW>wuX?M_/('{*oŵ5|>f (<#Έ>$t(DRjGmzϗkaK[ɭ-c?n.q0TSԄj¤ *PwMKv.S_8.y6SΊWpOJ3۲c;>?|G-E4 hC]a4^|Co5-WR[ះn iia)Uu"y9'.jatJ-K1qS ?|djyUO.9KOWMԌuՍ)k;.kJW_`*R9 #\)BX(FSi7*.KM%_8lzg>*x;R?KQiM.[j~g\~} ȳD]Y+8cSQ_+Nцi5 ioWƍ'ۋ)GkYTr'S.2 =գԍLVCNj-_ӜSI_:5EٻW+-3̿Ӵj3^}bc3Rzʜm(bmfNQEѼVFohx)Z4i%|Bv7zqy.!Oі)Σt,ب:VmMJM>|ĴxC'EV xT7zϚX0¹ɯeS6~\$He_) ]BA ۊwB1i[jR\d.h4+└ZJ4ۡe KiҨ%fΤwVdVz zz=k3 ( ( ( ( ( ( (T.wp{2:ߜ~+zN:MylF1}R{[^:~>:h>ǀi_x^8vZDžMaeqaZ cH4KWҵ*fEeY9.g(N/Qo՟3$j%Zn8+ҚI֝{XxR1$wÿ='ߴG_~Zχo#ޅ-_ ?[YjÏ oZП)}]yqdKO.HJQ:K=rbۍ?i_A+=~%Ȟ/f*nReXͥ(>Iufҕ*re9_=EԼih#Ӽ1sxEtM[FTQ!b]!zؚ1F0ǧ{womFpQɱ_ln*"kba"չ̾Y8>:c'ׂH iƥ>z\޷-{۳1jPUESǴTK[^Ϛ0Qp><ێ߁SeYʛn-uZ7ӒvKlKYQ#Eƛwe+Ίyҿkaҝ7융Kzzmu.$}Ok#O>`r=~S)SJQ6zۭRn'9?fݗ4]#æ%IM>ΓTn],kӭwirji*-k_抐Q(Mm9߽֗ሙf#Py&Lq|8%6M>wO{oVhRJoD8@_s<]T{lݓ7릮f̾GIߏWUux5guC_iz RmZ-QGfh-*KCmp[M"K|/p~c p4pa㉆W'cqQ:P+C({Gx>eupr̫dYK{ $̯-ײzTkAѫ8֍HC`$䬇-9?BAӜ\q7]{KF"9^h֚_wKk$qۯa98푂prYG;Y^;Z K)+oiB*2u{jPC󞁈n?1.?hvv(zJOzoTךm57?pvA=RN1:?ʇh9Fܷ'%ZӝX `ݽzJTpU'S:K^qeJ4)(ڧw}6Kj*o8mat'G\UXSI5io|ֳ^:ڟ—/9=2Fܑg8'>+){ߪ]4NNX(dTZ\owOy~&@;瑎+N@\Q)F~mݤZNE{IC⚇*mj5*QT s}hMB֜WKYi_34ҿK|-_ݧn8?\Ru%9-/_G~Hj۹[u2N{>n=ZdRםfWpn9{=kiߢ^Z4Y( (JA2Tczw;(^ʹvm_O*ҕ q k({S]~Oڟ~9W/EkR4wL.t4{p60]7r~WJXHSu9=*Q|ܚ6_3<,kTG~ESvNz;x?_g⿃ Լomw(g[_gi[% 7%o[,>e&e֧U(KR\pMSWpOɠl:.x~?wn|Lh(P_'G&usVzi Q,?371BƠfuA } wD8Ƅ O;[]~:\IWW >E,wƩB?G01Cy!=歩yΤǧYǮ!gkPOeU1 ^D=BX]-yFY,I~cMd$r>dӼu ú{Lś.Q2˨ğLwbԹO<(i\;ሏ)fdkR]hոq8C1̖/*e&J?a'ȧR^I|1[Oؗg#m& Z/tk+ˣ_|LĞ%NNaxtk D_|!Nnl*{yT1ֿ*Nn/V{ x¯+E*}fSpF<1 ѩ[i()kRY[/ǯςֺ6k+>NfP@P@Pp}9=uoP;}ñz{p0z=TC\^w'+z_KEw-Mw</YiV՜qsU>I#E Iihoo}6?{3W\>#яM{k߻xb(x[n wP۫ۇ<)qwyyyM4My.gqq6`6Ò^tnNtdh9k+*J*mS+ii0On_W'67|og&*}M~hȮ~#g)T:4n)F=ܹW (EK?ikfܾrZɿ߂ |me9ƭ08<̚sη抣%^[ɯwmVmՇ8n;N~ھi&,Ճ7~,?5 nh[7'ִ)j=gNvnFG敥C*y7zW癧d[7%>|"-ſu}3\.txKw~˸޿+O8ukԒpLhfO'8]tQҞw|zp>*U2LƢq2z+;^Ja @Hv9#qh(B {/zp!քyzY-}zrsKkͻizr_ߴ08{|!Zu/ }&d v-;SQ=B=KO[kPu޿_+>w%?;0y3;8n4mou++ߊb5 F@񖍥^A1N*U/P+~oOُ?\Y> >|LOfIS]o5/_CXtI#'leu_7' 5^\]\ŧ_`_V`jk㿎:?c?Z?tn(~J7^"Q xGt s/5}{/_K6g-xQW *?k*ݗ0lE<3lMۿ/x_^Hm/~ j^̓~^_'I?]m[V7M mTI_/S,yd\ܷW>2xo 3|6M_8ξJڶ0ZpjugQ ~I3J 0JqE_jJM$Ւ-%|^ 'O%猾j3ܬ3Y?֘ᱼW/;'[Å/aqryTW9҇JOi'$J;u}pn; q،ng*U\F3RS+{b~~Z*y>y/ՈX{ŏ>S>Ē6RnKGh~j6ݤkF٠a@P@P@ ?1@GdzP?1@ @P@P@P@r.3#z݅F{S`H(/L9c?@vWsnV+}F~@P@P@s3g>KQɧY.#ZƢiiKdfD/0ij]oemssp gear,q8{Jg6 Cc1T$a{NiNҩ:΅uUx xa,z`0*sBo Xj(Na%>xQN80tk( pώ^/Ǧ4ռ65KFZDS88ᱶDXd~W5'Nfx_ߟ 9C0IΥLUlEY^3xľ2TSp ùӫȰ5'E.U*eON:qB ?_5ZxQ? `E廏7AdokFV ,;)ߋ/R2qn26 ?QhVcǝX<ֶ8~?F\{ ^WUcे.*$HQk(`σNX)qtMJaZ}iVX][Z@"(vpĻxVeb18εZժ79R#sZi/+fAr\2 G*PSPB(Zar眥)r= cOŞwKs|_;㶷OXu6Yg1FM$I!U5Vgcgbj>GCɨ&<xt绶[_7tٗM5%_l~xR[oDb>s&}]RYP$ä3kE?Γ..Σ=;~,L}*oqXZ&c9:ЃO~01GE/󦟹ʴWTq41|+o{ JqQf%O> ֭-RSm#GgQJ~μ׌&ͳ]UNTݜxEZc6^>e3 FJip:i5uk7hhr7uݪRV4"kM>|$xqԾ;?HҩZa \J|jCQ˧^4'xY‹4]<3=N2S{IÞ\O*|X<0t Oi&%ſ|v$Fv4]MmvuĹO Uy\Rȣn^~i5?Kh/޾K+sN7~1m[O8Kpµ9BN?տ(xG>-|`}/-^Q Mio<ڦnjϣ\M 0,^ܞ'o79vh<#S>/eKL- TJէzl=nKTPQ:u*??N9NG~<ͪcIR_ OWevJi{w^X7)lr2pzQonjaڟ%-RzF^|$НwjZAQ/ 3-;zIomRKm}}ɿ_Q[1PWڎ%}:тNu&? a'c dQVWq[t\5]S=K RUbܭ gZ+5nREuB 0lÿ9?' %[knuF^;.{(V:|k%HZ=ԱyϷ8CT;8ǛVN)9gb,gmKݧ{])f6Hpq6nFG}8 5R<[WV_b7V"1߹OoWՖZnյC$6T_1>5IJO~{j79sO|GIO┪?Ë}Uﱹccm~9''=O/kz~V˯FݔbD .>z4ߵ~WHc̙ca<zu8Skr/颺ӑ=#dӜ?%ko3~Kio¾YJ.ԍq6;oRmux ˰/ԕ%S^ -096KS*Ο`X[c1t -Ue 26>٫x_Ww@H4js915|+(N-RSOvmxX_B>.˲|Oʚ= ۪pֶiӲܔ=}!?rc_i~65/ Vm?G5-w)hA$[ RW9˾)p7\Wl㼂heYGytJmY.Ӕ,[|#|@ҭ5*oW̳?Xk:esk{$3soJqd%7MjSԥQ%[}c9󧶖OQ}n`7'd9l>^7|v:zv7oA|)x|,c~NjV=,~xL s럒$)g_;l8ILtpM̯~tgd2zP@_ rMtQF//1j$?5HE݈UUk?މbIZUk~FVR TVNϡN:pNSa)Im#YO>_  9_~?:Xo6/I=^kݍWIKxK[Q6vw%14W#Cdm?9~o_ڇ_wy1i uYx_]ϥx][\$QDVVV** 6?+_._Uk]y>#i4"oWiiscum%\F?!gdIfX$RG"eX2=m;x?g+ݟ4LCg|üy ~Z|/ߊ)au/i=xyl[xG7TwvPC ?1w}Lcګߴo Vω ~?x al4? ^-zNFGp?AB~?k/oN?K9[hG-3_px[J]kƞ,|W΁tmM#߶ovWrԴ_s@᫻ZWyc%!i:6qO~ _x{'|3.i^!O wx 2|W=𗉴w_4ŮiwN֓UMl.W/>]؁yt/gb̲\@_UIo/~ϞѼ)o$ygO4xYYK&>nΑe>ɟ,Vua)IaeZׅomUb.yzU'R \?hFXFN[a-wiJr\qonWK ,;9c8nXi')6wJ2Oe}?d il~u' XFH0Lo]H[9|NՇgIѩORg*j4xSSM^1N-F5$y& 3Rt009VJTܧxn.)JKGSUxWtOxU}' dxP.LS&Ki{{JdT[9≮37WJ7Z4j8jnbU*vlܭ~-,33*y(5:(R C[h)Jv^>cP̪P]ݗl$H#Z2 '.Rl%go-#yox1f2NT[Qdڊ5O`'ʍZXTՔ$f%ͥ(W}< xRqu0ou Ok(:T,k|_C]5Zm k[[-*V!mFR%?κF#5xsV*ETQ)NMɻkͫ^j*z)[+iဩAQ}CNɩSkVn%e~#[GG tm (OݰX,To_i+ǚ)9M>tiAJI5̢&ў\.˹JymZb:^Ζ6XxUJ/]SK)+;B.n >FRO^Ǡu2.wWիR7'Qi6'ˢf@P@P@s~ߠ P(?s؜2E: ( ( ( ( ( (>&Ko _O_.6GԵJEvtWu7:Vڻkk;k~8W9, oi֯+ Uq֛NҝJ1^)C|1of28\-^!ib[o nwO#hcb}P"$sF[Y[Y9G<2̲+W5kCbaN*28j<BR&jboY{?eW[ ?F`298X~%̳҅leXӧax\ 쿫|o~WM{{]>%дIF VVE_2Τ0rCŸ YڽX>:ÞQ?kjUC~q72fϳXìɎ!*1\EMy,ݥ5pq*t3Ȕo ? R?q5]In~tmE>uE;\>d%4_ |,FBҼW2Z;Ǫj4;;rS;/ܤ @*O|=}exA~#j6SL}[G_0.jY۵goPx^uG֣kA$2N@bB$q@2|-Ӽ! k MԠƋ$o*h$&?qՀ;g[<;\jhMZ{oaal&+xLwr>lG~cgH]X_φ^ }:/xZ$V]i`_Cmf'?oh/P`wTkoyu鮋[KpX_},kyozP7D1ϡ+ihϙ]4ԚIrk}__#?dx2#֯=Oi1jo-:첋;Aqf q<gTPl6_,(, = N>?g#^PǬl/k|uW{ w(x[xSZ=_X6E뺁5!Q_jڄS_3 O}q~k2S\u}{~C pҊVӞn;t֫"|5~&iNs{ ^%w#`7$P󚜔)s+?lv}lxw1-cmOoNJ]t>7?gz|+kv^hW jZƌ|)}F jCf} S_ׅ|.ͪc!i[Npic'' x|9?{mmn~7NG/?;Wt[,կ<9vψ/¬EcVMO-Νg$1x;%Fp8l__VQYҟ.ξM{<.T8]O/Bo.\UXH22x r~QǯBF[iT ,+TafʤooKiCJb])BRGHik^^y t8/AӧBz}̠-Uk]~П"^]?x>>?ŏG×>mNj>/a_$4|]mߺGh߅<)_u|;}I4ˤk~ mIGYCx58m>S_wd^qRUӗ{rxK a-cp4+!8>W %{JiʧjZ}6^j:4_3q\^J})i3YZnJ~nݔܣ2ey'T'7Ob'Ζ}f4/wO% <(K<[IāR6,X(՟kfgKbYS\5"wʩK[jK)e\9bR2ƌK N|N_8Y(Bԧ*|QmO|y?>]i<9gʿ KM6ڴ7mq+^F3O-i.YՕޞn_a(x_)̩?i`N/jn4(тr1{஬5?cSxgYԴ]C:c/vB~㦚Ę*OB#5/tkn<3U9\g)F18xCJ +]YyxgW-K?>-ޯfizW7ާwgiPil_!9 ?.1i?zj{l-:nRpIuU }غp;4fӭ+t}}SJ(jϨ0 ($qKKxF]IVVYIhU[2*ҥ^J5µН*5)UR.)ԧ48N-pq[M4?$jO'j2x~iVgL^k\mgo\23l̯9ThcR16rVI7//OY/g{1V+q5өZrWvvj٤ѷ O|3W(b̨c,V8Z؉aMН\5j*N)Oq(m;h⹔v??~j퀁@9SϦ c?R}?@Ϲ'Ҁ k[[Y[Y M r=m2@W/V#%]zZ幂[Ki/-mEd`Ȯ7PH 4Y,⹞+Kh.U .n5TgPK*ƨG` 4PR_we?.i-ַ*i1@'/U-Qݯ/t8u{E7wp 7r^,+O#UhWTgZ^5(|iS_?'< Ǝ08nQUJQIP5&A4%Jov?f=#W/~ԭ 2IPvL4\,YF&zdȝ.,ыx|ڏTQTS.VՊ7kO?r\B~TV *J9W`/v(ETI~DU 5GI n-?Lj1i7V$od\ kKm?Gǃ2 eVuZWG K bA:ntR񓛛$Eg|Q8ÇVIXj\A(XZrS"IIOli7mw`{V Xy!HqoU!^xz*N5c(%%z2r{8O `xl|aaь\J3y8ra̒2\N+M|?myu}]Co_ǷPDj2d<';":uL]5?8^#5gƅ7pTz]{%S_n˙igM iW9q,9yS"(ƛ58让NW_&?~xRM߇V`&Xd8 ҭ1/.->YnmK"~GY}l7˰ZsסNjTw98 Zm_JxxnֽJYf+Q 0֛NRr+[']sY;`xıeB=MyO ֳZEniF?v}^\=:hdXס DjҎ"1xgQ҅XTIʍ9›QZO&G_2q^7 e<>+Brj(QMB\;s[LD:GX]S y#HqiEQvW]9++s;&c(ԪJ1ZVInA@P@xƞw]oƾ0,?oiֻX[_a{dTi{{-SmiKTUŷ]{iwjq&曫jZu//Y\pkZ/ËN( m_zFh?4[6/\#q^/O^_ΪUrJ3b<_kS"yrom_ݥJ5"{r+ux4j,rbgD?)&ӺmVMiMߛWw,tJtVoמ]Zի˕ XdO(/ |,|okC8Ɓɡ4НVZj=0>p ՚aVKG} txs0CRp7Z[RV! M?Ss\P@P@P@P@P@P@~?'yt>>3&'e'UY/R!RiIU gU q=LS,U:i( Taṧh9kImx֭M8W_GiiG=ibrrO&?,>+8YZy&K=dkf968*s}F~|)?ct[KG+e-v[,ku»RdG{No9/ ,\U~/|F>966jќN9}|ؚuN^F'SsO"C/gF$\Ka:lr>ϓS FJGHa=%9<'~Nj~!eM+oyQ ˶E;hO~x sv^pkJ}E!#F-+&4aύ?׀{/>}Ke{~kEPIce]jv? φ|;[6/ i^J&7u}u/Fnfd8TDG ?2?4kmšφ~Z)+fn-!BKy{{f75n^.O>%b?].itkSMoEQ[ux tH浒;70\z?ş\|M,V\%Ϡ ? U/?`ړ/C Uk^>W4b9tحotS-PNV߀k[sI?߶y[~Zn=OOx4z7gu}:4-/N9>7?> HxxNx>?`?ᦗ?~ - /U~ ţ?GxD:Lg{[}Ϻ'R?5aL߀~.9|_ /#f??ਟSh tYƱggʍt\[iBOz+uWjﯻ{;^uWY0uo% ?=[Pivo<&'8}8Ϻw1bߓ};<}wQISs~O;'<-{& Ys0ލ] |)}|R+ pUEy?Cy*$ysۍ\/a`z;yϥ ڧ??%e+ѓXY?~Odoc~Bt_ gIscDL8M}ϴv<"2Zţk]P)56_ ²E *"c} _:+I1<nHjW;}T(Ek{_]y7{wP|b(´[k5ȪK{^6_^loOh~O:~-wyXB#/Od֙;u<'/Q)1 9){>3FCSԪ/-[?{M{v3QֵKCks[4/2Te]17 ΅ 6K=/>Ovۇ}J`ujx^'7nim.n>~_ggJM> =8~t]vs{ $`IfXGo&eqO؜<(\i׆>BUIgUq'5NiiyFT'hRRRl襐x ٿ *Bx*MY6ZcQ-fgi/ &;U)r?6J>"d\I_Gn#*kN|Աk K8*hEeJ7 TWST[dD8!oeձr85,e(UE:֢Sҧ(N҄kҍ s(C>c |1Yc챞Ulp]\7l"E7w34JcYՖ"%%8҂9jMA/jݔ[ri~ Wap*1^J:s]BugɆ*RqRm;#;v$ 2y޼XMϞ&6^o=qfy'7]5z]-UP@P@lO=21՟׀p|&|qR~_~|6|ka~gq~4vyC NOdERoߎ͵mkl5Ixt)+j-ZTԩ_6M_tmJEevmԖw6F|#O7KLw/.b(J?N%?jw UjKN UF[ڗ%?aAվ<^#?FgW.<)]ooVTm+0bǏ+O򶏮Wnq,%kk}ݻ[_Rğvo+KkY trN;JKӶ{o~&|5Wn_ ]X$ʏ?~>!w$`Fo[:>oy<;t i]$j kr4tgmus$Vi,9x "`'=ڧVvZ֔嶝PY*jV7K6kycm(@~?E-R浨\̗6?٭|vDd,ծau=quSឃ4m0jQ˪[\^K-K-T,0|>//ƯZx|Wim懬Jo`ƣo*mfF-j^hnR/=oeU|.N"l<-Z 5VŤ}B,1 wWog8n;|HoVV>eƆ|;{=ݎ-Ɵm{-fJdܶ~:^vP@=ρ?ho>9)GL>|H.7*UѮ*Xd+a-G~S>> |R+@"Q9U^6_; >K4 ;Yj7@- k'J^W_|;MV^xK<-{Rӭþ-|]/KR[OT#|׼_n~$Zƿ$"'ǽ* fF5 NJub>'Ǜ'M.mt,~˾<_= \kZHݜ6~k:=xS> cGҴh:M6:^h0^D=;Mӭ{{uߝՠ"z8.ӧ~|Mfo4Oim>P2w1.xK:qsg\Emp1}rh7IMukGQ{tdR{N3_-+Ŀ@U;;/jjz]4Rè0i slqr{XsRN_93RNS,~pf&G87~?R/=?ֻgN<.o xFhח"t:B xiza@|b3i\l9_[KCMtxMxS~}T 8j\epS+\RP? |6 a~R#|;֬[>'vp!/w?CGK.}Ҍ^T?Ҍ? ¢˧S.PPANO˥]. c;r]@#P+8ɷ/E&2>1ut_WI_׻hP@dQ!\u$:>h:sv斗kodK[2驵%'eJݽ9{ú/#]Ҭ5}3QRd\s$O`:L0W.blM,f_ЩB:ԧ*u ܹJ>2J׍pSX*<,ʭRSp؟rN/ӯ7v$Ԭ~?|cA|:u<[+Z]igt|i}x~;aK4L1U[6֨ Kx_8sƬ]<"gFFJӊPI*n1<]a)^[Iѿk6Jڇ\b>]$@68>"xY*NV~QȲK(rVvJ]~g|w_zEU.}]J57JIc;mwZNjyw#iOxmFKI a?i~fae,%pj7uEnos(QeMOӃMy'ft;̫2VͫOƔ^oÕ$:?iTȹRQ s6_d'Z(5/Եc~8-^]*Q?^vi,n>32S0H6^x ^90r)J^e9. KJrNIO:hZuxwWwqk{.}[9eJy $wq1DҲ/啰l-jjj|ӍKEIrvZ/u5{_̮:,‹Қ:5eR皓m)ꜣ}y?W38tc~=ӢJvoDz=}zݻ-ow.G-&GPdzP@==푃Е%t[-\a -OQq}9~#ֿ_+ L2q3lUh۲޻ko弲R/%󵿑]4lE~9~yqP!~HMUP,ox43U_kFJ9<29ң¯"<]'UGUx]OךdjKi-Ƨ|[6Eo-f${xb-7x0s/(чHCZ kܼ0X_1S1|#iխW?v-s{2x^7<- ρAx-Ѭ5 x&oޝiz^Y^[Ȓ4oA*ϼn b1zgm>7{ψRh6-69on'۴]iI o5$Nлl?goe%m2TvյXnaծ%I[y4$M<# x Fþthqs[k82yV%$ &qF&8?K}Wյ[h#MNCK%F;;*khZI T[VKe{%qe2[Y7 ~Ū:H3xOþ7|3"]57]o1wo Cq$jsacii|Xi֖6+m-"Kkkxq9ؽ?1@ @P@P@Fq@6w.p{ۀ VM6+~tkZJNprmRπqFciIV4Tiᯈ>0|Dï E&ԣAz}e/2?JӡSnn-ԩ\Zu%}Wnoww+Bgg {'<9c|5E36Pe棩Mq}}ֺcJW-5;kAKp1ߒw/Vw=4#o^g;zjguZ_W}6NH~ZSux ^/w÷˦ &]}d ON[.o&$o 2hfULe(~_OWax; *o <4*}Zq?rERlUOs/HI\`u_'᧍?fKᎃ=/7^#]G;隦u bu?x^DGKtG]6[-F+p{ҟi=>۫qoxyWlIҎhQr”9%yBsХ+CKqB# \~X˟uJtNG{~nUZz[~F{5zt?iЍ8*r VY{%'W6>͟7h__ |cW=WFԭ/ti!Jѵ; 6]:Ym 38\(o2Lm\)N?ݔ z=Y9 Rɳ,CNR^ lBt% M;M{iN\s?fk ۿxSv=#Uռ{x]O캖ocj;\J^P >[38*|HScm}%>)387qT7(~ZN59r4NP淿hdJJmW8z2ۆ1dcJot{hdĴV/)'Zu!73_cGvX8,z2\ M ( ( (?g)5}(_ 7}8-h"2zg~ؠTzs_P1k8ǯ}viM+L@u9䂭tIv쟟COSNUEi>W˧>䵿D%iv?/yOMַ]+_4zFߏ.dg߃gӦs ]{>g>;r~׻zYk@f7@|~:{ʜmw+߶&]m{([Y d$@=]d_=9[[Y{ɯ+Eپvma!*20Fcy=`cW+)ImiOZmh[V%{o#[p8@;3s1Fp0Kd wwMin.K[];5k/^avnz}[$ٶZEWիٽ#ИAC{ͷ~jNM]. +A^H8c@joW{m?%Ҥ7u? a`v$qy{rZ->E+Aۼ4˱iZI앹>?/پXO##lFy$cKy%杝{mk]'*v .is^Q_,woky$9"Ppzmjnֻ5[c{}x=>3;`@ qq?e'ӧO_'U\O`@xQ<]yuq^ui_o[W̮ջ=־M]mE?mO)y7O5=#E*ŦxsJ[59>vf[+k8߫O[F'Q>Y'7o7.jd{Z6G~z dO8HkC d9'J<Y8wsWo޾z'撜ۥ}m1-iaZ5VYɻVV*W!L~?o[ͬmɡMZPbѴuӌ4?<%x]ʌgֽ:_?<}<:UFZkJuqiY/J>Q}}v-e8-S%ۯ٦=ߓ~?C\8O~*5!sOV{.'({ <3L9Nx+HR폛 F:lZo?@ɼGf5kr?7wIZU}kK um?Z{MSNͳx̊hE(O:6']~;v8|M \#Q[Jv婶'kk]۽ԹzYrz(Iʍ?.bi.oV־W~y'~CZ׎uxOöjƳH`yQ1GK;ɥlMxsO,+GNۻ==|ct;k|~h6m[Km(Wc9{_zzvO ^>]*ԯ\}eM]T{+?t?O-NVе;mWIԬ.<{;lnf C qr[< jAsV{ndvZ/̫*8=OO8Sg(k)G_Fnz`#x?to?nsq2[ ,N(`Gl;ax;r_$QNy;/1Dsy_vށԎԓYROBJ{G|QczPw|>pqӜ5P@|S~lS|'ؼ[ᡨzMݵĺ_381j Poe˧޽uuIN Xg;x|C 8þ#?Ed_OO-OMW3|?\ g|ED)t|oX|I'|8>u5Fyo/s'm~~<*ϊT:>'$*'9ckQߝigH O,RZ5[OM?RUik'zYw`h@zcqWvOGmRVFueJ6Rn-}}<+1SN98sr>j~}vUo}M{%jwmO׻ս6OCc?~/ ,o"y0jvWo|ҁr4=`RW~d%ڻ{fygKeӝ:ʬaFvPnPrj5):{di և m/McUk^0]m6I"Lԭ}jCkW(XPgt'Fmԝ +JJE+˵uN(p\?kc#J(cTp QPPgr<}άսw@c$$aWcfX=.5cVφ?PӲҦ`mtNeXfeW~PQ\, ,fKJԪgs.s'O?i$v~KK +x/ iePCt2)h< ˬP_iMԽPUWA@b:4{[|;P5֧뚍iˍ^jkm$ JX$Wn]97X fgb*X\ [TaZݯ7k8.X6̻ Mc M IhW'N(]9v~x #QKKW1/':~y>.p+)R2玹.`2UW58qsZi5σ.iTqRK>dxgĘ NN'ù.;W ]'AfRbZM|ܲ|@е/ س3*b]xy<3&X^F"(%j3-՟ 8L޼bk/RiV;*8Gǻ>q>&Iq_GĿT(A*_2]  ZgUv_+xF\\gye9߷ oX\?xDluPx?' {Ig wyngR9'9GG[Txx= 9/ԥ{*'eJ\@[N/~_f۟v5K)>74&]{PKGx.,wZ%0[,Q܁[u~)w^%I\_`bپ[`:RZnXԆ6I֩or~ᇏxe!ga0r1YFg0X(UBxySNiKcjJq\_1ŽwSkkk77!iB1I,2h܅RZ:4iέZ*TBU*TRJ0NNSa)Im#j)ѧRjJ%RZ)ӧNIɨrcܚIOPb_k{Qm_H^M ZT `ޏ\~m2N`?/cCj`(VЧfNO FCڵF^MZO=X ceaRTO#|Jq**45zuc_o/JEx+|c|g|>#zFlw ec EN X%B61oӊ3̧2Zf? eyUB5񘺱BשJ%:IԫR8RlN!ϲn#Xѭ b*ƆZ)RTSIыm#o{o%EkUoz>/$1c'E#(8a/+Z}_Ic~'^FbxvE)e6`G犻c?L>C ~kmKx'úeji}L~msN-p[I",[o5yq6_984ఓЫ 'Mq5ia4j>zcnk~Yp f<_21d0؜LaN8TXl-*تε5NJN? a/+Z'?ě?~ ~O{o'EkVo˚?O~; ? /'b}?__OGO#j g5}O-:;i/ e^[)qmׇW}]80xZx>?Uź§08UM8{Oi >hǓ|KWnc<&3X౸X710؋Aԍ(Jf{|dk*>~߳׏>>|Eԭ-4 WEӦ.xO_>*N_^i73>>o[6hzlZ^m[[E} <эVʤKmm6 ʑuɯJ ~[yi<$A?ӿAgj#kMVzW5}'lފVwѿp w?-i!t=>R_3MEXMo-֚!Ѧ~91kT%~F;ͤ[ 0EJU/ԩ~}^&O|c'x3AůptΒTϧr!9as9ZWws/ x/;? jzmt/^%txFfsqݽ ޷v׍6m{]\ 8ʥ79{gO# gOÏ6%$Z( 1=y{ q{ um.5mR?XJnRʵ]<t|\ruQՃq*oQr|_uu\'bRMǑeh6:\rEwxŞ GxGxkll>þ 4[Do§W$孕VvjּpD狩#B? ~1҄u\??'.|Re34WZoy kk)uRϛ?(0vqחke?Z6W90x'sݔ[㴴[rڗa?oOz?8|z54W rWt螮_WKR\L2'~L5I]; V,/۸Y1!}99:!I* rKէ/>W5kIT;{o"m^K_H_OsJ-~š[k? xsB0Oh:n,.ɜܕg$\ Pӯ5}ouY_}N,]v(E~NJr@G}'{qy8/iko?zvkk]J$ڴ_VfOx3ZݶYI-VnfIdxH\O0Ϯ{oJ3=Ju}#wVWJp:QJr߹UIm%<> ~~˖L2Zjo#PkȱzE)_}W`HqpmsF>ݛ攝։XER ݺ\2߲˷0WN}Ӝ|W3޻=ZMGd.=VLH_nQߋ2eU9z?Ziml1TyG1AO'oӦz[w&ьS\YM5t/3db7~X pxן~հxb@$jw]>Lwq?%^O^ޗ%>V볻Oj[!Um續E8\>PCA-SgQ z(^jy#4~W~trGA?1T?1@ h?s2JԁOBV"7d'(A~6TziYkEnfnj\.U)Ké/wi摒{Ri+sG/>M&> WE^K=C>iq׾TVWӒS>{_wdGwH$3΅{\Mj[6[/{"nkˢvWqo'Y0]#7ĿV6^^55_us5->l3 9$ki]^,dTM.ΎM)$۾IYSwsJ{3:y?LYTrW=i<*U!* w WmyRlP@P@Pq?|@>t Þ5|Cx0Qi7j:iw޶{ka$Sݥ;ueYTkO.# vtK>-,mb/&+x-G ^OL yiZX. 4VKMSkCG/R7_@P{G͍_#Xߏ,O?2${~/v1B?c?xc䓓m+lM[϶{o_VA:19$A㜃~8Hps+[[e5e~'d_4>m3U;PGrOZ+KZZ]g˓U}碊Z;ɭmf۽RqzMc̈Yw, Y`;+a*4UE 軫[U{߭ aSE=OGee7qGrXY]vnR$B9Y'wۧ4Qܔ꽓ӧUed*z3j0= %m5OI^?gx؍@8^$1Ƕl>tqj-%>_}:KYߙ'{m_TO[ԕz㌩UO纬Z( (?qSO2 dnY*OXOڿT "x ⯈6H𧃴[w[uYF_ʷ2ܞ]g3^\[@4ѩ8ks~.ϲp:_ENyTB9b+ܡBJ$x|KyGgب|s L䡇8RYrэ^Q/Kߴ)g5;^~,L^[=.[̗7^-o,GQgxf+F>1<, 8sxߓMx x f>2 8Uqsj^\%9G <>[q4q:0O1eNp>/3L~C<Waxw5YU_K|,_Xӯr=\:Tjך?F~ ~g/~G0ŐiW|IѼ%մ-&L𽦍-gW>%Yݼƞ9/ pspyK S#ɪc(e'n"c3aC1cq8ڮ7-0UrILp/ <> !\Xg<|Nj83uX,Xiq8.'\):*΢Ww[~<ɡ]HZCMf_ u? +K=AV5Cw-.P]7ep>7pqeY12t0'ʰLl,c̰ʆ6kNaή?>;傧Ͳ2p+ɡⲨf(ܱf%b1z n_4U |+Tu3Mִ{mOH4=SKlK=CM-㻱25ݬOJI*A?/ b8m \f [ Wp%F B:Zzgb&KU(0ؚqBgJ)¥9PZgS?gLR}?ώk$u7Yڍ-&" :.k- D\v+x<c.8|:b*nU2J3Z 8U?~_H,ìx/c/2h>lOdg:~kykRhajWMG[R>;"/xsJ\k>/J'afڮY,}N{}wR%ט.o}BNYm56+_铛as,_7&%,|Wl\߹>֧<QptةakVAF8J><X 2vkfexV8Ƨc(Նck,q4h''GuLob4> @< ^Ԯf^`2$=lK6UܹwTyԫSèTRVQmKOpGQ/UգWԜ-5_ScqS9Ra_Cο/>΃y.zCm>ڝ-{ q(X-M1^,?~xU`2^1+s\ƌ1q`2Vg[ RTǬ4$*N=U'G8F=?&UG pqxmZ4TUl9n/G\%RKx<$zYW,^E\/WcUԩt5ç%g<6&ܠ*V??O|5gH:6|6oum[gD <|wMwXqi=4N(a3 CapXϪqF&051.>paӭFq¼)ץ88)A_-d+wcpZ<|-|f_:93:P 5J)J.T:տm~_T~S}KOϣq &xOZίx<Ҙa M֥]oivH|F!J+L-i[gxX p=Gy֭5?gҌ\0՗⿣ѓs8!,#Ukܹ)F?q5eO _V')?aCBi.mJis+xW:αw}j7ڴv { -kΛsw۟\x!^]Vϟxe+fha088ఴa|:y]AE⧄eL>*fY,p9h\)_O' n.|N+%W5:,1s~(q~ċ1x28E ƞ$pU@ `)Oǿ 99J|ARRܥ,mmޭ?IEF0qb8$[# A?)ב[݌nX>@"؟_ۓ-] 톣5Se4?PZG0s[ӫ=iY];7x~ *s.G !;-UK{˝j헭hah(9k=R2%״ :xvv$ť+4}D5IU)oj;mnW(~(j-/ xwG$CQ]nj'Y:z}Fqs(wk8&ProM-ǚb{cTFӃl)Q%ߕ;ۿ̒z/i5zKQV;)+at(N>)Z+rW=˰{< {ӜoY~f8R;?yʼ '<3nӒ /_~ﶞuoS*2Oe5ӓ޴wQVMG~{? _?7tψ]d%i_qh^(Ωi&r3or96ߍK&i=SU[ks!p&ф.5'=!O )M=nJ5?kx37,f?Z5; 6e+&3"$yr/7gY~&֣8_|O!k6~̟|Ux'Кu既x_H8 YsǐVNow}VqQS*§'hbSߜcwI{8`XaPB?z^dvߖi[Ջd֤*+pwE یz&6vD9Uֶ[EIo{>U[>_?loO Ko/%~_Z&Hx_h#K85/M}&dž}$ܥ R~;{4ϥXie|et\ WCѴ'i;VNЁyI鹿b=tN/5ӺKk95MR[߽::Bӑ]/Hm}Y#>.~~%xźw~#o ̶j8ΙtT4;=xcASG=4ƢyT>NhE %koK`UjgRjo݆8d]zk*B^ϊoWN?G/8ƙA^LH͖tqL + œԌdsζZihr[qqX׆8}V?bwYJO/N5 *uו,RXeżck~עN~mJ8v3 RUnf;YJ[Zmw_DS/nyyqO>JkeJ%baXФ g_<m8/SEBr~˚oޭU߻Vg_ļn6W\{!OݣNV?WsEUԎHCwݳ1ݯ[n^sAT(ǓO%?Gp?sءJmmw?Muc ݵwN%Ĝqg8i2:Z^qw^cji/fFT>vYYDp{۸b?|YtQrWOMw櫏MoK~Zwmz^ &M6GH\ BA?_a>m)/Ϳ۵ZNzY~kKI7*!n~AH='9:d.nWySk{?= d|z|/].H{Lzd瞟řm5o YSC|w8$gΓk~r'ge\ێ|ؾa؟dT9oջk/!tOe=tݮiVh?,$_\g2> VbQ߭u´$߮ߝMoRDn6ONڵwZiuܨ!E2&g̐w2_2j{V Myӝq]Ln3Gc:5aߴq_u[ߧ{OgK UQkFzv{ukPm~6Tgݝܕ؎Fy~ttg}eoGO -hbV_IYn4~ߗ$.]4;;:錐Ǩ —xNYmVߧ:={/ōEhbDmv3 `G=r}OĪ/m~lѻheVK J2 5s]~+^ھ[bʶ{qNP@P@P>pl\g[!xb5>Vmiwo+_[Mfr){?-ַ㦊j\s<9'on )-E9'EM[|;@q??M"0Nx[˕Gb??wz_+h?b":h~~7s \Z?7yWiikgw#3D,[= ByOԯR5N2%Ze%x=kz>xэHӕG(FR,Mnշ*:fKQV,T JB1 1K ^cNwRmN>ҺwOe*.+տw:񌹚n0^OMۏ_j=DA4'PA)WT" Mn%W%679gJ\UIiJn*9x8UoNZ~A^/`2hU,Vjpjr1j3WsKGf e_ڞs;xR{E,A<]h\9-K,iTk,^>rӭFT77(Jr~ӷ75O5U:X$0TV*/v2XzqkKYGvq5~}'$~[^L>mM"cPVXg=e,] ^aAK V*",5iUtZ;ic+/(rmzJNf,$v̟瀾.xK֌>WMC3"AX!$@Vo3̲ ⧉OZ},P._x__W|W3NVPV'E-sĞ--nM_0(L=ݞkRfѭ#YWпe\K^$qCyNQuc aY<3ZSt)0*˺ʳ GGSf5p:kf# JMTejcw5VteSn|>y /|:Zϋeόo۽7zFacquluOndkA>{gi/?^1y1q6Y <4Y;O KUVNmj Fh ~"c>CLȪ vLNaKՌpఴ+Nt'NٛKK*xnm᭍^6V6G]kİw&E뚬vT7i^ccc ◌\ci Ê1 5|E|*FeSQPC/xf&-JHbs…:ΧI_W<_C̳\[~m%l]|,bqicPW5JF:_X$+_ h)mtQCꚏ,/>kZKq=sh-*+3jzdmQ,~?<+X ' qp YK,qw(ў"Y ,Gʫ䤧3'y 6jq$0FU㼷#xjs<ǃ/ C^pʱ]X eS{.|3<kj3fj#N? xZqs(iz.!цka:?\.8"\sJ]HeyAft!УaxL*fc.K2ʡqq SQc8[a18쪖 JgKVb+byVoRYf8%f,M6?$ "Vsyw| e_W:ɠY/%ң`;a?1QZxR~htnHe4FW|A{ N⿳n.Idxhզ$Z|Pih_|QX}ЄZ+!2i:,Hgsr˸+W~Q<;Nr1j^ GqmGciWisRNP?紐 bro&IQ˽3,_R'<eUd9਷__m_7>i0k|#}<;wcw4SuH/--{^;Țm>ǏwG12gP9 <^t1PUQʅogJgF^ןWWo1pLs fib0<9FX&;Q" *Kե(US:|Zmfj:nzA'+a,VvFT ,I3\9p' d\/W'2|6_O=qFb*Ӈ3'g|[qN6?:f50(OGnMJJ1NiG:|2 8Kq6qaRV,2IU.o_͟O|3S<<xg&qn_\hf~m-d{E|9G%[]|{W]4oäkoܷ]6 ߵ1Ꮗ|.DwUY2?_7~9x_d1ix^j)NyTt#<5Lbi҃ļo2<:o0`3x,sTWθpօ? Xb+?O0XY/wυQ#}2^W>)upo^,QxixMGd5e1pQXYc[y/kR*o*Xl2r.ɒП'M}xic|L p'fo'W^׵rL¾+זHo {M[.mKF$ٱяQ^' e C-֞me|*Y7 Vkb(B2rsBH/$ᗅ|?r1fxJs|T<,ª]Rzu%7/,#gH##IĞO lkG%"^Rpv__#}0_Z>'{n/࿌ĿZ~ L:&&r]g^iW,.-g'\W¹g¼K_eiQ0qajJj8Q# W6V\ܮҌ{*ȸ)c2,Z~2X|NUѯ[ ROCNU҃|IŦz%|#0w}9*?Q@~eqצޟ/in|Mlѿg<>z Z6q+-e=<#c 1ttQ=f=6~mQ^1*p_4XlMU]yc~!xŞ%}W~(_kI __5;9? _`ʎv,6צWӫ2 80YkbMR/{Ji_f~`Yzg w$9=88QwՈ~O;m7\S$x ŞOZH%(4sW,1*ՋON!Z٦VL BF\VOZI.^NkB?F8km?VF'xOռ )57`. p/C~?uMΔߚQRw_(Q FOCN\"7 #g[RpFi3GDNN#EYYp~81srFOIo#}ei|:_om3TP( \8==L`1lE^_ݮ.iFn{_.n_/74Q?6?mkNW7Ӷ~yNCaQrCV^u[j{o}m/K 'oxKxĚ犵˛iuxT5#wO9hmF1_Ÿ:Q}5M+%WZ3erb/% .JjIw=*F172#DJo/G~Ӏ>b'[g`7yauߛUݿ.0oOu;{:?WO k N>x}n-w~~*>׉knTp%ik yKyWг4xo.]E!l|xGl}O?.0(z5ˮ]8J1e{k-]|ծԣ]ƕò͟)x>,Y1%M Ox+޽ޚ}muw\+8KQP5Н?I7etVwj_UA={W*MzrVQ<:\7)uzXyoKr]ҩ/gZN*P|n_wYSpnOGY*ta5ɉ<9BΞ~p=:k8$gid{pWW U+bSj\w陸Nk_gY cj|hs&Q^^_EQ~?<] ׾+Pn,~k 2ŪE,9éMwdgnNO Nc_{%?Ŝ ~iS/rxϝsմygC:nibm|[,K,*MA& 3jZ6h9c'wՠQOwjZs?}]~>0(ʌQN U?곞vIW,XMI9<=1:#/ m9[$f了h*v%J.*pOތ_w,5]_<5t?gx?_ zq q_{<~]Y-5cGRu1ΚV[jWG֚ݣW"|gW~y:OxsƟuƹsĚW.]~=F7j&V6ڙ8V9Fy-m.<~kIKS4Jg+ee? /ڥIھE|`?|Q]?njAWJ.y}ז\5qԫb12Jhde?w~?sO,?a[NuN7ujxęYhVnKKKu{5 _i|se2Og^ ]$Hx}q 'Lrq׮*/v׫州z\Sю% M뽹e)G}&=|7 "1/#N~xYuߖ%MtM5~'J|0|skN>G{>oxĞl>SYnsqs:* |\=>/v?Qb/0m>IJ˦w zx;nc)4-EH")Ml5Y8SwMŹıXIjO쮧Ӫ~WKMM36q 5^*3U)ӛa TyS7 3uk @ B.1M>au^4g5k[Co<O9֮/᜚P|_M|x<,,l>#R%Ɉ0ʼ,T3O uzTx:PTnUK4:\&7dz4kq6 ^v/4C+$ f~ҳmͼiSx1T*Su(ϖ5(5e7NWJ>W 3I2ƲO#Ƌg;|3OBHa!1_o_RF.ʕ9&ҌaJ1m9vڗ%=?ũM:^¯Rd.T=/w韅>Y M4 :͞wu{y,@nd)g@cPK8t_ŸcJ8`JpQRTڊ⢥R1S%KB'|%`sJ,"q6(]5'+B̜Kk1w,twbMqom(?$3BRX+x-Iүtg*vp抏qm'$NJ:jY9J^~ʅZwzwdk]sZmuk}^]6ՌȒ*( qVb*COoeWsQW Ѻ˙k}^V:rE*<N歅^TiϙJ){&+|)-Uϰ~ԗvFH屛5mSXP2F-}B~'T'R[+9I8B:>MjT+ x*t:b^,ɧdZ}xF%:{mZ˱]ry1>3z;µ CY$9)E5֎^_4NxI{H+:IU!-w̹gRI珩p%P@h7UzY]#2lm-eg$k?@̿ig5éú|7o⷇tE\m0,IB#g$b?| ~\?^'P8G4!Jԗ%l/ g> mU\x?>G=3UVck5߂|]oHD2u捨7vMQޟg/q6Kof._˱$Ylr*lF?dن_O"(p*u7/xOգ~2g:O2C0X: *8g,6b>gY~cC>*X^ 1XUW?~o^敧xJ->Xߏ/rYwkt-tgX_B}k-^<}3 0U8,5 V+;* [5 V*JX=OPI³]d~&ci0%ت\.I -|n'+J^jG[ )R.;Yb:TUo(_O |J<3^h>4?Z;{ucZt˝/N hϟ*ѯ3 psEپeG28\~M<=/`UD53*˽WfUw.U3\goQ8lU:5O)ROHS5>#t,9># ʜVs kzubSvNXC^߱+9#>$|O3=F,[W.SPeKCxl7!x_Uխ+7G c1x4s~#éQ.<FL5(S0x(a&#ks "w`xidxlTp#ITϚ*)R|+!/J?O_d'_h5їOdž>I0~&؂?Ir~ |DO_0]'IiwxŚ9WlI9vy5D_^&xg5GT2 1[ :VaCrͷoBW/x'n7ya\&"yotpk'J]S9 TyTcZ~X\$N>%@<{OcX ,`W̋k~{|֫ ~x/??4U|5 &ޣ~Q^z No6ps2v#_834>'\|<6Fa6Xp(УNԨOIɟ \18ySN Dp׫Ul]jWV֛\ME$wP@6gNsZ-/=.P'|3-G><݂H#6V~Sq5@q=SN˵uZ*wߴWYM&p1UE9ޤZ7g,+,Ǜܲq?gا"x"Rt9O:vf61_Ꚕy@a&K' 8k[iMzj?8n" L~p킍Fno1OIm.xſ~|)xG6-خ}휒CE,J,&f S ߻_O;H!φ5ft0_ē5z[+s[=j_A״OռkxÖu[*YMl>+K[o<,e|2V6WꔯOowE/9]昜#aNӝ>Ih=iෂ~._ti6gZ 1q7zޕ4ͥƓy[gW611+M7(wכ?]>x3C/-x5k?4wt}cT"giA&ӗ|zM;ⵛ[?~xq/ stܹRSypOE]OV Adi?1m]=9uI{WTNR뺲ѴlԓL (ygn(+]uݮߝۭi;FzyE>Ovw=p;zP޼kI_~G 7 `na a|fǷ_[Ҝ>n$iԯ?Ɍ KC.e w}ZכiZ?7F+8 3x\q_qSpj4^-6j>i,tJ_}v[wueuݏ8|1l͞Pɾao0j5݂"_T n)5@x3??>f ?C~YDcOz&?\W񼹩Sr?} 9˯ki 6өHe?/F9+J[;kSUy){M%%wu_ :xWk:oBu˨l4 `MuM"]7[dXѯiJzkעw?r(<ʦ*ՔyeZ+ܣQRT:6{wjΜ}wK:FjzV4STғX/>ӣOboDڎ0i3\[FF-;^Mo]k&ۏqVzu5߇˪Vyo_k9XW2yu5O;Mp>kF+#FK\>i&Q% 1)|6kekI_K&_.DWP+D14}vKr֚!Re1^TJitKieE~ - m[N^ֶp'o^Tnu(~3 7 ;H=ymR]G$|N+MڍH#.5ut*g3^c#=3S^*k=^ܳ~?ۧK1y(kR5$ը :8뿂x#?ӨyE[;5,ΥJIS*IYNvDKI6 k __7Ei-=}ZaoѢkyKiWGz\_X'_N:I~oyίg>|@~5,,#`7j>?~\ _E6tڕʿvno8iqnjsе9PvgeG?|x*|i֮٦bȯ%ڶ̺6O$̃͞\RXͦvqq0۾vW.4 u+;43__,$9&Sczu4)f?o-GkTy>%MA }oAZ &̥S{Rwۤi^'xgҾsgȝjq3 eKZ֟ߑ?gߌ&2x߆5In|-Y˪B<9{J ml渷?3` 2/ޤ715XngŮ[/*Y=CP_$m{“:ޏn|4qΧO>)?=!K0NR_)>nY4n{'+Mž+y&ͫ%{%D%BI&^$/Frz}[58eL;/$OJUS#wx@4:@uoPgɧmN)4SPK][Ͳ?ټ4J;}LF"_ W<U6r'hst>IӬ!aʬLQDd|iԯRUJqe9n[L.Œ}QVJ_[|C߳7k|_ G4}<=M>FWh"[(n*噝lXro \6?3엌g*يNhNoW.m >} k?_ " _o iԵ ReSa+W6{K "vW֕U.Jp~|kʱS?sѯK^oy&Oվf7S>#89PI~TRe}mcFګimJ_/[ S)?NK_ߺ ?>2oxs῀t<%M.Eд.Xoo'$9\{x8WbwזZxrl>Ca}ts)GJȺM饽҆ #9`H4Vk/]OftjQ{Ei5nP@P@Q,-FO-+[;+;xr[4Q;Ra)1MR|RmI7Wok'RpNR t)s!ڌcy6v?l?-/o?f+}?⟏ojc᷇J4qG6PDjW:uqbGşo p,FQSg§6JN9꺘31 Z.n\UOW.7~.>ceԦrx<=.=ϡ8ڂRJ,pxlpNjm&O>(x8`YMJBB.[Ggi֪-4L巷ks8?!q٪Xl=:r(K8|[6pxj)sNUW/WyW wEqiɥs2O䒃fxN&p*0 qmKY^^j"L¥{$S,O7y35_K/38y[#XP6?*њ8{R7_K,t~5@?u_FAm9u5/;iV_-uwlOj~5]N{Œg. }?ߢb8.&hʾg“q/Sʾ6xQWbqUh_>ʤ)+D-Ϥ7/[8 #P`tT2+pyVZUi0Y[8ӆiF[2|A*~'׮>S<)WD}5ƍ{tm|Isi4o ,uX[m;Vլ 7V "WЩUeX<94iT˱<\/i{7=e8x=c2pX!u #o,NeѧFw>/_JFmCzڰ1u)Ԙ &0e&-bL ÒӍ8M:ꏶi(*nby'k=qQVg2B.Y+7>g2.U(wkxOY]k]2k۩yJfbӗT\m?7g}—&[8Erҕ Eh~eft,>U*ƎT\ӥ^IFϙQͫ~gn6>&]VK| \U!&)Kxm51FXN_q0fn0'Qk].hJ3ne(\/=✋0 OیqY~':-a*V{YErsҤA_<_&T8<8KN_W0WT|ruqcvkM~Ϟ3_GY&8M5y¡}Rn4767nS紨u){Xbbc/M5MŽ&h9I]*N+ݒNIӡ,!~1֐8Ů:=ޡi\_I}_R'&~fh?^,޷>6/'BY|o\WO֭ LT[n;{xu+Oke6AM^a+a1\[\).X4g8{<]>W8GuTD|*w"Q\>23 9ةT 5xs96;Rםg1(,7ំ 5OBxwt/.n;@MKWTԥ .&o"0Ӎ=ꢩ#1rRu5 ARF5g)p7 <#t0fJҬhB15RRb뺸LJuT?l]ca|* }"K~<2lG[Sjp `>z Tu_$+T&)xh.zT)U>~^ 3?\%T 8*\\x̳9WSQh1o`3^b*м'?m>"-'3#]sMfPu UO;]ty-ɵ7p^og>X+Mj>-G.oxfP k:Umi$u-shQs>c;Ȳڽl6]F^SZKNyESj:JE7 pWَGÜSٮS̰Fce:T^uhEʥ9ALAdC_&}q`IfI?fSĖ6m~Do|?h)gkaJuoBBo k?j;I5Mno>)/|/ʱ8BĜ5\9qWsMJ94Tc,u,u8I=MZ+C6 #|7(Xl]i<,-^SZ47 \ GhELٔN側K>KW ND%MwT 5)LCkU^\%zk2#5J]`0GYVen_< 8.#ϔ_ bO.˝7Vc8d/~2\o~.c3j7[LbP%at]69]}WZ%t^3,BJOg|97p3\ 58jZM_08hbo4ʜa/ߌ?W:"Ĭ6U`犭k:ؚC AqLapU39GhS ax|O]᷅k=j#&X01[Gl|C[+k~j$'q_+ 6860\-XiքV}Z5aK1ի첺SF: XlP[n[Nk'Qጧ4apt'!Jur5*>5r֥ sOD? c5Xj<2G43x.Xe)?9O~|T?)˻\[k"{ hPH fH@s9mʲ\3KJ\-ciSOΦXF.G%.YEiEoe;2xUi3,J_9<=)kҜFQSQqrw7 xx{Ϡ$|)7q2nY'ƜݗpoD{$S^'k xC α\ϡ~ HOHt$`~lcVkJ<.2ꕢFXEӎ")N)QM&ffi 2Œ*JrJJ%V0&Z\gxP$f8$ s^~Q=M[Dݗt^ދѻXn\EJwyo~,moI{^{Ğ#-kḻ́:gO./o$x+ZPF{ۻ^\&KhO-.I-j7{%չ ~؟u+NM[[-<:+ xk%z\QHM ~>:gèuPm=Ο}z=ax?w渜GS:PiT0N*^~~hVG]k7?H}Ķf$3oDA {c7__M*z5ŷ7lv{\u8#-ӬZt+%O;y~Z~5_ ?g FᏈW&7Cj7&cJWنW5' %e^^HG+陋˱WQUӍjuЧ:+s|ө :oC&W5o|4桦xMGj}3jYwZM, =ѭƛtsvQ'mr-}Wޣ7w?|naZ.x Ou*٧O+קM'4~__ xK6:SE~zԿ7g%du=WZͮ,Mkn6Bma_N S彯e_7ueA"q1I.i{XSr5yQ?cov|u۞qr2 \'E)=M/=mk?~ RZqjwjOԹ?1RXP@/;?doeLOJWS,MK?O'L$}~%ſ4'a]U|*t_Z8+/h3i7ߌM[-J<>'_%3'c H?9_q%K_x~k{a*T;]>Kd'~Ua)^d}WVxo~o [:eo_}G?L}XgA9QGӵMO\.[ /2/reu-5=v_|TZs~9(>]k J.҇NNOolQ[8}6[;'yTj*񥁫OIB2g-oV-isL{Ӡ7]Gu=* fC$?ٺ.60[q% -){5_;wo_](2au^Υhaӿ2v7<UQ|R]+U$>?I+M:}ݮ래n,?aT#=/Vӷ[O}}ˆL%Om矹.X__g՚5rOj)-g'?.XdG$d&cI2UӼyA&[ysmnVQĪ(.^IFXǗ..giKVh#FƟ/iW-O;>$>lkͦy{yq֥ͭߕ,NTmonmɣOM5鿣Gr.&dTg{YN|j?sϚ?۬3 pޒG~P3T񀟍׃VQ}w3!Ы:sO]ۖ Wgeݱt*nkt_i~q?O kBK77[[?ΪTV;>@9}_Av.N&ɾŷ??aju[޷vT[U'&un'[ʴr%9QS{n{5+tC/ٶI%~ $ <#-;cwg#)Yo)}5pU_r7W# xR/Gtim?nڬ1tx_4>[_Ζe-Tϥ~m:QW'o0-;s(G#MPkm.c C1{d} 4ON9V^;h0`qf4qt֣ZVkrSVjY{4ӧz$66n?x2+[[Xel"8' (9yX5pqud~jOqNݙwe0tbB-Z7-xzu96vW c#ooI!aGpb *T5qk4K]q|~x4N8-Nݕۄgn~yMC?4/_ +jڽk}Mm(%}܌e}*]Uͨ[[;NFO^1KĘiEFޤ%iȳ5^K,YB<|SOztҌc/g$8_^?j2z_]g+yISW^J&7v^U/uU#ſ>*//oxR6v3ܠlf5MR䓀4NzLZ 7YZDxF_w3Ws96XYKB/VbrCUxT*_ݿ7WT+>hth^]X>}TΩcxŅ̱YɽI_ZkŸ+rx2 =%'*1?MNw'\Uwd=#{ٍ1ZɿhFKK\ 0~ #?F/~?TҾ?qYяɏ<7gCJVUg3iE( ( (?-7 Gׯ4_x_Oҵ?KNk^NndtѤJ- ׮Q:OmߥϋY4Aa))bXJl]\l})V2:xF{87餿O٣jw||<fXxuO2v(ٯSW|gW.UTkWu!i7z_~[?|A]OQTa,"16y-[#U#_5q,,vw<3W<)9ҧ*n/^s_ U"a+c*|ipjR,7G Ot&*5rU  3g5U]=,fa?gO{} ?l/"ukKiSA6r..49O,a~\1QT8^mTB2R%7)M4#SShaQ ?'<畳^=\V/R]c|IRpy!XJQʰar,<)+GBE{*k^9yзՑtx.?a]<x:9cg^W45)RQ=IףS.-< J9~g7coo⎅x+ujxkSi|Ek^kVVwQII_ixY=O?!ÜG0MⲼDke) O ҅Z)b0ΥJ)ߌF|֫Ƽ 8~xUN.j^ZrVERJ؈ZIs)]?챫8|C7luy_=y\\]43݉9$!7xeRl1իkWp5U*__i:')^foVUxIP2*w|>*6e(5tQN#\:Ǹ((my?'a[uI̮iŸ׵־Ry[}zu~{Ro^?=znXԴ;4}JJm̍ݳ2]a`B4zG${;H|Htmncьgqp]4cԤ+ʮaVS Rj5?i/88s,qT)z򩆯S-l^JPss~ N4#|:{أ4?T/}*tWoC],j. $fY|.WQՌ)ΕL8^jtq\T4|Wi?) _^5;<^#[S4)ag^|U*NSmqde_&dx'*6)С:YCU' 0UShHJ.QNijn5*Qú.4YB\ܛWg'rcCW_#[A6^ya4V:eGo5+Hv<+; BRQJ2]ƚWNuR%9I=7'}_b35xt*TS+FUE٧5 v;\ÿk_~7n>.E?_ u թ՚\ܭ_IÎs>Uxtc(Gc ?kW)7JO{}fU*Xln#,]JRӟ$zS_g z"_'[B^xCNomnR;Y͝\B_Dl_ɨQp+Ӌ%.njH?uZ8;+;'>)$th{8ӫj梔iJ"|׳o̓<(sI#sXdsUuܽ/#imm>sGO_4&#I@><`S5>4xu|.+at^'q[9w9/-Xh`qn]FE`k`9V2 Ҕ.ףwW9oּOw5Z}^_'h|C~i];O_-ͯ4! C|-(>3=W'IVjU?S.7]aJSㆳj+1 17-(AT7[]Q/OQa9}Z]MEiGMI2f`qq0aK?nzo߇Z z3kፚLs JmԳ)3|~+> x0ٗ ԡʲ8reH|hf9EHvXCb\~+~9~Gþ ռ)^ X?7X KeKeqO8|yuJJ7>|XӨ.x.Y**Bj\o.xiJ_^+f_AҡhENPWp\<2 on ɨe*5عsW3lJVib8pTsNzTi{q^y}ߗs)mb! Ya W˖uhTfI#e`HhԅZS*Bn!RR(^PdԢvj8B'N#RH!8¤&g IQ[$Mo?H_y^)ÏI<+Z^Y!%[C3[ˁ>>/f[Ux.èӥ,ڍ($N9 N&N|8ښ8G;.a.qu*ˆkaի/zSItwrNN.O_-C'xOFxKM1|?;x0sZIP[P)~[sωӤn)ϖ}rEÆUeU>.гEs+ {@_爼] _jz5{?6>Rki~fe\_yr=_x׀d |1ieXGcTfV"Kb+Eӣz5$*K;%9??s/y^7chƄrQ:T& UXJPT5/ 9ch; ?3%@x{ÿxW\G?ϒ'ocxw6|/^5厹qwiztRYIdB #\ga\Q{QfV^]Un׿l~Hb~>›E-G>)Z9҄RfjQ]_S0 _3qaO͏ U!%}v:7S%YQh%5*5y6/[jFs8y_*QOu?6#URX?U;M;=,^>\?kp֖xzaޫc664' =_zPS樽7Ym{(C0ᨪ9>#1|ynZNv,ǟ|U{ ߋ5&N6ZG"/= tP[_mU?^lqbaqᄅkؼ<4i;^dw)sZdhzŧw:e]>\Җ1Tz˹tJKWxK~GOV֤.Ozzg=5|jr<̜qq{:boY>.Wx1Y^j>JOvis[,~*{ԟ}c+㿠KrOuׯ}~zZX?)̞}5ߖ?Wğ|J{l[繗f+*QZjZu䬭ݿo~/w0 z8+NX=t[~uƥuut_}O0jB+0>h@Ho?vxXU-}N-}uzo+Y]8[:SIN6|"2/#%>4mO]e2!aly>~NN)?"K[Rѽ;'d[:o27G4* 0Eo #h |I±+ׯ>i/_ ;p %<%8a*%|46maכeYRA*|܂s>nUZR]:i7[=$Z -|n=+UX^ek_zk[i?x_x>%iV**CThα} 9jnj:jW|ou hK'A|18oó:kuymKN˞kozϣ?n9\{ӧCWO_ulgO8#G7VmTm֚-m-sڋ_W$ۥi_ 3>g>xgt_gP]6[okm}G%> ʍu}[>w_"1E/_-G]OQIl--۷4/WѨ;ۦ:t[?ݗ??M)rfdݯR\O}|s7oJ?^C,,no{_g{_[˓W-(Wz__~xIvp13?? tPkOuTޖ|߇n?@Sg"y#%pI?.8OxRqYd]S[էki}nOk_,'bo~fkd)[{CW^t! %5ijso9Csd$^/330.\]8UwEQW\rI+9WQP?x00q[8q*~})ߴZ%Zrwoym )7_;Q;ny$)GN.1*Wսmoʹ>+Myt-o!WA7rs1s?sUS)VV[{:r2rHϨUG?"vI}[j|I7E߰~?>254x-FFǎ ݕ夞^9!G8?ͰO Q!msk5&?oxƹ.9{O{!9a}Mj:vP= u![kMo)mm.L淚[oOGw$Ci-Do_K'5Ctƽ_t 6K]_7؅^}ֱ%?b?ϩ?"X,,D;շx:o'US?G,˿?ʙ·@`z <^$8{}^W:_KU9}>˯qqaCbj(cOǞ>e5s~2]]%N]˧dzi]9\;}IМt'8Q;wz8t[7I%\+}V#k y`= IsSڗ+wjWGx|+it}ui2(qqyr{sEBN{4+&[髎xә5+m;˺ђ31gp9sZ9(=<|Gukm{>a[_Շ,'׽5wvwW$>jzP^\]ǿz$VZO#IR分KOc(T )njcX6VƼE99G 渜I^ϒ M^ʝ8(.yvQp/ ap|*ҭ:)(O1gvͳ f.^ը#P#~'Z%_E=Q{:ƭȰzyN WJ ߚ\1þ ˲Ҏ d:P#|E|dtuqV۝Zӛmk~/c,%Qʸ+| bTCGTZ)TjB ]Jӥ})|)e#&?f o졩~k1x:C.?Ae{ ;qzNZbi4|֕ߦqwyWXpTqe֫[ ɩ'T#85(Ӝ38St LiRNM*8L-7+yj?f:S5VmҕQ|{Ogm2?v3".|I说xR/Q}:+-uQ%7" _X0,jG1 (S*iFS'KfV xʆ+pӧ Fk^{ogUSAFRՕ5Q5\V Ƽ~'|9|>N./^*76Thf\,ͦ:X6o50ҥjXH1Y|"U,ފJibUNoi>YOxО#)Ƅa"S-TI;%N ^vZΧ_jiu}o^mBEIm5eXKIJ(cF`xFn[8PV0Ӝ.4OJ^ʞF J,b7>y3)iӧ:O Tl˒Prnp|(q % [?~mN1u.=2zgp$ !WIJ80n"qMrէ7mKI$sӯPTjQOI>Y֚;[[>gi8Wpuk0 `0GC J֩JqrvmNյ:zsi?RQwWmT~Ji4gW럘 s3?OvR?[ڏ6?:%O[=b~t?^zWkr!o\+^z::ZM޲Km1Xn)ˌ9Ny̩^CyӮge,"=M.lhƦgW[dotYxL?鮏@ȬC^_%[Mk,1eӚO%Z||_n/ߏ1K OlzT]Ee~bn]5%[~iRzr ?&q?=[io]<k+otmro@k,3>ܑqhHGz?OwK[VguzkL=٥cj~Q1/Z9Ԟ;m}pY5Z?kI/^ϥI[k<ײւZ/6禾>Ѣ]?Iӯh3,K+CuSN)m?,j]jÒgӵx3f;#qL{}bҲq}~8U%}Wmok>Sﮚ73(Ns#֜-*j~NfxDO-߳]diuY_t3}V^S[B}}-ozTNW9ӵRk[T'4[\Ej;=ۛ;z~us5"8=^\mI﷽v??1=.up9`ߞu0Fw,~۷,\sG?PZV]!?1@ @P@7z(Ȏ :=pjzyUNko;[K[Ta𘟳ÚvviNWf_T[dZ|!}Z-OmoAмB!XlK}Fn7_d_5}?ĺ5ӕh?Ά5*ਦ9W[Zp {7[T5^g"?Z'S :ZWw-Ŝ:76C0~׻#vc]#O0˛̓^4~>Q'Pgu){~~O|![;k)|}OwXV,DS3Toé|NKwo{[Zw_?UXNjy!r:YjAߒ;UZỔ~o4F-D? c}x;:h> dvᰉglMTi-߻+5kJ]JPf2r%d|u'g[Ӕڿm=SUvn^Lqo/^it|Doj).dou;[jy=z5nkwx&I^.cxS%b/e&&{4[ o|\ 5k VÍxϘ/aB%縺kk^贜~=/U9JѨքog}?)A?c+I%sz}6LX5 O{a,yTӾ:ŏ+[sq5w vO\Ztx}OeZxί$4Xgk]-~j_O[Ժᳯ|Ry7}}oo"{[ϳCp}o8 ,6&sqVzz?/wG/Ê8VjJ[JuxI~aY;qR_Np=yn6Y g?A{uk ӪݻZ}|gpGo:g\'0ާq QUdknͧ^躴QQ l}?uN]ޖ-?ˌӿ[uOMUkK OzSۇͶlo-S^}/;Z\nTJd.YVMkὬݶwjcf K>)i-'>4O?g/Q";NK}ս}g|-Q^=6]'\'/KV0b(CI+NK("b[yxfdr?y;eG8WMp}µӾӯ5wK,:|ʤ"ۍ*CMy=ݝu,ه xo:OixV4>O;ƕI#:R] 4X~ 8Lno̳Nx>⛻M_~,0>Yg}4h)j[US~)z Xh+wOxe h0y$cRIa{} q (N.QR}mk6KF>׋;[Ȫuk zj#IJoVwHh>*N?,A_xXRn13,QXXƹ[-7MJ~ool2250y?G4覛մajqg㸫=fz4_E>Z{~ wBx ߆n.fĞ%|hT0|Mߖ"XOr6Sa*{JZoO4~C{-Mz\}&xZ.u*F?sh{NQyť5;Wk~&Ktqҵ ]F\מ$Ν}_hRg鸈d:ޮu{~_Qy_?v]-~#}+9"Tr\B(Pse{u1 ?lB2>)Vƾ]BQKiZ [A66G-m}M34*`mBhau(cIKǹvs§-oRtoLa{_z OE$syg$QEk+GVmeۃU55ZkZ(WuV~/[n=?7MOρu&Hc?'qkץ ho4b7ַ?hq/pVU"KDW<9c&!b7 ÒK߿*[^,iɦדϙ6F2O/?p94nX_[Z~|FqX4TU[ݧ7սԯ U~Lߊ_7Oۘ;kec/k[W gk^j'kkM:ilj)߶?T5n].8gN:0TSi?e5SڶU6#Vh:yk:6=_M-Ύuc=.:O*FTӟ.7ヨZlkQNzԧv~Me~R?o__n!⏋_m_{Nx!VowuGߌPԼ=Y'g}ZVmciǕ ~x$G]R˥j_ O.a+<=hT?s'{)}[4B\my.1 tuGӼ<5ok&ۭ1%Zg%4X@W?:톏toZ39h?4; Jaqcɭ|E}Nӯu@$>qgeou}Y@b8,] g=;ЍL*kqjݻVs )Ь6Fiťew^O_|I!|ukAi_%_ϊ"1%^mkzՔk*SQ[].KP6p[\_+<@-uG~UBN%,Uy/rͽZ廜}Lۃke4is\ Oz%n[4@vs͒LXg\9I$!YHppM~MQNi&I4u}}_{|L>h|/eKͭoM {/]Ů^&i,4+ \mEEw.P8TѶ2V/2IVK2 3O8g)VY6oS*ap7<0)g2)帺n~iJt=m:Q222/}|WC50Ns`8['uCB"/^.x\v>bka`|eŏ\?~9 6~9#muizfZi1o} >W7k4hVW A R2䌃ęe9lW'o`rͰlv*^5ԧƤpiMG٨&3^!N/o|xl nSq(ܫx7 ^W̹N>gKWV^:O.79,|sL6;Z.Nhj82eo0ҫa寅V2k7߃_|--e?izݜ;R[\,+[h$Q&dDl%L7/eyNX XNtyf9:yJtNYMx3^̩\w8SNjE哎NDf[^ nnR6N$$DG =:fܳD (1Vc<sӎyMYWӳmqkӕ5֟-[9-9{v(Zɶ}-]Օ֝t~i|(RɹZ PTn;x<Q$;?NW|ɭ%Z]?9.mp" .Nt%iZu֟t26:J 7.Iwgi`71Zym\=LM(VFrwiZ$5eNk#/RUTit">jQ~5_֒?-?*NKETWI6H4+۽IV GnU%È_R'N9Ъ2ľERxUMA[MIǿg 5ݪaBf>T2;wr@B~1"eFjC'9sNO's|Zm$ݣMKO al?T)5l!M4-\WWRV8&A*گ$d?ZzFwY2ؤeQ~]\0XwYΆSd(×Y;+{{;;~=tqdu~1Zmn #2Ks0XHjnog>V_NWV)N1rNK٪iF>7tQv+#^>*öU]WԟQTJoò <YΑJa+ؐ ḛ:)B9c|5(}QjVO)sG%O[F/'V)`wjc9ӯpKA [>q列SSiKUEwiF<>Wdb5(N*sÖ7ֻN͵z=O%{`tzvUzCW{/z]|Iqq߷gGy_ݵ?1؟\LN~MT9__~7so^}5mg o$s<8g]+R_5O{A|嵝KO/䋘Ġ}ocuT{.WuӦ_Im',MK_I;+iջtMpG9?7e[/^wwq"ֿ޷rH3$K ?3g9,wjrrƮP~{-3>#rה'% 3/~T,K%{+R] G n/븴7k~~8e"9k_>[8-#ZBx>rG29Ts\eֶ裼QE5VkTv$|?1Ơ秧LeOɕe=f1:rsu?}QP͹aWLJƳwx~>9UR.+l+#N; :K[ݎz}睵5pU'SޫW]|%#.혐g"d9Ik0sq*,'fޣS#uEJsSޥ@99?2\D}Fqds^' 5osq?;Z׵'zoϽmڗ x]sv㬝J=\woe \MeqPh?e|:rr5ZRQq$Z?_/jGu?~ݏq$ɔBO^kǫk/Gu'_lg8Nw}};u6[m_B9lcxG=-/uomRVԚi+( v1|ׁ<|Xsӿg__>+]KEkaiD^? ގWMbkџE({MyvZ46S waeF v{]]\t~ jk6mjᅵuޝSZb%u;r_'F;:}_%w6RmYϾ^g~/0^ըk._guZ$$UJ[G,rOjڧv($_zhu;>IF6㎇95EE'W߫{_[5sLx;c=oߏt:/f3~'j>6w4#3xTo-D^}}778+iE5NZ׏^ٹ]KρXVQ-B܅?ih_>H:jݬ~x5ݧ/> Ej2^&7eF 8u$^nW}4$~45:U>JF2nmֶL+?j=w~%?>.|p52M\XXg4<.4}?SۧJMz~ﶝ5[Ğ?cc_&[k_|OKMMJn^{}fӾt.8qtRZvlq,va~Yr%rMovч+u|f Z߇/u IoK9cMcL.X_2c(iPRj:cV_g޳߯6~{ԯ׀۾3[S/q{tׅ*rחd_ۤgo'Zs*OH;C_PJ .3O8Y9 ew9:GFXy{qw쭭粍_?m. 6Nc o?BI;OHU)h~aMo<2Iм3'B7N23"o/;Z޽%oFQ0>lG40ZtUmrG<_Մ[/חg{(䙌*pis˒ޕ-;w[IC/i=[H_;Ú4 i_bjͿns̳a(]T+}윮8'! ʎQuσq۞ڸtڊyrJRa'¯دúxv[FBF+A'Ѵ83m0KonP.\w~FiO׽s M=S|V66Pg?f?}6 [Zo~vFz'=>`d6kj\~_ucdz8'~rZ[zkII~|#tv#>fvܱZ'xEFQaJXPZӗ98$s xQq<6:y_;~>i^ce]}:|LN|%O)>o0FҊmv^go| JM*$A/{fX+uq/m(I^jܿDаǕrpgva ^z[e<#~I_E =7vio_e3=|w-7r3³9)c'n+'vV[.F_Yz[ IisK]o}vQj>Ot}OA״mWG,KNaYE,ns,3E3[N:EZTjE=Mȿk.p qYp~қ.IRᤕs1k;UtN57D1n9tAzŽ.-R w[sB询()sGw%Vy+ө,mY7y|fxקj/k>߄i:֗>ǻ"&$`;e~?թnYG{˾+}nZ™qT9) 2kty6]86㏮pHnRU9\YkeouY_ݷ-f5:~=57֏k> ̟~?P(m?[=ף$y(a0WL|tݬ)'ѭeg(¾|Q(ӣ'NVOYJU3 ;NGMO d U>+xź-$%Ztٞ4@Xyb0ݙu٠>[?tuyuΕiJ7dK;'a^gFVt!sLe9?g'e2tChߍoa|7CaVaRa`xZN4|EEx}ˉ%ZQZwNPגƫ>j֏SOho>+ǸU\_Cfm/Gҳ/ /v}Kd\57G9U.(Ɵ/ڿӊQ,x~11پ'͆Z|9CQ^6<>};=QX|eѾwg[yzόxik*VjKյۭ?K4v$?uǖ=N-+ξ]Z0t?'o mJ}2lSͤW3M-a_Jr,}7`O~K5m4K;PO|lem]-lv~]l58'{n*itVZ]k qj}"`gOvVaM:FsW[xturck5UΥqs;}{iz|NʿH? aqYiJ?9{Pg;t}g?y_o Go?tt@?Bm}}_)fp'[o+žq? L*a.\F")ϟ]JXliچwiZmgmoMyw(#4JÒLq!F-K{iUk_ xyXnj*]i|x7ni==)^+K/;  ~"@|D~x~zF}Wr|Imt"FԴ/T4-B%^<چ%NQ^}Dt̜?ϣE8yI!fxWEk[ px*qNI0=Ns~z>_TV@\j:o{ɥi.jA@vty\*9{-'{ke^\^6tצ+ů(]w3|=}ះ*x΅h_ -|!w2:Vڝ+[ 2j'km!hy p\({Wz8ifs>yԫFGniFp6A_7Ψ†&Z6ES䔚Srd|g㇄ ~/xvE?sO~1￶u soCiI׬4GFtctxD(JTj3ol~MX S TaT %Jjy'ź^ۜ lax0v1*^xF&1u1^j֮9'\(žUx/¿ocqiͧ N_/zW)\ķ7/V$!%F龜|fVxz5x_,;ڞA.Dr 1P,=9ף.WQSZn1qh۳'7%|qb􏈾vuxW=kV0GMj_ xPysQXy=~OMω2h{Eca4XAFʫq4g<׆XڸgʪS_E#ZJ0)ӏ sn'"w*xyb1(_g1 F&_ qyWB8hL:J+FMJ|/_h?>4xKxWgiz-k\$mobr\8&UZ.#405hU:)PR3J*<ɵͭ1x/5!Y>qV'=sgY;1VҫU\]e::29T9bW_5F{\vQ_7(x^qu{H/KV$kȯcӌC\iabh*y5/#QUTSiկ T$GiEx=jʆS pp [<`Oj0 (aᰵkc#OWx?>/۷şZTqTkaX 5ZU+:'{||4mmu-.x"9+hik}|+E#E毛 Ji"{6˒U83էdqHqN9anj^n*6?aha>OW⏤_`U 0[xpFxP ᬒV{Qt|_[s@fڇǿOho/5ƋgM5[>7vR\\ʑ#p~>xvT爣+frV]+NT&Tq ,DSv7Xo<,/$f#h8\Ɨ_ JRY':,,D'MKAWbдNU;g 8$ci`Fs۾M'V4֩l}{-%̛I]]tﭴ8x8۟;`z,˕5'+&WkGzik5wם Ue+]:Pa XYeSwl%TI?&λ@!P)Ndx^hݥgYR/3'jJ].ksr1O5ERH|%QZZݴ^BdZ!e(]xa3}֧V|'}d҃\| T_(Ưn\!5>YsJTk_rK3xv;fCfxqĬ6ZV<ŔJEUlv̲Jkץ,D(Q?:!ԥE~#3<$|D0-jU)QR= FR8ڛ 1GUg^O? ![%<1U945 vn1O𥄝:8Ro|clTc79(^U)F1_g TyCR&[pi9r . *UQko~4SCW]K;{x.%|13m\W̰Ycx%HՄsr*SY8TjMM Kp8 .Ientݚp%:rS(s)SJ/--j3ƥa{}ilD]VHt>@fPHm-gh+%+jU:uNPUcp/e(RKi m]JV^y%ƅ:;ԍ\-gCfU RT,R)?0~ϑ'o4`+o0G/ýuA_KmgO_4*"UtA~֤$w?gA6SYx[ \."/b0XeF>iΗ. bڴZ"rQQPGxĝ;K82=5 V6 o? [86$;dY ֞)U盩Z:Oj.3h># RZpqMN Yx^/xL%n_o(mH;rxezAW+ss=ymF[䍞?1ʖ4+ZiяpsO3="蓏+Neo+=Vg?0+kizOp aPEV\$)SyJ jcnJ'N!}xOi??7= eo=K ybHujֆ#j{"=B[Q?0\l-.(fjUw8us{w"q\E%:s**B!>HΜ(bqTaYN0T~au8= W| 9`/I@P@ ϗ17/h?Z>Zuݹ>P|'ԓj)$3?'9Cۯ1i~╟]4~]_̩jљ}O?^G=9't>WDˣ'i~麽d)#^;`s|g<է%M]d9>iKI]߼j6!n0L`g1яSoMzZ>y 8ۑt]n&m?/~G8'ew GN%ۤO A kFaO>=մNN1p9& 9fO~H?ki?ӯ%֟M-;Ľ&ƾ8OOwhz^y3ZH/ٍxf:PV%-=/O]7O^*s.yZ]}9TPIFuދ}vt '9h[Guw^78h|=]>)KH1eLڧM?Z{4j?)Y2aVox[ZrSAAM7M{>v_{*[}?/;N%7Zx瀼Yu <^Z6z4ZjM4XԿ#y_W {;uRmΚ8V$T m B$zyJI?W%O'm^h}7%+.]'k;NYZEYC##8t=[9 QrJ^}tN_^)zЫoZ<6o];_m4Gȟ+_]WG+Gknzd?{C9p5V' Q޻Αm'u q'i t'_0Bdԙjo9ⶉu<%rj7?3oi,n!.40,>1$eTv~rѝOy6RI[g{l A>5DZ׻٧D_>¤}˫bUz'kԉ هN2qgOA듶%n+kNRn<`{cq]8^׵^j}mM/VK_'.kuJMahm#?7yg`ϧ;v9mGeUw}o;4֑q#GP2G2AS77~ۥm3n9mNݚM='oWNdwc>cz=T AMOolOq㊸PwZەmh*VMT+t窵eXxfoxsᧁ >mM6'sU2RVݻsaO"N/d~d¶8.GAgө)^OV>ve}45F\NWݽό<}(rؖ0+(K@{oK*U&mk߷NE߿\`zή7{e ˙F>Cs~lfyn{ۭyN:+ζ4I<SgDxS:&ĒA~4w(znݬk 81C=uPNRj;_ؾy+._Gӧiu,X3;qq洧ZP[roGh+z#ϯ˱w۞?5kݶg?s8ԃYs23n4^v>jryn]EkO^TV}&޾h@RGO;7g#9i+wO:蛾v尿7ޛ.?U&4e?ֵ6c +O-~UB ^_}03'E:Jϯk%}ohSmk_/9wQiiא Gyes?u-%^=02}vmr-~M$8;%T_RZtXl!K{KtP$)G<6.ꬕejWzr\ Zq[;}9mv]'ii`l#J/kS$z>lqd<ᳶVPEfi<swN&ͭy²2-?c|zs-MoK+w4Z\?8rdmUgi$J)SGô ݸi_C[_+jͮX,57noOyh{;Xodt^nahnV?t|`Iu*oK■lcR={gZqx@9ǮHB'/)e>㾛Z.]TXbdR>|<8# dmn2_|aʿm衣|>N1X`3O}~Zz_m?C xYxz->6Srp#G%X⭥WV}q6]()zxgg3| ? ~7F; $ܓom?iÙ^ ҅+lψ-/{&Fov?jPf|;. ߞA烞^=QV2}_jV5INѩ't+}7nu>ᕷ?:W >Zׇeǭ!c?ڞ-ާ}b ZTeY)n# K<>gZ)U\jK UG\3vWvN\WTjae&x(kRѽ^]U ?Ht2{/|G{;?i.K9Pt2A948/5<5vhp0n4'OXJQHbjSFuu\TxGq^GSXj|󧉩gΣ7}Ѿg6-oIJW}Ҵe~{y|w紳uuhx=αyUQq^ҭ:#ݔ~/+?f3<z4j`%|5XG%(-{k]T=_E~~ w4Տ -h6ij^&ޫoil[%9^b7f|M'ɣ{c)iPJ*'a+U ?d?`~ǭ'Mwx"X;Pֵjmsu{ce[s.uZ|fo[;oĪf9ḶG)bUhC PՕJQRju&N7Hn*(pa8)|NE)C^tzsRR:ΩΎ/^/ }VG(F8ڴԅ߆hO.k _w\jĺަ}g.֧0ډ| s_`$5.q&9F4LV\9*TK6NN*ז+3F_^+x3m^+2&x_(ѣCw pUAVNJ)מ K-˞&lUsu6|5A՟>=xKϼխ.="b@mq}"*k^&AssmZ^Iɯ>x xKc ߌs *a(0T%8ԫe4i*J.cźPnoI<ʖGU 2l|7pc)ƭ ץJXaUX\ RxV\m{b*?*Hqz3\pa^oMlk.ݷF$Ԝ`ܕgt}VxaS}G@ 8NwlUkkMyuFW:ot6׭uh$;o' H?u6~Oy ҔNZV擓I7=[׳RԌ'"rTwkJ-Y$o.⏌_]Ē]\M*3hξ[Bvcc+3x0m9eeBolO[8G4c9UjRlړmؼf"?RqJu t098N0ҔcJRmZ-7.xWiz}=][ x/3,0ʐN 茳1XNu#(UE+4-,i?i[/,TIB|i7Tjl]L9X֗yKiy!D5I%ׅ0y%:N:%Cя55QiIZgc(aqi5?Vn#'74e| xƚÝ/Axþ*g]5. '(K#@בgş(g./-XkEq2.eyWUB1kecSJչc8hʟ,-HTk䴹Qߕi&<:ᇂm{{[MMZ8ZUWn\摍B}Yuic]lDܹZw֍JNMъK\8 cIQ%MBI˵IQ-[m$Ls;$tʯeCë\J ZO7q2Op\IN9:SNjɷGk6?4̱u>RRkR2RJ5%.hɽ-~HŸ|C/Oۊ:omgrD<`+3o+q_;RzJpúM>YSW+~Dk>4qN .[8UVlAᵧ=ip꺆# W-k[$eoC !3ut(Nhi'ʹҏ]OiW(:TaiՕ>W{IRo[5Rg=} q¯ a|Sڳmfw (mIڱ~=[9UUTiky>RNL^+ޝhS{4}6_O㿊RO[YTC].o]6>x/o-`iZ@k8ǵ.lwM\ p\)Τ9a=@d\/gFsSO31VpճsNuNk*Pwj+Y?~=ƺ/u-ީK]vX.m!P+ J,0f.I~7mNTg9Gֵ{mf_>9 '`R/>`'<.o?kٻSujV );rR E00øI8ޥERЅt◽Oe)I I 'ޭi ;ZG.2Ѯ}2SH23̮j:mO\o\m+{?M !xY S޾Og:i|%-5wI1?l8> xK/ÿGqE,`kԾ#yj;#Z奵 beĿ7wTb<-/^XE'4_wW\Ӵkpdfk^04<oGxoX51召"Mݥ׮BmF%ҭu}*T2=Ɲmk>q_:9L/S叧;Y/`n5+p=WIqKAi-<7xĉi^𶡣Co|O1C-זMN9ʊ4?JOo=jSkjxto`"x7n j>(ӎ]"HiZn h5{_ 'o>J?E_\Kݑȸ6 ;6m_"xW׆-ƫmVO}tQu9J ^d8*ܵX;^7ܺ]1\pyM\¤cN җ%妺 ;䢥?>~z5ǚ~5_Ǡ>∬q/51guH~L;+ϼ6^k88 "9GG JfԧCZ1"Ң\m?*81}{Ƹx*^i5ku~W5.zle9۟ޡMgIk^>Xj]嵕}wi=mix?{80z&;伞Z_\( {/ns`K{ =ƿi%?gbmY! vO<F JkGM7}#Y5wj3sFu 0֣pK5{ɟܭQ[Yo~Lj6~PmG=?_zZ$'jgudGe4ҝ 0yauVډpO=I=}799m7/?鎴Z/?z|O@#>,|^|3O_}NMϳ~w<ې w?z#[y?uxJϙ]*UinSk޻KKZ󶷴>-⵿n#՜ev7^[m)m9dxK.):3I$C?.xuPW9lv8m'8ܔZ]|ۮ{"׻֝uﯺNKq~OqgD}#SSPP=_ϟ<9 {[뾋jm5^&R_~V8< Nϧ6T%{뾷V[/]tqRz=8I9Y^e[~MI];kvLdLMXc&UYmߦG.ݮ✪Y6TVSP6͌8ggO<{{_[]|U&g9Blנ']৳w2lp1}1A$r28scTǿkh֚miiϲO;zg!}^…9MzmߖMSj4Zm_ͷ?ӺOm\p}'{Y۾゚.o`s:@;'=;ҴW»]7dWWUjwG# s?_g-Jj7W_zoQ|1iwi.ܻ69ݐ=9>/>!!,AyHl⧚=EYwqe6ǎx7$Oq}t\Wީ4pN+ۺޟksRH?@or&':}JO>\m~W'hO*OLa@>x=@l>`E8ﮏU'J]>x'ӡ89O5Nb/uٽ~5%kZHP@W0z<<=y粽S}ӽիiy+ZYwtO?[h)ſ>_Ah>>˭N]zZ~sj6^V' Fci!7YbԧbzqƒN|vn*<<Xz8քӜRJtC_s۴?<']O5_|#ZO^73Z RXu ;j:Lv6umuiq=]<[qLg ȥNG?dпc xGCxŇ|Ex?\/,lҵ#s ԩbv)e*>KqvW¸nZ)ZNR4iޗM*iueY߆7k15q2Jqu){{4>Y6IE]7 wfv?gٿ|O// ƾ$;':|+mlZ.>ߥ_i>%ۮ%"W0ofx}sU[tV>Ύ;^jT;:_mY;h/rτ2$*Μa)מ*mZ{-+[^ |+gQLog=7W7 FR~y-ԥone&y]vB*0pt0T)ӥ̣:JJ7GIN&;O+Yv^KX[o/FJ3 Qk'ˋ?z6x y."ν v$kH<ϡͧMwX6e+VU/fXIJUVYUU橄Rεhԣ^Uϡ55:V2lu ^ual#aN8ig*P ίl8©NbΓ[זJ+Gź5H|Cw1V [h^,Ѽ(/薾,dwᾘ~-athp6:>Y'&GZVO U?zp7fهjg<=o\TkC(T0$l#̳afԥ_,xg6,Dm4Q$O,4}:[&oqK=~'|agq^oWW𮢦*+…)Ν* UeRq?'o\#ɸ[nF>1ºэjs<`o10Jk-*jkPa*l jʼ0Y{5ZyxOOfQL,x>RjV9.I5Oʏ<5|X RxLn+[IgoYx4xVɖO˖mmW[i_kwkzvB7ro UC#ᜣxeL.MRU|ʰMb1ʵAO^;857[MqWcb%ZTʽlLp8 4T0y^W,Saf%OJ^^@Y=(3=j3a%X`@9p>Td]ݞ}uZ#J.֝&.ܞy7כᯅ~!5>)eEơ|O[>Yi5.^I-YgVrcg1!~Ά%*-QJOu5yF2Z1nqb 1]+`Z+;nQh\HGCG,,ڎwmpcO_*)R7/;]ӎ)j%+gLnPL-8V^ik +8Rs:R1V' JP+.Y64ZnwQ _\G/3T+t$,ЋѫI;$egcV6Vka("T|JH9>W-?ԟ֫J-]^1mj0xhSݎ%=^I[_$z.gq/fY(N7n')kk&-Kn6(^ҟ{zh|X٧ h>37Sv!>?Z/n鿵>Wr ٕYƄ'%ghneo;9-ӵ}ΛnsT`=s,MwZHG me|?rq'za,F?~3~.-Uʷ#ϓts5?ϧ7~&4OS*Lfsꩦ9??'j.Q/ۧg,w|][S âj0|5>&~_$Y~xHPe;/^l>܏K7gSB8s4=9Vfz.HBWݗ  e>*#R-v!<6ET:6M{>wumN?ThLj˰u_F祶%#~ | uV5YK {X>RO_ےVR%]\hw OFt` FfTw[f\_f/W_?$xŞ8| |:աмc~8~-k7|N-'X fŭȶ(O7 ㏊Z7_^?5'n|I&Y|OL=6gҵu[5+9KW-J?nڿZ|7es(qO~j^gaCKD5FkgG.5? m7Gğ w#~~7ix wMahQLh>_i67>ˮ[\iBQ?vG|#e(Ÿ/o~<Njt8S>+xU, Ԓ^'ĹkZ藷6Toڝm?.ߵŸdc_Yꚏ5CuVY ;_񎥪k( _iB5 ֿh?ٻ τdW|n?jo^>4*Ù"-G}7Wm$gꏮ\j <7a[o[mm?b+$(28~$[߾}i|Ӵy-g&Ii7Y[63IȭyI- Uq->e4c_֚{5kGX+k&7mFg^$a@O+.Щ!T-S's^I+Wzup Υ9Rpw5[]z]鵮 ,M^GǾ&槦źU牵}CUKSK-/ãh>Ϥg23rRV;Z4nfT*us@r9fU80WܹkVzV~˧/ ]WAumTѵ];zզc`_J1Qk~勣.k~%.Vϖv5z|}?<ӣy%gM-x>4~x޷ Oì?s$wW$7˰OC;幟8_=#ȯ_[%m)'vm_OOxJ\"ѣ wk M!\+}oOK{v~Z?7ҟG>?@>Caǿʧ5Ͱ?cn|l+,m%M:_]y|/_9w_;ǁ-1ewdqy%$?ۧ<[<6].tܓKoշn|vuǼ?B'Nu?WPu[A7Q?o/_KBP^$ů$B;y43M?a~ыuw= Tq[I'k]-ZB+Ū!f!l= Ѕ'' m:'R_Bo~!|Tn4?>"|,.c?? iv2q 9OūEc/-@llqSM}Z|^rQ%~/!ʥFXP_5?sY4 j?Uz638~._'ۺ]۽=5gae9A}mEI:i}.S(( ( ( ( ( ( ( ( ( ( ( (Lg<<@#ۜ+m-t[7}=۹DI{ֶO]xk߇7_{H|/u߈5oY^˩xj&n_Wկ; 嶒FPVrnG`e'W'^[se(:~<k=Aw^iVin% d'⸖y.S+8O4h#?jaq2SN0ng'&|r5c1R䜭SEM\>ysj𮯭4ںwPKKoy[3 1Ek5C$Eb6rc֧htܡM,=9s2s¯g(I>T%߼'&_SiVRM.k'dߕ^˄vˡxX?~'GT!=0 Ki5F r.ݙ W3|&keKOaڭ0U*g(r-R.NJ>N7=`1؊ؕN0vu*etIyoh%wvy*<'zY|_vi4VEy-q-Y^Ai!'2Y'ЮQv_ka )rʍc=!5(/T'u{Z?όc,ź[TJQi~GSh4\Dw$$F$8`pr- ժkEVvyv-~$ӳz:~_M$(_toG~$4>;ѼiZ]D$7icY^[w ((x7X^^odA[efwp<mX9TNrc)VMЛ4i)ҞyKuJZ4~3FykQ;,qQZ)F5YB}HPQ?;FyfH?w;m+Zm* miiK%@|+pkMԜ0`0MݪX,qЅޔN(_әoi(eo3 l=%FLˆ88%zoU|V2fTmP|"3EV4 A[$Nĺi2WU꬇*?K:\+Y.BҥF\ӣwIcq1Λ+U)I/xox󊸽b1XL6ycqv][ʲYfSф!:Yn I',bP@]C b\cN@9=pFHItVN_v9miiuMn oN>sXƣD;-GEw7'̚Vk˴X[7.ya_,ԣ[/ Is_44sV|*מ#~NCnG:z*,|D43Ƶo=qK4/Ưq yI5QN/XK󾶇xļ;C xaprOr}j←Q9},Tk*Ϋskm㷺kxl4U299(q>(cq#x }qϯk%/~_ jUdtp#>΂W}vί{p-KڒFTxA3dh9n$FxeR4<$o.^gȩ<<0ZJ{7/ {ZZ,7[K()ihEWE.NXf ~zJs矹x]kr&*(kBT'*aS4ޟZ{^\#lO-Z[|U4:?9g5MYHI2|O;FdeIO, nھܯ0q1R&=Y+IX&K_^ #*CNyv :uׄ)*q1g9GyUS#'d2I;O?7_~f_!.ςG˜X>l4G_x+>iO[KeLJz%@]/ :k-X>Wv7nWaĶ^!} ~?wk=ow? OO>'JXn j˪i? 6ԭmO߀rm%~ h|6~|Я| uO:wio|S^xB|)qqjzֺ-mu )RT/DwR-|H=Kž8rğxAԵ:ٶہ?.=  ao)'Cڣ?>uY/8G(gS>4[[:]/m6̬U_&ƟEۃπuo5.{K+F@~|P𿊦H5=72S7=ѵ5nROؓ()iO~6⟋? x񽟏% ϨhTVMxS>o\hmڷ}C9|q|#|ᶥ(K&_Ş} B x[Țh#,/l_3h_ >/ ~x?Z?#Ri !;Rb ?o7Eϣj_WZjy>=~ ࠿YO^;Mo<]j࿆o L.<+7SX;|OOө[`: 8Kj c >~ڞ"#YS_~AI+xn)|S6 u&^-%j ?o'?0xC7_š.;㮗j''|9⟉@񷃵/.k?+_ #ҿ|IkbG|C *o"WE⏂ͷ/iikn-i/kclk]t`_B[ĿIW~Ҿj,!x_vj/˪Gex*aº߃]X[moN.>r|x/●|4g ׼cGã~E&͛G:qG4u=Pq$Nē~^ KEKsɧ;SR-om~ѧy_>#ǿQڔx'ZxS 5GW~*Zn WNobݎC'5yFW5 qYgћrV[ )a/Ӵ{?U%yh[ߴǟD|sT0M{f^f?#jszMmZNZYr}W ocO'EaRh|qΡw:V] Ku=5>7o*Oj1ֶ5_{IJܘ=W?Ro٧?Zݽui87oڼGeq|4Vl)b?a^>9gO}.qOу:s|炒gիgMT_go+?zƯ鑎b1N ,b_+t=9p2 6VK}eIu͟Y3h9$7%~5V$xwջԞ)oK㏉ 6}-No' &r ?c0T{_G? aimZYt^UV-b|靵j:UwRi>,wy>,C.St+9՛Vq_noMmx'$038;M}~6}]\im.k'_j,( ( ( ( ( ( ('=8?z~{y?^nG<8A^Ճ}z %YȜ8E{r|ϕ\t-|o2?*mVV mЫGɿ؏#_O];/vɫu_/_xb Z_~`S ( (7<I4Gk;wi"J;~wC>N_~jegƏxVQtX>!{]>ZXzj7saiFK:6% 7Iޤ]KVOӚ]J+s7|߽m1>_ ^"6ľ1/]ZxM*/:e=Ԟ% i?OmD5\ϪQ9iQ:ѧ'JTwQs+? fIB4 tg%.//6$g_OKv:n`>Vl4x{5}S""(g6%f$(NnMSrsNҏ,m-SN?|'C0Si<q oUڏOv'}p"c ?_9~ xq}/CXk^ ׮vuoXaXD7"˲|- *)ӫN/ZiU*UQFn8>uJ5{'Mt۪wfAW*р6'L1[ښ,eZ-^)7ʡR3tjWo{}cnCnݒyAn+HW\t\Z痽kOv}/gȅοKMѻmwJO]["xP\J>-{uMIдZD ڡJh13gb:fytet0pOVCk8^}:<,5B9iO!VTq1q5{\7 ZHNpKN Q<dƟ^^G\ kq@OaU+gj{:~i\-?ʫʯIIU׃S\N>8<iԯgJqsS_/ӏsP|u4O~5;sd)HxXL(ϱT{Lʶ*]/SV8zF7GO 0? Tgs18Z$9nf_.ESi?{ vY:%MSm1 JVWN4 g|;P(?;v? 9&GP@P@P@P@P@P@P@P@P@1pב@? Ah ( (\~TLs\*î`H-][e_/wK&8J[r? ?lm~#ƾ"1 '  R<)&Guko!t85 =5g8ZYOb u"ӾEIY__\[٩:ã(9A7-E&__ٿ =>ዿU|"mFk9(S]Sx~&o, kIo(m^W\ӈ(MTڌhf2|$-;eu8%g)Q C*B5Nh[^j ޾Ҳvo>"jOcWޭ蟺7GD 1Fp=zu׿&QUi7k;_K-mߛlvK}zs!-ӯS?Q5ΕKbP@ ?1@ @P OIIa1`OZOZii9-w^Vtx6Σ{khפ"xO$ ^n71`^8J>΢wZ<˗ JxWnosxg]*E߁-]βIAP@ zw9&Xv_WJ:FQzm0k85tb<#sVuJ-޾ά;i;I|m=?^y4-xDF:niJpmGnܽ\jWQ5L$#pmPRz+Z-4:?4/Ǩh:Նg#pC)X1='090gBfKCNpZmGy/bV$|$]x~^](P\y8{?k8G(#Ϸ;q88>-I_!Nw#{vÙ-{ZufhFjK[ZlwlCGR<Χ>nVgoUծCIZ+]n=_R;S.L%j:1Nҫ1;ޤOo]:]6٪rE{|_];Geѷ#147d%nNBHX8B%\_;%cȫՒpO[^K^،4Jq<9#;S?q_z~=hR߶GߒWoNϵ6jĬp%{g${q :jvGeϗRsqqNڥ}E~s ( ( ( ( / η\>8&G?l8GW_y[OG׷x~?ʿ,ƪ5zq3T(I;Zi%ȝeյ-qgc?5~Qw ZzgTʧ-9뾝ֻh۷NK^,pq?1>=;p?sԲڽ6]BUB9ӣ,ֿrJ(?N_u^|]ln4Srto~[O[Gد'LDy]?{u/c˓'Jw'eZbOx')_N?r?a˖a_IR!{/FUO]<}K^c ( ( ( ( ( ( ( ( (z^ @P@1\w9&@P@P@|HRN|d_ZPq/q%>Ѯx^2OgM;m4)֎{kXYjvF+Ƴ^B$$D}F3Q{ǧIw~oXKlIeI*8PI݂614(*3qK6i)[?i5-JjmŽ[na2eTNЋS#)6vikH#RI%end^[Qvq`}ppzp [5)ɥ5kvKw}6ӯvb[w)/{j6۴Iv qg(Gw1rZ ( >Y6c?ƀ' i8*bދyqʄ~1u/i(>e7ZmV9okwWƫ߉1.kmOZ[^O#XV6:h oQAn,}[^7%ON ^HK~^?s$8g ¤'^pbzӅlΤoi._~gm1jukmt_[A/<9Nx.{Xd|3iE|}V󔜞V-#Tx <+wr2PpK+Z>ˑN!ie]9s)CW/2,*ּYwWzGH#F`g"8%/<#l_\*8>M?w_$GxDv;CU0ӜTd7P_aZ? /oÞ*ƇmwÉ=֓[뚖s&fhRgt(Vi,ok8r z:0цmwnJ=84qX, ǿg8ӄrl'._޷/2.[t_TP@Wו{vӽ̯}/kCm4bpJ.SEo:=:Pr%"wd[{p=ޝ=dž{ ^UL#^sGiE"`9NV<շ|ҽV럛TpYu% {ctJ巉tMSzkNi7/k}hG$%X<#,A}OԴwYzZMt]/9s(JYJ8TVa%wv??er#l#85H<}Ӯ}~paU-{'GQzڧ<%ҥ98B{.~y^[3 ';# Ga#nρt08<{WoIhф{Nᅲ\muN*XbK_~Mkkuu}Q-?k>8 ( ( ( ( ( ( O~2~ck⥇>?𽌞 i^2G4Z&!^?Y-Eͦs|qA[܏QZ( ( (?`k^5VðM)ve 0]դ EOI)v M'>~i5υ< xQgMGҴ5;#S=욀i,p?M( (So3Iدg5_Y ? |*$fԼX/mcZ.-msf揪N:e4v?[: u?|ia'|aeu[K]MW߉AyixwNum ' 0?a. 1Z '|[g#^ռ{yj_);MozZ*𶕥j6wR–ֳ7"p (<:j]v 731ڪH 1_u-?~ {wWZ^gW4^lX._cZF" Þ6a5ޣiyFd?ࣞ0Ԧ7K_3>(8Zڧ9\Cx.d8>Tc`yooD gma#'QG6&:g/EK\:᥍člJm?R;rK~x?|]w~6|~%lO52n|B~]HIhz͢qoj]BΙis&ht+nEZXXko icoۭ{vk$6ҵfJz_{iz'onLr vKs}m^ѿvZ]n?_ |w:CM4x[y+wŚm/ǟltEt ˍRiR4nZG$6aQ^w=Rw,D{JwNފEvue퓏t u~穩b\ܷKK? _VU=(ӄj7>i$S>hu6se9ݜsjSJ$9c?tWjyҩz~ޤi[}i隙4JXȳʐ[lMOO}T[ S^I{r~d-nϚ#V^ _{~I]ZOnQY%T4$ZF $3j۝Mm=u릞Ica[yZ^\\wh Ծ#"|FGҼ RuƭTƳK*)a~xmokߕ֒Ϫx{ MTh}}J7(j5XXm0ۨ黮 Iǯbֳ^uRW&8&!#ל1mtgvO#L6S^Jk߫-6d?d|={x-kixL6RxSymg<ƛ?9~9Kg D9fXuZi{K,>ʖ:Fpn)7bSIVQ?kρk_M]|?[|`HG^ߒ .)Χ*NQrnAmm}V#Hm6tOH{OHZ:_P)ȸkQԜyc=$0jV_{9_'SW O&OW'{o*_ͭZo|K_~]z9yfh$@b:zu=dFrF: G+zWwhP@,H=cP{gߦ7uNN?G[{v_w__);[%5ߊ"EWnbǝn$;vx8Sk*5vs}չ7Ӛ5-+%ϻ>}g }2NJ Z>y{7<֊6'}WM>&|Flm]?N4`<KQGkFXwPzS_K^T˩1ˈQJ|9^5vfяHJ9_ '-rb%Z[rh{8,UNzVRʜy_Z.ȿz~dwuS |YIx~,}\Xö(!>Ny!T7™nqR]8t_=O{/?忌~/9~Z,6BsL5-T`=et$R|7v ih{橦MKK;]+ ECZrg'Ҹ55RbZ_/D_ѻ;pJn8ԫN#?a#aMNG+G9k=/Ꮐ<AyNo h~>di`д϶G4Nv`?g(|=`Ф.Mtau~v˙ũGK6%c1(ZUSڷWvݥ-(z6tS{vϨ9tYb (4 z}8y^ٷ'糲ZkF1~9ot_=_k{2wT( ( ( ( 1.n>YOR KqO>~੟R| $xXxKǒ˫ܞ oi%#Gs-tk?z( ( (|'gx_ ||-@>*Ѽ5߅ C]-x|9/<-cIԵCqύss߲|Fk&1M;V__ _>/xgƳ|+MZz_XZjK+YTG_[/$|YwAf OiRXX^D9m5tQea.ͭ|x'ᵟ?QQsk#~1h<{?k^=垫㋏ hmkjv=GJL?go tߏ_7|.mSYw:GO@瀵8v"G0]?,dypSKQODž?|,~oSum=VOմˋ?!DT,{՟]/_/E΅%>'x[Qk}RI5[d?Ŕ- CujU7丷e S~g9i?k|V~$x߇~+P6_5N5sp_Z?-฻~?gH>>!?1\C8 =յ2/xgOcvWKDlW>?ٛ L :vG@SY.A|&h:v$E&Y r E}D <[j$Oh]e[%ls࠿OW:(>;[_]|4_xþ'Vizޱ񕆍k6=G}ɢX5Yvygd 1yar5-tK[>־-մ񟋿%~%x3ᶌjS[_zn5.-B[Kbt* qs ۖ`*90T?wsm o:W5, '.浴Ke*nkqR oo ~j㗃3?c. xK&i?hZ׼o-3Kts}GStrD{m%εdItݭ{}-[t'si!x {X[IZx:\ϤCQԿNimU'nEڴU$+=צ޽T,[Oo}tϧ,AGVޞֵ_^#~2|'Pxlc]N#o?h*=J5[qrfCr|EJ*yJmN.{4S>h~SCZks dj}qݝ9կdZ[tMQ/M[m5;KKuK9ùtY- M}k{ \73֔pw^M֍jc̎Vk:vZƖO |gsk/#tɵsGe{3Z]jZi)][V]. WG ZW=|\ƣc5 ATzN:*O|r'3S(Z++{E{_Ktw__7Bgď n9uxK%[Ay ẹN69\#9y 0q:2/zݜZrKa_,V|:keJ3?`.sN:dȯ>7+&_]<^wXI6~=9~sN%>27L38=N ;[ZꞚnrǟT+k-ӥJD[:ygdqǯ#xMݥn[N[{_W/ӝ?+?4/|R|5#tk$MKk-CS)of:}h>D`~a#2{ si eDeke4p/GR2PZ;uUɦ|x7Ռ_:߄="z(q'{i.Ě/zpTmj][կk6_ȷ׀Uポ|twiݫ{_ӌy-m֖e[{WW<kHI"XF|ȉL=A<[J?K_uy-?E[u}o{_x2ڗXy%}6g3qupqCx~jdDzZ˒=3iGo)`)tG Vk=ӼdC~?OxoᎥoὧğj&xYk-?ð qE-Կ[=S[vuۚRVNzG+t`޾wDH-ձQ+Oρ{}$vvO5V?aZ>n-IfHm-ޗəa)b˴|mgٲ;9<|pq]Bk 7)Ҵ_T_x{ԡx!獴cDz| G GkGX|all7L gi{[__>XCCqga7oji:?g:槪jrjqkA5c ;-ݮudix~Q-_w߆(O~* COZf1:vM)Ο\Z|s-ՕY_ 'x98ヸ䏋gq3xC#^)- g:_,-$V2MOռ5k࿌ [' o~פGk5 Z^'Mo \}"x~.x3__|,ngk;xJk -uKYԢ=qq@N>߲3&m_JyƏizL_mм{6?h7nw}+\Ӧ4 V͖MG|{p0(~%_߱惤%Ҭ5["Iol!K6o0d[eyϋ|U]|3k/G{q歅VGL?s0SFPLٷUĿkjZm5 .GC 5"k>_`mwzMo{/{xo~44Fkk )$¯/`"~iߧcjmM+"xk ol:/ cXPE]D7Ay܋{/ڱ| -$}e+~/y9>?МFʿ,R3*KhB99c qS5~|Dvtq1UZ)jƳ⯉߲'$5wPԵC77o/ P %UO[B;^5P+,:J&wg78Vi/n8B?(jV9}swԩXci:]n;tG qiL2 kG/.xq)Jc//Muo]//Sɪe9"|:Z|O㧏ثiOѹRe/|uំMšx|d%().^`dyd1:szz%]]4vVgb+5k/;w{_-{'nm85dW<ԓk-k^7M{->Qc*@uP@ˍ߆\z~?:#~b}CSpPr9県H^|8~^]m-HS jѵ+l=Uյ]AbSx.2qۑzgC2_YٷeM~M%K}oW罭d( 1/_ʟkTĊM (?@ (=|O6OAj_|[iKbG-ߍKahϧB:R0'g"~m/Q3~xJS⟍?1?|g M8j ώtKmoj>15+SP/'^B5;$~9#?w j? _uN].ռ5^x\:15 SUMЂWw#S=75&f_:<9[E|Ds]K]yncOԴ`u[Om0_\}#-n؏]$~Z?U>,Cž9ះ#OgҾ7^յѼM]K]B;i^!P桥ڵـ? 513D,{}0z?b_#gYM_'o?~ҚKFGō../~'$Κ<Ÿ#?a; f^U.c|cS[9K׵3\Hw :- K@Wyxkx:uiPj ?gfh]ԭ̶~;ϙ K.jPmA=Dž5GEo^/?ź_ZP5kzγܻ^Zuq{{w;34@K#iX>#h>*A$ax,燢~ּ!Fu/-.|;kkM/Uķ]._+/wžվ~ȿ믄 +yzVqZ{}o,߱*~ٚ7mwW7^|sψ^*i5 xCY,m ^PUėƗuN)C?|%K_:OdI 4=Uk {O'WֶLn^=>-`??P{sƿ,O?T6{m3Ɲ?}@KG3K~ΟmW]i5NnW.u I|Wy/#gb剒B4o'O'=~}ޓk <|D.)⟊oQV/} 6w[QAmF/!i4f[x> voۇ~+Y(S54_Zm>ogkvݭ͟?д|ugῈ~--&XQ~tۛWAԊ7MyO[.YOuj< )ӬZ:\wK oNmy z}g^,}sǺKMž-mCŞ!ßa::7:VOgԧ1xT)ו >Wti9{s7dN_pZSUJط98=捺_G{Ww:~_ a&xc\m_t YχVckhxڔ>2Nifen9VeF:Siv%H~w>~eMNqeh?v'Rʛ_Z8kk&»7¯xSGxoAc]cØztwq{ᾰ;g?f6nl;.N5Qk~ӧ*jtGS猭vjM8xQ?{W>Mz9Wm_kWDž~|s|YiBWx[G^uά'5ou_n/|V2 q+JuMѴ5;BWTcxz-%ְ~HN^vG7H%~,#e[=о-ďxK[[hibߘ׮-9N+][WU[)[iɪ[%krqR'?+.wOͿ/Ş)O 2 ޹s~mWTiw5{{{o %ێzQQN(߬_wu{}lo-iN0}mm]wU_nR?_F( ⿃ln,V?Η>xƫ\D Ԡ.4S?wmͨ5\Oe nի/F|g9F%/2lx*B XiW}Wԧ洋߳?7Ğ.A=|),|c5_|#N6@\6-MYE.#0}[Ph+ahh>j<Dӷ?hߓdUeG,_|#֜}ҝ;{Mj9yk,!Iϒv0nox-uMٟ_; gῇubs$ư!k{5֧ Kq\\9a;9"rЍ)S^|YLr~4޺'dN6qՎ8#S$/NqBG4^G7@{\qv}/m&.>50om$A{~8ê5IkoO'm{;j[_x?U$ڮg>VS3 qN_.v:Zo~ݷ<Ӯ[0Y%.o4psJn4X~FӺnYp2׬/Ѽ ]u {x̽:|u큞>+'Wy'ڕJe (x?,W4tsW?rݡn(Ҋ_,UZƍױ/ {L#[WHX֍cK+^H|nL{|)_pO8U9? jW3JW?H_v72|/<|\wi\$/ڑkᏉ4[,L_UR-;y[}tREc(uw_+C5v6᰹Լ+CKu|gPԴ^>*8j8[5fvi~KN_1QO lݻٟ*#z:Iۓg3sl)Ohݗ{+2zGxvog~朱]ڧºk$4GD$5MSPKˌ=3`M~-Bkl2i [ּRx > ]2CO ÐǢVzX .=BiO]}=kѕ 8,`-Od~ܟQ=c~о6xg+q@4  sjp}+\'%5֙k>Mh-? ǖ{^mNv4mվy8je?e/_~ +Oω? ~5AoJ~4}cKMԾӴs4FZ|ڶqj.mb7$c+y{?[ ^<~7\i?mŞ^r<_<7GVk;:毬A}rZoqr59--7BK޵λ I{q! ROmc_d72yh <[ L,鳏#A֗[$[67'+r;2zwǟ?lpX@~4>1ҼyZX:<7xZ_ot?h\\iz[_omoZ{k?_5~' c|CW^/]oᘗJsxÚklټa\vnuJN.Oy+fo|~ϿĿ!mKqxK{ 5]SKMhq53G֥tå&gz]eu_+_8㧋?|7/^g/xKCҼR4!aOAWw\\\n+aqYFM}kn+_W>~#l7KjKgy g)}OY-e?hN=-nW^kͧ%#?c,.4zI?~IE5cĚx eؽYvM뚳\/ΛorsilOK_y>Nrok|Կi>,O _~F pqM>W9m՝+M_}9^+oI+ndJo~oOim > h h%Hu $`/: = ?3tաKȣ8^y)MyÓ=3M|C֩qt$<梜7m^!_N]-Kwf6%۪jw(F-S=զ?\|McI>׫ZZ&3%YӜ:p3e,Fu=$Uw'vvb8?ըO\{u90xs:i;讝}~hj6O-w%[~Z" ( (þ8fj_~<|O'eֽR;8.G_&>zXmoqSE׊tSܯ<R53~k@ gЃs L/CG77~?]^Q xqSS"G9R_C}ڭ?c8׷9iM|Gg<nօhr٣/A|,񡮯zu-F6> $ b-[F7O 1Ηw67w9;[M;ڕ-wNܰX,Oꎞv]+=k"|+^%>xoú%S}.e5MV[{-: ~Qnp(G2| i+?: wIt|}p O%ky0CtTjg@,uSa:-#'i>yjk'Y|hdhl'\' v*UoѾ!5?"/F(:WMC4]~ ;ccH;nN}vzP 8Œ1~طF;bkZ9In2cH,A/P9P?23rhF:]|F/]˿NK˟+j3_^I1NXًA@? ?>(?:]!rt ?ϊoǖOƫi-sK 1]Yk Aۻol#7g89[; kω)VY|{??Ǣ>Dm:u>Pm7XԾ8Ɩ?⟄/\g.K\Fqu4Ai {e()&Tp?r]#z$Ֆž%oc<^I xkXm7exwČI`{[H[:on/S^w$+y\݄HrȯYm:N蚔UGg6brq =ϟ5wxW'ş]|;;x)? ndUCqG-??"½C a:}α ;jfQc ebMK/~*Ia4[5 ]>b~;a-%'&7%֑ҿM? 5Kj~:ŧt#,u׾4)u=6p⟆^2 i,զ, U&gg7KhZ&Ze| M_|o/>1|O"FK1dTI85f?(%@?8}.?oo;~v[MŸ/xKO+%'Wy-PUJS@7b#6>&o~^3>&m ɧ|*όi3,>Qg}DȒzz~ݿ5AԾ*ho;oPǷ| ^x]UE͎%ŷt彚kG 2~;_L_O_s0h֥$Wx!P*^ ?b @< ~_Sڋy்;<W㗊|!cziiizް95k:ZmObXL&q ~P9q}yt+WjpunI]/et8Vt^q1=+%ѶgU^ŭo^ 3~9_|h~R?җKmůj:5 kw_6x[]ѿ.I_EUpR^gxÖr;_mW;rY<.x3c8sAͯVOKپdMung\;\)$~|g^U:azE uӜT|6i${zo:n ;zzp:џ5ӕQOs<ۙ٨?i8}_Ϟ2k"mZ4\[M%ZU\/]rqKJ܏g(їi;6aOþx_斛s7.fSK]Zpi}m%ݭ͜7P\CI RE42Èf1>zo6kٿO6T_7[vŷZ%ir_>3ፄW|3OL3i^!^KÚ^e5'rsEZ+U{<]Z)+iLrGpHĒT5e]'.rM)s\xY{WmJ/f~6{s ]թEƄ.ZgP(jrf9`AECZ{'_; >\T¾4^~ESrEebaJN3=Hz֥Y{}5_x߭ʿ3RPו%إJk˕%}zseMZ'~8]jg;>t 7{~uDjzͅ9T>'pk 4Ovr۱,q{#@rzMJU<GܧOV_2i55#nw 2׏o=d^7aua~->sm5d*Q)ZڳvzZ_Gamt۷5凞rӍ|o5nr׫ =kT=m3揨 %Wˇw9`ę Towwniz.Y*T~>Бϧ9"yN-}.}Z1v'zcP8z8<$~g#!nt {w~^_վퟒ|]]ߌ|QvsxMG@DX8ZM[H/2Zy t,ipj_ڽ%s5}v78riMyݯO7xoZ?LDž8J䵺i<][3gڿI؃Z|M_t7 tBIu]ٴ>eq5o:umֶzpL62hJ5pӇ$:5ˋ{+Fr xnu)`m{^V5sT$F?߳كw^|G:m?ğ|=wXe'OiΗje6\>9-w [I[٤,'g?|>|5VO?&6O [[[k +k׵d6y--M~Ͽ'~<#MƑ;-Ǻ Ǻ[_x>#5?Cèhٖn..5+}a?۵JWiM[|y8~_w?ŽeW4YMsy-7ϧhC/6(G.W—6J|ˮiKo|>{>ߵ煼)/w׋!h#&TWnY,'þ :o5ssu[6F+趻ӗy6(^?fۻoj>~#/# #Pm|Xޝj:].nҴЖME+Kÿf}ezi_5  &EaS5 |@ޫ$9%n/~8~!ŏzuKx[|/|Q5i%a~ӮNMϙ{[w*v_h?_=~(_4o_>2|G8toj'taA}ceY tk[Ij_M{wz_^OҌ-LB|T>t"M>-7ɶpi6gF]W]~.:d^—vw:Yk?kZHe izm&x`q1m${IۧMu wH𮇥sC&%14]M>q# 1Sߋ0zm%w2N8dAL=25y}0/|EMx!}{~|pyjWV|]Ff;?v{&oGtL\w] Nk]6jw*RNKie?|{{\^os;tVZ*rU'_%g޽H}~Xtv 2oǕn=sG ,DIk޺5 {k_N6+͠)PHt=<I5ww:_=w̚P@P@WcJE ?c]ICGtcw~o :&X>9 n4t6?[k|J>)WHt.ɣxoOo:m/ºD?ooq\7ϙ6o0MϿ^s(o~߰曠/ggtO!"SvKBu8|<Ԍ'<:ޅc(9WK>s|-ox#7 }*]w~#΍Cj60j[?X7~ ͳ(>-DžŞ?׬=ocJzRiV{Z80CnOsMxm˨T]ʄ'=$*^4f<2ЕlL=S~n:hvoQ/h? -n|tcǾ\xrA<'<é_ܩƞ7f-powYG?aNUSO1mm׉x{JW5[{k]WW [_X]qq WԫC3B|A:q}mQG!FnudNޮp?e^s_?h2%EB84 _ZC}`>&xiXf/KTm-Z]hi8~?U ʟ%pƋ&ӌtom#$Ku}7z _ to|Aw7{kMgKKI/:Z麶 [[]o%P a+ٷDgt>%sqV7JX[[XK8P#?_,e/:xĿa }kƺN?>м<ֻ]!np&<ڣ#wO 6xR7ᶣo~o5Iu|9m[|I~F'Sᳱ?mj__G/& ?fH~U?L|U3XM<[?>ռ*\>{B[]?JSE.िOk~߷fo9־j#-=8h/÷Zk~'}sۼ)՟F7;lMQu]?iKYx?5u? A6GxXͣ14K K[>1'c?}?㟊-xW4hZg]OG7zipkZ-֟Z^jVoyql@=+wq߈H٫ okcxV_|IWšpNϤFuWWZ%匢em=KJ|5/ $OjM_cG yc4C^ѣ}[ymI<9%1W%6IoDo$wW.X;Ŧ/º[m2>Ƈd~2xtgTjͯZB!(~߳O>|(zZӾ$ў|b~T7 񧅬<+Y_xqͷRO'CS n |G?iRNWwh͎_x^ͬH ?%0'`~\g@/?_/mGU-_׵_ԗncmKNx{Q7?<dtMQM+TzGӼA,V!7}S uGǿd?ڧo"|U_I4_=ƻXM.7=iHO߲G>~'9|O|P??Z ExO^\/ď x:旫;ŗQom=\卶gwjV}ŕQ^YD\]Aqmq3* վ&􈣴<h|=}:$X ]˨sz> z5ωu= J4.Z ?tm#Y׼'?6 xt_tI-#|Sa {MKhnExX?mf57 B}QO~:LAi&ƚQ[\z<%&U?EM//zo_wvIKM']4ޝt<'{78\l'p!FNp;TӣIJ4~^|ʢZ´Fɭ|<։_{Z27wNE?SKXo_Z ;]e{w?uN? +B$i=5-WJ*qѧJ1_|x=3}b ڥ Wnwktiij/ծg%|d 1'3^8)kM]iIeSSڋMotѸ[o|~bq2Gl 2ݝܵ$ix9cLԨKnX-%&Nͤe}.Z_tbW׷y==0hVWMbzo_ǩ'#80ON 0/vO$O8ݒ;s$8[=Jɵ^^M&j얽#=ϡ1Se9Rþ5|=|ohk:ƙ ܢ}-B=2Ěv(O*yh܍r-t[-˖Z^ܜZMo{NyaҤ6{iU}m6El +K G!"-|}8GK *kZӵ̪OMz_kF7e)ƞ~>{F%x[?nMwZv^{^ѭTh3}޿ݏoE ZA@P@|n| _3'z |[;:|=_2k{k=FC %`~([tc_R MeϢ.z6hDe doLڻ7;|3~+L_B=+^{q_jhȵO`R]m5ͿI.-9O_׺n'*k?_ Zu>՟]׼E:d0hZŏ_f|??ܝNuµM=lW{UK&-HP@FȻOϨm% (2=G(hRMd:_':ڣBs7{謭|I8YI^^][k('Wi m2\ 㯓<=ӡJ|[oUgݫ?z͘u_U.}릚yϴkdŎX3ytH%qQMF6~-NWgNZ]y鯭tV /<!#9zS4;B5<ûz{pm'яeiYY(AȐLn+NIn{Zhe)o4u]z|Im{k+i?OWNoN_] ?SO WA ( (?g9'ZmM&=+sR|pԾ;'xSFω̷x^=cMJѬc~mGXItM:%M?σ?o٫㇎t'k/T'; ־K!o<6Zڍ{?G>ƿ|Y Y~-|[+kn#KK",Cy:p 'Ƞ ZÈYx6'ܒq?,|2\W1x^)U1lIQO9|ߚxtC78h}wo_M]OJ!r=vę8_7Ƚݟ\'˿+ooF_6*u(^uWߓ߬iglunI~=k{8_k^ͥWݥJ-e{:__r 3g03_WN\ڽ[w~vnKz%_%$=\|{Nc1U>l|Q?J0ҍ*{|zz_K7g*RKK;G#ߪE|Ŀ0c}W"^-Аp[W\SN/m7꼭nyF<ܹܷӗz4c 8uB$,xJ?6wџD|&~?m_^>U<[wl#l4?^a5jҬN鰛{[[z͠ZQӷ}yyx~?t>WopfqpG`~{G|_? u-Ėva^ipjd>hƙC71rS%?J??S>-@ڏ?+? Ĺ<?YB4}_QKRǛWnI'2g9;:WI?j_z?B^4MAX'Qީh;f"NqiV~ ɷ.Gki=֞OO~Jscsx`ݯk{k4VnWQ:ۿ?|y^Ŀm>0~ϾQmaYi&Yt#Kvg붷͡9V>.n[)[m=˳x.XWoA'?M/4'Oյ-F;; 7O}BPˋO$iGܡGa*/ ~V.z՟۽]x/exe?!wׁ/>*ş4O kF S¿ibRF0ﱫhi&R( ( (25T\ 'R5%nUmu->kk>H lE4h/ԟ_w/ڿZ?eMY7j坣xmvmm>o ^+Cwxl-> (*H<A =<_ĿGJc7CM{nG'aVͧڵ_WX.!N!X.l ? txß,`GU7xK*ċ ]s hiZKkgE0?*_?0o4On<-O/ \^}}o}X-M4],?Aۣ x᷄/^>(oʑ^"־'?j!lGI$NA KÚ\ f\[oo6w֚i{mwewoݥݥw6\,CɚbQ43ʍj@ P^.x#_+th&DTאƟH^.&YwiYۡNղLd>ҏԾ -O8~ ǒ]~)_v?<`]zqd9L>2KJ&'>Ds\4~Iuos%7B6_w0}{KnG6[  #9p е~]͡ #w?&?)?ş-__hI c9c*tΜ) [m[E~4ǙxwYu+ ^\.2}n_M猑83=߁q$mѫ5ݿM_/)Z>7x3q7㿍&A~?)iO~$SSsƖ7ڮ6E6fYmRM_f9G ֔M.HFɩz1T~ľ%al+gFS n2t,E+^=#vխ?ƟD#D߄/jOkZn̖vDKy᾵lpDž⏇3F#jXzz=9ABi*uV_c{=+ɤ8;.wn{s}iIK]Mh_{"Q~8&_4ڋ9`۷é'$V|*mAs5eʕw}Rhr$nv\^TRWsm-{vuhr;q_ˣ5>-mik}/Ap;z~ ( (gcR~ wIx&^8x_@ulshx?tՐxdQ5W6@[@;x#%h"M8xr.>]|>_g?w uʞu[i/\q)f3_KCTkW?OdN46j%Gw{mO%>8\<})w~Y{np+bKWW[-Z^oX웰F[aj.AeU/ j?{V׾A?ƩˣkW+U[=GMmKGi-[2;|XeV_S}TW2çk6=1? LE I[tۗl㵵jӊtכYhܿ_%_ه{#~]|qsĿ~eῈמ(GM+ḶNiyyg@6&'s'4"[~y;92W.w~ŏt䋴O*W0f|T|GHoAs #o]w{O0}y|U!N4#lrӐeٱ6JjjiRzsn|^ɞW 7}yﻮom4Z[?Ho־:/|d5_luO$ EiL }Zֵ~3jMiz{{ߞo>ՅM~mdP@P@32Go۠s)>`1r:>؟`݉??=?SYM쯪n^?^F*<Oy~ t ( @tP]UO >#|[x|=tJxS5惮@u Egqn4H}gSF6~ߴqk֛O{ExzY[qae#w~D!s02 1/Uо0HakhY.–ZfXAmcXZ[ƐZm( QI;go/뽀ئ@P@1>%PgɚͿsUhq23G Q^fk_>^\Ǧ>: e֕(Yeo,Q#6ɶ@?+]FP;;It2_y^KY,sy4Z. ~J{G< >}RN:=Em}5{'ktWIA ܾm}(7/h/H.Hw ?+v 8M!Nw-/҇8%k;/9w oCg_)z_zgnYMSL5oKYA.r$@L -՞J.-?~z>xo|%f/ HNOu$f,.`n `oG.%uNh.e(j6qn)]sircy]8:8$r}wki?3ĺz1vqxnȥc8fEi៦ 4T0Ṟ`]')jڽ]16obr:1XLN^Z5c ߖDNGo>Yʟ/V>&ÝZKķ7zZj&FZ3vc*ʫ&ONoR_0Ʈ"exqh)^)[KFd?b9)QMY>f{=ms;K]k6??J@p5{m#"Kg霒U|@ t<}9&m%׎oUo8:j뚅{7۟Mmm굱K~y_ m I] X.J҇\c3cwqJ[*||Rqj쿻4ז5~i^?q'ןzc[_7A-߯﷗kirJWYoe|q^1kx28mq'ܛKp#Wu~WSTe%LpW魯gy Tr 2_F؜?Mϕrpɴ۞ ='G v5(s_N^VKeʮ~YǓROjϙ{Mmm{es׏=Y$?@ ?1@G-P@P@P@ fOs;rݿ_C1-gLS~yc$$EJsۻWzT\QVnmߙ$٨Ee_WGG٩|ssyLxXH Poy&uOtvR^S-bӷe$^|'LW^~ moy#nhI2l 6wNc{\Z++󶗷ۚDZ\G&w+<-6#qIY |-8_W}۷5|27yN}Uӽi8!ugiGMȫ}~aaI[K{[%[r8:5ndF1р- -~&Hqq?5J.}w0KM_j.X\jZeip7rwׄ#P"|\˛}m$W\Ra/坷tM'ӳď8~ =A?Rɓqk^}QLJeҵmORcXk\z'0`;UdE^*Ul86ӌ58EH,>;*Y6E%~Y1<1_m=e_ u Ο{۸\!w>n<7j3jZ|տNַ趗Z|fc3,yV1Nh.+MrZ{XO 0F#J?h:v KƘ\ZjPoaCos(3ڋ̸!Ԗ'סΡey΍<^1=fE$~ώ9 OgMfK-gn _N =鑞ܓ894>k8V'u飄^۪q`\<8V }Gĺc AtRsu%:ޭimc1.n;]/k/o\s1 >Rp-ZٸT$f<=%R2ϗ1xB|H/6|~w(Uয়?kxK!x7F|i^wPEh6xKNuSl~EȮoS2򅃅>O~m7^Hm޷c'қe_p2j4+SW9IB^Eygg?FOZ<OGs?wZ| _|7Ѽ5@/$QyU^*j~w5Kv|yd>]-~g|OOUѯ|?sxc>Ko/>˨xv]ωuajtKxn^*{OxsIIih/7y5M+F<= RZ KM[|-6:jzvv6kW޷5ux':/xVI'{ xliAwwko^@>2>6za~+O|8GO|Gω|C[h~75{qE/ ;m\:A[cGo!pOOzS "=xox64~o:=Wu˫jրҝo\|%O>"x'NØiMcŗ"EͬZvuxQu_gJx]$__ňRM8?> 3x?|Cs:=05I,,5.FoL!~ϬAop-#%L4zTnҕݗh|drꜛki [W)G♼{upKfpehZϣAҧ?h j#8dv匥/%R𓗝=^Ңo,~5ɷk=+V>eAz{yЁ獇%- >ZNGn[+ٿ[ zmO_8ɞ0{z[o~_9_?O[x /O]}kǺ<Ku9"`?H5co29fѧ*e[:ZekfMYS?uN,eBϿg_W> |7Qk_< AuXZ_[YK 2ϟ*n8?6w.,yV9%[Q뫵\7!˪du:5*^]= 4W|f/;rxWڧ>y^|Ԧ٥:WXJ֎r6תz Y>d~w?ԓ^֟GÒkh6:Ŷܚ\^\iRfHmg?Vf3ⷸ+{h^ie4I$ʊ(pz8C ۿ xw"Ӿ&xO|?׼a&*G5_DDwVP?Td_.?k=%Ԭ.+N;:dwYcPͼa,O-.nmn~8~ؿOڷg#?MKM>x_N&'V?-дw2ۦ gSz6goҿgHe1`Hm"//yYa0&67Fߝ~}TK=ly_ֱ?}?p?a!_noiaiiOQMWC8M5O iXʾv{~/בY_vHoWwS~&i7h,͡x!imϴDK?܅5g7nݫ (KE'|:K_Ch>::N>{,]6Oҭnno.1D@1]/S`vR> |R#*0|0r@Le$`an?SNȰʂ8Vkdaa&A-Wc CA!C(?u[u?οxvxm&<_ rbv?rfwR>t (z~@ @P@@=@?P ( #lYUwp׹ ?;KLio@jhzƇiհYn{Ď$rC{^?eMn>%@?oWكӮ/~ ߌ~__~ 垯 \°vo,[ymmmm@ O?hkj~z8i'9y_|u~$K?gK+z@?z@M'ռ}Ďq9MSrw_+v_g;./S z g~Wl ; }`%ӧo{ OG*H`Cڭ{{׮ٟ_)|w5uI#[XPMմ3ۃ>3|'yFepn}d%CJPEڤ_s<*⼗1 6"/Ng%)rOG(,ÿcKe𧈼%gqu/k:֟e+3_M,!KĖ8{y}~"PṾa 45:rǛiNG)?y6[L~a^\` yҤΛQI[1Woi_3[qu? \C;UDռIgwwIk(ʼ /J5r Oٔ}xP\#W3KIݧog->^ 4s~2+a *wN#K:9'y]&,D,<;#EX|.dtP$#c`, 'B]UH$K /oIc*EN^ %|GHpҩ'Ou.<]^퓾5}Y 8|P>z zz즿;RrYw/ /NW޾C||C%&Y>];uOe__z/8L'+ǷS$m{]u][z7w1eknxvJ-2Hv$LXrq~ՅrԕB׶iukJ^5=vM\n:W o~v_ˬjrYJ7ky{,L^`߅BSdq-b#N?4k po޴S Fxg+l5leWs^sJ8M 9k4gCcm<)m72k"kG-Ƴ!v%_)NHT)'D~ x^T MK b8Yv4=_ B~#?9cXj 8$}B ߥN|mÿ9I{)RItZ>O'/`jiɪ.='Ø:v#\_qc7{vMΪ,+Gr}y^jCxvI^keګѿ' H,O>vw'P|&?P [4|g3᷎dž|Oi? NaB l[VHJMf?Y<* >7xjͫ|di8R1}ӻ?@ ?1@ @ w'-Pv/ƁzLܬ/^א*I2ĢI G9Ϧ gRZr߭tm.^WfZ)/^ϖ.V;)s}w#FA)e]ťsz_X9V>(uÊY;-_h֖~W|TjZgNg< ۞89!pm;ߧ=O^hOrΪ}򖝬tx[{@qcqG;!_f:8XS|^=m棅7n~?R~ Z~q*?`mDq^ \uTn$0Kz}?f_Yۿ7oKNmHmTQb'~1sh[ͩVSz~Ki5kvVnnB5V o~Zo)/O \Yu[| {mJ=i濹%I9O?Bំ7^-/CZw췥7M.o+? O9ekwlc=ݗ~>տhox'a1|y=b- ź' xjV<Mu[YZ5~1x?ǁ>-b}g:v_k2h]F=/6(7qg\h/ʟߍ0wM_Ú\-4KWNֵK)е GRt.TΖ[dծ~B}2Ab1;}A-5{z++TkrI;Z%t/'oƯ x⯂4fy:_y w1`E}a( qjP5=.Q <_$>׽PwjꜢrW|[W}k]Կ._ǟ&'WxUH%pI}~H5ِp0ߴP翱X{7VupU߱TeYO~ѭ,ŧ|+Y[wGo[6 )OIso!Y3s% { \SF7\Aԛg6NY~ Җbck֢ߺ{{R`"{EO.O|hXj=X,E?oٮ|KsmU]M6n[MVK__]խi~|ЄrqHn<<W~$3~?_l]4{ wŤhR8H`.>ZQloXğV ]?w^fH>|A7?4/lxgDloOx !olnYv>$| E?KmK῅>Gw{O xGG>H2RmZΩ-ޭu/7FJ(3 57?X. ?mP<3ƳE*H$ÂlGo-ٛNfcmhI:y8POïO <  u;ixA,:N~)WAt}9L~d:Ne$O-"IPC7`lpW<}?O~tM.6dnv`y8#ӱ4" ߞ>r!v6rX2O>X 1I?a*H@'4~g>:7 p9@Yegv?t9$ 6ݡ$ q &=Yp1gXz}PG @'?8q@H,؜|1 9S+ BO=p0XbsvI=1Ҁ,PFLd| g'O\5U` w ۹rR J>7޻'OhJ()c#dן_u rxx_Gq81n9@)?vg4?Yހ?Z6}>LQ?8ȷ?9t~?S%|h55No}U6n?= rH8ǡoҧ /|iAӭח[mtO.-C[k} d 秧aՔy#m-̛k+꒕~>S~{~m*T\w4չhGߤ_"=6Om/?w˝'g=,iBjꮼV[=Gd<7(U^_D?<@9ƛzs GxNmIr/SnxWfU񷊵 g{ Ax+GT4Dzeı[sW 2L#1/bRèӏV+F5S6s!nY5*;J`:JJw:qr֣uiՅSㄣ{՜mt"OB9AO-s.kۦG+Ka=hjϿO6~#ݿM-3>.ῆ8b}XxcZlcs9Jf8ۓ_( SbXajN9tV%bݭmzz|p~c廌eγ[ƃAY<`b9'_;RaO58ԒTqSbgʨ)kNnsf~jaOOkOBOae[?hGO gLvii6eHc^diduC$0Z_b1S͇/r֤ז:m74⥎ʴ/i=R+ۨNd~ɺr^%wox/5;/=Jܮy#0YK)rOׄ )qEkMuwKqEkRHOw*PlԊQGU?`+| Lyva ғg8!uBWnM}~;kku{k)'oPSgf?z/.<7g/X|oS4 JaU,4jZmD:_6h#o/M /\(x\e_' XOw?x<Qoq.m:/$tέP|;??jx_ž$|[ᯃ# ^`uc R\\\iԿn~pO;'W_,~%xwG|1 ~!x_:烴g@Bn~umk{[[]?e'׍/GkaxrjW^(OvM:Nn_Nx='~,):|Yl4~:o~>->'_h1x!t?z_㺿5a?5:ɧ׾j(|8ux={7|9#/,Y5OSTN7PX>[{qy=S' za\~_칤/m>?>I|Sk^5qkNJ5oj}Miiן'ߴW +|TG~ _ǟ|>5IX#Msx+>} Wa ޯY-.8?77_=r[ L>?ה0yz,`/q^ju/{iFJ[ܖw.PRMPKe;%xu0Ec yx (T~w?F1er^\h諭׶o{ִ ,qxNEïp>30Ё⯞_8[Eenݤ},ZJ{hҔ?w>a۸8@tu9sd}IɡA饓+5|?UP@y?|5sji~2v|p[K$D :pF-?,/"2ԢW̹}qzf,3 MU?yO}+{N]Xx7ֺ|6-d>DS0鲿֎ce}ˆP增>۝IΤ.r|eu`m4X]ܷZ{|v!ӍJN5'䟟2䶺t7co~3k-6oFG%]Eucc>3^7xf ؚ+J8̼czgX֞_R89s ur[[/{M$_G3㞵u{suiW?K1Zj`gZ BeͷvEnjՁ(q*^үo~YBZ-%q{V5Ս#{cK4v ˩J7|Ѿjֿ맽vTi>}mmtMw_g?x3U D&;zMW ;^ [\&a`KG[J:^?yUĮlWNO>jǎx#/6J{_l<}Ozퟃb֩\jWwi\>#CjDGIZ7z(!ͥh84ᅏji }=[\8,J٬M*:`֎ u_726x~Oo{;Kmi2Kqf7V.ֲIm$W.> K9/hK㦵?<,]gƺMEkEc&glC$Bt?x^_K#Y2&8ufSb4 ,)*4@$Q[z^ ~ ~xt٥#^ԮavwCd 0۟~7qJEաHI XZ\CzL@9Qи?nSG_xO|8uMw¶ZI?|U;kx[N[rw_kكqY@ikK_]x?(J~g ^MCBKp3d1@k++H / x_C4k_>0.۽XK{t:}Rgр<P+5^ 4x;J]v@e=WVRb8dEt"9}=/ * L2WK5>Ө_O.k(r=^VWi.A=͢ο2DP{_ ~{v:g;FAMehݓ ͭݽi!Vb3[K4x?iOtw}/jA|CŸtZUյL7wc$eĔ=~ OV?3)tvoʷxKl&{h.bm`3[Wȷz.J?~-Ե;D~)x2cR+iexb?DO]\AMYQR9 yS[n_˨DHmrME%^5s$BL7?@k~_|1/:Jx^:^<)+ket.` BPAuc!/|tۦ"źcGzE.'Լ+#\au _qKixȗTݲڲDU 1v?8sM@c'o?r>F"?8#w  =9uMg(lV`_g?Ogz3#uT>%gXҴDxYo⇍u2䲝KA~m7/r}>fMr?[_jO/"~/^?EC4jizd/4k[[w7jo( _o"g*bឳ?^-c_[OlY/ k0ҭqዏxD'mͰ`ӗ?'\G4S8 3>q:o{yK7iݿs~qC/V--&ܾ%Fg+r/WU#hi!Ei]Vi<8 `4(cߔvYWf' KMKc_}!79T/'&+u.u=p9Tzohٵf$Oo,1XE,K9M1ȗ3B;<SIU}*+G7˪TH˓Gnmn22v :ȯ.KR).fS^Uwz9ܰbicʬ֚u˶k{Ssmsi37V:bh$HMgGxǗ)3bE) x;?<q\ ʍo;7 oj+&eLW ͹gr{K;5?r}[Bzx2>Qԯ{+k寝5e8߈VM׃Gvg 9#rо~o%eZ' ,-WFVqrIi;F\WŏTSZQտOv?>D:-WZ[ZGO[jJJЮW,ey%KltE7r8Ɨ<7r~ƜOV2uker כvJmRyFzAYO6M{K𭾫exJ=B,6°Y^EO,M kp)"X e}5#~0i\]Yù?Zdzh3-ŭ'(xY_J;Ue'WN_sU)BsqMJR9,~44yqiWZ+/&~j>3Fm|*]ma_>(uXnON[5+GV*$_5tus*x~c,+]5 $1J ]F[4$RbhR}VB1\kkVޗ#?rvgCcI8Ϻ\ki]_vW?+ɃCG=28ǡS%[(gݯ |Z;=MYrjMhەoWKXxOx/RaN ,cmRjI,:aȄ?v%̸3.=J9p~p:5\7^7O|97C8W0Jzӄ%yTuSCu|q.kT9O)ä0ce~{{]/@@2;yz`qeyV3OsQnv{Jpɣe\U:QQs1έ'{.[WQ>? SQԮt˻}MUZ$I!"Cy tpp"ea}q8x7T!_> @~QѼf<9Tw5/_|^f6 ĺ=1m@k?Nx{so3_-F;>nCLS^XL\}f{kpCx~^/ σ<[iᏆKj)u SZk-oNvG:>lVbwmk.a=sn߅> ISWT5[=Sk γ/9oG"quGԮnnn^w]wO$[LqQOgnoO9>:;?U>-hG>Ğ3߀>&cǚQxM}KEcQ²e4o"O\wvVoM]A=/I~I_['{菃^g'c׀t M߇/5X{wIeus3:͑\oopu|Cr)m\]/nhwS^oѶj<~>.SGi!ֹ %9-+Q6Eb˞WNw%xޒqgWRR{-V~m(iƞ!Ki4zԒ -F> JX߭].Ǒс?>g5rJ_6o44wZi}6OW;kHR(>ўp{QsoMYXOFSdI (?@ |OYO NO/M?],~_\ɤ\YG-:$^y·D:` h/5rfEҢ/k'?|CM97K~i~acxjp5QKRZ=&'Z+R$7hW=r?OexO|bL]ZxwOYTlq,^"Fw9.e`њ})8ѫ[$)e5sBϒήICߴ&viCNVi@`YхSrB*0VsߜZEl?x^9 xL5"1_X6|2,rؚ[\[A!cjeY()TRrm?wQNN$g~k˓?pCc2$|6|3^c|+ ?u)-> 'thڿڟn UŻ\Ӏ>uޛuEw{u?f{uo I සToωo#ºm-҄3Fsgj sٻJ~_coTdۊۋ['<lE Cy'XO.~V> ( (5?,S/uсċyo;^ FLS]-Sk%Ͽ_r*UֿI䶑=j_ ^̓8,5q5ha1KRl=v[N^ib0">~~K[{>'o[+Ouwloxo  4&=z? yayz#4ܾ+YM&qo].ZOիVX}{7H|77Tq36Xa{woJzOyӼ5-[1>xs@k[-xX:LwOƭ(|.i.}GO*jtIG̽+{I+-= #:кܕ<gU҇OD1II_A21=As=崣'D~~TJlʐܗ~OO ˫ů\hz5ν3RjE䙢B2p _QF ;^QիUv{_XznVm7_^;ٸ^a?\u3 |lпxUl_ ? u'+}O_WԼpuˏV9&Cu}vGHO+'B~xj~׬`/?Oe~|M&!լ`)oxwE6_W,~ӟQww;7:d uύt *oxyXt;R[DfRU~d@{5a 6|+ZNeEvm|_6RSO+qI}_[(R¯ [{M?^t__^+è,,wXXr:'H`q׶L٠5/q 2[p?-?g(/Or;MBEգѼg[;[[ !o+ŝT൞4G׏%ay|h9Fj_Zn][\D,JȠe  v2N@=s@_h_w_Oƺ:O UIQ׈ bcU:noF naY&}i)9۞1рX˩] r@p;cp?wk~f:L_ڶ|Me.^\0^7,#IP[H? pb^O~1Q/7. ips_"NP&q4"F"Du ~=-og{m!_x3_P$_e͝ry̒F0<ĿaOk x5(iS[شe6̉`IV>x6 IM'53c{铈I-k[t2[HQ.!B(eN1|9Qz˟gg&|s k5M 9QWlwWuđmS~ t=^9>cy<b ͽ7Vګ̍8#׃ iwoyj__ȸP1< ާߞ T+w.5@R3_ٷp@(տ<5>x'\?/|3||9>AG}. cq]Rj?Kakms)'~$xz9;O>^xO⦇ei;AԼM ZT3iΉmuoh UC^_ ? ͭƯΛjsz2n࿂:1821@0ݽ?0 wS><|A89-#}knR#麧W,QIkZ}~F8x{⽥c} ܎G9}xRoo#&_\mF/$g-ji%+7pm?jqGҟ/?w B䛷N 0}Ԏ"X^O~bI;)79!iCWKeOL#6ĖWN\eofO7_cUix^"X &]5jmRmkEkDյO'Z =0M~Ӆ X_[G&SsKʵJ*[I=nCnUU|'}u59`Uymu;ndgRq\;IwJYs/|tuC{$qOИ.m?K "+iAfRieĸf|[~% YWG ܅O߭NڛZeurx~|;e\/ju=.nGUh:Мod$Ai^=~)yo= 2F[FAOϊO݄R˭mOOu% .viS»eE*UB %viV#xTi9h~]o74tT%8-n;uτ9{މ]z:_.=:hԡ[{0u\2¢6m>P5Z|q}.m]m["V_֟+Н#Nh^o&{ۍç9o#~y-jUzjԎݔunѦȞ 5ivqԾvʷ08Ǘi8F6!# ͘sM]{ߵ*q傋NVN:Fkh(^_$Y+o4m0=$q >Hok4/hiˮb.5_3Uz]'rChu?/=201=j)ӋM5wmkn|nNyjkY|m>7SSRݷls~##:q6*s8s irKxsZhtguJkw*8~Ξ _oZ~E3Sy8m _˸/Oʤ% KW nZn&*gRCL81tєR,>t pƀĢ$ P`98N< O0cN1=kΣJ0J_f|'瓩]s_kuN7yߧ_ӷHUܴ[.lK[vv޵eA@P~OJŽ<8&ݝߝk廓5o|[/_~+5Zl? D &if?]<<;hKhU=+ko ix }Ћ;0tOfw9wR>My}M.|+u^nOsodJ~Vڇ~!]ya}_w[FKѤBznw{3ʗ,Ɩl}U/6u.nk% ujN累O>j/ n\YXbkLtQg|ʄK aJ-ϕ^Ⱥ|iʮsh䓍ܖ}{%/v pӴxg䑉tqbnm1[jQl"Zz%O~ldv#lc\+ptκ|zuz=3rA;5JiF^^~z׽k.iK'+NAĮr;#918ۮK^ܗoKّxTRMZ=ɦ##LrI4~ksKD\w拂Q#̭-l[_otx\e'GAG?(QW]s_M?3#_Z=v٭LA휞r I_FSmF{c^F\'G?q_OtNI;ܰ#*\w}tc%d7M.rk{e{|km4#W{Ap^紅VQ[OE?O=OOBo+ᮗ-OY:|eq%N\ƎZtE.+RI{|]wj[^ѓS~$Ɵ$w\_ҍ3MM>Nq?m:.ʵrJOW߲<e){\'K ~{V-Zz3_J'Ge>,Ҿ'|?Ox-7_ 쵋**s6 szʾ8V>w'==0zwm]!s@ ~tmi:6ߝo΀ 7@=IO,mLO~)ӯl}FXލ +'Ҡ0'ng=1 S Qgq2g;I/D>M%Fan,MEng )>yn "Q`v[aB\UFPsH' J|,v.иT?xPO;Xr}V?fٷğk/WE6w5eBKZ i@=D7 wjxoh瓜n C~j(W,GASҜ??~ 5O{:@obfR*+:7 jx¿)|;s$7v[pYi!)sipT,N䐠Po>]jǏxW*~v\x{V59! **GQ,>$_sv~n?x/ |Hд;u2k7>5x!"8j}  Hc?];<>C1o-n!)5vI$??bٿhO4m|sM.1oLЬp{;8g i}HG-olV<$o,ײGd;@6~~ {ko ?|_s=ïj?k6- \ť`I@?FOlJ<>n' ob .9ӏWBwsm>O@1g 9@: F7=??L_1-7PdًY?+|dxDņsѿ"/ q4:wŌ_ic.0(#sz@> |I|iK^kOxmM餋 0;=f?0E<} iŵx 姍^~Nx]S2j ;h7b8?+AO*{հߴvV+M콬M' Y w?Tw$1_Ka( }MMO[.[0&YPg'xA:63387񑒏6wo?j_2TLfY\߮~؜Z$Kj9`MD"OROpL}p)TgNL=:ԥSS8ÝkG:I,MZef߳_]%K6v54vN:/tx/-[ҵ 8u >[sx$/~ܷ5W05~ ZgŸ}[+U ],TR3B ;ٹk5.o3~O?x/|3GZ𵖡6qi~}MXisVM'PV|rv\_?DW?m?:~kﰃ"`+kC ?Tf{'kfzGŏ4q|aYR>>z-3FO7Q4?>kUb> (?rۿVG:t8ㅠ T0^IxuAhphCT-P7/k;A|[Ouk.ߐ?.oCׄ?;_xI6V(dTA"TCܐ02G`=}kVԲOٽ:;VJXԫIk9_Z?^%#@n$_5,zFYc\q'_m5RT)/訾kWj?㏌N ZJZ&BLtߩIx<|yq 2{]lkhb96{Ew-8U:PAmR3WY|?^+M:)y%$%=rE?} c* ^{Zҧ%oG.(^uaͶ䡮wxSHeՌ! oaX@T/i{m#ScA$Oihd4>gՓ躻]+5=ml~ x$yH=`|g[ѷtY[K{*1oV 6$ ub`'hH9@?*wȃOJu]m=ZjQK?}]OХwkO; ,z|TK$ҋxj]/7┹kM#?kϳy~W]>UC$`q׎ēO]Ϳ4.G%(V^=y=~~pNQtg;=- c}ڷe(hG_c8/PF {+tOﵚy7bN=^Z~{S't.8㎹eZV-GOnz]z/;+DIԁUN[NDxUszG>-P@6&h :o<[hGj:%COogp|?˯fVK4G-)?ǿ </_ >!jEơ_ xw.kƥ?ZnrU{5~gmۥ' y\P@P@P@A&qNs~%}WM_mfoo%LѿOτ+jV]<7G ݆ia!wi5hܛw1˥^V_ﻯwJ'CT捣گM9]vM_oUj Wn_|y~>B4";&Yo%!OR/KԵ\SiU+k4|;w [O.57 C oiy4?ii,a4RhELb>-hAoch:0rzQ$=7Z7{=ozpԥ9GOG;nM}f'-~_k ?RE:d?ٖZXL&0\iz]|wQft$<.U.h;t{-Ht>薀 ( (?$,Ub<:~Һi `.9~!8Of G.])Gցfx[Al3L2|#޵?ڃ㵲sˏ?\O'!lIt?7w{G=7h_û ^x{ZDkqXl/@b /_2pKyFxZ6xgYOΆ־-6Z@L o6(!y-!,~X?[jE|@kw xS\V:7<{i>J5K?f~`tKfmy@?=JQl/-,/`dw=H:I:2~qgƾ:tKFkOXo`"#j(b !3t*|"c=EkcஏIci<7q>vLėٺLhwwQQ?f¨+1z `iV?.(t0G duʀ~Qkeix17ڶ 2_LU)mˬ\hgi>kIy$bF-/Jrm@$gG34^n,5k&ΟGŦ-@j#(,CrIV9d W TP@,eymosϙ +~}jJO( rK[ȿM^uN-i輭X?LZ5Z8D-P@ry}ӽ&ϗW3}N篻c ߎN__1~RoT.[-RukA hhSE~&ipp|Ŏ}Go$Hl?Xf3P>l՛7eڿ[ϝC10!,o? o}?v}ϦwP%>2OԚ;c/iBo:mn?K@0}:կ-eD'Kw?h8{G<_xz۴[Ok}GMY?xYHP@P@3'fx׎=?|w$}__P~?ߥq> |+]hLk$,([D{r Rotn{v}lӗ&' PMk=uyH]PzkYL+@<_[ɶ}# T^--oFͺz+Wm菕'NҶѲ^[_GT>3紆0L2? EK#eA&3J>\0'?d8Xn%K~wZ;K_EC._3ӕmVofިgE=2>8*j_c?}[tzy{_Y+11ߏ\HR_KEuѦDА@0ӷN{_J[aGt8gdr.8-:[8So|=?$ݖytM9gmK|QUkkͷgC I!{оK9a5V7ܻW q-Fdۮ^ =Wo_ 3)rivqJsǨtzꞎZscY;2H}s"I|@Lj_c 갾b_'BϷ|IJ־Gy n˯kEnY`)6vZ_9#2pgL@Hi~pW~eԚe}۷KE#KM꒷tEӭnJ PYxRtI hyAlJ"/['o]/ ӧ_h]^wr'܇=b EYlhpwRРǡu =A'œ+߼'ߥ.Hj?GnqOm|}e?>!0Iu/ ],Q<3U| 4YK]=<2w.]vWWIo7t}K^N٣꿇Zw9 |QoxZ\aa'7fgմ | |3Î-G_g p:KOs5+_vQgk^M'n-i_ 1|)ǠHgmIiRɓ[¹""ـ72|O*' Mh%?;B;{JURzOwJzXv8\c~1_ߞ;eHTӳEo&>tJx3τ5C_ֶ]Yʖ;)ặ{vʤ)P^u{=᥹m}IrNcOAmoiZ_7NMχǍ^Kouz(ӹta-"mR{YfBܟm$?h'/cˣڿs>JWܨr{+oE>4!4O쿆"W0FTeΚ8\?dma.]^XmmҾNzZIe8Jߞ:si+_sZ_{=H# zǷ:W;|.)~T/b*Vmt\$'$ ( (k_ߵ_5?hFBӵ _&i%6u]B^|#TpcD2,h?% mL08OBø?i);Ӂnri-r 8\e*&޹o`=b8o_Sz kOW+Sao9xdD W)U)ce @H^%<)W7\8Z3ʲ?@yO4{= U%iֱYYYB 6m@9*?3nf!=b-W7i⹛͛}Ǚ!u8DMBYn- |35K@HR_:X$c:mB?ȿg! 5K~!|EzOk,JUծIc:zwjSBT:Nq`mP@ O?h,tt\!Xxc?##|[qVҔnN+kluFɸ~G˴J(o5k ~Ge[Y.7 a\ uƐ[n,yrL:y-8}č:ffҧ3txO=|J8Pwkeݽݪ(/KLȸ'2ɸgI-dC#~b ˽m..m,{˻#$72<`/6 ^ΠƓ}Zoş5f4ق1tkĞ7A敥>X4y+=J// ~ |77-#Lg_NDtvֹ4C@TFt[ z zS?P3J%wVOn'3[}ݖN#['馺_khjҿM>Tty.&Xb ;c; F+{>e+]nc$xi%P{$2Fsyy!ەsQw깬r+8=~~X<3;CE)sIs[7lƚ I39;1~i9r=mCu=գ9^iQ~듵WwҴN#+8#x"<8U^#| Jpz۷zzV-we(ͫ_N\QWҀl̩f7L82%$9=Id֍5+'/Nik6QjjۿQӲOG {}%i>#^_4/>#4E᥏|7ِ:>#j_ēf̟q|o^P7i)5-%Nݣp8TowDrC+%/coGd/ ,<;~><'Jo_|aoQj:jڶ~Ok{5J' F 8W_n~ tIٞ]tM+ۋpg#^o?t:}ߢg 8ӌwybMY˜$O9?WR;F0hep2鹗lV׋^K>E:>I ٸMӌW[[K]VB4S IMy-X"hhj^ooz**~2KK^HQyWg?R/m|s>29$K|;/ #[,7v3AyjC70y[x7OR~8TM9C]=x"Pgk^j^ez0{?ൟi<7ZCƑKxx.N|1o[[ZRg_ĸ'_ӤkUgZzk/KTwV.n;^ о!/nxo4xv; Đ+t CKP[]JxL[b)r'{>^SՌԴNߝ^ѕm玼~-9v^zڴ6n_vM֭_!0 ku,1?$v'W8_?5OO_Vzy`^?LZ5Z8?MwZv^{^ѭTAPM^]ok'en{^h QtBւ 1Sߋ0 Qߋ0#~b޾ M )$!-''>(M[~/rCC0s{ϕo}OijEf\Apg6RWgQNJJ~ϛ}of7ׄ~#֞ 헊mhwvʆ^mGHԢXF}9uSw-uunHk{mJ> brgR5ԡZ*гS_4sj ma5+IտKuIb+."[Fh '7 -kN<ww9I&jիFZ89 1N|6^Vnz3gMTe )ӧC$pD J*ū?khOX./u˖->ohJ;N0 {c'% o2tkgE{Jp*%նVONJŠ ( ({v_?<|e=hjn|}{4|5u]Eojvioki;C%hPa:(3졜 =-P@P@P@P@Pj=yǯ12Abj2_iCl̓eiS$qA >{&~7I򴛾m-#?\sɘuI4Y+}]0ۤ@׊`q+3Gx1c84ቭHX^[e}jvNnޯK?w͵n\IaU<ƍ}2_+tq|~\]N^7/מZכ{iJGVǝǟ#򿈞''s04+x7>h> qm3MUz/w=n֚O5y**G V-?w4i?5u3}3Q egw [| w7{:5_iƟYy:Žſ\eZ>l>>*WdcVt=;ﮖk{ohFCMii \Ɲ}r$|7֬Y0>bG~גu'7C?>>~c2KY®o?Xkc⫏^@1v#O~s>z{N޺[MEmFxS1!4'Ld%?畄^eC o'VZJo[K7+yQ.$֏^.D ыcby`Vr8IIdsjsB Sd<*<4|5aSiuOֵ7$fo B(VGӋpsvjME,E5?#^}%֚WGV'1?3W0we;7d5;&G5CR*xr!~o7z{nvtOd*q^k_iePW zw<>~t`[`q/-9cOFmjy+f)anW6G>ߊwK˙[yiH{}8yYI7{^ꮓr=8F1Kܲ^vVat8ۥ9)w=whdO<Mʄu1?~]+@n4=G?/c;?S/)3}2( zr?G1?࡟J|$KS⩒;Og-6WV \m8ʿ2jG[ާNJ)AT= ki{?u߰X&wz^r//4v$pI1)sEa P;+ aT%MsO;/zvJE??Sܝo*5Ahx3Q𯄴?oxGz:|w|1iG/~|:/RLӵmg t;luKy {all;Y#+*gx>z\Fs/޵{.ח*敞ۯtݣ#I9] E<ҼMI6֟k,_4M3Y95Y]9Qս8Pxx]n^mmfir~͟Qk_xWᏀC:~^ j/?>W?,?e|ơh0U  &-̱0UkVwJ >֍|)<:wVwݶV?]??ςnbo~BW?:5 _YV|/zڞxTﯭsmapιhZUmO[^_jq]fc >T X~jv: oًƿOok*{)-;_uf{#Vqy-OsޥԿ[ϝE]uzKgvkt,_u4BXu?~w|!OBX3qnG ߓNMdlԥ/]>?{ho{q/V׭7 ×}R? !~?5ޗT/vr\6}aͪ -4ܑ[P MOqчyJV$ly}9j夕uQx>&| ዏ,Θ4}RTԴ;^%ixwVn.>ͩh΋i&ɫx/5q]wtʛsBy:Xju+QjmnSO~o^IrBNI.qJZ`tRwM깯{|RO#x]ii"޵ZjVkմBA0Lt,7V]Z?g_U/JJ{U4Kv_;}"IG&ݦzZw?hЅ?l1//,g {g࿉=&c8}zӅ/pjT<ٵjק?z'x7+^ӡG bI}vx<2jE-M:lT<#xH懧xOYA6eQvm|An߳#q:ZM}C?i+S:.?ií:R+]}Y$ZQ|Q.|\ߺM[aٳ)h~<}Ǟ_]~qI麔?3T[[ pw+N4䟳O˵?Zh:$9/InIaJZy]o&;LJ?f~ɑmWV?6|3qj~#σ$@?ӵht=wMJvt٧]N ߋb~`+ ?8'SVOmhI'h-zѦ}Ju? _FB?Pӵu+s肋R֯Y|]t[.+^4>?T{'k_iw> L,ſH, o`~_&%G<;ӵ}-'|;/bҼyaXt_M>wMtdn>ot;SQ^wg=Vw=}m$4sCmiiZ:YHD7|+7>+-xˮhu(u澝~'-h !q??)~V/otCYu }7IҭԵFXXY.nfi۟)iw[ߥyUup.Ut뿽k'M9F_?ew7=|]eo1?~C[K G[Y"KNo/5{[j> n5=W* YN9'8`Gg*zy3Mcq?r? Y`\ԅ*s/RVhJO e ~u+uJ3SO >8krj>'Zji>'q١?f?&n5h5:\v?广:o5xOC.L$ĚuT xe*<y' }jQCJ)'޼9/_S]ߴi #\Y|\n$/%^j >#>y҄:qS,_|]P7ƿm~Ӿ> %á|`fcZ\#xc⏃mm#qYj7wms=bnmըP?xa~QbF1q߱u\O,xf9&7?+ (~sָ#ʖZFY| _ǭ߈kochnn l3jglz)s?/.vBM$]Y]dxS̰G)̾}vR?yQ~?K)` Yadm4Rt9bG˟RNʿ෿uӶ\3UN}˖t|i9J^FNa2G@P@ _޾ \QZLQZ(; ~ZR@@GdzPdzP?1@ }C( (9g&\}^/ykR-Va*gn:?{M5k޺kyuP@x?wx;=CW k|?FeZ#n^~2 ⯅_<5Eg|iO ɪl!2X2YL |hOki|bfO2\x쵪?|Ki,>"x8YxSQa:t=.Mx&:ݭ ?>~Ξ.5/&|Hվ;O|Yǃ|ajW? ug>h-n Ӏz;S  tf߄ߴwty? |gI_SP|;hZZd3MV]>Ѽ.a*!-9MK^rn~+#\qI^׊қ_9yec3>)JQvЕ'=xf[=1ö-L" jO\h͜6naR998{jIG?]UgON*^JQA+Z|;S?n$bZ4s<[Pv7.qU {,4a?9ҩk_j_a(R+Jp澫ٻ.h%Z|Mm>X3O ;Йn]ygLlb$ܐ^][Ͱ,E!Rn~{(%w 5+t福egut)y}Zev:}ؖpEoj(bTWUǩ)s:s{N{%te7i*;Z{}ܩ5-&Px;^۰) ( ( yh<xU#xxqhZUޱ4Siܮշ+^^ͭ- )x\]o^ {KQԯu;뙼CUп18?{yč寭ۗ/~m;N??ǎ?T+ns-S⾥>7mx(C,;}]q'_aRqRo=S,%+~}i[KoӪܻWil7 5j 꺗Yx_oiriZ=/dju >qo<Aq=Vs䔳}<=IW= sKЯ[wi{v5z*_ІCߴ3MRx?|(ͪZŗG_>6M|GyshÞ0cF4[kWcy6[TAO>Om܄=]>W>V柕>nYo{җ-.}ZxMf~m]!9|>a곖Rr_MxەteF~j3g} ΁ Ykrxr@5Xitxtȭ[}l4xo"ʲob)u㇅^yf;ki)<*Xj82^mݩ ?1AXi_д?s=:[6mO{=:Rhu+->ݠІM[`*זs]m.m^=_9⥟_+?Sj|wr94+~|@U C yI Ԋn}vJ~WQW_!Fh<bwSѿgٷwaxw^(xSKcPΗOB&Yii3gZ鿚q~Ug2FQci4k/9KG SpۮmQ|H"] /y<@nZ&w&SxVirEΛ?>A=_ .oVJ8O䜪BٿPM;o.iUnv}.h$.-I!.?u,SGg߱H;{Eg3!tNf7^Oy,ѿ? g-[U5}ծ侶*F%y,St(4'9^/Vՠ듋}޿ޏֵOW&~_g9_IKWg3jq8O_14%k%nFvkt>$wxS<[K,XCVE k~jZսX%x};{~j>mo>ŗj+_k }N/U*\٤ŦrG,k,,/"zNPI"hk>i{Fdr?1 "}>g?us7sϕE_vaayX~S֚f6#:I$iy Ѿmuu(~rF|Ufx3V/PEkWt Co.]Eih-n^HO6qEK V˩ MC[yN-j䇳o2vm֨G̫0SnuyiuZ5u\Ty ].o {e]xrvu>{W!K{ 7/pZ~,[hpTqSkӣru2*wj?A d!`D/{4T,j{e0֧F(=+`N˝laʘ4y em9֕G{Z.c1S0eV-5)-d/ֿ&Qm:?ŷk*.<X(5G/4 aXi:K5GJF?x=X{eO߷?}iba6n'ңQSJEt̲c f%rB:>ޖcciHaU翳#x|#Vxsk{?  5>)_UY^[jws|^{Mfա8iۮ.F_Q OF߿>)ߚsZ)95狼l8'8F>i0%mj>wN̋G|> ag4i"o ĺ}csiZļ-ŏ ]ѧTqTqGნHS[Q垎V}{pq#)Qqn?>Kj,CU_?~ xV_5O x{{Sk׈'uw0ܳkǛG>4߳yYѣrǑZ^F{jYϭx׃|>Y?c*Buu0x ӭ8:/i[ZN{ѫ |qC_?n%%¶|ensMU"~h6᤹u' #Q?3\jZǝu 8mRiG|OgY:uh8~qbx#DpY634a*8 X\.JtJQ!ʪu>@|GWa]P5]Znifݘ_igX Q>V8Ѧ)4ijm'ߘe08Y5,F\kQ^?~j#e*;Nf%sۤy[vvM捭{7}9?s܍%k;zZo^VS c~=(QI+rk[{+}_nmH'-ێ2 Zae z>{5^njy*PҴt}7}-e8p:rzLR*3nq|voo6{٧k;4T磏7ovWM |!8N994#i-]ڗe$ =;nw}^2@;$zw MJZ'Y$- a[ `*%V_WUZszMZmޝAǦ2vL:X|e_ x_EߌCuމ4B;>WJk棡,uMOx[N⪷-~[f xM~5|h>I$ٳ>Ğ 4x~^x?jy M_Y+ _#_,x?ǿ-񞗤 ^r>:>\L- cOHࡿ\KŝSƺ~S5w|!<'xNڏt=G+_ Cmb)4e]%{ .iq M #1/vCyƱ g$_[gq?E!6#G4^)qMr7 &]m/G?S#^C^?,iz>?T3}~/߲wۭF?>-ңT<-ꏦPLDSЍ/JZ}@lrc tek ZxuOqz/9U x"_OOmy"mԑ O0?m~ŝ>n{ Eӡ5-CR5kuQoƏ?Xw}-U]?Ž&~7?m?o/+_xgJO5xOJ%ִ jozmOڷ[0O+/fڟ5kS\R<[GM:Ѵkv=Tw>t^|y9g /gįٿ?,ΧKF#<_ja򇝯iqo_G駻I>zvQ{c?TT؏ ]>v]Sσ5~ >Aԇ551)[Ukz)^,Okð;Og'u_מ.lGI.\i_GuAq`f@P@k9hAg5!//tB_6W1O7qEv6ѤoLUj s~')m#h|WGJͯ 4k6C@y)>.N>]' 8xlgێM0Vw翞6m[{Ӕ?hk}l._ƻ]־otk4I"<y9ӵ;T$[[ph_Rm>wz[[.\Vd2_|r{;Yٵ'Q?V}&X[i}WWğ !"'/C4X7#nmj&OikkzX6R˖*<bW E~1]Z#k? s"H^4}C4QKD4O+M+Η#YC܋uc8UֲU[}yiZ?ϜYfM'=iRz~ .|KN?:g5SR]M箿My~]>?ʹ )P6?/j|o_闟H}Q1iMow'aG?R}oyk.N'1J4>n'*~c|58j7)ω4F&zL:BZ\H'eh^tEk}/W jz^_ۓE[&imW~xKHi6zjQz $v6Fqo/cq}/.릑YexL&<7ï;춵HQHN=Ԓ]Zvrk^{_K(םjRdt<_fv0!?!1}3T/-PP@P@|)7|ET2$OxHrK7\rK k^~w쬽7mG{?{Mҵ_GԬt7RGyeiMդ )`B{qU[T%iE-R5tZWRoY†{u_N<{sR?18o Ŀ/ȧ''Oý?$iŹյbl234y_~"ZVog8Mh"獯̺R4e~v/%߲_L*7w!~+:#M~oniÝ#> ,40][ !aR?g#щcM_Gi:LL _>'xV{,bBoqIMԢ9*S9toi8g)-?>ٶ?/W>xVѬ?Hc;"3¯AҮ̌CyhP@K WNpa+)8hZ7Kݳ kYmtuf $_^!ug/.57|[Sy678Lſ˵*[^-Vz|-N|M(ړ>k|mV\Zǫߋ,t.k&^]nftEǒ0;stM5[KM{Iss nj|B\Y.|G^_x ; RV<үtjZ2ѯs$R|>v}/˿[n]/~fג #? R8~ Xc掖Po]T\Kwy?o!{Ťh~-,1:GM/R]VԐ[I/OslqslֆaҧJzR~Muq*q;qi.e|?{^8UZjvDPQh߳ݺ#m_ i4Q:>-jomh}ֳjm3txn\jZJ<'LḸb|2m?ϥD?hXܟ |Z~׈le[mb)#Ҽ3/-w7R?gв?MϛVZH'uN06.m:GG CRgL<}Nl"wY4_܋oi?-t73yZv_A=8\WU{]m#<[?fƗ=߉|0&s<4z`H.^=_qy/4~gdC);r:v~0{%h >پXdv}6uDo|+OyX^~Ԕ !@{+'# <=w-~պ4_Իtr2V ,֟O>>j67!%c|/KoA|E`Ѓ~գkzuUBX=G)S׵RM;ߙw ye#9f*IНz8OӜ!Oy7W0W+~WwYX.zrN-&7q_!ʜR9J !hs+tZ3F wM EMoOⰏ ׈o vu9湞NtplpI9V2l_jo5jBn[?  8iu%,*ڭ^)RTSsՅ+N!iΤ#h!<#~z_g_?[txޱItakhml!KE >y6{f.wgSpT] ܖQ_|!GU޼j^HxLj)W<ڴ M<ӇgGB+''n~^Ƌ{" g֚Σ޿7XLj4ͩ]ԛ~m?.ƸO6T0jNn~5E/O~,xS_SV>yKOq_ 0JXVOI3)n2^9T#̶ڽy?{y'IKŎ$F6?}s> 3:5C޵xAQQa"q"Q^绽R?$OxZG3c௎_ ಼񎃦jF}:.ivfiww=ɰ:嶥o,X*(Bh׼= Z>G zNwmS2>G<_ER6j8l¥ 4=HN0|z9g&j#7?67¿X|/5 hZ4=W$RX7m-5-Nuq.ϧj{[\M>";\^O2Q=w j <柴 r&/~xqu1XvB25 էWQoiCaMsBT<;qSxOnZ;^u |1}h[a_? ƹnnEE|0N>>3.~u|NcNsM}匚PXjВN)4! OH~aOoDžǃ?ɟìj. Aia#VFHC)85U45{|[SۯwN׽Lo8[l}ifTg!|}6MRѬ~o79qzkO~?~#|dͧ?0 ?hD.5)l`WzZ3Mym10uBoTV\_SvVzNm*Ǽ!( ?QXSJ3{AzwVZ??wm:ß !7../!x|KhNfZ8)=^'c0iSQ婯'#z|I'vֱp\+8ZU:5' cBv_y>>jlmOڃ/l G SŶz^NOi|9~u}@C1tx~>θدox?ͱ1h|O_{dۻq*Fn,'cΌkg9)Cbx0>KVz}9Wbj::x_RYR}Jr~-򺥩FU.ʮޟz=9~?Ot“kU{|_)~+'LU:sx=dt0ڻgk?~lD.s ZQnHCrO P>-~¿>5߻|i| 8aX ^<[_ \K]@{GJ{D/K\Ja|֦o$>v%@?+_鷖7NjK9_Kk$_)Ȅlwe@>2_[o@im[~X'12[pFvvxW>!yGa-R/6-l?;_C_H?=?e7~}=ӧ~h ϊ_Ju/U>"Zosqꯠ9ll!&ԛN'\Jn/ن3 Hگ9?f_xU7ƿ =3γ/~>/Z:Ɵ~ ׼1)ߍKHNerj]{zM4}f~Y&K/o!M.,?th'U=Xs W"g cc%G#@bc:6[XKUT}}<0EO=0r>n T~ oKyjoۻG4Mv/PDl5x_!]>[a,wwϚ}>OP@Pn?!ϮUfNiZF,V ]B/K#ۭHvq~ͶTջlukŷm^:r~g۪y@<7?gp19nLι{紽{*K[{w<)#g> HSW /ta~ΰW!L33ގ %N#sʹ/宜Z{F~nyh|&?B|6W1<%/+/]ϩϢ]]|%ij뉪d\Fh/!gĘ!h\cc腠!rюI?b~e z/_ +zUޫh_p%5CSֵCQԵKWUumWWյ]V{F$h {+[=:+[ +k+hķ+h"",QgtN~b޶;MSZ|\^ͦko{H)do=,~2Fǧ: ( ( ( nNA^=tl|?*gCh^"i֡}ymLsXC׍mI":ѹm/SkϋpY}S.ZR>k.T^Ҝ4]\|^OKuOyO] y m_9??<1ћ?JqjS= 7+Nj%NW鿽m+~^8{+i~/Vq [x^~)Dj_oɉÆ7_QWyj0~J-nIs{euUWa'Nze2^^s~goT{_؏P#{w>.˟To|Em韹ޙ #CYƟo3|4(.yN&Z|918Kwdm:FJz_ټ_|"Z6߳x_tItψo7o&}[Ѯ=nU[[>i߸T燿 ®5]S#ҩ>{NyK׆|A|N]ǚt+vQ~uQsqS*.7~֔kssY'Gگv:χ/>|F-Wz{z[}}:}$7[UGֱnomםKj15]_Wh]x_>9ߎ6G_ Cx~(΃NM2 %#' cT>f~%־툦W_޽ TY-$孓|~_w|9?hm~!|(OwǨx_|xj6}߇q `Tm$EGg >o{$|ozm>~*|-8|tON|MsO"%x;>p4攩]J )tzrUPkY̟<$ZKk`#oWOA}wĺ~=W?znP닒[mR|5bu]5M]k6ٻY|WG?QNΗ1/3GK}B[k}7h{c} ;-|2tsJnX8ON|Ufө z$CNXSֽߺkp7HA#/1omOJG:[O=#~yj*Rd]dcoĿ/⽷FA'߉$RzOYhZI78Njp\7<9/xJtjÝk97wnj> *Ojko{_? ~}&|./f|G=팅^kTr}Zï+,(+7{oWw1y 2~Ϟ_&>h߻t趷KC(/=zToӣ7zrz7)DEn:G/ʿ?{O+In_hZfXVe=Ro=#G6)na$ZZ[VŚ~ԟ""-㻿i7/{ ~[4girƟA< )z ~ԔNBU 6rr^zqyIS_TKo|1rVI/6{>P?(ߴo|'&xUxYK$ ̷#Of{}/LҴq*}>6'gY#1JZTдEC]=/o<|c X<$):”|ԟ&~|0pr q'#u QUQa仼WyYh~b>Og/Fww#mr?Q|jkSFеك5 aXOJЯNeoq5o<3\ڛkz쮦'om-V]uv۵ bG.xqV.d⟱RUgӜ9"PPSdce^:rPXu,Dn%q3F:ܭ٭mEejp4}i_ފ[Ef q7%teCSThpv–~敜Ӕ~YS>\V4>hQqI8󡸋]qjg.3qul~#sWݿ٨^NCKtg?/eiڥ\kFMN>o_ kZ/K A$|k8'g׉/xLԼYM4}GL,oLj:ם-_^ENuũ!~3㬂\FGd}/|;ot^rl&g[0WqJ~ :UʝGɇHN.Ӝ+ ?kOƵS~.kk Sž teZQ4 }qRxY=~^JO=ΫoE5?=-k⬥f%ë FuK:}_GcWS9r=o%߆_࠿>&b״O |:Ưw!cIq?i]܆nȚ]JkѠEeyة~*%B])M{H*}GW~8G/z_[s)?iL}l.-{קGK/f?ڃſN;|D-|TӼa{{+R,wSb|Ž?E#.NJ[K)5:Qjw=&HiKO ^2ᯈVy\p,՗Qo?i;7(F5i!GDafx,i;n16yW3d"f4ڳz0 ג:^q# n?y%OÜ-;ʼ5诋c}ʹ\ԧ~K mlaݩ0Wս/ӒWQ?l?/K*9}צ+<JX\|/y?:Vct {oea(`VK80>Z*? h3|S㟆'|9ܫoiw>[",;{{; ?FHK 8U:vxo{^xmRE}>kg|G e|> ԕHTRaϒ1?Njj1ri8~?7ğ<,x~M~k&#R=> s 7\SA[V޿ɳ1x|frC߭]^׭{}">Ϊ|%<.Ut*̡,?<+Bf?ޟ%߂O~G߇~sz? 3A[V qxS] .-t2}#G^'7ͯҩ-Ӟ-vݽ42)F ux3zٖWF=aE3ԋq8,4+) uhQ@:s߱Ѯ}Yi5uJ\Ϋݳ65}1??9[O_-89at~?9bt;?ٓ⧂l!u/-|d,!о<%ګ[7Mw[nQ'>O?dr+E$%ß5e jPjS͑9W9+; V?j+TK_x'-!oF7 DN}>~l]_~COuf5wS Sៃ?$X[Ih:_Ω7u~U.T؍#<_coi<.>9g);Mrr3w撶}:_H?/| t3῎!tkicQ=z⟀6:hyF:]x.r8>[Tk`1>(' ?- $y`x|G'1|Hg r1ְqm?Mzk^3~˿?jx{,<|9y4Gi\<pԏsx:9O{Yլ/i{}Ŀ$þ=4㷈zKtir|F7:{<;M$7:]$\|=OsmOoRԵ{oo-|ގWEO+/MG7n?jZX~Y %}/Ybӳh:@?W?mlEڍT$n໥ߧwvV?M w3.~E-uS$kk|/7/tx[IF. /MUկnݯ|€ ( Cgq5lyog.XD?]'=n1~js+N-KV:OzװQb-XG"OJp{s)rZ]-W!(UֽyWv}Wn[U@zO<񧈮s#jzGMbiu |qɇπ>t'_ZnxFUM?Yi1b_j\:fnOڭ>_wh$՞ zфu^|;ZZin S|@l8s?>]{#fc8|;'zυ.1Kji{&;"M6 n5usQ(_^WKڿM/˥n폭_^ xG?K"XBxcy87g<"  ( ( !=sCCw{qO${~/vOM$A0 ( ( ( B@@ 3NNA?C8siZ\[wop=f !d&_ny\Ft n3-y۽Hp-66of~X~$HƷz/٪NWVijo D'—9x:-xSOH!.\I~/':f+ m4[tKw[m{GK9>,_\>4x.WnnkSq[GuQqZͧiiVviz6,iz>^X=ŵ8GFK9ϓgܥZSO޶Dz+ǂ>?]MsҕVgw͊^_>sr#nLS'M9Zy_NJP{?ˢ/ 5TkM]%{; 5ז '>J yPxFs;oOU)9߷۝zs>{[Wzu_xI?x*hZ?}◇ Kt&=Sе6h:Ej}? cIr}磻WaofvQĬ3WZm%uS|ieٳ~ↅx[%?mwBG<)Ge.Mƾ'AĞ}oobu ھsR{)i?{KxV_15vrN87~8\vs_U9<}t[$۳5{[OW{4p=i>΋qmյɭm<=[ͫwkmEpab>o2\y1-Mէ}nn4j_]MoMגvܷnVN_߳/eߋz>H乏V/h'?m6?–oȸ ru>HVۚɾ='KڥEs;rn]m۟t _4_Sö^\E\^\׊53Q׵{?_ۋ{=6M_31Jy{IꡥBj!o7)TM]0BU?newBgoJWuKi_%vOҕݯskA^EG+|?4~S?z9o]Wm> zY^K~!|z%扨 3Z/M_CԡVox.-r5k<˵g&;>?A_)~˪j_ %b{+h/Ƴ+s⷇">Cf\>obqX&_}t,|Hg|1~ׂKŚ> \}jp}a}c(},î}mm{T֖p<|bkZ0[/ \tZŽ~ȭpRiktvq[首eN/?6r_(7u|+ I˗hj:gPc?h6p)*/.j8??](r=G(;? ƾ,l xCCAjokie__K&aP q!jե{Iۘ?WNS,dү>GZO<&K/vu.5/>Xx?f.Fmid_d?Џǰ_?_iٵ<'[inI)c.N|u/|qzR?XEmh||đ\H?[ly>hvV}'$Zg]}-irynGO^>1޾yO%h#kHտoO}hqHeKscѵ&2=W}>g'c9?<ӌĬ{c<9xؕɿ$m7O{y5+¿)32KE`w v܀9ޯֶsF,no\Od}o埍ڏŸ ˯&o_]#UIŵ׆j|ؗ?/bY[׀5/53XtcE/kEgc4GIG kks[F֧eʯiAU}V' 9YM㾽x9ƭxbp,d߲ZkuMTڟ'<9a>H _Y܆|;Q?<7/#AGch5 cֆoce]'mAN"ѫ&1ӫ֥h^t3ΌWBs{KUa?`o߰׌;. NJ>x+-Wx 5Nž$MM'&gF݇mKLҾ;LÅ#b)ʦ߿F;{?gZ.^OeÁpTqO TSiԥQFxm5kd`r îJtjjjrab?h~|>xkSq:^e4^;im [qx{Pڬ?5˿.,5)`rqQ ܞߕ4״Ys_=ϣr?σ(0̾RU5 xMXoZ0ISgWggf:mo\iI?wŷk}[k="/ܘ.>'b1YS 8ԣ;|*M.+$M&EᧂYfR)KZ'*l6iqzT/_y.KCB? ;O3 )[I?In]BT[V@c'$\ KლN?jjϚ=&Pdհ3sN#-iTޜss.O?lϟIE|T!&8G Ct?1\c)b)wƷ}fp`kZP-em%?Ǹ ӗS u Ce磷nQG./X~R?j.?g#N}/ʯyVvnLO?Jum>hx2fpO%O~}> 4>*??` 45<0$Bϳ).&-q{ %7?m3aq6SZmʿhLxn>qbB QG&rgN!6rOVϯ*-yc/.w|7f|^ MvK^h3aѵ8dNo/L2e2'îڻͧ4d-)[3WMJxKsi(?ka}U˲txbJ%<<8J0e̟4|+7Əۛ c݇->:xko-sZ=Ο/ cXXoEhԺa=.}nmFQ{kaݿw2(C{y)T~(riw|>ׄ~W)fRbِcӯn<ƃRQ{TwRH;(mmnD6o

_,rIjtmOZUE8է~y_]: [A1z{#BF}?L4ĺg?>=hb'5 #C6ֵ[in [uK?.-O<>7obW¿,gJh?_,^ >_ vԼ;KUޏ/&еl[it|(O!g>X~ŷ?W:U =*_e$CoCq{L.62G_?P?_H O?i~'ֱ/D/1yS߆ڴ::>6Ү4.qa{nqu?狿l!7oN->9~5+Fjz[| ? N-ma x3]ka|fg~"|5Ovc ?l-cJ%?SUŇ@"xoٛK>Oi:W+qrZ~?lj>Not9>/7KO:!Z<|T~o7نѥ*Z:켵I7~ў15!v~ͿyΛ GN<9al0~tWTSENjO>K%{[8D?r?__+*u<㽕Ὲ4V͍ iv^mὛS7#=Ǹ&zWo"C3mu? g֏? Qyyu?G?\:(ҿֿ$:(6jZZ{]/x׿AG|?:¯?zM+|px?1vV}bCT6qp-mw+SZnnm-ofC>,T?do $k?ho3? x?tRO2Au=3 OMmiNBV~o-]w^_[i<H> >iV>2mJ 6x~o--nzCj'Ÿ? |92oOZdž>d4= 6ŵm7Г}b.-Ǜׂw ⏆o,_o8xV޷i M' |N:uFssŽ'\tUNnks O G>+|3}H5]'Xi^xJ$UQA ]>o麏ip{Oh?i 1_~ogkUK^?OI_xsPj,ui:; k-|-kk?A 緀;Oj|Č-*Sm/r*>+ZiBZoUTZYۨ>*~_>6mQm/T dkT Y~x:j.OwOmݟ//2_%+iiw\ɞ*qiox9]C~=Eg=׆7_CgʪĦkuQcS+N_++o]qSetY< tkv:˿<5>Ꮈ2=z& (L%QL\¸m{iq/+U85oF x>V);Zr,gWƿPiأvi'> E'`בS6E?w={<I~?@P@~i_t-{?MAƉx^~xJ?_kΩw' qXz|^]EmIN''Ov[ AsX¿/?g-FRP%iM7ľO|(U+v+9א{7fGu H uwIy|}3j&7vlmb]kߚy6QvvIa~_ky ~ 3o6>&/5񾍤x{}_uMcTѭ4ٲ5=.L[xG)%ͥ-gʥ漵=zK׮;9 ~?Ei/ZG"x?=CL zj cCu]iͨ>$u {nѵ[ؼ]Ա*+o;v)ۿg?➁@|H>3hj?Ѽ =7<7 OnTt{kt֦V}dֺ+h:p}XgLzIxs.O(:;n< r]7i&'ז7|gCyXp~Q5kx*|{_xǟ4kyAм ǾoxuvQ[Mm_t䢹~?ttFKǎ5TSu]zQ0*6E0MUjzSgkp>tY>Y>q̎N?3Mvj]^ߪ9?GtA=_ڽ??xgw#ԖmbW=m/ =MoĚ5-˵y[ m]Aٴ_WT.x_QOG;e3&4FkmzMOOikwav\D?9E[Mm'd/ O\xwO) _M^?O+L:]>0z7ˣ=casoq]š7V26rw=O@Ѡ I1~}M7~Zc;eߖmck5KO Cgo~%ţs6|%t/˥nZߦןcȵ}1Hԍ]-rg/LV5nL<՞e7kM{73SW=_A9ä^ssF??,[ˮz^"o8U庾~;_S{~|=8|>SY/Wii/}ti mѶE]ï{z;\g/Iua66_Ɨ4\ɦKZ=&[Su-'q%b>W[;֟//zeTtZQWo֧߫ B=<ǧ+gkyϭi{%/T0DTK_3O/~#O~ 2#'V;X`]O?,᷂Θ{{[[`EO yEۚov{{N!Ͱ8oa*ag޿ >|BէsO xv2Yh!景i:|^]ՆAq[5?"ؒ>NܱVuߪOw ~l.iז+VJK ޼VpgOv!eM iƚv ONmom>c=Ōco635W*R_fǵ{k}쬧WsҼr(>Tui{_ٛ{NcU#i-W c'5M7D|!\r1` gՓvW\2S'*wwIlt?~ (& /ᧁ ^|e]Ϧ{~l-,s[u(^IIsi6Gg^vI<kӓoBst#4Wz҄% Gx;Ho M=φ-y{]}KWvS3Lo/=R\pBZ9EGU:U6*_[pB]U/nxyM~l#|?ø|GjOxcP-"o_]j0;  >?TqVm[3ӣE\s8be{{*J:u#/M~`d?HFN1HT-˰Uz4ߦ {匛#d(~ʡ}/kG^kfֺݯ |-mI$&/w9t]o?J&]2e8 pzQoԴnm7f8;e.]K;?졁TsphWwL`[rCZOe{Yvgm^*ϣOc$*N7.ݵie c?o7xoz:.L4ϴK!I @N9iejxxǮ{]Wt]N~>/3VSP#糟GA 6)}q'qp2IPW[]^]4?ؠ >m~Jg?ʖ}xݱSu1@7ʼqA$]r MO\qӽ4*O?͏N?Q45P@P,4lF?3LfKMi}䛳cnz^&/!u &ۂ1&3_dtۉ@3ZlJM+E]MmD|׵V\7ڷ1Y~Ta{_;w[~EYI~W^lZA@P@P@P@P@P@P@P@P@Fggp֡).>M[M,rm[rJIE]"Bq$8asn䢌G_u_{ͪ_wVpC)'DXǦ;9Ý/{].=}57_k_zqӱ;$=\`۳Ȼ~/mnX_G4{ |22@q< K/ɿ]F.:iKoG=-,|r8?NVnUt\w/[8O;ckUm}/$T;S[~դ `P@W]-`zu'_1l܃36> *q>cr;9@I@B ]ס9O_ű/m{kD,kX4o:??Rz;r;^?ucBƟ' xw'5}e??#W)?qeFCKh؞2g}cpmn!}遒sH@O@ug={r~N/4;[iJAy^n[lt99?,z<at^VooqP3W*T"__-ͦ^^w `큓c߶ QK鿛vq~3 t? f'k.-7<9%}㷷'pݻ[}u-޽ו8F_ލAZO-$Br= d߯PT]7zqqgߏZVT~UeuN蔨 ds<.~ʥ*+~?>F[t:}EUW{^FK};m.[+(:d]+`9/T_>vmmu~%}0jþqbҶ6A6qztM6;mMpr)iFwn u0 He$mspM?AV}y_O!78d{0YvP)`yb48??_l`޿ >v{u?~€IN?HO-ߕ &%}<^wA밬ln6IeϙZ4,p%W_XUsVǤ}c|h6&l'A#FQxɈ8(avf=*.^jݬ DyPB#e%7 <y`S/,:c*N"<0cՁ8L+gϥk@ .ig'/+(C@\9唛 G"_0m7¤&̥a;Pkj[9͏#efKй+&0mkVXQ'ڄ<Z[P$Um%aD9~ҫhCy7PdǼu=}9}}G82Xoؠc"A> HE# `! BЂhMhZ 26,, D0O5hD_A 0Me_ ī (( CH! DߘCQ[|w@F`I` 8^13F"^ A3pc`/HDЁ@0J`ח=B, n*qt#ѐ6P;4P69bA`& .,ATD6)qvD `a/_qAE!g o0ר*PUiz(<4U(A:QTf,%:AunvM3OxLqFs_|*o9e *Q6Q &cz("a2Q W(2=9mB2hX uHX1?:H H"8uG p i&0K!5hj˔K|grP >  lhCԠF p`AHlk =YaHfG HA`nexD\ 6dR-/iۀv&=&R&5z8'M.HNQ~6 L4˸g=i>ɵ)ỷ$l 1K}ۤy`J }| D]w짓"灈# @ jSaS[.Q6Bcb"X h1onOb⦁"Z.. b^"Wpi Q"cbpD9Ȧx7+ 2D>7D~/#mt0uP%[HmR)Ha'ja + 240+ pL!8i"`!1ll*``xVH{Wm 6 6[ 0}rCstF Mp''U" ~cNzh71 iI3@b}b4w"H WBA05ic40PPmr{<-Y){󀁪+}1 $CvoW9bh+Ըw~5c }rhHn \0AyR _P qJ2 0n2&I WI .0_x F |q "X 3kB#hhڐᰠ 2.1> 8np6>㚠 =B>AFED.JNJnCB~= 0'~m wMR^ UpRTNPrNTpR Wy~}rSP~v>聞x~{~~W.放璮wUSy5Q$? K.~NwX*0 YJBB0~nϮ^վ~N?`C@,T~7 @ZWJ^CNM D@VPlL>K$/O(&o"/&?//?4F2BLybn;_+xO@ PPVY\X^GpIV\YYlWU^_GexlGVy//alxZp 0"„;HOotVg_[a0 ? ?_ #⺳"BKl5͏(џ=oϯ?O?L\8LՏޢ_ޒ3%gC 31O@ D@ q3hF 9~X1": A6,1Bs -kX́5|hL&Ɔb)L!D.K7^m*Pt3It;n ;ճu?R8.\AJ\U=|ח /\vrsmT.  gi%ơFTHoʰ#q9ћ*"%SLSj!tH dZӐ^bXCG Fr8z 3p8sJA\!!_F5!pm%cJTġɅItRtrВKi$Ro%2q0)T(ę()3fzi7Slv5TrHdj5Ry"Ȫ1LQPInXCЉlHb|nyApqEg rWm@oiZJ5}倎 zY26\k 0CL[1!yґA[T镶a.btZ]AEfY @xd1CiXF@\ڦ=DpYۈ衝v١oX|xY9cXH|1єUXA"nIHn"H1{NaƙGvV`GuY)qVLAT$ZNy]Die%|LBLn:F (8DyG#GgdEdL(Hq?VB`amz9E2aUtCl+Q,89%d`qC]c7` $ 3@7p&78|'\ Σ -$X $p .p P (PB `pIc$8 2$c/:\ 7jg\`n1Fbp A``߈EZ\@xA z!d/`.a LCT0E Ս=Đ%( e PF ` `ZN7@QF-(]PF5`  H ^ @ o.@c޴5PXl'+uES| X2 `Q ?ȠH@ e,&g<*Sq4{GiT@"4P !-@qQ -Q(!48~A =XV* i4(T7@UTF@g|6&xqj 2F@V<ŶqL#@A D7Lq2Ϡ^"HM{@؆ oa؆T`o@h@ :H21 9@!CI'O!لbHA. T nHC d k /b-. x6+H&"EP lh ؊Ѐ(FAX !ps\,B芒l0cW*hlqH5(1 P'/mPq@`TA3b[z5Xq֍>`W#* VYX %7p6p`HkOqA]@h y%` /҃ 7(aؿ3JqtC``p="qFh)5:MZm(`t([( MG/fÏ0I6A3f1"p2&@中^zPA4BFEel%8D  'Q8xv׼(hKm* 8ި*;F. 0o!#^ހFl G}F2U6tp=0b釹B; `52PȫA 7΀GݳP@A2&7Tp@ࢷ q)6v"f;44 \IEЁxd+5X Ϙ rqox/"^CT2#dP]zC0 4ELd8P %Ơ0 "jN0RBL&PfgP(t5~`ZAJKW# !]aGHh聤>S>؃B_>8onH^=@P >(cH?SHX@B^ b8ix" Q gs(sn2Im Bx&(zHB(d.2o`W 9;ނA.ɨ.G\&iw h6QJA⨊CI T>(B)DX  ?oڈD 1Yԓ`e)O eXaF=Y>)_l _p40T[D HGĀߨȐ^4qԽ+w<a@HΈ[|9ИȊhՠ AGǏW d̚pI\I  ް* )&L= ,`rL$P {+15'|@x 40? -r3BɃ Syo"O&#e pC m#I3@/S 0 U'W:$jEH1c, 7@@ 0+Q`Ū9pLZ+cq5zKȤ o<"5}ȕ18R+WpXmoa\a[N} ^-%Psk`u1tBzb9b9 ۵G? `\(c5GVu q.•`?4  HTBܼ67wKrSL'txK+D\w5JMؕ@pd+z:;:6|2+8S)'ɷ|7#8]x}2ZFh>qg$X53~+G\WR2TSGx"HB$IsP~=b4L`hT"Ƿ4"l;:#hi>kw|gŌ!qA=*!4A50)AbXI)b Vm)n"I9@F#I f.AWV^ B)SUҍ0hN͒CR*؂s]1_4@`& xJ"`PEf`p΃ Ѐr1xf_9EAъZͨF7юz (jf: O7HIW 3_`Ed1asCƁ> ?) *IJ4A~4ZTc;TQ@m*766y5?# -0nM\[cM55Қ(.*G|xqiiYuTzE^ FR-]m5|᱉,Vޱ#lqJ! (w#_֟RD{gķ/~˴97ev(AՕ4_clK|ǝ4%UY+KVS"I ]0KB (J|hxHqpCrM$`lW ,^@֨Eqxk, kq<8Iu+'slc.Vk\`i7}ŪA 7qV(A )?~..&L(w\P_!).OsYbh3V˞qBNOggzt~CNL4 BY6ƹ&ha}'㊌[zMU)h4>mcjtw뺚/=D={hb::@А7X P*~up?lq9 '&,Ȳ1bh`){q6d `< .4Z|fvY`/FSO挐q0 H`FТgzҎ XxmF ^b#DR~ c}^@ޑC{N_ץ>ې:񐏼'O[ϼ7{GOқOWֻgOϽw?C;i18next-23.7.6/examples/000077500000000000000000000000001452441263500147355ustar00rootroot00000000000000i18next-23.7.6/examples/typescript/000077500000000000000000000000001452441263500171435ustar00rootroot00000000000000i18next-23.7.6/examples/typescript/.gitignore000066400000000000000000000000431452441263500211300ustar00rootroot00000000000000dist node_modules package-lock.jsoni18next-23.7.6/examples/typescript/@types/000077500000000000000000000000001452441263500204075ustar00rootroot00000000000000i18next-23.7.6/examples/typescript/@types/i18next.d.ts000066400000000000000000000003011452441263500224730ustar00rootroot00000000000000import { resources, defaultNS } from '../i18n/config.js'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: typeof defaultNS; resources: typeof resources.en; } } i18next-23.7.6/examples/typescript/i18n/000077500000000000000000000000001452441263500177225ustar00rootroot00000000000000i18next-23.7.6/examples/typescript/i18n/config.ts000066400000000000000000000007351452441263500215440ustar00rootroot00000000000000import i18next from 'i18next'; // using json imports would work, but interpolation checks would not work // import ns1 from './en/ns1.json'; // import ns2 from './en/ns2.json'; import ns1 from './en/ns1.js'; import ns2 from './en/ns2.js'; export const defaultNS = 'ns1'; export const resources = { en: { ns1, ns2, }, }; i18next.init({ lng: 'en', // if you're using a language detector, do not define the lng option debug: true, resources, defaultNS, }); i18next-23.7.6/examples/typescript/i18n/en/000077500000000000000000000000001452441263500203245ustar00rootroot00000000000000i18next-23.7.6/examples/typescript/i18n/en/ns1.json000066400000000000000000000002741452441263500217230ustar00rootroot00000000000000{ "title": "Welcome!", "description": { "part1": "This is just a basic example of how to use i18next with typescript", "part2": "😉" }, "inter": "interpolated {{val}}" } i18next-23.7.6/examples/typescript/i18n/en/ns1.ts000066400000000000000000000003371452441263500214000ustar00rootroot00000000000000const ns1 = { title: 'Welcome!', description: { part1: 'This is just a basic example of how to use i18next with typescript', part2: '😉', }, inter: 'interpolated {{val}}', } as const; export default ns1; i18next-23.7.6/examples/typescript/i18n/en/ns2.json000066400000000000000000000003421452441263500217200ustar00rootroot00000000000000{ "description": { "part1": "In order to infer the appropriate type for t function, you should use type augmentation to override the Resources type.", "part2": "Check out the @types/i18next to see an example." } } i18next-23.7.6/examples/typescript/i18n/en/ns2.ts000066400000000000000000000004171452441263500214000ustar00rootroot00000000000000const ns2 = { description: { part1: 'In order to infer the appropriate type for t function, you should use type augmentation to override the Resources type.', part2: 'Check out the @types/i18next to see an example.', }, } as const; export default ns2; i18next-23.7.6/examples/typescript/index.ts000066400000000000000000000011731452441263500206240ustar00rootroot00000000000000import i18next from 'i18next'; import './i18n/config.js'; console.log(i18next.t('ns1:title')); console.log(i18next.t('title')); console.log(i18next.t('ns1:description.part1')); console.log(i18next.t('ns1:description.part2')); console.log(i18next.t('ns2:description.part2')); console.log(i18next.t('description.part2', { ns: 'ns2' })); const l = i18next.language; // interpolation i18next.t('inter', { val: 'xx' }); // this ts error occurs only if resources are imported: // 1) as const (ts file) // or // 2) as interface (d.ts file) // throws only with ts v5 // // @ts-expect-error // i18next.t('inter', { valWrong: 'xx' }); i18next-23.7.6/examples/typescript/package.json000066400000000000000000000004451452441263500214340ustar00rootroot00000000000000{ "name": "typescript-example", "version": "1.0.0", "main": "index.ts", "scripts": { "build": "tsc", "start": "npm run build && node dist/index.js" }, "license": "MIT", "devDependencies": { "typescript": "4.9.3" }, "dependencies": { "i18next": "23.7.5" } } i18next-23.7.6/examples/typescript/tsconfig.json000066400000000000000000000006271452441263500216570ustar00rootroot00000000000000{ "compilerOptions": { "module": "CommonJS", // "module": "NodeNext", "esModuleInterop": true, "target": "es6", "lib": ["es2015"], "jsx": "react", "moduleResolution": "Classic", // "moduleResolution": "NodeNext", "forceConsistentCasingInFileNames": true, "sourceMap": true, "outDir": "dist", // "resolveJsonModule": true, "strictNullChecks": true } } i18next-23.7.6/i18next.js000066400000000000000000002602071452441263500147640ustar00rootroot00000000000000(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.i18next = factory()); })(this, (function () { 'use strict'; const consoleLogger = { type: 'logger', log(args) { this.output('log', args); }, warn(args) { this.output('warn', args); }, error(args) { this.output('error', args); }, output(type, args) { if (console && console[type]) console[type].apply(console, args); } }; class Logger { constructor(concreteLogger) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; this.init(concreteLogger, options); } init(concreteLogger) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; this.prefix = options.prefix || 'i18next:'; this.logger = concreteLogger || consoleLogger; this.options = options; this.debug = options.debug; } log() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return this.forward(args, 'log', '', true); } warn() { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return this.forward(args, 'warn', '', true); } error() { for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { args[_key3] = arguments[_key3]; } return this.forward(args, 'error', ''); } deprecate() { for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { args[_key4] = arguments[_key4]; } return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true); } forward(args, lvl, prefix, debugOnly) { if (debugOnly && !this.debug) return null; if (typeof args[0] === 'string') args[0] = `${prefix}${this.prefix} ${args[0]}`; return this.logger[lvl](args); } create(moduleName) { return new Logger(this.logger, { ...{ prefix: `${this.prefix}:${moduleName}:` }, ...this.options }); } clone(options) { options = options || this.options; options.prefix = options.prefix || this.prefix; return new Logger(this.logger, options); } } var baseLogger = new Logger(); class EventEmitter { constructor() { this.observers = {}; } on(events, listener) { events.split(' ').forEach(event => { this.observers[event] = this.observers[event] || []; this.observers[event].push(listener); }); return this; } off(event, listener) { if (!this.observers[event]) return; if (!listener) { delete this.observers[event]; return; } this.observers[event] = this.observers[event].filter(l => l !== listener); } emit(event) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } if (this.observers[event]) { const cloned = [].concat(this.observers[event]); cloned.forEach(observer => { observer(...args); }); } if (this.observers['*']) { const cloned = [].concat(this.observers['*']); cloned.forEach(observer => { observer.apply(observer, [event, ...args]); }); } } } function defer() { let res; let rej; const promise = new Promise((resolve, reject) => { res = resolve; rej = reject; }); promise.resolve = res; promise.reject = rej; return promise; } function makeString(object) { if (object == null) return ''; return '' + object; } function copy(a, s, t) { a.forEach(m => { if (s[m]) t[m] = s[m]; }); } function getLastOfPath(object, path, Empty) { function cleanKey(key) { return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key; } function canNotTraverseDeeper() { return !object || typeof object === 'string'; } const stack = typeof path !== 'string' ? [].concat(path) : path.split('.'); while (stack.length > 1) { if (canNotTraverseDeeper()) return {}; const key = cleanKey(stack.shift()); if (!object[key] && Empty) object[key] = new Empty(); if (Object.prototype.hasOwnProperty.call(object, key)) { object = object[key]; } else { object = {}; } } if (canNotTraverseDeeper()) return {}; return { obj: object, k: cleanKey(stack.shift()) }; } function setPath(object, path, newValue) { const { obj, k } = getLastOfPath(object, path, Object); obj[k] = newValue; } function pushPath(object, path, newValue, concat) { const { obj, k } = getLastOfPath(object, path, Object); obj[k] = obj[k] || []; if (concat) obj[k] = obj[k].concat(newValue); if (!concat) obj[k].push(newValue); } function getPath(object, path) { const { obj, k } = getLastOfPath(object, path); if (!obj) return undefined; return obj[k]; } function getPathWithDefaults(data, defaultData, key) { const value = getPath(data, key); if (value !== undefined) { return value; } return getPath(defaultData, key); } function deepExtend(target, source, overwrite) { for (const prop in source) { if (prop !== '__proto__' && prop !== 'constructor') { if (prop in target) { if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) { if (overwrite) target[prop] = source[prop]; } else { deepExtend(target[prop], source[prop], overwrite); } } else { target[prop] = source[prop]; } } } return target; } function regexEscape(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); } var _entityMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/' }; function escape(data) { if (typeof data === 'string') { return data.replace(/[&<>"'\/]/g, s => _entityMap[s]); } return data; } const chars = [' ', ',', '?', '!', ';']; function looksLikeObjectPath(key, nsSeparator, keySeparator) { nsSeparator = nsSeparator || ''; keySeparator = keySeparator || ''; const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0); if (possibleChars.length === 0) return true; const r = new RegExp(`(${possibleChars.map(c => c === '?' ? '\\?' : c).join('|')})`); let matched = !r.test(key); if (!matched) { const ki = key.indexOf(keySeparator); if (ki > 0 && !r.test(key.substring(0, ki))) { matched = true; } } return matched; } function deepFind(obj, path) { let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.'; if (!obj) return undefined; if (obj[path]) return obj[path]; const paths = path.split(keySeparator); let current = obj; for (let i = 0; i < paths.length; ++i) { if (!current) return undefined; if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) { return undefined; } if (current[paths[i]] === undefined) { let j = 2; let p = paths.slice(i, i + j).join(keySeparator); let mix = current[p]; while (mix === undefined && paths.length > i + j) { j++; p = paths.slice(i, i + j).join(keySeparator); mix = current[p]; } if (mix === undefined) return undefined; if (mix === null) return null; if (path.endsWith(p)) { if (typeof mix === 'string') return mix; if (p && typeof mix[p] === 'string') return mix[p]; } const joinedPath = paths.slice(i + j).join(keySeparator); if (joinedPath) return deepFind(mix, joinedPath, keySeparator); return undefined; } current = current[paths[i]]; } return current; } function getCleanedCode(code) { if (code && code.indexOf('_') > 0) return code.replace('_', '-'); return code; } class ResourceStore extends EventEmitter { constructor(data) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { ns: ['translation'], defaultNS: 'translation' }; super(); this.data = data || {}; this.options = options; if (this.options.keySeparator === undefined) { this.options.keySeparator = '.'; } if (this.options.ignoreJSONStructure === undefined) { this.options.ignoreJSONStructure = true; } } addNamespaces(ns) { if (this.options.ns.indexOf(ns) < 0) { this.options.ns.push(ns); } } removeNamespaces(ns) { const index = this.options.ns.indexOf(ns); if (index > -1) { this.options.ns.splice(index, 1); } } getResource(lng, ns, key) { let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure; let path = [lng, ns]; if (key && typeof key !== 'string') path = path.concat(key); if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key); if (lng.indexOf('.') > -1) { path = lng.split('.'); } const result = getPath(this.data, path); if (result || !ignoreJSONStructure || typeof key !== 'string') return result; return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator); } addResource(lng, ns, key, value) { let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { silent: false }; const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; let path = [lng, ns]; if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key); if (lng.indexOf('.') > -1) { path = lng.split('.'); value = ns; ns = path[1]; } this.addNamespaces(ns); setPath(this.data, path, value); if (!options.silent) this.emit('added', lng, ns, key, value); } addResources(lng, ns, resources) { let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { silent: false }; for (const m in resources) { if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], { silent: true }); } if (!options.silent) this.emit('added', lng, ns, resources); } addResourceBundle(lng, ns, resources, deep, overwrite) { let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : { silent: false }; let path = [lng, ns]; if (lng.indexOf('.') > -1) { path = lng.split('.'); deep = resources; resources = ns; ns = path[1]; } this.addNamespaces(ns); let pack = getPath(this.data, path) || {}; if (deep) { deepExtend(pack, resources, overwrite); } else { pack = { ...pack, ...resources }; } setPath(this.data, path, pack); if (!options.silent) this.emit('added', lng, ns, resources); } removeResourceBundle(lng, ns) { if (this.hasResourceBundle(lng, ns)) { delete this.data[lng][ns]; } this.removeNamespaces(ns); this.emit('removed', lng, ns); } hasResourceBundle(lng, ns) { return this.getResource(lng, ns) !== undefined; } getResourceBundle(lng, ns) { if (!ns) ns = this.options.defaultNS; if (this.options.compatibilityAPI === 'v1') return { ...{}, ...this.getResource(lng, ns) }; return this.getResource(lng, ns); } getDataByLanguage(lng) { return this.data[lng]; } hasLanguageSomeTranslations(lng) { const data = this.getDataByLanguage(lng); const n = data && Object.keys(data) || []; return !!n.find(v => data[v] && Object.keys(data[v]).length > 0); } toJSON() { return this.data; } } var postProcessor = { processors: {}, addPostProcessor(module) { this.processors[module.name] = module; }, handle(processors, value, key, options, translator) { processors.forEach(processor => { if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator); }); return value; } }; const checkedLoadedFor = {}; class Translator extends EventEmitter { constructor(services) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; super(); copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this); this.options = options; if (this.options.keySeparator === undefined) { this.options.keySeparator = '.'; } this.logger = baseLogger.create('translator'); } changeLanguage(lng) { if (lng) this.language = lng; } exists(key) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { interpolation: {} }; if (key === undefined || key === null) { return false; } const resolved = this.resolve(key, options); return resolved && resolved.res !== undefined; } extractFromKey(key, options) { let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator; if (nsSeparator === undefined) nsSeparator = ':'; const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; let namespaces = options.ns || this.options.defaultNS || []; const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1; const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator); if (wouldCheckForNsInKey && !seemsNaturalLanguage) { const m = key.match(this.interpolator.nestingRegexp); if (m && m.length > 0) { return { key, namespaces }; } const parts = key.split(nsSeparator); if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift(); key = parts.join(keySeparator); } if (typeof namespaces === 'string') namespaces = [namespaces]; return { key, namespaces }; } translate(keys, options, lastKey) { if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) { options = this.options.overloadTranslationOptionHandler(arguments); } if (typeof options === 'object') options = { ...options }; if (!options) options = {}; if (keys === undefined || keys === null) return ''; if (!Array.isArray(keys)) keys = [String(keys)]; const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails; const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; const { key, namespaces } = this.extractFromKey(keys[keys.length - 1], options); const namespace = namespaces[namespaces.length - 1]; const lng = options.lng || this.language; const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode; if (lng && lng.toLowerCase() === 'cimode') { if (appendNamespaceToCIMode) { const nsSeparator = options.nsSeparator || this.options.nsSeparator; if (returnDetails) { return { res: `${namespace}${nsSeparator}${key}`, usedKey: key, exactUsedKey: key, usedLng: lng, usedNS: namespace, usedParams: this.getUsedParamsDetails(options) }; } return `${namespace}${nsSeparator}${key}`; } if (returnDetails) { return { res: key, usedKey: key, exactUsedKey: key, usedLng: lng, usedNS: namespace, usedParams: this.getUsedParamsDetails(options) }; } return key; } const resolved = this.resolve(keys, options); let res = resolved && resolved.res; const resUsedKey = resolved && resolved.usedKey || key; const resExactUsedKey = resolved && resolved.exactUsedKey || key; const resType = Object.prototype.toString.apply(res); const noObject = ['[object Number]', '[object Function]', '[object RegExp]']; const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays; const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject; const handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number'; if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) { if (!options.returnObjects && !this.options.returnObjects) { if (!this.options.returnedObjectHandler) { this.logger.warn('accessing an object - but returnObjects options is not enabled!'); } const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, { ...options, ns: namespaces }) : `key '${key} (${this.language})' returned an object instead of string.`; if (returnDetails) { resolved.res = r; resolved.usedParams = this.getUsedParamsDetails(options); return resolved; } return r; } if (keySeparator) { const resTypeIsArray = resType === '[object Array]'; const copy = resTypeIsArray ? [] : {}; const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey; for (const m in res) { if (Object.prototype.hasOwnProperty.call(res, m)) { const deepKey = `${newKeyToUse}${keySeparator}${m}`; copy[m] = this.translate(deepKey, { ...options, ...{ joinArrays: false, ns: namespaces } }); if (copy[m] === deepKey) copy[m] = res[m]; } } res = copy; } } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') { res = res.join(joinArrays); if (res) res = this.extendTranslation(res, keys, options, lastKey); } else { let usedDefault = false; let usedKey = false; const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string'; const hasDefaultValue = Translator.hasDefaultValue(options); const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : ''; const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, { ordinal: false }) : ''; const defaultValue = options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue; if (!this.isValidLookup(res) && hasDefaultValue) { usedDefault = true; res = defaultValue; } if (!this.isValidLookup(res)) { usedKey = true; res = key; } const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey; const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res; const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing; if (usedKey || usedDefault || updateMissing) { this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res); if (keySeparator) { const fk = this.resolve(key, { ...options, keySeparator: false }); if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.'); } let lngs = []; const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language); if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) { for (let i = 0; i < fallbackLngs.length; i++) { lngs.push(fallbackLngs[i]); } } else if (this.options.saveMissingTo === 'all') { lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language); } else { lngs.push(options.lng || this.language); } const send = (l, k, specificDefaultValue) => { const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing; if (this.options.missingKeyHandler) { this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options); } else if (this.backendConnector && this.backendConnector.saveMissing) { this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options); } this.emit('missingKey', l, namespace, k, res); }; if (this.options.saveMissing) { if (this.options.saveMissingPlurals && needsPluralHandling) { lngs.forEach(language => { this.pluralResolver.getSuffixes(language, options).forEach(suffix => { send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue); }); }); } else { send(lngs, key, defaultValue); } } } res = this.extendTranslation(res, keys, options, resolved, lastKey); if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`; if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) { if (this.options.compatibilityAPI !== 'v1') { res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined); } else { res = this.options.parseMissingKeyHandler(res); } } } if (returnDetails) { resolved.res = res; resolved.usedParams = this.getUsedParamsDetails(options); return resolved; } return res; } extendTranslation(res, key, options, resolved, lastKey) { var _this = this; if (this.i18nFormat && this.i18nFormat.parse) { res = this.i18nFormat.parse(res, { ...this.options.interpolation.defaultVariables, ...options }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, { resolved }); } else if (!options.skipInterpolation) { if (options.interpolation) this.interpolator.init({ ...options, ...{ interpolation: { ...this.options.interpolation, ...options.interpolation } } }); const skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables); let nestBef; if (skipOnVariables) { const nb = res.match(this.interpolator.nestingRegexp); nestBef = nb && nb.length; } let data = options.replace && typeof options.replace !== 'string' ? options.replace : options; if (this.options.interpolation.defaultVariables) data = { ...this.options.interpolation.defaultVariables, ...data }; res = this.interpolator.interpolate(res, data, options.lng || this.language, options); if (skipOnVariables) { const na = res.match(this.interpolator.nestingRegexp); const nestAft = na && na.length; if (nestBef < nestAft) options.nest = false; } if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = resolved.usedLng; if (options.nest !== false) res = this.interpolator.nest(res, function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (lastKey && lastKey[0] === args[0] && !options.context) { _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`); return null; } return _this.translate(...args, key); }, options); if (options.interpolation) this.interpolator.reset(); } const postProcess = options.postProcess || this.options.postProcess; const postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess; if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) { res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? { i18nResolved: { ...resolved, usedParams: this.getUsedParamsDetails(options) }, ...options } : options, this); } return res; } resolve(keys) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; let found; let usedKey; let exactUsedKey; let usedLng; let usedNS; if (typeof keys === 'string') keys = [keys]; keys.forEach(k => { if (this.isValidLookup(found)) return; const extracted = this.extractFromKey(k, options); const key = extracted.key; usedKey = key; let namespaces = extracted.namespaces; if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS); const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string'; const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi(); const needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== ''; const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng); namespaces.forEach(ns => { if (this.isValidLookup(found)) return; usedNS = ns; if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) { checkedLoadedFor[`${codes[0]}-${ns}`] = true; this.logger.warn(`key "${usedKey}" for languages "${codes.join(', ')}" won't get resolved as namespace "${usedNS}" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!'); } codes.forEach(code => { if (this.isValidLookup(found)) return; usedLng = code; const finalKeys = [key]; if (this.i18nFormat && this.i18nFormat.addLookupKeys) { this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options); } else { let pluralSuffix; if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options); const zeroSuffix = `${this.options.pluralSeparator}zero`; const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`; if (needsPluralHandling) { finalKeys.push(key + pluralSuffix); if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) { finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator)); } if (needsZeroSuffixLookup) { finalKeys.push(key + zeroSuffix); } } if (needsContextHandling) { const contextKey = `${key}${this.options.contextSeparator}${options.context}`; finalKeys.push(contextKey); if (needsPluralHandling) { finalKeys.push(contextKey + pluralSuffix); if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) { finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator)); } if (needsZeroSuffixLookup) { finalKeys.push(contextKey + zeroSuffix); } } } } let possibleKey; while (possibleKey = finalKeys.pop()) { if (!this.isValidLookup(found)) { exactUsedKey = possibleKey; found = this.getResource(code, ns, possibleKey, options); } } }); }); }); return { res: found, usedKey, exactUsedKey, usedLng, usedNS }; } isValidLookup(res) { return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === ''); } getResource(code, ns, key) { let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options); return this.resourceStore.getResource(code, ns, key, options); } getUsedParamsDetails() { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation']; const useOptionsReplaceForData = options.replace && typeof options.replace !== 'string'; let data = useOptionsReplaceForData ? options.replace : options; if (useOptionsReplaceForData && typeof options.count !== 'undefined') { data.count = options.count; } if (this.options.interpolation.defaultVariables) { data = { ...this.options.interpolation.defaultVariables, ...data }; } if (!useOptionsReplaceForData) { data = { ...data }; for (const key of optionsKeys) { delete data[key]; } } return data; } static hasDefaultValue(options) { const prefix = 'defaultValue'; for (const option in options) { if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) { return true; } } return false; } } function capitalize(string) { return string.charAt(0).toUpperCase() + string.slice(1); } class LanguageUtil { constructor(options) { this.options = options; this.supportedLngs = this.options.supportedLngs || false; this.logger = baseLogger.create('languageUtils'); } getScriptPartFromCode(code) { code = getCleanedCode(code); if (!code || code.indexOf('-') < 0) return null; const p = code.split('-'); if (p.length === 2) return null; p.pop(); if (p[p.length - 1].toLowerCase() === 'x') return null; return this.formatLanguageCode(p.join('-')); } getLanguagePartFromCode(code) { code = getCleanedCode(code); if (!code || code.indexOf('-') < 0) return code; const p = code.split('-'); return this.formatLanguageCode(p[0]); } formatLanguageCode(code) { if (typeof code === 'string' && code.indexOf('-') > -1) { const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab']; let p = code.split('-'); if (this.options.lowerCaseLng) { p = p.map(part => part.toLowerCase()); } else if (p.length === 2) { p[0] = p[0].toLowerCase(); p[1] = p[1].toUpperCase(); if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase()); } else if (p.length === 3) { p[0] = p[0].toLowerCase(); if (p[1].length === 2) p[1] = p[1].toUpperCase(); if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase(); if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase()); if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase()); } return p.join('-'); } return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code; } isSupportedCode(code) { if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) { code = this.getLanguagePartFromCode(code); } return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1; } getBestMatchFromCodes(codes) { if (!codes) return null; let found; codes.forEach(code => { if (found) return; const cleanedLng = this.formatLanguageCode(code); if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng; }); if (!found && this.options.supportedLngs) { codes.forEach(code => { if (found) return; const lngOnly = this.getLanguagePartFromCode(code); if (this.isSupportedCode(lngOnly)) return found = lngOnly; found = this.options.supportedLngs.find(supportedLng => { if (supportedLng === lngOnly) return supportedLng; if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return; if (supportedLng.indexOf(lngOnly) === 0) return supportedLng; }); }); } if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0]; return found; } getFallbackCodes(fallbacks, code) { if (!fallbacks) return []; if (typeof fallbacks === 'function') fallbacks = fallbacks(code); if (typeof fallbacks === 'string') fallbacks = [fallbacks]; if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks; if (!code) return fallbacks.default || []; let found = fallbacks[code]; if (!found) found = fallbacks[this.getScriptPartFromCode(code)]; if (!found) found = fallbacks[this.formatLanguageCode(code)]; if (!found) found = fallbacks[this.getLanguagePartFromCode(code)]; if (!found) found = fallbacks.default; return found || []; } toResolveHierarchy(code, fallbackCode) { const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code); const codes = []; const addCode = c => { if (!c) return; if (this.isSupportedCode(c)) { codes.push(c); } else { this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`); } }; if (typeof code === 'string' && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) { if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code)); if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code)); if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code)); } else if (typeof code === 'string') { addCode(this.formatLanguageCode(code)); } fallbackCodes.forEach(fc => { if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc)); }); return codes; } } let sets = [{ lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'], nr: [1, 2], fc: 1 }, { lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'], nr: [1, 2], fc: 2 }, { lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'], nr: [1], fc: 3 }, { lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 }, { lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 }, { lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 }, { lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 }, { lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 }, { lngs: ['fr'], nr: [1, 2], fc: 9 }, { lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 }, { lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 }, { lngs: ['is'], nr: [1, 2], fc: 12 }, { lngs: ['jv'], nr: [0, 1], fc: 13 }, { lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 }, { lngs: ['lt'], nr: [1, 2, 10], fc: 15 }, { lngs: ['lv'], nr: [1, 2, 0], fc: 16 }, { lngs: ['mk'], nr: [1, 2], fc: 17 }, { lngs: ['mnk'], nr: [0, 1, 2], fc: 18 }, { lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 }, { lngs: ['or'], nr: [2, 1], fc: 2 }, { lngs: ['ro'], nr: [1, 2, 20], fc: 20 }, { lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 }, { lngs: ['he', 'iw'], nr: [1, 2, 20, 21], fc: 22 }]; let _rulesPluralsTypes = { 1: function (n) { return Number(n > 1); }, 2: function (n) { return Number(n != 1); }, 3: function (n) { return 0; }, 4: function (n) { return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }, 5: function (n) { return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5); }, 6: function (n) { return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2); }, 7: function (n) { return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }, 8: function (n) { return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3); }, 9: function (n) { return Number(n >= 2); }, 10: function (n) { return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4); }, 11: function (n) { return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3); }, 12: function (n) { return Number(n % 10 != 1 || n % 100 == 11); }, 13: function (n) { return Number(n !== 0); }, 14: function (n) { return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3); }, 15: function (n) { return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }, 16: function (n) { return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2); }, 17: function (n) { return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1); }, 18: function (n) { return Number(n == 0 ? 0 : n == 1 ? 1 : 2); }, 19: function (n) { return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3); }, 20: function (n) { return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2); }, 21: function (n) { return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0); }, 22: function (n) { return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3); } }; const nonIntlVersions = ['v1', 'v2', 'v3']; const intlVersions = ['v4']; const suffixesOrder = { zero: 0, one: 1, two: 2, few: 3, many: 4, other: 5 }; function createRules() { const rules = {}; sets.forEach(set => { set.lngs.forEach(l => { rules[l] = { numbers: set.nr, plurals: _rulesPluralsTypes[set.fc] }; }); }); return rules; } class PluralResolver { constructor(languageUtils) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; this.languageUtils = languageUtils; this.options = options; this.logger = baseLogger.create('pluralResolver'); if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) { this.options.compatibilityJSON = 'v3'; this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.'); } this.rules = createRules(); } addRule(lng, obj) { this.rules[lng] = obj; } getRule(code) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (this.shouldUseIntlApi()) { try { return new Intl.PluralRules(getCleanedCode(code), { type: options.ordinal ? 'ordinal' : 'cardinal' }); } catch { return; } } return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)]; } needsPlural(code) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const rule = this.getRule(code, options); if (this.shouldUseIntlApi()) { return rule && rule.resolvedOptions().pluralCategories.length > 1; } return rule && rule.numbers.length > 1; } getPluralFormsOfKey(code, key) { let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`); } getSuffixes(code) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const rule = this.getRule(code, options); if (!rule) { return []; } if (this.shouldUseIntlApi()) { return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`); } return rule.numbers.map(number => this.getSuffix(code, number, options)); } getSuffix(code, count) { let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; const rule = this.getRule(code, options); if (rule) { if (this.shouldUseIntlApi()) { return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`; } return this.getSuffixRetroCompatible(rule, count); } this.logger.warn(`no plural rule found for: ${code}`); return ''; } getSuffixRetroCompatible(rule, count) { const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count)); let suffix = rule.numbers[idx]; if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) { if (suffix === 2) { suffix = 'plural'; } else if (suffix === 1) { suffix = ''; } } const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString(); if (this.options.compatibilityJSON === 'v1') { if (suffix === 1) return ''; if (typeof suffix === 'number') return `_plural_${suffix.toString()}`; return returnSuffix(); } else if (this.options.compatibilityJSON === 'v2') { return returnSuffix(); } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) { return returnSuffix(); } return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString(); } shouldUseIntlApi() { return !nonIntlVersions.includes(this.options.compatibilityJSON); } } function deepFindWithDefaults(data, defaultData, key) { let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.'; let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; let path = getPathWithDefaults(data, defaultData, key); if (!path && ignoreJSONStructure && typeof key === 'string') { path = deepFind(data, key, keySeparator); if (path === undefined) path = deepFind(defaultData, key, keySeparator); } return path; } class Interpolator { constructor() { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.logger = baseLogger.create('interpolator'); this.options = options; this.format = options.interpolation && options.interpolation.format || (value => value); this.init(options); } init() { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (!options.interpolation) options.interpolation = { escapeValue: true }; const iOpts = options.interpolation; this.escape = iOpts.escape !== undefined ? iOpts.escape : escape; this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true; this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false; this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{'; this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}'; this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ','; this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-'; this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || ''; this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t('); this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')'); this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ','; this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000; this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false; this.resetRegExp(); } reset() { if (this.options) this.init(this.options); } resetRegExp() { const regexpStr = `${this.prefix}(.+?)${this.suffix}`; this.regexp = new RegExp(regexpStr, 'g'); const regexpUnescapeStr = `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`; this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g'); const nestingRegexpStr = `${this.nestingPrefix}(.+?)${this.nestingSuffix}`; this.nestingRegexp = new RegExp(nestingRegexpStr, 'g'); } interpolate(str, data, lng, options) { let match; let value; let replaces; const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {}; function regexSafe(val) { return val.replace(/\$/g, '$$$$'); } const handleFormat = key => { if (key.indexOf(this.formatSeparator) < 0) { const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure); return this.alwaysFormat ? this.format(path, undefined, lng, { ...options, ...data, interpolationkey: key }) : path; } const p = key.split(this.formatSeparator); const k = p.shift().trim(); const f = p.join(this.formatSeparator).trim(); return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, { ...options, ...data, interpolationkey: k }); }; this.resetRegExp(); const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler; const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables; const todos = [{ regex: this.regexpUnescape, safeValue: val => regexSafe(val) }, { regex: this.regexp, safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val) }]; todos.forEach(todo => { replaces = 0; while (match = todo.regex.exec(str)) { const matchedVar = match[1].trim(); value = handleFormat(matchedVar); if (value === undefined) { if (typeof missingInterpolationHandler === 'function') { const temp = missingInterpolationHandler(str, match, options); value = typeof temp === 'string' ? temp : ''; } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) { value = ''; } else if (skipOnVariables) { value = match[0]; continue; } else { this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`); value = ''; } } else if (typeof value !== 'string' && !this.useRawValueToEscape) { value = makeString(value); } const safeValue = todo.safeValue(value); str = str.replace(match[0], safeValue); if (skipOnVariables) { todo.regex.lastIndex += value.length; todo.regex.lastIndex -= match[0].length; } else { todo.regex.lastIndex = 0; } replaces++; if (replaces >= this.maxReplaces) { break; } } }); return str; } nest(str, fc) { let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; let match; let value; let clonedOptions; function handleHasOptions(key, inheritedOptions) { const sep = this.nestingOptionsSeparator; if (key.indexOf(sep) < 0) return key; const c = key.split(new RegExp(`${sep}[ ]*{`)); let optionsString = `{${c[1]}`; key = c[0]; optionsString = this.interpolate(optionsString, clonedOptions); const matchedSingleQuotes = optionsString.match(/'/g); const matchedDoubleQuotes = optionsString.match(/"/g); if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) { optionsString = optionsString.replace(/'/g, '"'); } try { clonedOptions = JSON.parse(optionsString); if (inheritedOptions) clonedOptions = { ...inheritedOptions, ...clonedOptions }; } catch (e) { this.logger.warn(`failed parsing options string in nesting for key ${key}`, e); return `${key}${sep}${optionsString}`; } delete clonedOptions.defaultValue; return key; } while (match = this.nestingRegexp.exec(str)) { let formatters = []; clonedOptions = { ...options }; clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions; clonedOptions.applyPostProcessor = false; delete clonedOptions.defaultValue; let doReduce = false; if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) { const r = match[1].split(this.formatSeparator).map(elem => elem.trim()); match[1] = r.shift(); formatters = r; doReduce = true; } value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions); if (value && match[0] === str && typeof value !== 'string') return value; if (typeof value !== 'string') value = makeString(value); if (!value) { this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`); value = ''; } if (doReduce) { value = formatters.reduce((v, f) => this.format(v, f, options.lng, { ...options, interpolationkey: match[1].trim() }), value.trim()); } str = str.replace(match[0], value); this.regexp.lastIndex = 0; } return str; } } function parseFormatStr(formatStr) { let formatName = formatStr.toLowerCase().trim(); const formatOptions = {}; if (formatStr.indexOf('(') > -1) { const p = formatStr.split('('); formatName = p[0].toLowerCase().trim(); const optStr = p[1].substring(0, p[1].length - 1); if (formatName === 'currency' && optStr.indexOf(':') < 0) { if (!formatOptions.currency) formatOptions.currency = optStr.trim(); } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) { if (!formatOptions.range) formatOptions.range = optStr.trim(); } else { const opts = optStr.split(';'); opts.forEach(opt => { if (!opt) return; const [key, ...rest] = opt.split(':'); const val = rest.join(':').trim().replace(/^'+|'+$/g, ''); if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val; if (val === 'false') formatOptions[key.trim()] = false; if (val === 'true') formatOptions[key.trim()] = true; if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10); }); } } return { formatName, formatOptions }; } function createCachedFormatter(fn) { const cache = {}; return function invokeFormatter(val, lng, options) { const key = lng + JSON.stringify(options); let formatter = cache[key]; if (!formatter) { formatter = fn(getCleanedCode(lng), options); cache[key] = formatter; } return formatter(val); }; } class Formatter { constructor() { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.logger = baseLogger.create('formatter'); this.options = options; this.formats = { number: createCachedFormatter((lng, opt) => { const formatter = new Intl.NumberFormat(lng, { ...opt }); return val => formatter.format(val); }), currency: createCachedFormatter((lng, opt) => { const formatter = new Intl.NumberFormat(lng, { ...opt, style: 'currency' }); return val => formatter.format(val); }), datetime: createCachedFormatter((lng, opt) => { const formatter = new Intl.DateTimeFormat(lng, { ...opt }); return val => formatter.format(val); }), relativetime: createCachedFormatter((lng, opt) => { const formatter = new Intl.RelativeTimeFormat(lng, { ...opt }); return val => formatter.format(val, opt.range || 'day'); }), list: createCachedFormatter((lng, opt) => { const formatter = new Intl.ListFormat(lng, { ...opt }); return val => formatter.format(val); }) }; this.init(options); } init(services) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { interpolation: {} }; const iOpts = options.interpolation; this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ','; } add(name, fc) { this.formats[name.toLowerCase().trim()] = fc; } addCached(name, fc) { this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc); } format(value, format, lng) { let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; const formats = format.split(this.formatSeparator); const result = formats.reduce((mem, f) => { const { formatName, formatOptions } = parseFormatStr(f); if (this.formats[formatName]) { let formatted = mem; try { const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {}; const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng; formatted = this.formats[formatName](mem, l, { ...formatOptions, ...options, ...valOptions }); } catch (error) { this.logger.warn(error); } return formatted; } else { this.logger.warn(`there was no format function for ${formatName}`); } return mem; }, value); return result; } } function removePending(q, name) { if (q.pending[name] !== undefined) { delete q.pending[name]; q.pendingCount--; } } class Connector extends EventEmitter { constructor(backend, store, services) { let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; super(); this.backend = backend; this.store = store; this.services = services; this.languageUtils = services.languageUtils; this.options = options; this.logger = baseLogger.create('backendConnector'); this.waitingReads = []; this.maxParallelReads = options.maxParallelReads || 10; this.readingCalls = 0; this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5; this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350; this.state = {}; this.queue = []; if (this.backend && this.backend.init) { this.backend.init(services, options.backend, options); } } queueLoad(languages, namespaces, options, callback) { const toLoad = {}; const pending = {}; const toLoadLanguages = {}; const toLoadNamespaces = {}; languages.forEach(lng => { let hasAllNamespaces = true; namespaces.forEach(ns => { const name = `${lng}|${ns}`; if (!options.reload && this.store.hasResourceBundle(lng, ns)) { this.state[name] = 2; } else if (this.state[name] < 0) ; else if (this.state[name] === 1) { if (pending[name] === undefined) pending[name] = true; } else { this.state[name] = 1; hasAllNamespaces = false; if (pending[name] === undefined) pending[name] = true; if (toLoad[name] === undefined) toLoad[name] = true; if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true; } }); if (!hasAllNamespaces) toLoadLanguages[lng] = true; }); if (Object.keys(toLoad).length || Object.keys(pending).length) { this.queue.push({ pending, pendingCount: Object.keys(pending).length, loaded: {}, errors: [], callback }); } return { toLoad: Object.keys(toLoad), pending: Object.keys(pending), toLoadLanguages: Object.keys(toLoadLanguages), toLoadNamespaces: Object.keys(toLoadNamespaces) }; } loaded(name, err, data) { const s = name.split('|'); const lng = s[0]; const ns = s[1]; if (err) this.emit('failedLoading', lng, ns, err); if (data) { this.store.addResourceBundle(lng, ns, data); } this.state[name] = err ? -1 : 2; const loaded = {}; this.queue.forEach(q => { pushPath(q.loaded, [lng], ns); removePending(q, name); if (err) q.errors.push(err); if (q.pendingCount === 0 && !q.done) { Object.keys(q.loaded).forEach(l => { if (!loaded[l]) loaded[l] = {}; const loadedKeys = q.loaded[l]; if (loadedKeys.length) { loadedKeys.forEach(n => { if (loaded[l][n] === undefined) loaded[l][n] = true; }); } }); q.done = true; if (q.errors.length) { q.callback(q.errors); } else { q.callback(); } } }); this.emit('loaded', loaded); this.queue = this.queue.filter(q => !q.done); } read(lng, ns, fcName) { let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout; let callback = arguments.length > 5 ? arguments[5] : undefined; if (!lng.length) return callback(null, {}); if (this.readingCalls >= this.maxParallelReads) { this.waitingReads.push({ lng, ns, fcName, tried, wait, callback }); return; } this.readingCalls++; const resolver = (err, data) => { this.readingCalls--; if (this.waitingReads.length > 0) { const next = this.waitingReads.shift(); this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback); } if (err && data && tried < this.maxRetries) { setTimeout(() => { this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback); }, wait); return; } callback(err, data); }; const fc = this.backend[fcName].bind(this.backend); if (fc.length === 2) { try { const r = fc(lng, ns); if (r && typeof r.then === 'function') { r.then(data => resolver(null, data)).catch(resolver); } else { resolver(null, r); } } catch (err) { resolver(err); } return; } return fc(lng, ns, resolver); } prepareLoading(languages, namespaces) { let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; let callback = arguments.length > 3 ? arguments[3] : undefined; if (!this.backend) { this.logger.warn('No backend was added via i18next.use. Will not load resources.'); return callback && callback(); } if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages); if (typeof namespaces === 'string') namespaces = [namespaces]; const toLoad = this.queueLoad(languages, namespaces, options, callback); if (!toLoad.toLoad.length) { if (!toLoad.pending.length) callback(); return null; } toLoad.toLoad.forEach(name => { this.loadOne(name); }); } load(languages, namespaces, callback) { this.prepareLoading(languages, namespaces, {}, callback); } reload(languages, namespaces, callback) { this.prepareLoading(languages, namespaces, { reload: true }, callback); } loadOne(name) { let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; const s = name.split('|'); const lng = s[0]; const ns = s[1]; this.read(lng, ns, 'read', undefined, undefined, (err, data) => { if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err); if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data); this.loaded(name, err, data); }); } saveMissing(languages, namespace, key, fallbackValue, isUpdate) { let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {}; if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) { this.logger.warn(`did not save key "${key}" as the namespace "${namespace}" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!'); return; } if (key === undefined || key === null || key === '') return; if (this.backend && this.backend.create) { const opts = { ...options, isUpdate }; const fc = this.backend.create.bind(this.backend); if (fc.length < 6) { try { let r; if (fc.length === 5) { r = fc(languages, namespace, key, fallbackValue, opts); } else { r = fc(languages, namespace, key, fallbackValue); } if (r && typeof r.then === 'function') { r.then(data => clb(null, data)).catch(clb); } else { clb(null, r); } } catch (err) { clb(err); } } else { fc(languages, namespace, key, fallbackValue, clb, opts); } } if (!languages || !languages[0]) return; this.store.addResource(languages[0], namespace, key, fallbackValue); } } function get() { return { debug: false, initImmediate: true, ns: ['translation'], defaultNS: ['translation'], fallbackLng: ['dev'], fallbackNS: false, supportedLngs: false, nonExplicitSupportedLngs: false, load: 'all', preload: false, simplifyPluralSuffix: true, keySeparator: '.', nsSeparator: ':', pluralSeparator: '_', contextSeparator: '_', partialBundledLanguages: false, saveMissing: false, updateMissing: false, saveMissingTo: 'fallback', saveMissingPlurals: true, missingKeyHandler: false, missingInterpolationHandler: false, postProcess: false, postProcessPassResolved: false, returnNull: false, returnEmptyString: true, returnObjects: false, joinArrays: false, returnedObjectHandler: false, parseMissingKeyHandler: false, appendNamespaceToMissingKey: false, appendNamespaceToCIMode: false, overloadTranslationOptionHandler: function handle(args) { let ret = {}; if (typeof args[1] === 'object') ret = args[1]; if (typeof args[1] === 'string') ret.defaultValue = args[1]; if (typeof args[2] === 'string') ret.tDescription = args[2]; if (typeof args[2] === 'object' || typeof args[3] === 'object') { const options = args[3] || args[2]; Object.keys(options).forEach(key => { ret[key] = options[key]; }); } return ret; }, interpolation: { escapeValue: true, format: (value, format, lng, options) => value, prefix: '{{', suffix: '}}', formatSeparator: ',', unescapePrefix: '-', nestingPrefix: '$t(', nestingSuffix: ')', nestingOptionsSeparator: ',', maxReplaces: 1000, skipOnVariables: true } }; } function transformOptions(options) { if (typeof options.ns === 'string') options.ns = [options.ns]; if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng]; if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS]; if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) { options.supportedLngs = options.supportedLngs.concat(['cimode']); } return options; } function noop() {} function bindMemberFunctions(inst) { const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst)); mems.forEach(mem => { if (typeof inst[mem] === 'function') { inst[mem] = inst[mem].bind(inst); } }); } class I18n extends EventEmitter { constructor() { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let callback = arguments.length > 1 ? arguments[1] : undefined; super(); this.options = transformOptions(options); this.services = {}; this.logger = baseLogger; this.modules = { external: [] }; bindMemberFunctions(this); if (callback && !this.isInitialized && !options.isClone) { if (!this.options.initImmediate) { this.init(options, callback); return this; } setTimeout(() => { this.init(options, callback); }, 0); } } init() { var _this = this; let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let callback = arguments.length > 1 ? arguments[1] : undefined; if (typeof options === 'function') { callback = options; options = {}; } if (!options.defaultNS && options.defaultNS !== false && options.ns) { if (typeof options.ns === 'string') { options.defaultNS = options.ns; } else if (options.ns.indexOf('translation') < 0) { options.defaultNS = options.ns[0]; } } const defOpts = get(); this.options = { ...defOpts, ...this.options, ...transformOptions(options) }; if (this.options.compatibilityAPI !== 'v1') { this.options.interpolation = { ...defOpts.interpolation, ...this.options.interpolation }; } if (options.keySeparator !== undefined) { this.options.userDefinedKeySeparator = options.keySeparator; } if (options.nsSeparator !== undefined) { this.options.userDefinedNsSeparator = options.nsSeparator; } function createClassOnDemand(ClassOrObject) { if (!ClassOrObject) return null; if (typeof ClassOrObject === 'function') return new ClassOrObject(); return ClassOrObject; } if (!this.options.isClone) { if (this.modules.logger) { baseLogger.init(createClassOnDemand(this.modules.logger), this.options); } else { baseLogger.init(null, this.options); } let formatter; if (this.modules.formatter) { formatter = this.modules.formatter; } else if (typeof Intl !== 'undefined') { formatter = Formatter; } const lu = new LanguageUtil(this.options); this.store = new ResourceStore(this.options.resources, this.options); const s = this.services; s.logger = baseLogger; s.resourceStore = this.store; s.languageUtils = lu; s.pluralResolver = new PluralResolver(lu, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON, simplifyPluralSuffix: this.options.simplifyPluralSuffix }); if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) { s.formatter = createClassOnDemand(formatter); s.formatter.init(s, this.options); this.options.interpolation.format = s.formatter.format.bind(s.formatter); } s.interpolator = new Interpolator(this.options); s.utils = { hasLoadedNamespace: this.hasLoadedNamespace.bind(this) }; s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options); s.backendConnector.on('*', function (event) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } _this.emit(event, ...args); }); if (this.modules.languageDetector) { s.languageDetector = createClassOnDemand(this.modules.languageDetector); if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options); } if (this.modules.i18nFormat) { s.i18nFormat = createClassOnDemand(this.modules.i18nFormat); if (s.i18nFormat.init) s.i18nFormat.init(this); } this.translator = new Translator(this.services, this.options); this.translator.on('*', function (event) { for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } _this.emit(event, ...args); }); this.modules.external.forEach(m => { if (m.init) m.init(this); }); } this.format = this.options.interpolation.format; if (!callback) callback = noop; if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) { const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng); if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0]; } if (!this.services.languageDetector && !this.options.lng) { this.logger.warn('init: no languageDetector is used and no lng is defined'); } const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage']; storeApi.forEach(fcName => { this[fcName] = function () { return _this.store[fcName](...arguments); }; }); const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle']; storeApiChained.forEach(fcName => { this[fcName] = function () { _this.store[fcName](...arguments); return _this; }; }); const deferred = defer(); const load = () => { const finish = (err, t) => { if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!'); this.isInitialized = true; if (!this.options.isClone) this.logger.log('initialized', this.options); this.emit('initialized', this.options); deferred.resolve(t); callback(err, t); }; if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this)); this.changeLanguage(this.options.lng, finish); }; if (this.options.resources || !this.options.initImmediate) { load(); } else { setTimeout(load, 0); } return deferred; } loadResources(language) { let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; let usedCallback = callback; const usedLng = typeof language === 'string' ? language : this.language; if (typeof language === 'function') usedCallback = language; if (!this.options.resources || this.options.partialBundledLanguages) { if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback(); const toLoad = []; const append = lng => { if (!lng) return; if (lng === 'cimode') return; const lngs = this.services.languageUtils.toResolveHierarchy(lng); lngs.forEach(l => { if (l === 'cimode') return; if (toLoad.indexOf(l) < 0) toLoad.push(l); }); }; if (!usedLng) { const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng); fallbacks.forEach(l => append(l)); } else { append(usedLng); } if (this.options.preload) { this.options.preload.forEach(l => append(l)); } this.services.backendConnector.load(toLoad, this.options.ns, e => { if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language); usedCallback(e); }); } else { usedCallback(null); } } reloadResources(lngs, ns, callback) { const deferred = defer(); if (!lngs) lngs = this.languages; if (!ns) ns = this.options.ns; if (!callback) callback = noop; this.services.backendConnector.reload(lngs, ns, err => { deferred.resolve(); callback(err); }); return deferred; } use(module) { if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()'); if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()'); if (module.type === 'backend') { this.modules.backend = module; } if (module.type === 'logger' || module.log && module.warn && module.error) { this.modules.logger = module; } if (module.type === 'languageDetector') { this.modules.languageDetector = module; } if (module.type === 'i18nFormat') { this.modules.i18nFormat = module; } if (module.type === 'postProcessor') { postProcessor.addPostProcessor(module); } if (module.type === 'formatter') { this.modules.formatter = module; } if (module.type === '3rdParty') { this.modules.external.push(module); } return this; } setResolvedLanguage(l) { if (!l || !this.languages) return; if (['cimode', 'dev'].indexOf(l) > -1) return; for (let li = 0; li < this.languages.length; li++) { const lngInLngs = this.languages[li]; if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue; if (this.store.hasLanguageSomeTranslations(lngInLngs)) { this.resolvedLanguage = lngInLngs; break; } } } changeLanguage(lng, callback) { var _this2 = this; this.isLanguageChangingTo = lng; const deferred = defer(); this.emit('languageChanging', lng); const setLngProps = l => { this.language = l; this.languages = this.services.languageUtils.toResolveHierarchy(l); this.resolvedLanguage = undefined; this.setResolvedLanguage(l); }; const done = (err, l) => { if (l) { setLngProps(l); this.translator.changeLanguage(l); this.isLanguageChangingTo = undefined; this.emit('languageChanged', l); this.logger.log('languageChanged', l); } else { this.isLanguageChangingTo = undefined; } deferred.resolve(function () { return _this2.t(...arguments); }); if (callback) callback(err, function () { return _this2.t(...arguments); }); }; const setLng = lngs => { if (!lng && !lngs && this.services.languageDetector) lngs = []; const l = typeof lngs === 'string' ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs); if (l) { if (!this.language) { setLngProps(l); } if (!this.translator.language) this.translator.changeLanguage(l); if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l); } this.loadResources(l, err => { done(err, l); }); }; if (!lng && this.services.languageDetector && !this.services.languageDetector.async) { setLng(this.services.languageDetector.detect()); } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) { if (this.services.languageDetector.detect.length === 0) { this.services.languageDetector.detect().then(setLng); } else { this.services.languageDetector.detect(setLng); } } else { setLng(lng); } return deferred; } getFixedT(lng, ns, keyPrefix) { var _this3 = this; const fixedT = function (key, opts) { let options; if (typeof opts !== 'object') { for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) { rest[_key3 - 2] = arguments[_key3]; } options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest)); } else { options = { ...opts }; } options.lng = options.lng || fixedT.lng; options.lngs = options.lngs || fixedT.lngs; options.ns = options.ns || fixedT.ns; options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix; const keySeparator = _this3.options.keySeparator || '.'; let resultKey; if (options.keyPrefix && Array.isArray(key)) { resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`); } else { resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key; } return _this3.t(resultKey, options); }; if (typeof lng === 'string') { fixedT.lng = lng; } else { fixedT.lngs = lng; } fixedT.ns = ns; fixedT.keyPrefix = keyPrefix; return fixedT; } t() { return this.translator && this.translator.translate(...arguments); } exists() { return this.translator && this.translator.exists(...arguments); } setDefaultNamespace(ns) { this.options.defaultNS = ns; } hasLoadedNamespace(ns) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!this.isInitialized) { this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages); return false; } if (!this.languages || !this.languages.length) { this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages); return false; } const lng = options.lng || this.resolvedLanguage || this.languages[0]; const fallbackLng = this.options ? this.options.fallbackLng : false; const lastLng = this.languages[this.languages.length - 1]; if (lng.toLowerCase() === 'cimode') return true; const loadNotPending = (l, n) => { const loadState = this.services.backendConnector.state[`${l}|${n}`]; return loadState === -1 || loadState === 2; }; if (options.precheck) { const preResult = options.precheck(this, loadNotPending); if (preResult !== undefined) return preResult; } if (this.hasResourceBundle(lng, ns)) return true; if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true; if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true; return false; } loadNamespaces(ns, callback) { const deferred = defer(); if (!this.options.ns) { if (callback) callback(); return Promise.resolve(); } if (typeof ns === 'string') ns = [ns]; ns.forEach(n => { if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n); }); this.loadResources(err => { deferred.resolve(); if (callback) callback(err); }); return deferred; } loadLanguages(lngs, callback) { const deferred = defer(); if (typeof lngs === 'string') lngs = [lngs]; const preloaded = this.options.preload || []; const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0); if (!newLngs.length) { if (callback) callback(); return Promise.resolve(); } this.options.preload = preloaded.concat(newLngs); this.loadResources(err => { deferred.resolve(); if (callback) callback(err); }); return deferred; } dir(lng) { if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language); if (!lng) return 'rtl'; const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb']; const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get()); return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr'; } static createInstance() { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let callback = arguments.length > 1 ? arguments[1] : undefined; return new I18n(options, callback); } cloneInstance() { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; const forkResourceStore = options.forkResourceStore; if (forkResourceStore) delete options.forkResourceStore; const mergedOptions = { ...this.options, ...options, ...{ isClone: true } }; const clone = new I18n(mergedOptions); if (options.debug !== undefined || options.prefix !== undefined) { clone.logger = clone.logger.clone(options); } const membersToCopy = ['store', 'services', 'language']; membersToCopy.forEach(m => { clone[m] = this[m]; }); clone.services = { ...this.services }; clone.services.utils = { hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone) }; if (forkResourceStore) { clone.store = new ResourceStore(this.store.data, mergedOptions); clone.services.resourceStore = clone.store; } clone.translator = new Translator(clone.services, mergedOptions); clone.translator.on('*', function (event) { for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { args[_key4 - 1] = arguments[_key4]; } clone.emit(event, ...args); }); clone.init(mergedOptions, callback); clone.translator.options = mergedOptions; clone.translator.backendConnector.services.utils = { hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone) }; return clone; } toJSON() { return { options: this.options, store: this.store, language: this.language, languages: this.languages, resolvedLanguage: this.resolvedLanguage }; } } const instance = I18n.createInstance(); instance.createInstance = I18n.createInstance; return instance; })); i18next-23.7.6/i18next.min.js000066400000000000000000001356161452441263500155530ustar00rootroot00000000000000!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).i18next=e()}(this,(function(){"use strict";const t={type:"logger",log(t){this.output("log",t)},warn(t){this.output("warn",t)},error(t){this.output("error",t)},output(t,e){console&&console[t]&&console[t].apply(console,e)}};class e{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.init(t,e)}init(e){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=s.prefix||"i18next:",this.logger=e||t,this.options=s,this.debug=s.debug}log(){for(var t=arguments.length,e=new Array(t),s=0;s{this.observers[t]=this.observers[t]||[],this.observers[t].push(e)})),this}off(t,e){this.observers[t]&&(e?this.observers[t]=this.observers[t].filter((t=>t!==e)):delete this.observers[t])}emit(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),i=1;i{t(...s)}))}if(this.observers["*"]){[].concat(this.observers["*"]).forEach((e=>{e.apply(e,[t,...s])}))}}}function n(){let t,e;const s=new Promise(((s,i)=>{t=s,e=i}));return s.resolve=t,s.reject=e,s}function o(t){return null==t?"":""+t}function r(t,e,s){function i(t){return t&&t.indexOf("###")>-1?t.replace(/###/g,"."):t}function n(){return!t||"string"==typeof t}const o="string"!=typeof e?[].concat(e):e.split(".");for(;o.length>1;){if(n())return{};const e=i(o.shift());!t[e]&&s&&(t[e]=new s),t=Object.prototype.hasOwnProperty.call(t,e)?t[e]:{}}return n()?{}:{obj:t,k:i(o.shift())}}function a(t,e,s){const{obj:i,k:n}=r(t,e,Object);i[n]=s}function l(t,e){const{obj:s,k:i}=r(t,e);if(s)return s[i]}function u(t,e,s){for(const i in e)"__proto__"!==i&&"constructor"!==i&&(i in t?"string"==typeof t[i]||t[i]instanceof String||"string"==typeof e[i]||e[i]instanceof String?s&&(t[i]=e[i]):u(t[i],e[i],s):t[i]=e[i]);return t}function h(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var c={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function p(t){return"string"==typeof t?t.replace(/[&<>"'\/]/g,(t=>c[t])):t}const g=[" ",",","?","!",";"];function d(t,e){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(!t)return;if(t[e])return t[e];const i=e.split(s);let n=t;for(let t=0;tt+o;)o++,r=i.slice(t,t+o).join(s),a=n[r];if(void 0===a)return;if(null===a)return null;if(e.endsWith(r)){if("string"==typeof a)return a;if(r&&"string"==typeof a[r])return a[r]}const l=i.slice(t+o).join(s);return l?d(a,l,s):void 0}n=n[i[t]]}return n}function f(t){return t&&t.indexOf("_")>0?t.replace("_","-"):t}class m extends i{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=t||{},this.options=e,void 0===this.options.keySeparator&&(this.options.keySeparator="."),void 0===this.options.ignoreJSONStructure&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const e=this.options.ns.indexOf(t);e>-1&&this.options.ns.splice(e,1)}getResource(t,e,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const n=void 0!==i.keySeparator?i.keySeparator:this.options.keySeparator,o=void 0!==i.ignoreJSONStructure?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let r=[t,e];s&&"string"!=typeof s&&(r=r.concat(s)),s&&"string"==typeof s&&(r=r.concat(n?s.split(n):s)),t.indexOf(".")>-1&&(r=t.split("."));const a=l(this.data,r);return a||!o||"string"!=typeof s?a:d(this.data&&this.data[t]&&this.data[t][e],s,n)}addResource(t,e,s,i){let n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1};const o=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator;let r=[t,e];s&&(r=r.concat(o?s.split(o):s)),t.indexOf(".")>-1&&(r=t.split("."),i=e,e=r[1]),this.addNamespaces(e),a(this.data,r,i),n.silent||this.emit("added",t,e,s,i)}addResources(t,e,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(const i in s)"string"!=typeof s[i]&&"[object Array]"!==Object.prototype.toString.apply(s[i])||this.addResource(t,e,i,s[i],{silent:!0});i.silent||this.emit("added",t,e,s)}addResourceBundle(t,e,s,i,n){let o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1},r=[t,e];t.indexOf(".")>-1&&(r=t.split("."),i=s,s=e,e=r[1]),this.addNamespaces(e);let h=l(this.data,r)||{};i?u(h,s,n):h={...h,...s},a(this.data,r,h),o.silent||this.emit("added",t,e,s)}removeResourceBundle(t,e){this.hasResourceBundle(t,e)&&delete this.data[t][e],this.removeNamespaces(e),this.emit("removed",t,e)}hasResourceBundle(t,e){return void 0!==this.getResource(t,e)}getResourceBundle(t,e){return e||(e=this.options.defaultNS),"v1"===this.options.compatibilityAPI?{...this.getResource(t,e)}:this.getResource(t,e)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const e=this.getDataByLanguage(t);return!!(e&&Object.keys(e)||[]).find((t=>e[t]&&Object.keys(e[t]).length>0))}toJSON(){return this.data}}var y={processors:{},addPostProcessor(t){this.processors[t.name]=t},handle(t,e,s,i,n){return t.forEach((t=>{this.processors[t]&&(e=this.processors[t].process(e,s,i,n))})),e}};const v={};class b extends i{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var i,n;super(),i=t,n=this,["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"].forEach((t=>{i[t]&&(n[t]=i[t])})),this.options=e,void 0===this.options.keySeparator&&(this.options.keySeparator="."),this.logger=s.create("translator")}changeLanguage(t){t&&(this.language=t)}exists(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};if(null==t)return!1;const s=this.resolve(t,e);return s&&void 0!==s.res}extractFromKey(t,e){let s=void 0!==e.nsSeparator?e.nsSeparator:this.options.nsSeparator;void 0===s&&(s=":");const i=void 0!==e.keySeparator?e.keySeparator:this.options.keySeparator;let n=e.ns||this.options.defaultNS||[];const o=s&&t.indexOf(s)>-1,r=!(this.options.userDefinedKeySeparator||e.keySeparator||this.options.userDefinedNsSeparator||e.nsSeparator||function(t,e,s){e=e||"",s=s||"";const i=g.filter((t=>e.indexOf(t)<0&&s.indexOf(t)<0));if(0===i.length)return!0;const n=new RegExp(`(${i.map((t=>"?"===t?"\\?":t)).join("|")})`);let o=!n.test(t);if(!o){const e=t.indexOf(s);e>0&&!n.test(t.substring(0,e))&&(o=!0)}return o}(t,s,i));if(o&&!r){const e=t.match(this.interpolator.nestingRegexp);if(e&&e.length>0)return{key:t,namespaces:n};const o=t.split(s);(s!==i||s===i&&this.options.ns.indexOf(o[0])>-1)&&(n=o.shift()),t=o.join(i)}return"string"==typeof n&&(n=[n]),{key:t,namespaces:n}}translate(t,e,s){if("object"!=typeof e&&this.options.overloadTranslationOptionHandler&&(e=this.options.overloadTranslationOptionHandler(arguments)),"object"==typeof e&&(e={...e}),e||(e={}),null==t)return"";Array.isArray(t)||(t=[String(t)]);const i=void 0!==e.returnDetails?e.returnDetails:this.options.returnDetails,n=void 0!==e.keySeparator?e.keySeparator:this.options.keySeparator,{key:o,namespaces:r}=this.extractFromKey(t[t.length-1],e),a=r[r.length-1],l=e.lng||this.language,u=e.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(l&&"cimode"===l.toLowerCase()){if(u){const t=e.nsSeparator||this.options.nsSeparator;return i?{res:`${a}${t}${o}`,usedKey:o,exactUsedKey:o,usedLng:l,usedNS:a,usedParams:this.getUsedParamsDetails(e)}:`${a}${t}${o}`}return i?{res:o,usedKey:o,exactUsedKey:o,usedLng:l,usedNS:a,usedParams:this.getUsedParamsDetails(e)}:o}const h=this.resolve(t,e);let c=h&&h.res;const p=h&&h.usedKey||o,g=h&&h.exactUsedKey||o,d=Object.prototype.toString.apply(c),f=void 0!==e.joinArrays?e.joinArrays:this.options.joinArrays,m=!this.i18nFormat||this.i18nFormat.handleAsObject;if(m&&c&&("string"!=typeof c&&"boolean"!=typeof c&&"number"!=typeof c)&&["[object Number]","[object Function]","[object RegExp]"].indexOf(d)<0&&("string"!=typeof f||"[object Array]"!==d)){if(!e.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const t=this.options.returnedObjectHandler?this.options.returnedObjectHandler(p,c,{...e,ns:r}):`key '${o} (${this.language})' returned an object instead of string.`;return i?(h.res=t,h.usedParams=this.getUsedParamsDetails(e),h):t}if(n){const t="[object Array]"===d,s=t?[]:{},i=t?g:p;for(const t in c)if(Object.prototype.hasOwnProperty.call(c,t)){const o=`${i}${n}${t}`;s[t]=this.translate(o,{...e,joinArrays:!1,ns:r}),s[t]===o&&(s[t]=c[t])}c=s}}else if(m&&"string"==typeof f&&"[object Array]"===d)c=c.join(f),c&&(c=this.extendTranslation(c,t,e,s));else{let i=!1,r=!1;const u=void 0!==e.count&&"string"!=typeof e.count,p=b.hasDefaultValue(e),g=u?this.pluralResolver.getSuffix(l,e.count,e):"",d=e.ordinal&&u?this.pluralResolver.getSuffix(l,e.count,{ordinal:!1}):"",f=e[`defaultValue${g}`]||e[`defaultValue${d}`]||e.defaultValue;!this.isValidLookup(c)&&p&&(i=!0,c=f),this.isValidLookup(c)||(r=!0,c=o);const m=(e.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&r?void 0:c,y=p&&f!==c&&this.options.updateMissing;if(r||i||y){if(this.logger.log(y?"updateKey":"missingKey",l,a,o,y?f:c),n){const t=this.resolve(o,{...e,keySeparator:!1});t&&t.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let t=[];const s=this.languageUtils.getFallbackCodes(this.options.fallbackLng,e.lng||this.language);if("fallback"===this.options.saveMissingTo&&s&&s[0])for(let e=0;e{const n=p&&i!==c?i:m;this.options.missingKeyHandler?this.options.missingKeyHandler(t,a,s,n,y,e):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(t,a,s,n,y,e),this.emit("missingKey",t,a,s,c)};this.options.saveMissing&&(this.options.saveMissingPlurals&&u?t.forEach((t=>{this.pluralResolver.getSuffixes(t,e).forEach((s=>{i([t],o+s,e[`defaultValue${s}`]||f)}))})):i(t,o,f))}c=this.extendTranslation(c,t,e,h,s),r&&c===o&&this.options.appendNamespaceToMissingKey&&(c=`${a}:${o}`),(r||i)&&this.options.parseMissingKeyHandler&&(c="v1"!==this.options.compatibilityAPI?this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${a}:${o}`:o,i?c:void 0):this.options.parseMissingKeyHandler(c))}return i?(h.res=c,h.usedParams=this.getUsedParamsDetails(e),h):c}extendTranslation(t,e,s,i,n){var o=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...s},s.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!s.skipInterpolation){s.interpolation&&this.interpolator.init({...s,interpolation:{...this.options.interpolation,...s.interpolation}});const r="string"==typeof t&&(s&&s.interpolation&&void 0!==s.interpolation.skipOnVariables?s.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let a;if(r){const e=t.match(this.interpolator.nestingRegexp);a=e&&e.length}let l=s.replace&&"string"!=typeof s.replace?s.replace:s;if(this.options.interpolation.defaultVariables&&(l={...this.options.interpolation.defaultVariables,...l}),t=this.interpolator.interpolate(t,l,s.lng||this.language,s),r){const e=t.match(this.interpolator.nestingRegexp);a<(e&&e.length)&&(s.nest=!1)}!s.lng&&"v1"!==this.options.compatibilityAPI&&i&&i.res&&(s.lng=i.usedLng),!1!==s.nest&&(t=this.interpolator.nest(t,(function(){for(var t=arguments.length,i=new Array(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof t&&(t=[t]),t.forEach((t=>{if(this.isValidLookup(e))return;const a=this.extractFromKey(t,r),l=a.key;s=l;let u=a.namespaces;this.options.fallbackNS&&(u=u.concat(this.options.fallbackNS));const h=void 0!==r.count&&"string"!=typeof r.count,c=h&&!r.ordinal&&0===r.count&&this.pluralResolver.shouldUseIntlApi(),p=void 0!==r.context&&("string"==typeof r.context||"number"==typeof r.context)&&""!==r.context,g=r.lngs?r.lngs:this.languageUtils.toResolveHierarchy(r.lng||this.language,r.fallbackLng);u.forEach((t=>{this.isValidLookup(e)||(o=t,!v[`${g[0]}-${t}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(o)&&(v[`${g[0]}-${t}`]=!0,this.logger.warn(`key "${s}" for languages "${g.join(", ")}" won't get resolved as namespace "${o}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),g.forEach((s=>{if(this.isValidLookup(e))return;n=s;const o=[l];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(o,l,s,t,r);else{let t;h&&(t=this.pluralResolver.getSuffix(s,r.count,r));const e=`${this.options.pluralSeparator}zero`,i=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(h&&(o.push(l+t),r.ordinal&&0===t.indexOf(i)&&o.push(l+t.replace(i,this.options.pluralSeparator)),c&&o.push(l+e)),p){const s=`${l}${this.options.contextSeparator}${r.context}`;o.push(s),h&&(o.push(s+t),r.ordinal&&0===t.indexOf(i)&&o.push(s+t.replace(i,this.options.pluralSeparator)),c&&o.push(s+e))}}let a;for(;a=o.pop();)this.isValidLookup(e)||(i=a,e=this.getResource(s,t,a,r))})))}))})),{res:e,usedKey:s,exactUsedKey:i,usedLng:n,usedNS:o}}isValidLookup(t){return!(void 0===t||!this.options.returnNull&&null===t||!this.options.returnEmptyString&&""===t)}getResource(t,e,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,e,s,i):this.resourceStore.getResource(t,e,s,i)}getUsedParamsDetails(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],s=t.replace&&"string"!=typeof t.replace;let i=s?t.replace:t;if(s&&void 0!==t.count&&(i.count=t.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!s){i={...i};for(const t of e)delete i[t]}return i}static hasDefaultValue(t){const e="defaultValue";for(const s in t)if(Object.prototype.hasOwnProperty.call(t,s)&&e===s.substring(0,12)&&void 0!==t[s])return!0;return!1}}function x(t){return t.charAt(0).toUpperCase()+t.slice(1)}class S{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=s.create("languageUtils")}getScriptPartFromCode(t){if(!(t=f(t))||t.indexOf("-")<0)return null;const e=t.split("-");return 2===e.length?null:(e.pop(),"x"===e[e.length-1].toLowerCase()?null:this.formatLanguageCode(e.join("-")))}getLanguagePartFromCode(t){if(!(t=f(t))||t.indexOf("-")<0)return t;const e=t.split("-");return this.formatLanguageCode(e[0])}formatLanguageCode(t){if("string"==typeof t&&t.indexOf("-")>-1){const e=["hans","hant","latn","cyrl","cans","mong","arab"];let s=t.split("-");return this.options.lowerCaseLng?s=s.map((t=>t.toLowerCase())):2===s.length?(s[0]=s[0].toLowerCase(),s[1]=s[1].toUpperCase(),e.indexOf(s[1].toLowerCase())>-1&&(s[1]=x(s[1].toLowerCase()))):3===s.length&&(s[0]=s[0].toLowerCase(),2===s[1].length&&(s[1]=s[1].toUpperCase()),"sgn"!==s[0]&&2===s[2].length&&(s[2]=s[2].toUpperCase()),e.indexOf(s[1].toLowerCase())>-1&&(s[1]=x(s[1].toLowerCase())),e.indexOf(s[2].toLowerCase())>-1&&(s[2]=x(s[2].toLowerCase()))),s.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let e;return t.forEach((t=>{if(e)return;const s=this.formatLanguageCode(t);this.options.supportedLngs&&!this.isSupportedCode(s)||(e=s)})),!e&&this.options.supportedLngs&&t.forEach((t=>{if(e)return;const s=this.getLanguagePartFromCode(t);if(this.isSupportedCode(s))return e=s;e=this.options.supportedLngs.find((t=>t===s?t:t.indexOf("-")<0&&s.indexOf("-")<0?void 0:0===t.indexOf(s)?t:void 0))})),e||(e=this.getFallbackCodes(this.options.fallbackLng)[0]),e}getFallbackCodes(t,e){if(!t)return[];if("function"==typeof t&&(t=t(e)),"string"==typeof t&&(t=[t]),"[object Array]"===Object.prototype.toString.apply(t))return t;if(!e)return t.default||[];let s=t[e];return s||(s=t[this.getScriptPartFromCode(e)]),s||(s=t[this.formatLanguageCode(e)]),s||(s=t[this.getLanguagePartFromCode(e)]),s||(s=t.default),s||[]}toResolveHierarchy(t,e){const s=this.getFallbackCodes(e||this.options.fallbackLng||[],t),i=[],n=t=>{t&&(this.isSupportedCode(t)?i.push(t):this.logger.warn(`rejecting language code not found in supportedLngs: ${t}`))};return"string"==typeof t&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?("languageOnly"!==this.options.load&&n(this.formatLanguageCode(t)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&n(this.getScriptPartFromCode(t)),"currentOnly"!==this.options.load&&n(this.getLanguagePartFromCode(t))):"string"==typeof t&&n(this.formatLanguageCode(t)),s.forEach((t=>{i.indexOf(t)<0&&n(this.formatLanguageCode(t))})),i}}let k=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],L={1:function(t){return Number(t>1)},2:function(t){return Number(1!=t)},3:function(t){return 0},4:function(t){return Number(t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2)},5:function(t){return Number(0==t?0:1==t?1:2==t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5)},6:function(t){return Number(1==t?0:t>=2&&t<=4?1:2)},7:function(t){return Number(1==t?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2)},8:function(t){return Number(1==t?0:2==t?1:8!=t&&11!=t?2:3)},9:function(t){return Number(t>=2)},10:function(t){return Number(1==t?0:2==t?1:t<7?2:t<11?3:4)},11:function(t){return Number(1==t||11==t?0:2==t||12==t?1:t>2&&t<20?2:3)},12:function(t){return Number(t%10!=1||t%100==11)},13:function(t){return Number(0!==t)},14:function(t){return Number(1==t?0:2==t?1:3==t?2:3)},15:function(t){return Number(t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2)},16:function(t){return Number(t%10==1&&t%100!=11?0:0!==t?1:2)},17:function(t){return Number(1==t||t%10==1&&t%100!=11?0:1)},18:function(t){return Number(0==t?0:1==t?1:2)},19:function(t){return Number(1==t?0:0==t||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3)},20:function(t){return Number(1==t?0:0==t||t%100>0&&t%100<20?1:2)},21:function(t){return Number(t%100==1?1:t%100==2?2:t%100==3||t%100==4?3:0)},22:function(t){return Number(1==t?0:2==t?1:(t<0||t>10)&&t%10==0?2:3)}};const O=["v1","v2","v3"],w=["v4"],N={zero:0,one:1,two:2,few:3,many:4,other:5};class R{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.languageUtils=t,this.options=e,this.logger=s.create("pluralResolver"),this.options.compatibilityJSON&&!w.includes(this.options.compatibilityJSON)||"undefined"!=typeof Intl&&Intl.PluralRules||(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=function(){const t={};return k.forEach((e=>{e.lngs.forEach((s=>{t[s]={numbers:e.nr,plurals:L[e.fc]}}))})),t}()}addRule(t,e){this.rules[t]=e}getRule(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(f(t),{type:e.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}needsPlural(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=this.getRule(t,e);return this.shouldUseIntlApi()?s&&s.resolvedOptions().pluralCategories.length>1:s&&s.numbers.length>1}getPluralFormsOfKey(t,e){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.getSuffixes(t,s).map((t=>`${e}${t}`))}getSuffixes(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=this.getRule(t,e);return s?this.shouldUseIntlApi()?s.resolvedOptions().pluralCategories.sort(((t,e)=>N[t]-N[e])).map((t=>`${this.options.prepend}${e.ordinal?`ordinal${this.options.prepend}`:""}${t}`)):s.numbers.map((s=>this.getSuffix(t,s,e))):[]}getSuffix(t,e){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=this.getRule(t,s);return i?this.shouldUseIntlApi()?`${this.options.prepend}${s.ordinal?`ordinal${this.options.prepend}`:""}${i.select(e)}`:this.getSuffixRetroCompatible(i,e):(this.logger.warn(`no plural rule found for: ${t}`),"")}getSuffixRetroCompatible(t,e){const s=t.noAbs?t.plurals(e):t.plurals(Math.abs(e));let i=t.numbers[s];this.options.simplifyPluralSuffix&&2===t.numbers.length&&1===t.numbers[0]&&(2===i?i="plural":1===i&&(i=""));const n=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return"v1"===this.options.compatibilityJSON?1===i?"":"number"==typeof i?`_plural_${i.toString()}`:n():"v2"===this.options.compatibilityJSON||this.options.simplifyPluralSuffix&&2===t.numbers.length&&1===t.numbers[0]?n():this.options.prepend&&s.toString()?this.options.prepend+s.toString():s.toString()}shouldUseIntlApi(){return!O.includes(this.options.compatibilityJSON)}}function $(t,e,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",n=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=function(t,e,s){const i=l(t,s);return void 0!==i?i:l(e,s)}(t,e,s);return!o&&n&&"string"==typeof s&&(o=d(t,s,i),void 0===o&&(o=d(e,s,i))),o}class P{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.logger=s.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||(t=>t),this.init(t)}init(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});const e=t.interpolation;this.escape=void 0!==e.escape?e.escape:p,this.escapeValue=void 0===e.escapeValue||e.escapeValue,this.useRawValueToEscape=void 0!==e.useRawValueToEscape&&e.useRawValueToEscape,this.prefix=e.prefix?h(e.prefix):e.prefixEscaped||"{{",this.suffix=e.suffix?h(e.suffix):e.suffixEscaped||"}}",this.formatSeparator=e.formatSeparator?e.formatSeparator:e.formatSeparator||",",this.unescapePrefix=e.unescapeSuffix?"":e.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":e.unescapeSuffix||"",this.nestingPrefix=e.nestingPrefix?h(e.nestingPrefix):e.nestingPrefixEscaped||h("$t("),this.nestingSuffix=e.nestingSuffix?h(e.nestingSuffix):e.nestingSuffixEscaped||h(")"),this.nestingOptionsSeparator=e.nestingOptionsSeparator?e.nestingOptionsSeparator:e.nestingOptionsSeparator||",",this.maxReplaces=e.maxReplaces?e.maxReplaces:1e3,this.alwaysFormat=void 0!==e.alwaysFormat&&e.alwaysFormat,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=`${this.prefix}(.+?)${this.suffix}`;this.regexp=new RegExp(t,"g");const e=`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;this.regexpUnescape=new RegExp(e,"g");const s=`${this.nestingPrefix}(.+?)${this.nestingSuffix}`;this.nestingRegexp=new RegExp(s,"g")}interpolate(t,e,s,i){let n,r,a;const l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function u(t){return t.replace(/\$/g,"$$$$")}const h=t=>{if(t.indexOf(this.formatSeparator)<0){const n=$(e,l,t,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(n,void 0,s,{...i,...e,interpolationkey:t}):n}const n=t.split(this.formatSeparator),o=n.shift().trim(),r=n.join(this.formatSeparator).trim();return this.format($(e,l,o,this.options.keySeparator,this.options.ignoreJSONStructure),r,s,{...i,...e,interpolationkey:o})};this.resetRegExp();const c=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,p=i&&i.interpolation&&void 0!==i.interpolation.skipOnVariables?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:t=>u(t)},{regex:this.regexp,safeValue:t=>this.escapeValue?u(this.escape(t)):u(t)}].forEach((e=>{for(a=0;n=e.regex.exec(t);){const s=n[1].trim();if(r=h(s),void 0===r)if("function"==typeof c){const e=c(t,n,i);r="string"==typeof e?e:""}else if(i&&Object.prototype.hasOwnProperty.call(i,s))r="";else{if(p){r=n[0];continue}this.logger.warn(`missed to pass in variable ${s} for interpolating ${t}`),r=""}else"string"==typeof r||this.useRawValueToEscape||(r=o(r));const l=e.safeValue(r);if(t=t.replace(n[0],l),p?(e.regex.lastIndex+=r.length,e.regex.lastIndex-=n[0].length):e.regex.lastIndex=0,a++,a>=this.maxReplaces)break}})),t}nest(t,e){let s,i,n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};function a(t,e){const s=this.nestingOptionsSeparator;if(t.indexOf(s)<0)return t;const i=t.split(new RegExp(`${s}[ ]*{`));let o=`{${i[1]}`;t=i[0],o=this.interpolate(o,n);const r=o.match(/'/g),a=o.match(/"/g);(r&&r.length%2==0&&!a||a.length%2!=0)&&(o=o.replace(/'/g,'"'));try{n=JSON.parse(o),e&&(n={...e,...n})}catch(e){return this.logger.warn(`failed parsing options string in nesting for key ${t}`,e),`${t}${s}${o}`}return delete n.defaultValue,t}for(;s=this.nestingRegexp.exec(t);){let l=[];n={...r},n=n.replace&&"string"!=typeof n.replace?n.replace:n,n.applyPostProcessor=!1,delete n.defaultValue;let u=!1;if(-1!==s[0].indexOf(this.formatSeparator)&&!/{.*}/.test(s[1])){const t=s[1].split(this.formatSeparator).map((t=>t.trim()));s[1]=t.shift(),l=t,u=!0}if(i=e(a.call(this,s[1].trim(),n),n),i&&s[0]===t&&"string"!=typeof i)return i;"string"!=typeof i&&(i=o(i)),i||(this.logger.warn(`missed to resolve ${s[1]} for nesting ${t}`),i=""),u&&(i=l.reduce(((t,e)=>this.format(t,e,r.lng,{...r,interpolationkey:s[1].trim()})),i.trim())),t=t.replace(s[0],i),this.regexp.lastIndex=0}return t}}function C(t){const e={};return function(s,i,n){const o=i+JSON.stringify(n);let r=e[o];return r||(r=t(f(i),n),e[o]=r),r(s)}}class j{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.logger=s.create("formatter"),this.options=t,this.formats={number:C(((t,e)=>{const s=new Intl.NumberFormat(t,{...e});return t=>s.format(t)})),currency:C(((t,e)=>{const s=new Intl.NumberFormat(t,{...e,style:"currency"});return t=>s.format(t)})),datetime:C(((t,e)=>{const s=new Intl.DateTimeFormat(t,{...e});return t=>s.format(t)})),relativetime:C(((t,e)=>{const s=new Intl.RelativeTimeFormat(t,{...e});return t=>s.format(t,e.range||"day")})),list:C(((t,e)=>{const s=new Intl.ListFormat(t,{...e});return t=>s.format(t)}))},this.init(t)}init(t){const e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=e.formatSeparator?e.formatSeparator:e.formatSeparator||","}add(t,e){this.formats[t.toLowerCase().trim()]=e}addCached(t,e){this.formats[t.toLowerCase().trim()]=C(e)}format(t,e,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.split(this.formatSeparator).reduce(((t,e)=>{const{formatName:n,formatOptions:o}=function(t){let e=t.toLowerCase().trim();const s={};if(t.indexOf("(")>-1){const i=t.split("(");e=i[0].toLowerCase().trim();const n=i[1].substring(0,i[1].length-1);"currency"===e&&n.indexOf(":")<0?s.currency||(s.currency=n.trim()):"relativetime"===e&&n.indexOf(":")<0?s.range||(s.range=n.trim()):n.split(";").forEach((t=>{if(!t)return;const[e,...i]=t.split(":"),n=i.join(":").trim().replace(/^'+|'+$/g,"");s[e.trim()]||(s[e.trim()]=n),"false"===n&&(s[e.trim()]=!1),"true"===n&&(s[e.trim()]=!0),isNaN(n)||(s[e.trim()]=parseInt(n,10))}))}return{formatName:e,formatOptions:s}}(e);if(this.formats[n]){let e=t;try{const r=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},a=r.locale||r.lng||i.locale||i.lng||s;e=this.formats[n](t,a,{...o,...i,...r})}catch(t){this.logger.warn(t)}return e}return this.logger.warn(`there was no format function for ${n}`),t}),t)}}class E extends i{constructor(t,e,i){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};super(),this.backend=t,this.store=e,this.services=i,this.languageUtils=i.languageUtils,this.options=n,this.logger=s.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=n.maxParallelReads||10,this.readingCalls=0,this.maxRetries=n.maxRetries>=0?n.maxRetries:5,this.retryTimeout=n.retryTimeout>=1?n.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(i,n.backend,n)}queueLoad(t,e,s,i){const n={},o={},r={},a={};return t.forEach((t=>{let i=!0;e.forEach((e=>{const r=`${t}|${e}`;!s.reload&&this.store.hasResourceBundle(t,e)?this.state[r]=2:this.state[r]<0||(1===this.state[r]?void 0===o[r]&&(o[r]=!0):(this.state[r]=1,i=!1,void 0===o[r]&&(o[r]=!0),void 0===n[r]&&(n[r]=!0),void 0===a[e]&&(a[e]=!0)))})),i||(r[t]=!0)})),(Object.keys(n).length||Object.keys(o).length)&&this.queue.push({pending:o,pendingCount:Object.keys(o).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(n),pending:Object.keys(o),toLoadLanguages:Object.keys(r),toLoadNamespaces:Object.keys(a)}}loaded(t,e,s){const i=t.split("|"),n=i[0],o=i[1];e&&this.emit("failedLoading",n,o,e),s&&this.store.addResourceBundle(n,o,s),this.state[t]=e?-1:2;const a={};this.queue.forEach((s=>{!function(t,e,s,i){const{obj:n,k:o}=r(t,e,Object);n[o]=n[o]||[],i&&(n[o]=n[o].concat(s)),i||n[o].push(s)}(s.loaded,[n],o),function(t,e){void 0!==t.pending[e]&&(delete t.pending[e],t.pendingCount--)}(s,t),e&&s.errors.push(e),0!==s.pendingCount||s.done||(Object.keys(s.loaded).forEach((t=>{a[t]||(a[t]={});const e=s.loaded[t];e.length&&e.forEach((e=>{void 0===a[t][e]&&(a[t][e]=!0)}))})),s.done=!0,s.errors.length?s.callback(s.errors):s.callback())})),this.emit("loaded",a),this.queue=this.queue.filter((t=>!t.done))}read(t,e,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.retryTimeout,o=arguments.length>5?arguments[5]:void 0;if(!t.length)return o(null,{});if(this.readingCalls>=this.maxParallelReads)return void this.waitingReads.push({lng:t,ns:e,fcName:s,tried:i,wait:n,callback:o});this.readingCalls++;const r=(r,a)=>{if(this.readingCalls--,this.waitingReads.length>0){const t=this.waitingReads.shift();this.read(t.lng,t.ns,t.fcName,t.tried,t.wait,t.callback)}r&&a&&i{this.read.call(this,t,e,s,i+1,2*n,o)}),n):o(r,a)},a=this.backend[s].bind(this.backend);if(2!==a.length)return a(t,e,r);try{const s=a(t,e);s&&"function"==typeof s.then?s.then((t=>r(null,t))).catch(r):r(null,s)}catch(t){r(t)}}prepareLoading(t,e){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();"string"==typeof t&&(t=this.languageUtils.toResolveHierarchy(t)),"string"==typeof e&&(e=[e]);const n=this.queueLoad(t,e,s,i);if(!n.toLoad.length)return n.pending.length||i(),null;n.toLoad.forEach((t=>{this.loadOne(t)}))}load(t,e,s){this.prepareLoading(t,e,{},s)}reload(t,e,s){this.prepareLoading(t,e,{reload:!0},s)}loadOne(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const s=t.split("|"),i=s[0],n=s[1];this.read(i,n,"read",void 0,void 0,((s,o)=>{s&&this.logger.warn(`${e}loading namespace ${n} for language ${i} failed`,s),!s&&o&&this.logger.log(`${e}loaded namespace ${n} for language ${i}`,o),this.loaded(t,s,o)}))}saveMissing(t,e,s,i,n){let o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(e))this.logger.warn(`did not save key "${s}" as the namespace "${e}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");else if(null!=s&&""!==s){if(this.backend&&this.backend.create){const a={...o,isUpdate:n},l=this.backend.create.bind(this.backend);if(l.length<6)try{let n;n=5===l.length?l(t,e,s,i,a):l(t,e,s,i),n&&"function"==typeof n.then?n.then((t=>r(null,t))).catch(r):r(null,n)}catch(t){r(t)}else l(t,e,s,i,r,a)}t&&t[0]&&this.store.addResource(t[0],e,s,i)}}}function F(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){let e={};if("object"==typeof t[1]&&(e=t[1]),"string"==typeof t[1]&&(e.defaultValue=t[1]),"string"==typeof t[2]&&(e.tDescription=t[2]),"object"==typeof t[2]||"object"==typeof t[3]){const s=t[3]||t[2];Object.keys(s).forEach((t=>{e[t]=s[t]}))}return e},interpolation:{escapeValue:!0,format:(t,e,s,i)=>t,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function I(t){return"string"==typeof t.ns&&(t.ns=[t.ns]),"string"==typeof t.fallbackLng&&(t.fallbackLng=[t.fallbackLng]),"string"==typeof t.fallbackNS&&(t.fallbackNS=[t.fallbackNS]),t.supportedLngs&&t.supportedLngs.indexOf("cimode")<0&&(t.supportedLngs=t.supportedLngs.concat(["cimode"])),t}function D(){}class V extends i{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;var i;if(super(),this.options=I(t),this.services={},this.logger=s,this.modules={external:[]},i=this,Object.getOwnPropertyNames(Object.getPrototypeOf(i)).forEach((t=>{"function"==typeof i[t]&&(i[t]=i[t].bind(i))})),e&&!this.isInitialized&&!t.isClone){if(!this.options.initImmediate)return this.init(t,e),this;setTimeout((()=>{this.init(t,e)}),0)}}init(){var t=this;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1?arguments[1]:void 0;"function"==typeof e&&(i=e,e={}),!e.defaultNS&&!1!==e.defaultNS&&e.ns&&("string"==typeof e.ns?e.defaultNS=e.ns:e.ns.indexOf("translation")<0&&(e.defaultNS=e.ns[0]));const o=F();function r(t){return t?"function"==typeof t?new t:t:null}if(this.options={...o,...this.options,...I(e)},"v1"!==this.options.compatibilityAPI&&(this.options.interpolation={...o.interpolation,...this.options.interpolation}),void 0!==e.keySeparator&&(this.options.userDefinedKeySeparator=e.keySeparator),void 0!==e.nsSeparator&&(this.options.userDefinedNsSeparator=e.nsSeparator),!this.options.isClone){let e;this.modules.logger?s.init(r(this.modules.logger),this.options):s.init(null,this.options),this.modules.formatter?e=this.modules.formatter:"undefined"!=typeof Intl&&(e=j);const i=new S(this.options);this.store=new m(this.options.resources,this.options);const n=this.services;n.logger=s,n.resourceStore=this.store,n.languageUtils=i,n.pluralResolver=new R(i,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!e||this.options.interpolation.format&&this.options.interpolation.format!==o.interpolation.format||(n.formatter=r(e),n.formatter.init(n,this.options),this.options.interpolation.format=n.formatter.format.bind(n.formatter)),n.interpolator=new P(this.options),n.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},n.backendConnector=new E(r(this.modules.backend),n.resourceStore,n,this.options),n.backendConnector.on("*",(function(e){for(var s=arguments.length,i=new Array(s>1?s-1:0),n=1;n1?s-1:0),n=1;n{t.init&&t.init(this)}))}if(this.format=this.options.interpolation.format,i||(i=D),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const t=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);t.length>0&&"dev"!==t[0]&&(this.options.lng=t[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined");["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach((e=>{this[e]=function(){return t.store[e](...arguments)}}));["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach((e=>{this[e]=function(){return t.store[e](...arguments),t}}));const a=n(),l=()=>{const t=(t,e)=>{this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),a.resolve(e),i(t,e)};if(this.languages&&"v1"!==this.options.compatibilityAPI&&!this.isInitialized)return t(null,this.t.bind(this));this.changeLanguage(this.options.lng,t)};return this.options.resources||!this.options.initImmediate?l():setTimeout(l,0),a}loadResources(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:D;const s="string"==typeof t?t:this.language;if("function"==typeof t&&(e=t),!this.options.resources||this.options.partialBundledLanguages){if(s&&"cimode"===s.toLowerCase()&&(!this.options.preload||0===this.options.preload.length))return e();const t=[],i=e=>{if(!e)return;if("cimode"===e)return;this.services.languageUtils.toResolveHierarchy(e).forEach((e=>{"cimode"!==e&&t.indexOf(e)<0&&t.push(e)}))};if(s)i(s);else{this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach((t=>i(t)))}this.options.preload&&this.options.preload.forEach((t=>i(t))),this.services.backendConnector.load(t,this.options.ns,(t=>{t||this.resolvedLanguage||!this.language||this.setResolvedLanguage(this.language),e(t)}))}else e(null)}reloadResources(t,e,s){const i=n();return t||(t=this.languages),e||(e=this.options.ns),s||(s=D),this.services.backendConnector.reload(t,e,(t=>{i.resolve(),s(t)})),i}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return"backend"===t.type&&(this.modules.backend=t),("logger"===t.type||t.log&&t.warn&&t.error)&&(this.modules.logger=t),"languageDetector"===t.type&&(this.modules.languageDetector=t),"i18nFormat"===t.type&&(this.modules.i18nFormat=t),"postProcessor"===t.type&&y.addPostProcessor(t),"formatter"===t.type&&(this.modules.formatter=t),"3rdParty"===t.type&&this.modules.external.push(t),this}setResolvedLanguage(t){if(t&&this.languages&&!(["cimode","dev"].indexOf(t)>-1))for(let t=0;t-1)&&this.store.hasLanguageSomeTranslations(e)){this.resolvedLanguage=e;break}}}changeLanguage(t,e){var s=this;this.isLanguageChangingTo=t;const i=n();this.emit("languageChanging",t);const o=t=>{this.language=t,this.languages=this.services.languageUtils.toResolveHierarchy(t),this.resolvedLanguage=void 0,this.setResolvedLanguage(t)},r=(t,n)=>{n?(o(n),this.translator.changeLanguage(n),this.isLanguageChangingTo=void 0,this.emit("languageChanged",n),this.logger.log("languageChanged",n)):this.isLanguageChangingTo=void 0,i.resolve((function(){return s.t(...arguments)})),e&&e(t,(function(){return s.t(...arguments)}))},a=e=>{t||e||!this.services.languageDetector||(e=[]);const s="string"==typeof e?e:this.services.languageUtils.getBestMatchFromCodes(e);s&&(this.language||o(s),this.translator.language||this.translator.changeLanguage(s),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(s)),this.loadResources(s,(t=>{r(t,s)}))};return t||!this.services.languageDetector||this.services.languageDetector.async?!t&&this.services.languageDetector&&this.services.languageDetector.async?0===this.services.languageDetector.detect.length?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(t):a(this.services.languageDetector.detect()),i}getFixedT(t,e,s){var i=this;const n=function(t,e){let o;if("object"!=typeof e){for(var r=arguments.length,a=new Array(r>2?r-2:0),l=2;l`${o.keyPrefix}${u}${t}`)):o.keyPrefix?`${o.keyPrefix}${u}${t}`:t,i.t(h,o)};return"string"==typeof t?n.lng=t:n.lngs=t,n.ns=e,n.keyPrefix=s,n}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const s=e.lng||this.resolvedLanguage||this.languages[0],i=!!this.options&&this.options.fallbackLng,n=this.languages[this.languages.length-1];if("cimode"===s.toLowerCase())return!0;const o=(t,e)=>{const s=this.services.backendConnector.state[`${t}|${e}`];return-1===s||2===s};if(e.precheck){const t=e.precheck(this,o);if(void 0!==t)return t}return!!this.hasResourceBundle(s,t)||(!(this.services.backendConnector.backend&&(!this.options.resources||this.options.partialBundledLanguages))||!(!o(s,t)||i&&!o(n,t)))}loadNamespaces(t,e){const s=n();return this.options.ns?("string"==typeof t&&(t=[t]),t.forEach((t=>{this.options.ns.indexOf(t)<0&&this.options.ns.push(t)})),this.loadResources((t=>{s.resolve(),e&&e(t)})),s):(e&&e(),Promise.resolve())}loadLanguages(t,e){const s=n();"string"==typeof t&&(t=[t]);const i=this.options.preload||[],o=t.filter((t=>i.indexOf(t)<0));return o.length?(this.options.preload=i.concat(o),this.loadResources((t=>{s.resolve(),e&&e(t)})),s):(e&&e(),Promise.resolve())}dir(t){if(t||(t=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!t)return"rtl";const e=this.services&&this.services.languageUtils||new S(F());return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"].indexOf(e.getLanguagePartFromCode(t))>-1||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){return new V(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1?arguments[1]:void 0)}cloneInstance(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:D;const s=t.forkResourceStore;s&&delete t.forkResourceStore;const i={...this.options,...t,isClone:!0},n=new V(i);void 0===t.debug&&void 0===t.prefix||(n.logger=n.logger.clone(t));return["store","services","language"].forEach((t=>{n[t]=this[t]})),n.services={...this.services},n.services.utils={hasLoadedNamespace:n.hasLoadedNamespace.bind(n)},s&&(n.store=new m(this.store.data,i),n.services.resourceStore=n.store),n.translator=new b(n.services,i),n.translator.on("*",(function(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),i=1;i = i18nextMod.WithT; export type Interpolator = i18nextMod.Interpolator; export type ResourceStore = i18nextMod.ResourceStore; export type Formatter = i18nextMod.Formatter; export type Services = i18nextMod.Services; export type ModuleType = i18nextMod.ModuleType; export type Module = i18nextMod.Module; export type CallbackError = i18nextMod.CallbackError; export type ReadCallback = i18nextMod.ReadCallback; export type MultiReadCallback = i18nextMod.MultiReadCallback; export type BackendModule = i18nextMod.BackendModule; export type LanguageDetectorModule = i18nextMod.LanguageDetectorModule; export type LanguageDetectorAsyncModule = i18nextMod.LanguageDetectorAsyncModule; export type PostProcessorModule = i18nextMod.PostProcessorModule; export type LoggerModule = i18nextMod.LoggerModule; export type I18nFormatModule = i18nextMod.I18nFormatModule; export type FormatterModule = i18nextMod.FormatterModule; export type ThirdPartyModule = i18nextMod.ThirdPartyModule; export type Modules = i18nextMod.Modules; export type Newable = i18nextMod.Newable; export type NewableModule = i18nextMod.NewableModule; export type Callback = i18nextMod.Callback; export type ExistsFunction< TKeys extends string = string, TInterpolationMap extends object = $Dictionary, > = i18nextMod.ExistsFunction< TKeys, TInterpolationMap >; export type CloneOptions = i18nextMod.CloneOptions; export type * from './typescript/options.js'; export type * from './typescript/t.js'; // tslint:disable-next-line:no-empty-interface export interface CustomInstanceExtenstions {} // tslint:disable-next-line:no-empty-interface export interface i18n extends i18nextMod.i18n, CustomInstanceExtenstions {} declare const i18next: i18n; export default i18next; export const createInstance: i18n['createInstance']; export const dir: i18n['dir']; export const init: i18n['init']; export const loadResources: i18n['loadResources']; export const reloadResources: i18n['reloadResources']; export const use: i18n['use']; export const changeLanguage: i18n['changeLanguage']; export const getFixedT: i18n['getFixedT']; export const t: i18n['t']; export const exists: i18n['exists']; export const setDefaultNamespace: i18n['setDefaultNamespace']; export const hasLoadedNamespace: i18n['hasLoadedNamespace']; export const loadNamespaces: i18n['loadNamespaces']; export const loadLanguages: i18n['loadLanguages']; i18next-23.7.6/index.d.ts000066400000000000000000000376051452441263500150330ustar00rootroot00000000000000// Internal Helpers import type { $Dictionary } from './typescript/helpers.js'; import type { DefaultNamespace, FlatNamespace, FormatFunction, InitOptions, InterpolationOptions, Namespace, Resource, ResourceKey, ResourceLanguage, TOptions, } from './typescript/options.js'; import type { KeyPrefix, TFunction } from './typescript/t.js'; export interface WithT { // Expose parameterized t in the i18next interface hierarchy t: TFunction; } export interface Interpolator { init(options: InterpolationOptions, reset: boolean): undefined; reset(): undefined; resetRegExp(): undefined; interpolate(str: string, data: object, lng: string, options: InterpolationOptions): string; nest(str: string, fc: (...args: any[]) => any, options: InterpolationOptions): string; } export class ResourceStore { constructor(data: Resource, options: InitOptions); public data: Resource; public options: InitOptions; /** * Gets fired when resources got added or removed */ on(event: 'added' | 'removed', callback: (lng: string, ns: string) => void): void; /** * Remove event listener * removes all callback when callback not specified */ off(event: 'added' | 'removed', callback?: (lng: string, ns: string) => void): void; } export interface Formatter { init(services: Services, i18nextOptions: InitOptions): void; add(name: string, fc: (value: any, lng: string | undefined, options: any) => string): void; addCached( name: string, fc: (lng: string | undefined, options: any) => (value: any) => string, ): void; format: FormatFunction; } export interface Services { backendConnector: any; i18nFormat: any; interpolator: Interpolator; languageDetector: any; languageUtils: any; logger: any; pluralResolver: any; resourceStore: ResourceStore; formatter?: Formatter; } export type ModuleType = | 'backend' | 'logger' | 'languageDetector' | 'postProcessor' | 'i18nFormat' | 'formatter' | '3rdParty'; export interface Module { type: ModuleType; } export type CallbackError = Error | string | null | undefined; export type ReadCallback = ( err: CallbackError, data: ResourceKey | boolean | null | undefined, ) => void; export type MultiReadCallback = (err: CallbackError, data: Resource | null | undefined) => void; /** * Used to load data for i18next. * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). * For singleton set property `type` to `'backend'` For a prototype constructor set static property. */ export interface BackendModule extends Module { type: 'backend'; init(services: Services, backendOptions: TOptions, i18nextOptions: InitOptions): void; read(language: string, namespace: string, callback: ReadCallback): void; /** Save the missing translation */ create?( languages: readonly string[], namespace: string, key: string, fallbackValue: string, ): void; /** Load multiple languages and namespaces. For backends supporting multiple resources loading */ readMulti?( languages: readonly string[], namespaces: readonly string[], callback: MultiReadCallback, ): void; /** Store the translation. For backends acting as cache layer */ save?(language: string, namespace: string, data: ResourceLanguage): void; } /** * Used to detect language in user land. * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). * For singleton set property `type` to `'languageDetector'` For a prototype constructor set static property. */ export interface LanguageDetectorModule extends Module { type: 'languageDetector'; init?(services: Services, detectorOptions: object, i18nextOptions: InitOptions): void; /** Must return detected language */ detect(): string | readonly string[] | undefined; cacheUserLanguage?(lng: string): void; } /** * Used to detect language in user land. * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). * For singleton set property `type` to `'languageDetector'` For a prototype constructor set static property. */ export interface LanguageDetectorAsyncModule extends Module { type: 'languageDetector'; /** Set to true to enable async detection */ async: true; init?(services: Services, detectorOptions: object, i18nextOptions: InitOptions): void; /** Must call callback passing detected language or return a Promise*/ detect( callback: (lng: string | readonly string[] | undefined) => void | undefined, ): void | Promise; cacheUserLanguage?(lng: string): void | Promise; } /** * Used to extend or manipulate the translated values before returning them in `t` function. * Need to be a singleton object. */ export interface PostProcessorModule extends Module { /** Unique name */ name: string; type: 'postProcessor'; process(value: string, key: string | string[], options: TOptions, translator: any): string; } /** * Override the built-in console logger. * Do not need to be a prototype function. */ export interface LoggerModule extends Module { type: 'logger'; log(...args: any[]): void; warn(...args: any[]): void; error(...args: any[]): void; } export interface I18nFormatModule extends Module { type: 'i18nFormat'; } export interface FormatterModule extends Module, Formatter { type: 'formatter'; } export interface ThirdPartyModule extends Module { type: '3rdParty'; init(i18next: i18n): void; } export interface Modules { backend?: BackendModule; logger?: LoggerModule; languageDetector?: LanguageDetectorModule | LanguageDetectorAsyncModule; i18nFormat?: I18nFormatModule; formatter?: FormatterModule; external: ThirdPartyModule[]; } // helper to identify class https://stackoverflow.com/a/45983481/2363935 export interface Newable { new (...args: any[]): T; } export interface NewableModule extends Newable { type: T['type']; } export type Callback = (error: any, t: TFunction) => void; /** * Uses similar args as the t function and returns true if a key exists. */ export interface ExistsFunction< TKeys extends string = string, TInterpolationMap extends object = $Dictionary, > { (key: TKeys | TKeys[], options?: TOptions): boolean; } export interface CloneOptions extends InitOptions { /** * Will create a new instance of the resource store and import the existing translation resources. * This way it will not shared the resource store instance. * @default false */ forkResourceStore?: boolean; } export interface CustomInstanceExtenstions {} export interface i18n extends CustomInstanceExtenstions { // Expose parameterized t in the i18next interface hierarchy t: TFunction<[DefaultNamespace, ...Exclude[]]>; /** * The default of the i18next module is an i18next instance ready to be initialized by calling init. * You can create additional instances using the createInstance function. * * @param options - Initial options. * @param callback - will be called after all translations were loaded or with an error when failed (in case of using a backend). */ init(callback?: Callback): Promise; init(options: InitOptions, callback?: Callback): Promise; loadResources(callback?: (err: any) => void): void; /** * The use function is there to load additional plugins to i18next. * For available module see the plugins page and don't forget to read the documentation of the plugin. * * @param module Accepts a class or object */ use(module: T | NewableModule | Newable): this; /** * List of modules used */ modules: Modules; /** * Internal container for all used plugins and implementation details like languageUtils, pluralResolvers, etc. */ services: Services; /** * Internal container for translation resources */ store: ResourceStore; /** * Uses similar args as the t function and returns true if a key exists. */ exists: ExistsFunction; /** * Returns a resource data by language. */ getDataByLanguage(lng: string): { [key: string]: { [key: string]: string } } | undefined; /** * Returns a t function that defaults to given language or namespace. * Both params could be arrays of languages or namespaces and will be treated as fallbacks in that case. * On the returned function you can like in the t function override the languages or namespaces by passing them in options or by prepending namespace. * * Accepts optional keyPrefix that will be automatically applied to returned t function. */ getFixedT< Ns extends Namespace | null = DefaultNamespace, TKPrefix extends KeyPrefix = undefined, ActualNs extends Namespace = Ns extends null ? DefaultNamespace : Ns, >( ...args: | [lng: string | readonly string[], ns?: Ns, keyPrefix?: TKPrefix] | [lng: null, ns: Ns, keyPrefix?: TKPrefix] ): TFunction; /** * Changes the language. The callback will be called as soon translations were loaded or an error occurs while loading. * HINT: For easy testing - setting lng to 'cimode' will set t function to always return the key. */ changeLanguage(lng?: string, callback?: Callback): Promise; /** * Is set to the current detected or set language. * If you need the primary used language depending on your configuration (supportedLngs, load) you will prefer using i18next.languages[0]. */ language: string; /** * Is set to an array of language-codes that will be used it order to lookup the translation value. */ languages: readonly string[]; /** * Is set to the current resolved language. * It can be used as primary used language, for example in a language switcher. */ resolvedLanguage?: string; /** * Checks if namespace has loaded yet. * i.e. used by react-i18next */ hasLoadedNamespace( ns: string | readonly string[], options?: { lng?: string | readonly string[]; precheck: ( i18n: i18n, loadNotPending: ( lng: string | readonly string[], ns: string | readonly string[], ) => boolean, ) => boolean; }, ): boolean; /** * Loads additional namespaces not defined in init options. */ loadNamespaces(ns: string | readonly string[], callback?: Callback): Promise; /** * Loads additional languages not defined in init options (preload). */ loadLanguages(lngs: string | readonly string[], callback?: Callback): Promise; /** * Reloads resources on given state. Optionally you can pass an array of languages and namespaces as params if you don't want to reload all. */ reloadResources( lngs?: string | readonly string[], ns?: string | readonly string[], callback?: () => void, ): Promise; reloadResources(lngs: null, ns: string | readonly string[], callback?: () => void): Promise; /** * Changes the default namespace. */ setDefaultNamespace(ns: string): void; /** * Checks if a namespace has been loaded. */ hasLoadedNamespace(ns: string, options?: Pick): boolean; /** * Returns rtl or ltr depending on languages read direction. */ dir(lng?: string): 'ltr' | 'rtl'; /** * Exposes interpolation.format function added on init. */ format: FormatFunction; /** * Will return a new i18next instance. * Please read the options page for details on configuration options. * Providing a callback will automatically call init. * The callback will be called after all translations were loaded or with an error when failed (in case of using a backend). */ createInstance(options?: InitOptions, callback?: Callback): i18n; /** * Creates a clone of the current instance. Shares store, plugins and initial configuration. * Can be used to create an instance sharing storage but being independent on set language or namespaces. */ cloneInstance(options?: CloneOptions, callback?: Callback): i18n; /** * Gets fired after initialization. */ on(event: 'initialized', callback: (options: InitOptions) => void): void; /** * Gets fired on loaded resources. */ on( event: 'loaded', callback: (loaded: { [language: string]: { [namespace: string]: boolean } }) => void, ): void; /** * Gets fired if loading resources failed. */ on(event: 'failedLoading', callback: (lng: string, ns: string, msg: string) => void): void; /** * Gets fired on accessing a key not existing. */ on( event: 'missingKey', callback: (lngs: readonly string[], namespace: string, key: string, res: string) => void, ): void; /** * Gets fired when resources got added or removed. */ on(event: 'added' | 'removed', callback: (lng: string, ns: string) => void): void; /** * Gets fired when changeLanguage got called. */ on(event: 'languageChanged', callback: (lng: string) => void): void; /** * Event listener */ on(event: string, listener: (...args: any[]) => void): void; /** * Remove event listener * removes all callback when callback not specified */ off(event: string, listener?: (...args: any[]) => void): void; /** * Gets one value by given key. */ getResource( lng: string, ns: string, key: string, options?: Pick, ): any; /** * Adds one key/value. */ addResource( lng: string, ns: string, key: string, value: string, options?: { keySeparator?: string; silent?: boolean }, ): i18n; /** * Adds multiple key/values. */ addResources(lng: string, ns: string, resources: any): i18n; /** * Adds a complete bundle. * Setting deep param to true will extend existing translations in that file. * Setting overwrite to true it will overwrite existing translations in that file. */ addResourceBundle( lng: string, ns: string, resources: any, deep?: boolean, overwrite?: boolean, ): i18n; /** * Checks if a resource bundle exists. */ hasResourceBundle(lng: string, ns: string): boolean; /** * Returns a resource bundle. */ getResourceBundle(lng: string, ns: string): any; /** * Removes an existing bundle. */ removeResourceBundle(lng: string, ns: string): i18n; /** * Current options */ options: InitOptions; /** * Is initialized */ isInitialized: boolean; /** * Emit event */ emit(eventName: string, ...args: any[]): void; } export type * from './typescript/options.js'; export type { // we need to explicitely export some types, to prevent some issues with next-i18next and interpolation variable validation, etc... FallbackLngObjList, FallbackLng, InitOptions, TypeOptions, CustomTypeOptions, CustomPluginOptions, PluginOptions, FormatFunction, InterpolationOptions, ReactOptions, ResourceKey, ResourceLanguage, Resource, TOptions, Namespace, DefaultNamespace, FlatNamespace, } from './typescript/options.js'; export type * from './typescript/t.js'; export type { TFunction, ParseKeys, TFunctionReturn, TFunctionDetailedResult, KeyPrefix, } from './typescript/t.js'; declare const i18next: i18n; export default i18next; export const createInstance: i18n['createInstance']; export const dir: i18n['dir']; export const init: i18n['init']; export const loadResources: i18n['loadResources']; export const reloadResources: i18n['reloadResources']; export const use: i18n['use']; export const changeLanguage: i18n['changeLanguage']; export const getFixedT: i18n['getFixedT']; export const t: i18n['t']; export const exists: i18n['exists']; export const setDefaultNamespace: i18n['setDefaultNamespace']; export const hasLoadedNamespace: i18n['hasLoadedNamespace']; export const loadNamespaces: i18n['loadNamespaces']; export const loadLanguages: i18n['loadLanguages']; i18next-23.7.6/index.js000066400000000000000000000001731452441263500145650ustar00rootroot00000000000000/* eslint no-var: 0 */ var main = require('./dist/cjs/i18next.js'); module.exports = main; module.exports.default = main; i18next-23.7.6/karma.backward.conf.js000066400000000000000000000022031452441263500172460ustar00rootroot00000000000000module.exports = function (karma) { karma.set({ frameworks: ['mocha', 'chai', 'sinon', 'browserify'], files: [ //'vendor/external.js', 'test/backward/**/*.compat.js', { pattern: 'test/backward/locales/**/*.json', watched: true, included: false, served: true }, ], proxies: { '/locales': 'http://localhost:9877/base/test/backward/locales', }, reporters: ['spec'], preprocessors: { 'test/backward/**/*.compat.js': ['browserify'], 'test/backward/compatibility/**/*.js': ['browserify'], }, browsers: ['HeadlessChrome'], customLaunchers: { HeadlessChrome: { base: 'ChromeHeadless', flags: ['--no-sandbox'], }, }, port: 9877, //logLevel: 'LOG_DEBUG', //singleRun: true, //autoWatch: false, // // client: { // mocha: { // reporter: 'spec', // change Karma's debug.html to the mocha web reporter // ui: 'tdd' // } // }, // browserify configuration browserify: { debug: true, transform: [['babelify', { presets: ['@babel/preset-env'] }] /*, 'brfs' */], }, }); }; i18next-23.7.6/karma.conf.js000066400000000000000000000027631452441263500155040ustar00rootroot00000000000000//const istanbul = require( 'browserify-istanbul' ); module.exports = function (karma) { // Ensure consistent conversion of timestamps to date strings (has no effect // on Windows) process.env.TZ = 'UTC'; karma.set({ frameworks: ['mocha', 'chai', 'sinon', 'browserify'], files: [ //'vendor/external.js', 'test/**/*.spec.js', { pattern: 'test/locales/**/*.json', watched: true, included: false, served: true }, ], proxies: { '/locales': 'http://localhost:9876/base/test/locales', }, reporters: ['coverage', 'coveralls', 'spec'], preprocessors: { 'test/**/*.spec.js': ['browserify'], 'src/**/*.js': ['browserify', 'coverage'], }, browsers: ['HeadlessChrome'], customLaunchers: { HeadlessChrome: { base: 'ChromeHeadless', flags: ['--no-sandbox'], }, }, port: 9876, //logLevel: 'LOG_DEBUG', //singleRun: true, //autoWatch: false, // // client: { // mocha: { // reporter: 'spec', // change Karma's debug.html to the mocha web reporter // ui: 'tdd' // } // }, // browserify configuration browserify: { debug: true, transform: [ ['babelify', { presets: ['@babel/preset-env'] }], /*'brfs',*/ 'browserify-istanbul', ], }, coverageReporter: { type: 'lcov', //'html', // disabled - erroring now, https://github.com/karma-runner/karma-coverage/issues/157 dir: 'coverage/', }, }); }; i18next-23.7.6/package-lock.json000066400000000000000000042117101452441263500163410ustar00rootroot00000000000000{ "name": "i18next", "version": "23.7.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "i18next", "version": "23.7.6", "funding": [ { "type": "individual", "url": "https://locize.com" }, { "type": "individual", "url": "https://locize.com/i18next.html" }, { "type": "individual", "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" } ], "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.2" }, "devDependencies": { "@babel/core": "^7.23.3", "@babel/eslint-parser": "^7.23.3", "@babel/plugin-proposal-async-generator-functions": "^7.20.7", "@babel/plugin-transform-modules-commonjs": "^7.23.3", "@babel/plugin-transform-runtime": "^7.23.3", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.23.3", "@babel/preset-react": "^7.23.3", "@babel/register": "^7.22.15", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "0.4.4", "babelify": "^10.0.0", "browserify": "17.0.0", "browserify-istanbul": "3.0.1", "chai": "4.3.10", "coveralls": "3.1.1", "cpy-cli": "^5.0.0", "dtslint": "^0.4.2", "eslint": "8.53.0", "eslint-config-airbnb": "19.0.4", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import": "2.29.0", "eslint-plugin-jsx-a11y": "6.8.0", "eslint-plugin-react": "7.33.2", "gh-release": "7.0.2", "husky": "^8.0.3", "i18next-browser-languagedetector": "7.1.0", "i18next-fs-backend": "2.2.0", "i18next-http-backend": "2.3.1", "i18next-localstorage-cache": "1.1.1", "i18next-sprintf-postprocessor": "0.2.2", "karma": "6.4.2", "karma-browserify": "8.1.0", "karma-chai": "0.1.0", "karma-chrome-launcher": "3.2.0", "karma-cli": "2.0.0", "karma-coverage": "2.2.1", "karma-coveralls": "2.1.0", "karma-mocha": "2.0.1", "karma-rollup-preprocessor": "7.0.8", "karma-sinon": "1.0.5", "karma-spec-reporter": "0.0.36", "lint-staged": "^15.0.2", "mocha": "10.2.0", "nyc": "^15.1.0", "prettier": "^3.0.3", "rimraf": "5.0.5", "rollup": "^4.3.0", "sinon": "17.0.1", "tslint": "^6.1.3", "typescript": "5.1.3", "watchify": "4.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dev": true, "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" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/@babel/eslint-parser": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || >=14.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0", "eslint": "^7.5.0 || ^8.0.0" } }, "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/@babel/generator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", "dev": true, "dependencies": { "@babel/types": "^7.23.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "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" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "dependencies": { "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "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" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-transform-optional-chaining": "^7.23.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz", "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz", "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz", "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-transform-classes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.15" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz", "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz", "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz", "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz", "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz", "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz", "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz", "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.23.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz", "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz", "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz", "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.22.5", "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "dependencies": { "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.3.tgz", "integrity": "sha512-XcQ3X58CKBdBnnZpPaQjgVMePsXtSZzHoku70q9tUAQp02ggPQNM04BF3RvlW1GSM/McbSOQAzEK4MXbS7/JFg==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "babel-plugin-polyfill-corejs2": "^0.4.6", "babel-plugin-polyfill-corejs3": "^0.8.5", "babel-plugin-polyfill-regenerator": "^0.5.3", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/polyfill": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", "dev": true, "dependencies": { "core-js": "^2.6.5", "regenerator-runtime": "^0.13.4" } }, "node_modules/@babel/preset-env": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-import-assertions": "^7.23.3", "@babel/plugin-syntax-import-attributes": "^7.23.3", "@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", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", "@babel/plugin-transform-async-generator-functions": "^7.23.3", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", "@babel/plugin-transform-block-scoping": "^7.23.3", "@babel/plugin-transform-class-properties": "^7.23.3", "@babel/plugin-transform-class-static-block": "^7.23.3", "@babel/plugin-transform-classes": "^7.23.3", "@babel/plugin-transform-computed-properties": "^7.23.3", "@babel/plugin-transform-destructuring": "^7.23.3", "@babel/plugin-transform-dotall-regex": "^7.23.3", "@babel/plugin-transform-duplicate-keys": "^7.23.3", "@babel/plugin-transform-dynamic-import": "^7.23.3", "@babel/plugin-transform-exponentiation-operator": "^7.23.3", "@babel/plugin-transform-export-namespace-from": "^7.23.3", "@babel/plugin-transform-for-of": "^7.23.3", "@babel/plugin-transform-function-name": "^7.23.3", "@babel/plugin-transform-json-strings": "^7.23.3", "@babel/plugin-transform-literals": "^7.23.3", "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", "@babel/plugin-transform-member-expression-literals": "^7.23.3", "@babel/plugin-transform-modules-amd": "^7.23.3", "@babel/plugin-transform-modules-commonjs": "^7.23.3", "@babel/plugin-transform-modules-systemjs": "^7.23.3", "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.23.3", "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", "@babel/plugin-transform-numeric-separator": "^7.23.3", "@babel/plugin-transform-object-rest-spread": "^7.23.3", "@babel/plugin-transform-object-super": "^7.23.3", "@babel/plugin-transform-optional-catch-binding": "^7.23.3", "@babel/plugin-transform-optional-chaining": "^7.23.3", "@babel/plugin-transform-parameters": "^7.23.3", "@babel/plugin-transform-private-methods": "^7.23.3", "@babel/plugin-transform-private-property-in-object": "^7.23.3", "@babel/plugin-transform-property-literals": "^7.23.3", "@babel/plugin-transform-regenerator": "^7.23.3", "@babel/plugin-transform-reserved-words": "^7.23.3", "@babel/plugin-transform-shorthand-properties": "^7.23.3", "@babel/plugin-transform-spread": "^7.23.3", "@babel/plugin-transform-sticky-regex": "^7.23.3", "@babel/plugin-transform-template-literals": "^7.23.3", "@babel/plugin-transform-typeof-symbol": "^7.23.3", "@babel/plugin-transform-unicode-escapes": "^7.23.3", "@babel/plugin-transform-unicode-property-regex": "^7.23.3", "@babel/plugin-transform-unicode-regex": "^7.23.3", "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.6", "babel-plugin-polyfill-corejs3": "^0.8.5", "babel-plugin-polyfill-regenerator": "^0.5.3", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-transform-react-display-name": "^7.23.3", "@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-react-jsx-development": "^7.22.5", "@babel/plugin-transform-react-pure-annotations": "^7.23.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/register": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", "pirates": "^4.0.5", "source-map-support": "^0.5.16" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, "node_modules/@babel/runtime": { "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime/node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", "dev": true, "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" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, "engines": { "node": ">=0.1.90" } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.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" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.23.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/js": { "version": "8.53.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "engines": { "node": ">=12.22" }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "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" }, "engines": { "node": ">=12" } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "dependencies": { "eslint-scope": "5.1.1" } }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, "node_modules/@octokit/auth-token": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/@octokit/core": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", "dev": true, "dependencies": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", "@octokit/request": "^6.0.0", "@octokit/request-error": "^3.0.0", "@octokit/types": "^9.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/endpoint": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, "dependencies": { "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/endpoint/node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@octokit/graphql": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "dependencies": { "@octokit/request": "^6.0.0", "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/openapi-types": { "version": "18.1.1", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, "dependencies": { "@octokit/tsconfig": "^1.0.2", "@octokit/types": "^9.2.3" }, "engines": { "node": ">= 14" }, "peerDependencies": { "@octokit/core": ">=4" } }, "node_modules/@octokit/plugin-request-log": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, "peerDependencies": { "@octokit/core": ">=3" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", "dev": true, "dependencies": { "@octokit/types": "^10.0.0" }, "engines": { "node": ">= 14" }, "peerDependencies": { "@octokit/core": ">=3" } }, "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", "dev": true, "dependencies": { "@octokit/openapi-types": "^18.0.0" } }, "node_modules/@octokit/request": { "version": "6.2.8", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", "dev": true, "dependencies": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/request-error": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "dependencies": { "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/request/node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@octokit/rest": { "version": "19.0.13", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz", "integrity": "sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==", "dev": true, "dependencies": { "@octokit/core": "^4.2.1", "@octokit/plugin-paginate-rest": "^6.1.2", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-rest-endpoint-methods": "^7.1.2" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/tsconfig": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", "dev": true }, "node_modules/@octokit/types": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, "dependencies": { "@octokit/openapi-types": "^18.0.0" } }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "optional": true, "engines": { "node": ">=14" } }, "node_modules/@rollup/plugin-babel": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz", "integrity": "sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@rollup/pluginutils": "^5.0.1" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "@types/babel__core": { "optional": true }, "rollup": { "optional": true } } }, "node_modules/@rollup/plugin-commonjs": { "version": "25.0.7", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", "glob": "^8.0.3", "is-reference": "1.2.1", "magic-string": "^0.30.3" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@rollup/plugin-commonjs/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-builtin-module": "^3.2.1", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/plugin-terser": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", "terser": "^5.17.4" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/plugin-terser/node_modules/serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/@rollup/plugin-terser/node_modules/terser": { "version": "5.17.7", "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { "node": ">=10" } }, "node_modules/@rollup/pluginutils": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^2.3.1" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.3.0.tgz", "integrity": "sha512-/4pns6BYi8MXdwnXM44yoGAcFYVHL/BYlB2q1HXZ6AzH++LaiEVWFpBWQ/glXhbMbv3E3o09igrHFbP/snhAvA==", "cpu": [ "arm" ], "dev": true, "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.3.0.tgz", "integrity": "sha512-nLO/JsL9idr416vzi3lHm3Xm+QZh4qHij8k3Er13kZr5YhL7/+kBAx84kDmPc7HMexLmwisjDCeDIKNFp8mDlQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.3.0.tgz", "integrity": "sha512-dGhVBlllt4iHwTGy21IEoMOTN5wZoid19zEIxsdY29xcEiOEHqzDa7Sqrkh5OE7LKCowL61eFJXxYe/+pYa7ZQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.3.0.tgz", "integrity": "sha512-h8wRfHeLEbU3NzaP1Oku7BYXCJQiTRr+8U0lklyOQXxXiEpHLL8tk1hFl+tezoRKLcPJD7joKaK74ASsqt3Ekg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.3.0.tgz", "integrity": "sha512-wP4VgR/gfV18sylTuym3sxRTkAgUR2vh6YLeX/GEznk5jCYcYSlx585XlcUcl0c8UffIZlRJ09raWSX3JDb4GA==", "cpu": [ "arm" ], "dev": true, "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.3.0.tgz", "integrity": "sha512-v/14JCYVkqRSJeQbxFx4oUkwVQQw6lFMN7bd4vuARBc3X2lmomkxBsc+BFiIDL/BK+CTx5AOh/k9XmqDnKWRVg==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.3.0.tgz", "integrity": "sha512-tNhfYqFH5OxtRzfkTOKdgFYlPSZnlDLNW4+leNEvQZhwTJxoTwsZAAhR97l3qVry/kkLyJPBK+Q8EAJLPinDIg==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.3.0.tgz", "integrity": "sha512-pw77m8QywdsoFdFOgmc8roF1inBI0rciqzO8ffRUgLoq7+ee9o5eFqtEcS6hHOOplgifAUUisP8cAnwl9nUYPw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.3.0.tgz", "integrity": "sha512-tJs7v2MnV2F8w6X1UpPHl/43OfxjUy9SuJ2ZPoxn79v9vYteChVYO/ueLHCpRMmyTUIVML3N9z4azl9ENH8Xxg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.3.0.tgz", "integrity": "sha512-OKGxp6kATQdTyI2DF+e9s+hB3/QZB45b6e+dzcfW1SUqiF6CviWyevhmT4USsMEdP3mlpC9zxLz3Oh+WaTMOSw==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.3.0.tgz", "integrity": "sha512-DDZ5AH68JJ2ClQFEA1aNnfA7Ybqyeh0644rGbrLOdNehTmzfICHiWSn0OprzYi9HAshTPQvlwrM+bi2kuaIOjQ==", "cpu": [ "ia32" ], "dev": true, "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.3.0.tgz", "integrity": "sha512-dMvGV8p92GQ8jhNlGIKpyhVZPzJlT258pPrM5q2F8lKcc9Iv9BbfdnhX1OfinYWnb9ms5zLw6MlaMnqLfUkKnQ==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "win32" ] }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "11.2.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", "dev": true, "dependencies": { "@sinonjs/commons": "^2.0.0", "lodash.get": "^4.4.2", "type-detect": "^4.0.8" } }, "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, "node_modules/@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "dev": true }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dev": true, "dependencies": { "defer-to-connect": "^1.0.1" }, "engines": { "node": ">=6" } }, "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", "dev": true }, "node_modules/@types/cors": { "version": "2.8.13", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/estree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "node_modules/@types/node": { "version": "18.11.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz", "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==", "dev": true }, "node_modules/@types/parsimmon": { "version": "1.10.6", "resolved": "https://registry.npmjs.org/@types/parsimmon/-/parsimmon-1.10.6.tgz", "integrity": "sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA==", "dev": true }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "dependencies": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" } }, "node_modules/acorn-node/node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/aggregate-error": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, "dependencies": { "clean-stack": "^4.0.0", "indent-string": "^5.0.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "dependencies": { "string-width": "^4.1.0" } }, "node_modules/ansi-escapes": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "dependencies": { "type-fest": "^1.0.2" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/append-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", "dev": true, "dependencies": { "buffer-equal": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "dependencies": { "default-require-extensions": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/application-config": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/application-config/-/application-config-2.0.0.tgz", "integrity": "sha512-NC5/0guSZK3/UgUDfCk/riByXzqz0owL1L3r63JPSBzYk5QALrp3bLxbsR7qeSfvYfFmAhnp3dbqYsW3U9MpZQ==", "dev": true, "dependencies": { "application-config-path": "^0.1.0", "load-json-file": "^6.2.0", "write-json-file": "^4.2.0" }, "engines": { "node": ">=8.3" } }, "node_modules/application-config-path": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", "dev": true }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "dependencies": { "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.2.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.tosorted": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.1.3" } }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/arrify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" } }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" } }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, "engines": { "node": ">=0.8" } }, "node_modules/assert/node_modules/inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", "dev": true }, "node_modules/assert/node_modules/util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", "dev": true, "dependencies": { "inherits": "2.0.1" } }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "engines": { "node": "*" } }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "node_modules/asynciterator.prototype": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", "dev": true, "dependencies": { "has-symbols": "^1.0.3" } }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "node_modules/axe-core": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, "dependencies": { "dequal": "^2.0.3" } }, "node_modules/babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", "dev": true, "dependencies": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" } }, "node_modules/babel-code-frame/node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/babel-code-frame/node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/babel-code-frame/node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/babel-code-frame/node_modules/js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", "dev": true }, "node_modules/babel-code-frame/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/babel-code-frame/node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "dependencies": { "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "detect-indent": "^4.0.0", "jsesc": "^1.3.0", "lodash": "^4.17.4", "source-map": "^0.5.7", "trim-right": "^1.0.1" } }, "node_modules/babel-generator/node_modules/jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==", "dev": true, "bin": { "jsesc": "bin/jsesc" } }, "node_modules/babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.4.3", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.8.6", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.3", "core-js-compat": "^3.33.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "dev": true, "dependencies": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" } }, "node_modules/babel-runtime/node_modules/regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, "node_modules/babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", "dev": true, "dependencies": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "lodash": "^4.17.4" } }, "node_modules/babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", "dev": true, "dependencies": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "debug": "^2.6.8", "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" } }, "node_modules/babel-traverse/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/babel-traverse/node_modules/globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/babel-traverse/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", "dev": true, "dependencies": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" } }, "node_modules/babel-types/node_modules/to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/babelify": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", "dev": true, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true, "bin": { "babylon": "bin/babylon.js" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true, "engines": { "node": "^4.5.0 || >= 5.9" } }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "node_modules/bl/node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", "chalk": "^4.1.0", "cli-boxes": "^2.2.1", "string-width": "^4.2.2", "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/boxen/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/boxen/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/boxen/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/boxen/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/boxen/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/boxen/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, "node_modules/browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "dependencies": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" }, "bin": { "browser-pack": "bin/cmd.js" } }, "node_modules/browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "dependencies": { "resolve": "^1.17.0" } }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "node_modules/browserify": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", "browserify-zlib": "~0.2.0", "buffer": "~5.2.1", "cached-path-relative": "^1.0.0", "concat-stream": "^1.6.0", "console-browserify": "^1.1.0", "constants-browserify": "~1.0.0", "crypto-browserify": "^3.0.0", "defined": "^1.0.0", "deps-sort": "^2.0.1", "domain-browser": "^1.2.0", "duplexer2": "~0.1.2", "events": "^3.0.0", "glob": "^7.1.0", "has": "^1.0.0", "htmlescape": "^1.1.0", "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", "os-browserify": "~0.3.0", "parents": "^1.0.1", "path-browserify": "^1.0.0", "process": "~0.11.0", "punycode": "^1.3.2", "querystring-es3": "~0.2.0", "read-only-stream": "^2.0.0", "readable-stream": "^2.0.2", "resolve": "^1.1.4", "shasum-object": "^1.0.0", "shell-quote": "^1.6.1", "stream-browserify": "^3.0.0", "stream-http": "^3.0.0", "string_decoder": "^1.1.1", "subarg": "^1.0.0", "syntax-error": "^1.1.1", "through2": "^2.0.0", "timers-browserify": "^1.0.1", "tty-browserify": "0.0.1", "url": "~0.11.0", "util": "~0.12.0", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" }, "bin": { "browserify": "bin/cmd.js" }, "engines": { "node": ">= 0.8" } }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.3", "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "node_modules/browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, "node_modules/browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "node_modules/browserify-istanbul": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/browserify-istanbul/-/browserify-istanbul-3.0.1.tgz", "integrity": "sha512-CMIXoxEgyUFxSwqL3WR573/46vrQK74Z+pw0IXylQTJOxqs3UvakWuUPz8siOcOu+qQKP+MehNIcvlqMHCWQ2g==", "dev": true, "dependencies": { "istanbul-lib-instrument": "^1.8.0", "minimatch": "^3.0.4", "object-assign": "^4.1.1", "through": "^2.3.8" } }, "node_modules/browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, "node_modules/browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" } }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserslist": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "caniuse-lite": "^1.0.30001541", "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, "node_modules/buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, "node_modules/buffer-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", "dev": true, "engines": { "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^3.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^4.1.0", "responselike": "^1.0.2" }, "engines": { "node": ">=8" } }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "dependencies": { "pump": "^3.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", "dev": true }, "node_modules/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", "package-hash": "^4.0.0", "write-file-atomic": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/caching-transform/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/caniuse-lite": { "version": "1.0.30001561", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ] }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, "node_modules/chai": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.0.8" }, "engines": { "node": ">=4" } }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/changelog-parser": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/changelog-parser/-/changelog-parser-3.0.1.tgz", "integrity": "sha512-1AEVJgnFEO4v5ukfEH/j9cr2Z39Y/GCieNi605azhufAolXF4vQAwZBY8BrUVRkvlI3gwe3i621/PIAW0zmmEQ==", "dev": true, "dependencies": { "line-reader": "^0.2.4", "remove-markdown": "^0.5.0" }, "bin": { "changelog-parser": "bin/cli.js" }, "engines": { "node": ">=14" } }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "dependencies": { "get-func-name": "^2.0.2" }, "engines": { "node": "*" } }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "node_modules/clean-stack": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", "dev": true, "dependencies": { "escape-string-regexp": "5.0.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/clean-stack/node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "dependencies": { "restore-cursor": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-spinners": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", "dev": true, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/cli-truncate/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "dependencies": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" } }, "node_modules/cliui/node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/cliui/node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "engines": { "node": ">=4" } }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cliui/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "dependencies": { "number-is-nan": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cliui/node_modules/wrap-ansi/node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cliui/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, "engines": { "node": ">=0.8" } }, "node_modules/clone-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "dev": true, "engines": { "node": ">= 0.10" } }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/clone-response/node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", "dev": true }, "node_modules/cloneable-readable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, "dependencies": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", "readable-stream": "^2.3.5" } }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, "bin": { "color-support": "bin.js" } }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, "engines": { "node": ">=0.1.90" } }, "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", "dev": true, "dependencies": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" } }, "node_modules/combine-source-map/node_modules/convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", "dev": true }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" ], "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/configstore/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/confusing-browser-globals": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, "node_modules/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", "parseurl": "~1.3.3", "utils-merge": "1.0.1" }, "engines": { "node": ">= 0.10.0" } }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, "node_modules/cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", "dev": true, "hasInstallScript": true }, "node_modules/core-js-compat": { "version": "3.33.2", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", "dev": true, "dependencies": { "browserslist": "^4.22.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "dependencies": { "object-assign": "^4", "vary": "^1" }, "engines": { "node": ">= 0.10" } }, "node_modules/coveralls": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", "dev": true, "dependencies": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.5", "request": "^2.88.2" }, "bin": { "coveralls": "bin/coveralls.js" }, "engines": { "node": ">=6" } }, "node_modules/cp-file": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-10.0.0.tgz", "integrity": "sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.10", "nested-error-stacks": "^2.1.1", "p-event": "^5.0.1" }, "engines": { "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cpy": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/cpy/-/cpy-10.1.0.tgz", "integrity": "sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==", "dev": true, "dependencies": { "arrify": "^3.0.0", "cp-file": "^10.0.0", "globby": "^13.1.4", "junk": "^4.0.1", "micromatch": "^4.0.5", "nested-error-stacks": "^2.1.1", "p-filter": "^3.0.0", "p-map": "^6.0.0" }, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cpy-cli": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-5.0.0.tgz", "integrity": "sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==", "dev": true, "dependencies": { "cpy": "^10.1.0", "meow": "^12.0.1" }, "bin": { "cpy": "cli.js" }, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" } }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "node_modules/create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "node_modules/cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dev": true, "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, "engines": { "node": ">= 8" } }, "node_modules/cross-spawn/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/cross-spawn/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", "create-hash": "^1.1.0", "create-hmac": "^1.1.0", "diffie-hellman": "^5.0.0", "inherits": "^2.0.1", "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" }, "engines": { "node": "*" } }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", "dev": true }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, "node_modules/dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "dependencies": { "assert-plus": "^1.0.0" }, "engines": { "node": ">=0.10" } }, "node_modules/date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "dependencies": { "mimic-response": "^3.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { "node": ">=6" } }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/default-require-extensions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "dependencies": { "strip-bom": "^4.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "dependencies": { "clone": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defaults/node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { "node": ">=0.8" } }, "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dev": true, "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/definitelytyped-header-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/definitelytyped-header-parser/-/definitelytyped-header-parser-1.2.0.tgz", "integrity": "sha512-xpg8uu/2YD/reaVsZV4oJ4g7UDYFqQGWvT1W9Tsj6q4VtWBSaig38Qgah0ZMnQGF9kAsAim08EXDO1nSi0+Nog==", "deprecated": "This package has moved to @definitelytyped/header-parser.", "dev": true, "dependencies": { "@types/parsimmon": "^1.3.0", "parsimmon": "^1.2.0" } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, "node_modules/deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "dependencies": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" }, "bin": { "deps-sort": "bin/cmd.js" } }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", "dev": true, "dependencies": { "repeating": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, "dependencies": { "acorn-node": "^1.8.2", "defined": "^1.0.0", "minimist": "^1.2.6" }, "bin": { "detective": "bin/detective.js" }, "engines": { "node": ">=0.8.0" } }, "node_modules/di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", "dev": true }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" } }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { "path-type": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, "dependencies": { "custom-event": "~1.0.0", "ent": "~2.2.0", "extend": "^3.0.0", "void-elements": "^2.0.0" } }, "node_modules/domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true, "engines": { "node": ">=0.4", "npm": ">=1.2" } }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { "is-obj": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/dot-prop/node_modules/is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/download-file-sync": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/download-file-sync/-/download-file-sync-1.0.4.tgz", "integrity": "sha512-vH92qNH508jZZA12HQNq/aiMDfagr4JvjFiI17Bi8oYjsxwv5ZVIi7iHkYmUXxOQUr90tcVX+8EPePjAqG1Y0w==", "dev": true }, "node_modules/dts-critic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/dts-critic/-/dts-critic-1.2.0.tgz", "integrity": "sha512-z6VI1Sz7xxy0BgN6YsWuG9hbRIfph3U9hwrfNHLnLzsq865VYyjo5xKKUgXPuqMgJ04BUF1LGYQJ+kWyWwvUvQ==", "dev": true, "dependencies": { "definitelytyped-header-parser": "^1.2.0", "download-file-sync": "^1.0.4", "yargs": "^12.0.5" } }, "node_modules/dtslint": { "version": "0.4.9", "resolved": "https://registry.npmjs.org/dtslint/-/dtslint-0.4.9.tgz", "integrity": "sha512-QKOfpKIcpJi38gXWQ1uzm/jFU+1xqPVjrow8PSgs1N7CeY819A0Lm1VvYdM4GD1i964B2QKUyJAAjWiK8YPzlA==", "dev": true, "dependencies": { "definitelytyped-header-parser": "^1.0.1", "dts-critic": "^1.0.1", "fs-extra": "^6.0.1", "request": "^2.88.0", "strip-json-comments": "^2.0.1", "tslint": "^5.12.0", "typescript": "next" }, "bin": { "dtslint": "bin/index.js" }, "engines": { "node": ">=6.10.0" } }, "node_modules/dtslint/node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/dtslint/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/dtslint/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/dtslint/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/dtslint/node_modules/tslint": { "version": "5.20.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" }, "bin": { "tslint": "bin/tslint" }, "engines": { "node": ">=4.8.0" }, "peerDependencies": { "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" } }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, "node_modules/duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", "dev": true, "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.0" } }, "node_modules/duplexify/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "node_modules/electron-to-chromium": { "version": "1.4.580", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.580.tgz", "integrity": "sha512-T5q3pjQon853xxxHUq3ZP68ZpvJHuSMY2+BZaW3QzjS4HvNuvsMmZ/+lU+nCrftre1jFZ+OSlExynXWBihnXzw==", "dev": true }, "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" } }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "dependencies": { "once": "^1.4.0" } }, "node_modules/engine.io": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", "ws": "~8.2.3" }, "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io-parser": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", "dev": true, "engines": { "node": ">=10.0.0" } }, "node_modules/ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", "dev": true }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.22.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-iterator-helpers": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", "dev": true, "dependencies": { "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.1", "es-abstract": "^1.22.1", "es-set-tostringtag": "^2.0.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "iterator.prototype": "^1.1.2", "safe-array-concat": "^1.0.1" } }, "node_modules/es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "dependencies": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "dependencies": { "has": "^1.0.3" } }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/eslint": { "version": "8.53.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", "@eslint/js": "8.53.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "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.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "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.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-airbnb": { "version": "19.0.4", "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", "dev": true, "dependencies": { "eslint-config-airbnb-base": "^15.0.0", "object.assign": "^4.1.2", "object.entries": "^1.1.5" }, "engines": { "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { "eslint": "^7.32.0 || ^8.2.0", "eslint-plugin-import": "^2.25.3", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.28.0", "eslint-plugin-react-hooks": "^4.3.0" } }, "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "dependencies": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", "object.entries": "^1.1.5", "semver": "^6.3.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" }, "peerDependencies": { "eslint": "^7.32.0 || ^8.2.0", "eslint-plugin-import": "^2.25.2" } }, "node_modules/eslint-config-prettier": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { "eslint": ">=7.0.0" } }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "dependencies": { "debug": "^3.2.7" }, "engines": { "node": ">=4" }, "peerDependenciesMeta": { "eslint": { "optional": true } } }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", "hasown": "^2.0.0", "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.7", "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", "dev": true, "dependencies": { "@babel/runtime": "^7.23.2", "aria-query": "^5.3.0", "array-includes": "^3.1.7", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "=4.7.0", "axobject-query": "^3.2.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "es-iterator-helpers": "^1.0.15", "hasown": "^2.0.0", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.entries": "^1.1.7", "object.fromentries": "^2.0.7" }, "engines": { "node": ">=4.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "node_modules/eslint-plugin-react": { "version": "7.33.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.6", "object.fromentries": "^2.0.6", "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, "peer": true, "engines": { "node": ">=10" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/eslint/node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=6.0.0" } }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { "is-glob": "^4.0.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/eslint/node_modules/globals": { "version": "13.19.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/eslint/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" }, "engines": { "node": ">=0.10" } }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { "node": ">=0.8.x" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, "node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" }, "engines": { "node": ">=16.17" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/execa/node_modules/is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/execa/node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/execa/node_modules/onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "dependencies": { "mimic-fn": "^4.0.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/execa/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, "engines": [ "node >=0.6.0" ] }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "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" }, "engines": { "node": ">=8.6.0" } }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, "node_modules/fastq": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/finalhandler/node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "dependencies": { "ee-first": "1.1.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true, "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], "engines": { "node": ">=4.0" }, "peerDependenciesMeta": { "debug": { "optional": true } } }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" }, "engines": { "node": ">=8.0.0" } }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, "engines": { "node": "*" } }, "node_modules/form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" }, "engines": { "node": ">= 0.12" } }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/fs-extra": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.11", "through2": "^2.0.3" }, "engines": { "node": ">= 0.10" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gauge": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", "signal-exit": "^4.0.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.5" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/gauge/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/gauge/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/gauge/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, "node_modules/get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "node_modules/get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "engines": { "node": ">=8.0.0" } }, "node_modules/get-stream": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/gh-release": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/gh-release/-/gh-release-7.0.2.tgz", "integrity": "sha512-5gVe+BHFa9OtsjOa72hFRBsfsCIIMYbba35wtEJIkAzZjPXQkUmpLhyrIYYdouh0JRTNNwZ4sDD7eiUhE8T/IQ==", "dev": true, "dependencies": { "@octokit/rest": "^19.0.5", "changelog-parser": "^3.0.0", "deep-extend": "^0.6.0", "gauge": "^v5.0.0", "gh-release-assets": "^2.0.0", "ghauth": "^5.0.0", "github-url-to-object": "^4.0.4", "inquirer": "^8.0.0", "shelljs": "^0.8.4", "update-notifier": "^5.0.0", "yargs": "^17.0.0" }, "bin": { "gh-release": "bin/cli.js" }, "engines": { "node": ">=14" } }, "node_modules/gh-release-assets": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/gh-release-assets/-/gh-release-assets-2.0.1.tgz", "integrity": "sha512-KrhmYIA/5oQdfEl9vQ2yF6DOM2QOAjpCOsNKFkc7X3dOTefSixttW0ysot3noQ+3XL8NdkdC7z+mqfePzIwexg==", "dev": true, "dependencies": { "async": "^3.2.0", "mime": "^3.0.0", "progress-stream": "^2.0.0", "pumpify": "^2.0.1", "simple-get": "^4.0.0", "util-extend": "^1.0.1" }, "engines": { "node": ">=12" } }, "node_modules/gh-release/node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { "type-fest": "^0.21.3" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gh-release/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/gh-release/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/gh-release/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/gh-release/node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "node_modules/gh-release/node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, "engines": { "node": ">=8" } }, "node_modules/gh-release/node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "engines": { "node": ">= 10" } }, "node_modules/gh-release/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=12" } }, "node_modules/gh-release/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/gh-release/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/gh-release/node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" }, "engines": { "node": ">=4" } }, "node_modules/gh-release/node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gh-release/node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/gh-release/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/gh-release/node_modules/inquirer": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", "ora": "^5.4.1", "run-async": "^2.4.0", "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=12.0.0" } }, "node_modules/gh-release/node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "node_modules/gh-release/node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gh-release/node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { "node": ">=8" } }, "node_modules/gh-release/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/gh-release/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/gh-release/node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gh-release/node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/gh-release/node_modules/yargs": { "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, "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" }, "engines": { "node": ">=12" } }, "node_modules/gh-release/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/ghauth": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ghauth/-/ghauth-5.0.1.tgz", "integrity": "sha512-WzgL12dczZX/VrvVTkoFAJLU3pb6PDT+TS60kLlaU51fuNEv6VoYpRXlnwIjkMIhqWead9+dLBEzj0E1ghYMkg==", "dev": true, "dependencies": { "application-config": "^2.0.0", "node-fetch": "^2.6.0", "ora": "^4.0.5", "read": "^1.0.7" } }, "node_modules/github-url-to-object": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz", "integrity": "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==", "dev": true, "dependencies": { "is-url": "^1.1.0" } }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "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" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, "dependencies": { "extend": "^3.0.0", "glob": "^7.1.1", "glob-parent": "^3.1.0", "is-negated-glob": "^1.0.0", "ordered-read-streams": "^1.0.0", "pumpify": "^1.3.5", "readable-stream": "^2.1.5", "remove-trailing-separator": "^1.0.1", "to-absolute-glob": "^2.0.0", "unique-stream": "^2.0.2" }, "engines": { "node": ">= 0.10" } }, "node_modules/glob-stream/node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "node_modules/glob-stream/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" } }, "node_modules/glob-stream/node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "dependencies": { "is-extglob": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/glob-stream/node_modules/pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/glob-stream/node_modules/pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" } }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "dependencies": { "ini": "2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/globalthis": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/globby": { "version": "13.2.2", "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", "cacheable-request": "^6.0.0", "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", "get-stream": "^4.1.0", "lowercase-keys": "^1.0.1", "mimic-response": "^1.0.1", "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" }, "engines": { "node": ">=8.6" } }, "node_modules/got/node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/got/node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "dependencies": { "pump": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/got/node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", "dev": true, "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { "function-bind": "^1.1.1" }, "engines": { "node": ">= 0.4.0" } }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/has-ansi/node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "node_modules/has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, "engines": { "node": ">=4" } }, "node_modules/hash-base/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, "dependencies": { "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/hat": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", "integrity": "sha512-zpImx2GoKXy42fVDSEad2BPKuSQdLcqsCYa48K3zHSzM/ugWuYjLDr8IXxpVuL7uCLHw56eaiLxCRthhOzf5ug==", "dev": true, "engines": { "node": "*" } }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "bin": { "he": "bin/he" } }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "node_modules/htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", "dev": true, "engines": { "node": ">=0.10" } }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" }, "engines": { "node": ">=0.8", "npm": ">=1.3.7" } }, "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, "node_modules/human-signals": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "engines": { "node": ">=16.17.0" } }, "node_modules/husky": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, "bin": { "husky": "lib/bin.js" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/typicode" } }, "node_modules/i18next-browser-languagedetector": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.1.0.tgz", "integrity": "sha512-cr2k7u1XJJ4HTOjM9GyOMtbOA47RtUoWRAtt52z43r3AoMs2StYKyjS3URPhzHaf+mn10hY9dZWamga5WPQjhA==", "dev": true, "dependencies": { "@babel/runtime": "^7.19.4" } }, "node_modules/i18next-fs-backend": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.2.0.tgz", "integrity": "sha512-VOPHhdDX0M/csRqEw+9Ectpf6wvTIg1MZDfAHxc3JKnAlJz7fcZSAKAeyDohOq0xuLx57esYpJopIvBaRb0Bag==", "dev": true }, "node_modules/i18next-http-backend": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.3.1.tgz", "integrity": "sha512-jnagFs5cnq4ryb+g92Hex4tB5kj3tWmiRWx8gHMCcE/PEgV1fjH5rC7xyJmPSgyb9r2xgcP8rvZxPKgsmvMqTw==", "dev": true, "dependencies": { "cross-fetch": "4.0.0" } }, "node_modules/i18next-localstorage-cache": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/i18next-localstorage-cache/-/i18next-localstorage-cache-1.1.1.tgz", "integrity": "sha512-6kgVSg48bhmYCHppMCMExKBiiGOrb85jQBQMPnAwxVumn/fkXJYEfxV0rdfL0EYcZT+ciOqw+7VIMWkTVuk6Ng==", "dev": true }, "node_modules/i18next-sprintf-postprocessor": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/i18next-sprintf-postprocessor/-/i18next-sprintf-postprocessor-0.2.2.tgz", "integrity": "sha512-c/IT9xuMyTfJ/3Ds+DPtb0vYVuykbMyGChZ5OGZTzFDV7Kgst1nrNOwdbZ+PkcA5kLXEE3U0RKkNbabj07261w==", "dev": true }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "node_modules/ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", "dev": true, "dependencies": { "source-map": "~0.5.3" } }, "node_modules/insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "dependencies": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" }, "bin": { "insert-module-globals": "bin/cmd.js" } }, "node_modules/internal-slot": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "dependencies": { "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, "engines": { "node": ">= 0.10" } }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "node_modules/is-builtin-module": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "dependencies": { "builtin-modules": "^3.3.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "dependencies": { "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, "dependencies": { "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-finite": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "dev": true, "engines": { "node": ">=0.10.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "dependencies": { "@types/estree": "*" } }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "dependencies": { "is-unc-path": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "dependencies": { "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typed-array": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "dependencies": { "unc-path-regex": "^0.1.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true }, "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, "node_modules/is-valid-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", "dev": true }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "node_modules/isbinaryfile": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, "engines": { "node": ">= 8.0.0" }, "funding": { "url": "https://github.com/sponsors/gjtorikian/" } }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", "dev": true }, "node_modules/istanbul-lib-hook": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "dependencies": { "append-transform": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "dependencies": { "babel-generator": "^6.18.0", "babel-template": "^6.16.0", "babel-traverse": "^6.18.0", "babel-types": "^6.18.0", "babylon": "^6.18.0", "istanbul-lib-coverage": "^1.2.1", "semver": "^5.3.0" } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/istanbul-lib-processinfo": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-processinfo/node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-processinfo/node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-processinfo/node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-processinfo/node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-reports": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/iterator.prototype": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" } }, "node_modules/jackspeak": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { "node": ">=4" } }, "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" ] }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" }, "bin": { "JSONStream": "bin.js" }, "engines": { "node": "*" } }, "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" }, "engines": { "node": ">=0.6.0" } }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, "node_modules/junk": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "dev": true, "engines": { "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "node_modules/karma": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", "dev": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", "glob": "^7.1.7", "graceful-fs": "^4.2.6", "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", "lodash": "^4.17.21", "log4js": "^6.4.1", "mime": "^2.5.2", "minimatch": "^3.0.4", "mkdirp": "^0.5.5", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", "socket.io": "^4.4.1", "source-map": "^0.6.1", "tmp": "^0.2.1", "ua-parser-js": "^0.7.30", "yargs": "^16.1.1" }, "bin": { "karma": "bin/karma" }, "engines": { "node": ">= 10" } }, "node_modules/karma-browserify": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-8.1.0.tgz", "integrity": "sha512-q5OWuCfdXMfyhkRrH8XP5LiixD4lx0uCmlf6yQmGeQNHLH4Hoofur3tBJtSEhOXmY0mOdBe8ek2UUxicjmGqFQ==", "dev": true, "dependencies": { "convert-source-map": "^1.8.0", "hat": "^0.0.3", "js-string-escape": "^1.0.0", "lodash": "^4.17.21", "minimatch": "^3.0.0", "os-shim": "^0.1.3" }, "engines": { "node": ">=10" }, "peerDependencies": { "browserify": ">=10 <18", "karma": ">=4.3.0", "watchify": ">=3 <5" } }, "node_modules/karma-chai": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", "integrity": "sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg==", "dev": true, "peerDependencies": { "chai": "*", "karma": ">=0.10.9" } }, "node_modules/karma-chrome-launcher": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", "dev": true, "dependencies": { "which": "^1.2.1" } }, "node_modules/karma-cli": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-2.0.0.tgz", "integrity": "sha512-1Kb28UILg1ZsfqQmeELbPzuEb5C6GZJfVIk0qOr8LNYQuYWmAaqP16WpbpKEjhejDrDYyYOwwJXSZO6u7q5Pvw==", "dev": true, "dependencies": { "resolve": "^1.3.3" }, "bin": { "karma": "bin/karma" }, "engines": { "node": ">= 6" } }, "node_modules/karma-coverage": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.1", "istanbul-reports": "^3.0.5", "minimatch": "^3.0.4" }, "engines": { "node": ">=10.0.0" } }, "node_modules/karma-coverage/node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/karma-coveralls": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/karma-coveralls/-/karma-coveralls-2.1.0.tgz", "integrity": "sha512-l2qg7ufv7ooPJ5gFDfQM63eI6LaNGjGlkR8PIvBsi/m3nrfY+m4a7ph6fvQ7Zb+gDTWlo92NM5H0p+VTk8lupw==", "dev": true, "dependencies": { "coveralls": "~3.0.0", "lcov-result-merger": "^3.0.0", "through2": "^2.0.0", "vinyl-fs": "^3.0.2" } }, "node_modules/karma-coveralls/node_modules/coveralls": { "version": "3.0.14", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.14.tgz", "integrity": "sha512-nEQqCHzxiFfu1dEHYxe7xrbF5vFmx122mTWIM+BkiAOmsWbSAcucNk8stELnNk2lS1biTUjFOCIf8v8ZN225IA==", "dev": true, "dependencies": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.5", "request": "^2.88.2" }, "bin": { "coveralls": "bin/coveralls.js" }, "engines": { "node": ">=6" } }, "node_modules/karma-mocha": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", "dev": true, "dependencies": { "minimist": "^1.2.3" } }, "node_modules/karma-rollup-preprocessor": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/karma-rollup-preprocessor/-/karma-rollup-preprocessor-7.0.8.tgz", "integrity": "sha512-WiuBCS9qsatJuR17dghiTARBZ7LF+ml+eb7qJXhw7IbsdY0lTWELDRQC/93J9i6636CsAXVBL3VJF4WtaFLZzA==", "dev": true, "dependencies": { "chokidar": "^3.3.1", "debounce": "^1.2.0" }, "engines": { "node": ">= 8.0.0" }, "peerDependencies": { "rollup": ">= 1.0.0" } }, "node_modules/karma-sinon": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", "integrity": "sha512-wrkyAxJmJbn75Dqy17L/8aILJWFm7znd1CE8gkyxTBFnjMSOe2XTJ3P30T8SkxWZHmoHX0SCaUJTDBEoXs25Og==", "dev": true, "engines": { "node": ">= 0.10.0" }, "peerDependencies": { "karma": ">=0.10", "sinon": "*" } }, "node_modules/karma-spec-reporter": { "version": "0.0.36", "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.36.tgz", "integrity": "sha512-11bvOl1x6ryKZph7kmbmMpbi8vsngEGxGOoeTlIcDaH3ab3j8aPJnZ+r+K/SS0sBSGy5VGkGYO2+hLct7hw/6w==", "dev": true, "dependencies": { "colors": "1.4.0" }, "peerDependencies": { "karma": ">=0.9" } }, "node_modules/karma/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/karma/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/karma/node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/karma/node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, "bin": { "mime": "cli.js" }, "engines": { "node": ">=4.0.0" } }, "node_modules/karma/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/karma/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/karma/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/karma/node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { "rimraf": "^3.0.0" }, "engines": { "node": ">=8.17.0" } }, "node_modules/karma/node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/karma/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dev": true, "dependencies": { "json-buffer": "3.0.0" } }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "dependencies": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" } }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true }, "node_modules/language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "dependencies": { "language-subtag-registry": "^0.3.20" }, "engines": { "node": ">=0.10" } }, "node_modules/latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dev": true, "dependencies": { "package-json": "^6.3.0" }, "engines": { "node": ">=8" } }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "dependencies": { "readable-stream": "^2.0.5" }, "engines": { "node": ">= 0.6.3" } }, "node_modules/lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "dependencies": { "invert-kv": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/lcov-parse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", "integrity": "sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==", "dev": true, "bin": { "lcov-parse": "bin/cli.js" } }, "node_modules/lcov-result-merger": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lcov-result-merger/-/lcov-result-merger-3.3.0.tgz", "integrity": "sha512-Krg9p24jGaIT93RBMA8b5qLHDEiAXTavaTiEdMAZaJS93PsBKIcg/89cw/8rgeSfRuQX+I9x7h73SHFjCZ6cHg==", "dev": true, "dependencies": { "through2": "^2.0.3", "vinyl": "^2.1.0", "vinyl-fs": "^3.0.2", "yargs": "^16.2.0" }, "bin": { "lcov-result-merger": "bin/lcov-result-merger.js" }, "engines": { "node": ">=10" } }, "node_modules/lcov-result-merger/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/lcov-result-merger/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/lcov-result-merger/node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/lcov-result-merger/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/lcov-result-merger/node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/lcov-result-merger/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, "node_modules/lead": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", "dev": true, "dependencies": { "flush-write-stream": "^1.0.2" }, "engines": { "node": ">= 0.10" } }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/line-reader": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/line-reader/-/line-reader-0.2.4.tgz", "integrity": "sha512-342xzyZZS9uTiKwHJcMacopVl/WjrMMCZS1Qg4Uhl/WBknWRrGFdKOIS1Kec6SaiTcZMtmuxWvvIbPXj/+FMjA==", "dev": true }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "node_modules/lint-staged": { "version": "15.0.2", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", "dev": true, "dependencies": { "chalk": "5.3.0", "commander": "11.1.0", "debug": "4.3.4", "execa": "8.0.1", "lilconfig": "2.1.0", "listr2": "7.0.2", "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", "yaml": "2.3.3" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { "node": ">=18.12.0" }, "funding": { "url": "https://opencollective.com/lint-staged" } }, "node_modules/lint-staged/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/lint-staged/node_modules/commander": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "engines": { "node": ">=16" } }, "node_modules/listr2": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^5.0.1", "rfdc": "^1.3.0", "wrap-ansi": "^8.1.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/listr2/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/listr2/node_modules/ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/listr2/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, "node_modules/listr2/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/listr2/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/load-json-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "parse-json": "^5.0.0", "strip-bom": "^4.0.0", "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true, "engines": { "node": ">=0.8.6" } }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/log-update": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, "dependencies": { "ansi-escapes": "^5.0.0", "cli-cursor": "^4.0.0", "slice-ansi": "^5.0.0", "strip-ansi": "^7.0.1", "wrap-ansi": "^8.0.1" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/log-update/node_modules/ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-update/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/log4js": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz", "integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==", "dev": true, "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", "flatted": "^3.2.7", "rfdc": "^1.3.0", "streamroller": "^3.1.3" }, "engines": { "node": ">=8.0" } }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "node_modules/loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, "dependencies": { "get-func-name": "^2.0.0" } }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "dependencies": { "yallist": "^3.0.2" } }, "node_modules/magic-string": { "version": "0.30.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { "node": ">=12" } }, "node_modules/magic-string/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" }, "engines": { "node": ">=6" } }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "dependencies": { "p-defer": "^1.0.0" }, "engines": { "node": ">=6" } }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "dependencies": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/meow": { "version": "12.1.1", "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, "engines": { "node": ">=16.10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, "bin": { "miller-rabin": "bin/miller-rabin" } }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, "bin": { "mime": "cli.js" }, "engines": { "node": ">=10.0.0" } }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, "node_modules/mocha": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", "mocha": "bin/mocha.js" }, "engines": { "node": ">= 14.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/mocha/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/mocha/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/mocha/node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "dependencies": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", "defined": "^1.0.0", "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", "stream-combiner2": "^1.1.1", "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" }, "bin": { "module-deps": "bin/cmd.js" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", "dev": true }, "node_modules/nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/nested-error-stacks": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", "dev": true }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node_modules/nise": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz", "integrity": "sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==", "dev": true, "dependencies": { "@sinonjs/commons": "^2.0.0", "@sinonjs/fake-timers": "^10.0.2", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", "path-to-regexp": "^1.7.0" } }, "node_modules/nise/node_modules/@sinonjs/commons": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "peerDependenciesMeta": { "encoding": { "optional": true } } }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "dependencies": { "process-on-spawn": "^1.0.0" }, "engines": { "node": ">=8" } }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/now-and-later": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, "dependencies": { "once": "^1.3.2" }, "engines": { "node": ">= 0.10" } }, "node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "dependencies": { "path-key": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-run-path/node_modules/path-key": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "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" }, "bin": { "nyc": "bin/nyc.js" }, "engines": { "node": ">=8.9" } }, "node_modules/nyc/node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/nyc/node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/nyc/node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "node_modules/nyc/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/nyc/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/nyc/node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/nyc/node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/nyc/node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nyc/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/nyc/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/nyc/node_modules/yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" }, "engines": { "node": ">=6" } }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.entries": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.groupby": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1" } }, "node_modules/object.hasown": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "dependencies": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { "ee-first": "1.1.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/ora": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", "dev": true, "dependencies": { "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.2.0", "is-interactive": "^1.0.0", "log-symbols": "^3.0.0", "mute-stream": "0.0.8", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ora/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/ora/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/ora/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/log-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "dependencies": { "chalk": "^2.4.2" }, "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/log-symbols/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/ora/node_modules/log-symbols/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/ora/node_modules/log-symbols/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/ora/node_modules/log-symbols/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/ora/node_modules/log-symbols/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/ora/node_modules/log-symbols/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/ora/node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "node_modules/ora/node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", "dev": true, "dependencies": { "readable-stream": "^2.0.1" } }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, "node_modules/os-locale": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "dependencies": { "execa": "^1.0.0", "lcid": "^2.0.0", "mem": "^4.0.0" }, "engines": { "node": ">=6" } }, "node_modules/os-locale/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" }, "engines": { "node": ">=4.8" } }, "node_modules/os-locale/node_modules/execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" }, "engines": { "node": ">=6" } }, "node_modules/os-locale/node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "dependencies": { "pump": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/os-locale/node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/os-locale/node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, "dependencies": { "path-key": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/os-locale/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/os-locale/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", "integrity": "sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==", "dev": true, "engines": { "node": ">= 0.4.0" } }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/outpipe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", "dev": true, "dependencies": { "shell-quote": "^1.4.2" } }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/p-event": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", "dev": true, "dependencies": { "p-timeout": "^5.0.2" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", "dev": true, "dependencies": { "p-map": "^5.1.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-filter/node_modules/p-map": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, "dependencies": { "aggregate-error": "^4.0.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-6.0.0.tgz", "integrity": "sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==", "dev": true, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-timeout": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/package-hash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" }, "engines": { "node": ">=8" } }, "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dev": true, "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" }, "engines": { "node": ">=8" } }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { "callsites": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", "dev": true, "dependencies": { "path-platform": "~0.11.15" } }, "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" } }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/parsimmon": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.18.1.tgz", "integrity": "sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw==", "dev": true }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", "dev": true }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/path-scurry": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", "dev": true, "engines": { "node": "14 || >=16.14" } }, "node_modules/path-to-regexp": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "dependencies": { "isarray": "0.0.1" } }, "node_modules/path-to-regexp/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" }, "engines": { "node": ">=0.12" } }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pidtree": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, "bin": { "pidtree": "bin/pidtree.js" }, "engines": { "node": ">=0.10" } }, "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "dependencies": { "find-up": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { "locate-path": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { "p-limit": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, "dependencies": { "fromentries": "^1.2.0" }, "engines": { "node": ">=8" } }, "node_modules/progress-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", "integrity": "sha512-xJwOWR46jcXUq6EH9yYyqp+I52skPySOeHfkxOZ2IY1AiBi/sFJhbhAKHoV3OTw/omQ45KTio9215dRJ2Yxd3Q==", "dev": true, "dependencies": { "speedometer": "~1.0.0", "through2": "~2.0.3" } }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" } }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/pumpify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", "dev": true, "dependencies": { "duplexify": "^4.1.1", "inherits": "^2.0.3", "pump": "^3.0.0" } }, "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, "node_modules/pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, "dependencies": { "escape-goat": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true, "engines": { "node": ">=0.9" } }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "dependencies": { "side-channel": "^1.0.4" }, "engines": { "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, "engines": { "node": ">=0.4.x" } }, "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, "engines": { "node": ">=0.4.x" } }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "cli.js" } }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "dependencies": { "mute-stream": "~0.0.4" }, "engines": { "node": ">=0.8" } }, "node_modules/read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", "dev": true, "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "node_modules/readable-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { "resolve": "^1.1.6" }, "engines": { "node": ">= 0.10" } }, "node_modules/reflect.getprototypeof": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "dependencies": { "regenerate": "^1.4.2" }, "engines": { "node": ">=4" } }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" } }, "node_modules/registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "dependencies": { "rc": "1.2.8" }, "engines": { "node": ">=6.0.0" } }, "node_modules/registry-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, "dependencies": { "rc": "^1.2.8" }, "engines": { "node": ">=8" } }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" } }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "dependencies": { "es6-error": "^4.0.1" }, "engines": { "node": ">=4" } }, "node_modules/remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, "dependencies": { "is-buffer": "^1.1.5", "is-utf8": "^0.2.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/remove-bom-stream": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", "dev": true, "dependencies": { "remove-bom-buffer": "^3.0.0", "safe-buffer": "^5.1.0", "through2": "^2.0.3" }, "engines": { "node": ">= 0.10" } }, "node_modules/remove-markdown": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.5.0.tgz", "integrity": "sha512-x917M80K97K5IN1L8lUvFehsfhR8cYjGQ/yAMRI9E7JIKivtl5Emo5iD13DhMr+VojzMCiYk8V2byNPwT/oapg==", "dev": true }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true }, "node_modules/repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", "dev": true, "dependencies": { "is-finite": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/replace-ext": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, "engines": { "node": ">= 0.10" } }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, "engines": { "node": ">= 6" } }, "node_modules/request/node_modules/qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, "engines": { "node": ">=0.6" } }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "bin": { "uuid": "bin/uuid" } }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", "dev": true }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", "dev": true, "dependencies": { "value-or-function": "^3.0.0" }, "engines": { "node": ">= 0.10" } }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "dependencies": { "lowercase-keys": "^1.0.0" } }, "node_modules/restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "node_modules/rimraf": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", "dev": true, "dependencies": { "glob": "^10.3.7" }, "bin": { "rimraf": "dist/esm/bin.mjs" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/rimraf/node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "node_modules/rollup": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.3.0.tgz", "integrity": "sha512-scIi1NrKLDIYSPK66jjECtII7vIgdAMFmFo8h6qm++I6nN9qDSV35Ku6erzGVqYjx+lj+j5wkusRMr++8SyDZg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.3.0", "@rollup/rollup-android-arm64": "4.3.0", "@rollup/rollup-darwin-arm64": "4.3.0", "@rollup/rollup-darwin-x64": "4.3.0", "@rollup/rollup-linux-arm-gnueabihf": "4.3.0", "@rollup/rollup-linux-arm64-gnu": "4.3.0", "@rollup/rollup-linux-arm64-musl": "4.3.0", "@rollup/rollup-linux-x64-gnu": "4.3.0", "@rollup/rollup-linux-x64-musl": "4.3.0", "@rollup/rollup-win32-arm64-msvc": "4.3.0", "@rollup/rollup-win32-ia32-msvc": "4.3.0", "@rollup/rollup-win32-x64-msvc": "4.3.0", "fsevents": "~2.3.2" } }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.6.0.tgz", "integrity": "sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==", "dev": true, "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, "engines": { "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, "dependencies": { "semver": "^6.3.0" }, "engines": { "node": ">=8" } }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "node_modules/set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", "dev": true, "dependencies": { "define-data-property": "^1.1.1", "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dev": true, "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" }, "bin": { "sha.js": "bin.js" } }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "dependencies": { "kind-of": "^6.0.2" }, "engines": { "node": ">=8" } }, "node_modules/shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, "dependencies": { "fast-safe-stringify": "^2.0.7" } }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/shell-quote": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" }, "bin": { "shjs": "bin/shjs" }, "engines": { "node": ">=4" } }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/simple-get": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "node_modules/sinon": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^11.2.2", "@sinonjs/samsam": "^8.0.0", "diff": "^5.1.0", "nise": "^5.1.5", "supports-color": "^7.2.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/sinon" } }, "node_modules/sinon/node_modules/diff": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/sinon/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/smob": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.0.tgz", "integrity": "sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==", "dev": true }, "node_modules/socket.io": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz", "integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==", "dev": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", "engine.io": "~6.2.1", "socket.io-adapter": "~2.4.0", "socket.io-parser": "~4.2.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-adapter": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", "dev": true }, "node_modules/socket.io-parser": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/sort-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", "dev": true, "dependencies": { "is-plain-obj": "^2.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/sort-keys/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/spawn-wrap/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/spawn-wrap/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/spawn-wrap/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/speedometer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", "integrity": "sha512-lgxErLl/7A5+vgIIXsh9MbeukOaCb2axgQ+bKCdIE+ibNT4XNYGNCR1qFEGq6F+YDASXK3Fh/c5FgtZchFolxw==", "dev": true }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "node_modules/sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, "bin": { "sshpk-conv": "bin/sshpk-conv", "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" }, "engines": { "node": ">=0.10.0" } }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" } }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, "node_modules/stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" } }, "node_modules/stream-http/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "node_modules/stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, "node_modules/streamroller": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.3.tgz", "integrity": "sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w==", "dev": true, "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", "fs-extra": "^8.1.0" }, "engines": { "node": ">=8.0" } }, "node_modules/streamroller/node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" }, "engines": { "node": ">=6 <7 || >=8" } }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "engines": { "node": ">=0.6.19" } }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string-width-cjs/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, "dependencies": { "minimist": "^1.1.0" } }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "dependencies": { "acorn-node": "^1.2.0" } }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" }, "engines": { "node": ">=8" } }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "node_modules/through2-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, "dependencies": { "through2": "~2.0.0", "xtend": "~4.0.0" } }, "node_modules/timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", "dev": true, "dependencies": { "process": "~0.11.0" }, "engines": { "node": ">=0.6.0" } }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, "engines": { "node": ">=0.6.0" } }, "node_modules/to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", "dev": true, "dependencies": { "is-absolute": "^1.0.0", "is-negated-glob": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/to-through": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", "dev": true, "dependencies": { "through2": "^2.0.3" }, "engines": { "node": ">= 0.10" } }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" }, "engines": { "node": ">=0.8" } }, "node_modules/tough-cookie/node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "node_modules/trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "node_modules/tslint": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.13.0", "tsutils": "^2.29.0" }, "bin": { "tslint": "bin/tslint" }, "engines": { "node": ">=4.8.0" }, "peerDependencies": { "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" } }, "node_modules/tslint/node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/tslint/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/tslint/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/tslint/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "peerDependencies": { "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "dependencies": { "safe-buffer": "^5.0.1" }, "engines": { "node": "*" } }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" }, "engines": { "node": ">= 0.6" } }, "node_modules/typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "is-typed-array": "^1.1.9" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=14.17" } }, "node_modules/ua-parser-js": { "version": "0.7.32", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/ua-parser-js" }, { "type": "paypal", "url": "https://paypal.me/faisalman" } ], "engines": { "node": "*" } }, "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true, "bin": { "umd": "bin/cli.js" } }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, "dependencies": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" }, "bin": { "undeclared-identifiers": "bin.js" } }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unique-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, "dependencies": { "json-stable-stringify-without-jsonify": "^1.0.1", "through2-filter": "^3.0.0" } }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "dependencies": { "crypto-random-string": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/universal-user-agent": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", "dev": true }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" }, "bin": { "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" } }, "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", "is-installed-globally": "^0.4.0", "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", "latest-version": "^5.1.0", "pupa": "^2.1.1", "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, "node_modules/update-notifier/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/update-notifier/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/update-notifier/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/update-notifier/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/update-notifier/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/update-notifier/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/update-notifier/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/update-notifier/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/update-notifier/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uri-js/node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dev": true, "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "dependencies": { "prepend-http": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "node_modules/util-extend": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/value-or-function": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", "dev": true, "engines": { "node": ">= 0.10" } }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "engines": [ "node >=0.6.0" ], "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "node_modules/verror/node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, "node_modules/vinyl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", "clone-stats": "^1.0.0", "cloneable-readable": "^1.0.0", "remove-trailing-separator": "^1.0.1", "replace-ext": "^1.0.0" }, "engines": { "node": ">= 0.10" } }, "node_modules/vinyl-fs": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, "dependencies": { "fs-mkdirp-stream": "^1.0.0", "glob-stream": "^6.1.0", "graceful-fs": "^4.0.0", "is-valid-glob": "^1.0.0", "lazystream": "^1.0.0", "lead": "^1.0.0", "object.assign": "^4.0.4", "pumpify": "^1.3.5", "readable-stream": "^2.3.3", "remove-bom-buffer": "^3.0.0", "remove-bom-stream": "^1.2.0", "resolve-options": "^1.1.0", "through2": "^2.0.0", "to-through": "^2.0.0", "value-or-function": "^3.0.0", "vinyl": "^2.0.0", "vinyl-sourcemap": "^1.1.0" }, "engines": { "node": ">= 0.10" } }, "node_modules/vinyl-fs/node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "node_modules/vinyl-fs/node_modules/pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/vinyl-fs/node_modules/pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" } }, "node_modules/vinyl-sourcemap": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", "dev": true, "dependencies": { "append-buffer": "^1.0.2", "convert-source-map": "^1.5.0", "graceful-fs": "^4.1.6", "normalize-path": "^2.1.1", "now-and-later": "^2.0.0", "remove-bom-buffer": "^3.0.0", "vinyl": "^2.0.0" }, "engines": { "node": ">= 0.10" } }, "node_modules/vinyl-sourcemap/node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "dependencies": { "remove-trailing-separator": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, "node_modules/void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/watchify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", "dev": true, "dependencies": { "anymatch": "^3.1.0", "browserify": "^17.0.0", "chokidar": "^3.4.0", "defined": "^1.0.0", "outpipe": "^1.1.0", "through2": "^4.0.2", "xtend": "^4.0.2" }, "bin": { "watchify": "bin/cmd.js" }, "engines": { "node": ">= 8.10.0" } }, "node_modules/watchify/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/watchify/node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "dependencies": { "readable-stream": "3" } }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "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" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, "dependencies": { "function.prototype.name": "^1.1.5", "has-tostringtag": "^1.0.0", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", "is-generator-function": "^1.0.10", "is-regex": "^1.1.4", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, "node_modules/which-typed-array": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, "dependencies": { "string-width": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "node_modules/write-json-file": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", "dev": true, "dependencies": { "detect-indent": "^6.0.0", "graceful-fs": "^4.1.15", "is-plain-obj": "^2.0.0", "make-dir": "^3.0.0", "sort-keys": "^4.0.0", "write-file-atomic": "^3.0.0" }, "engines": { "node": ">=8.3" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/write-json-file/node_modules/detect-indent": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/write-json-file/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/write-json-file/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ws": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "node_modules/yaml": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "dependencies": { "cliui": "^4.0.0", "decamelize": "^1.2.0", "find-up": "^3.0.0", "get-caller-file": "^1.0.1", "os-locale": "^3.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" } }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "engines": { "node": ">=10" } }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/yargs/node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { "locate-path": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/yargs/node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { "p-limit": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/yargs/node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "engines": { "node": ">=4" } }, "node_modules/yargs/node_modules/yargs-parser": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } } }, "dependencies": { "@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "requires": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" } }, "@babel/compat-data": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", "dev": true }, "@babel/core": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dev": true, "requires": { "@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" }, "dependencies": { "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true } } }, "@babel/eslint-parser": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", "dev": true, "requires": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.1" }, "dependencies": { "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "@babel/generator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", "dev": true, "requires": { "@babel/types": "^7.23.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { "@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } } } }, "@babel/helper-annotate-as-pure": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "requires": { "@babel/types": "^7.22.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "requires": { "@babel/types": "^7.22.15" } }, "@babel/helper-compilation-targets": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "requires": { "@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-create-class-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" } }, "@babel/helper-create-regexp-features-plugin": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", "semver": "^6.3.1" } }, "@babel/helper-define-polyfill-provider": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2" } }, "@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "requires": { "@babel/types": "^7.23.0" } }, "@babel/helper-module-imports": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "requires": { "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "requires": { "@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-optimise-call-expression": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "requires": { "@babel/types": "^7.22.5" } }, "@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-remap-async-to-generator": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-wrap-function": "^7.22.20" } }, "@babel/helper-replace-supers": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" } }, "@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { "@babel/types": "^7.22.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "requires": { "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true }, "@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true }, "@babel/helper-wrap-function": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", "@babel/types": "^7.22.19" } }, "@babel/helpers": { "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dev": true, "requires": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0" } }, "@babel/highlight": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-transform-optional-chaining": "^7.23.3" } }, "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, "requires": {} }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-import-assertions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-import-attributes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-jsx": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-arrow-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-async-generator-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz", "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-transform-async-to-generator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.20" } }, "@babel/plugin-transform-block-scoped-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-block-scoping": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz", "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-class-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-class-static-block": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz", "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-transform-classes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.15" } }, "@babel/plugin-transform-destructuring": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-dotall-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-duplicate-keys": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-dynamic-import": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz", "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-export-namespace-from": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz", "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-transform-for-of": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-function-name": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-json-strings": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz", "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-transform-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-logical-assignment-operators": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz", "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-modules-amd": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-modules-commonjs": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" } }, "@babel/plugin-transform-modules-systemjs": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20" } }, "@babel/plugin-transform-modules-umd": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-new-target": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz", "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-transform-numeric-separator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz", "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-transform-object-rest-spread": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz", "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==", "dev": true, "requires": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.23.3" } }, "@babel/plugin-transform-object-super": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20" } }, "@babel/plugin-transform-optional-catch-binding": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz", "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-transform-optional-chaining": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz", "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-transform-parameters": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-private-methods": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-private-property-in-object": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz", "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-react-display-name": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-react-jsx": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.22.5", "@babel/types": "^7.22.15" } }, "@babel/plugin-transform-react-jsx-development": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "requires": { "@babel/plugin-transform-react-jsx": "^7.22.5" } }, "@babel/plugin-transform-react-pure-annotations": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-regenerator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" } }, "@babel/plugin-transform-reserved-words": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-runtime": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.3.tgz", "integrity": "sha512-XcQ3X58CKBdBnnZpPaQjgVMePsXtSZzHoku70q9tUAQp02ggPQNM04BF3RvlW1GSM/McbSOQAzEK4MXbS7/JFg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "babel-plugin-polyfill-corejs2": "^0.4.6", "babel-plugin-polyfill-corejs3": "^0.8.5", "babel-plugin-polyfill-regenerator": "^0.5.3", "semver": "^6.3.1" } }, "@babel/plugin-transform-shorthand-properties": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-spread": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" } }, "@babel/plugin-transform-sticky-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-template-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-typeof-symbol": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-unicode-escapes": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-unicode-property-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-unicode-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-unicode-sets-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/polyfill": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", "dev": true, "requires": { "core-js": "^2.6.5", "regenerator-runtime": "^0.13.4" } }, "@babel/preset-env": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", "dev": true, "requires": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-import-assertions": "^7.23.3", "@babel/plugin-syntax-import-attributes": "^7.23.3", "@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", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", "@babel/plugin-transform-async-generator-functions": "^7.23.3", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", "@babel/plugin-transform-block-scoping": "^7.23.3", "@babel/plugin-transform-class-properties": "^7.23.3", "@babel/plugin-transform-class-static-block": "^7.23.3", "@babel/plugin-transform-classes": "^7.23.3", "@babel/plugin-transform-computed-properties": "^7.23.3", "@babel/plugin-transform-destructuring": "^7.23.3", "@babel/plugin-transform-dotall-regex": "^7.23.3", "@babel/plugin-transform-duplicate-keys": "^7.23.3", "@babel/plugin-transform-dynamic-import": "^7.23.3", "@babel/plugin-transform-exponentiation-operator": "^7.23.3", "@babel/plugin-transform-export-namespace-from": "^7.23.3", "@babel/plugin-transform-for-of": "^7.23.3", "@babel/plugin-transform-function-name": "^7.23.3", "@babel/plugin-transform-json-strings": "^7.23.3", "@babel/plugin-transform-literals": "^7.23.3", "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", "@babel/plugin-transform-member-expression-literals": "^7.23.3", "@babel/plugin-transform-modules-amd": "^7.23.3", "@babel/plugin-transform-modules-commonjs": "^7.23.3", "@babel/plugin-transform-modules-systemjs": "^7.23.3", "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.23.3", "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", "@babel/plugin-transform-numeric-separator": "^7.23.3", "@babel/plugin-transform-object-rest-spread": "^7.23.3", "@babel/plugin-transform-object-super": "^7.23.3", "@babel/plugin-transform-optional-catch-binding": "^7.23.3", "@babel/plugin-transform-optional-chaining": "^7.23.3", "@babel/plugin-transform-parameters": "^7.23.3", "@babel/plugin-transform-private-methods": "^7.23.3", "@babel/plugin-transform-private-property-in-object": "^7.23.3", "@babel/plugin-transform-property-literals": "^7.23.3", "@babel/plugin-transform-regenerator": "^7.23.3", "@babel/plugin-transform-reserved-words": "^7.23.3", "@babel/plugin-transform-shorthand-properties": "^7.23.3", "@babel/plugin-transform-spread": "^7.23.3", "@babel/plugin-transform-sticky-regex": "^7.23.3", "@babel/plugin-transform-template-literals": "^7.23.3", "@babel/plugin-transform-typeof-symbol": "^7.23.3", "@babel/plugin-transform-unicode-escapes": "^7.23.3", "@babel/plugin-transform-unicode-property-regex": "^7.23.3", "@babel/plugin-transform-unicode-regex": "^7.23.3", "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.6", "babel-plugin-polyfill-corejs3": "^0.8.5", "babel-plugin-polyfill-regenerator": "^0.5.3", "core-js-compat": "^3.31.0", "semver": "^6.3.1" } }, "@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" } }, "@babel/preset-react": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-transform-react-display-name": "^7.23.3", "@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-react-jsx-development": "^7.22.5", "@babel/plugin-transform-react-pure-annotations": "^7.23.3" } }, "@babel/register": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", "dev": true, "requires": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", "pirates": "^4.0.5", "source-map-support": "^0.5.16" } }, "@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, "@babel/runtime": { "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "requires": { "regenerator-runtime": "^0.14.0" }, "dependencies": { "regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" } } }, "@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", "@babel/types": "^7.22.15" } }, "@babel/traverse": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", "dev": true, "requires": { "@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": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, "@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "requires": { "eslint-visitor-keys": "^3.3.0" } }, "@eslint-community/regexpp": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true }, "@eslint/eslintrc": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.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" }, "dependencies": { "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "globals": { "version": "13.23.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" } }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "@eslint/js": { "version": "8.53.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", "dev": true }, "@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" } }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, "@humanwhocodes/object-schema": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "requires": { "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" }, "dependencies": { "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" } }, "wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } } } }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { "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" }, "dependencies": { "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" } }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true } } }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true }, "@jridgewell/source-map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "dependencies": { "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } } } }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" } }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "requires": { "eslint-scope": "5.1.1" }, "dependencies": { "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true } } }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@octokit/auth-token": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", "dev": true }, "@octokit/core": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", "dev": true, "requires": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", "@octokit/request": "^6.0.0", "@octokit/request-error": "^3.0.0", "@octokit/types": "^9.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "@octokit/endpoint": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, "requires": { "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, "dependencies": { "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true } } }, "@octokit/graphql": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "requires": { "@octokit/request": "^6.0.0", "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" } }, "@octokit/openapi-types": { "version": "18.1.1", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", "dev": true }, "@octokit/plugin-paginate-rest": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, "requires": { "@octokit/tsconfig": "^1.0.2", "@octokit/types": "^9.2.3" } }, "@octokit/plugin-request-log": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", "dev": true, "requires": { "@octokit/types": "^10.0.0" }, "dependencies": { "@octokit/types": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", "dev": true, "requires": { "@octokit/openapi-types": "^18.0.0" } } } }, "@octokit/request": { "version": "6.2.8", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", "dev": true, "requires": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" }, "dependencies": { "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true } } }, "@octokit/request-error": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "requires": { "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" } }, "@octokit/rest": { "version": "19.0.13", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz", "integrity": "sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==", "dev": true, "requires": { "@octokit/core": "^4.2.1", "@octokit/plugin-paginate-rest": "^6.1.2", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-rest-endpoint-methods": "^7.1.2" } }, "@octokit/tsconfig": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", "dev": true }, "@octokit/types": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, "requires": { "@octokit/openapi-types": "^18.0.0" } }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "optional": true }, "@rollup/plugin-babel": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz", "integrity": "sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.18.6", "@rollup/pluginutils": "^5.0.1" } }, "@rollup/plugin-commonjs": { "version": "25.0.7", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", "dev": true, "requires": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", "glob": "^8.0.3", "is-reference": "1.2.1", "magic-string": "^0.30.3" }, "dependencies": { "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" } }, "glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" } } } }, "@rollup/plugin-node-resolve": { "version": "15.2.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, "requires": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-builtin-module": "^3.2.1", "is-module": "^1.0.0", "resolve": "^1.22.1" } }, "@rollup/plugin-terser": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, "requires": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", "terser": "^5.17.4" }, "dependencies": { "serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, "terser": { "version": "5.17.7", "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" } } } }, "@rollup/pluginutils": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", "dev": true, "requires": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^2.3.1" } }, "@rollup/rollup-android-arm-eabi": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.3.0.tgz", "integrity": "sha512-/4pns6BYi8MXdwnXM44yoGAcFYVHL/BYlB2q1HXZ6AzH++LaiEVWFpBWQ/glXhbMbv3E3o09igrHFbP/snhAvA==", "dev": true, "optional": true }, "@rollup/rollup-android-arm64": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.3.0.tgz", "integrity": "sha512-nLO/JsL9idr416vzi3lHm3Xm+QZh4qHij8k3Er13kZr5YhL7/+kBAx84kDmPc7HMexLmwisjDCeDIKNFp8mDlQ==", "dev": true, "optional": true }, "@rollup/rollup-darwin-arm64": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.3.0.tgz", "integrity": "sha512-dGhVBlllt4iHwTGy21IEoMOTN5wZoid19zEIxsdY29xcEiOEHqzDa7Sqrkh5OE7LKCowL61eFJXxYe/+pYa7ZQ==", "dev": true, "optional": true }, "@rollup/rollup-darwin-x64": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.3.0.tgz", "integrity": "sha512-h8wRfHeLEbU3NzaP1Oku7BYXCJQiTRr+8U0lklyOQXxXiEpHLL8tk1hFl+tezoRKLcPJD7joKaK74ASsqt3Ekg==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.3.0.tgz", "integrity": "sha512-wP4VgR/gfV18sylTuym3sxRTkAgUR2vh6YLeX/GEznk5jCYcYSlx585XlcUcl0c8UffIZlRJ09raWSX3JDb4GA==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-gnu": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.3.0.tgz", "integrity": "sha512-v/14JCYVkqRSJeQbxFx4oUkwVQQw6lFMN7bd4vuARBc3X2lmomkxBsc+BFiIDL/BK+CTx5AOh/k9XmqDnKWRVg==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-musl": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.3.0.tgz", "integrity": "sha512-tNhfYqFH5OxtRzfkTOKdgFYlPSZnlDLNW4+leNEvQZhwTJxoTwsZAAhR97l3qVry/kkLyJPBK+Q8EAJLPinDIg==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-gnu": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.3.0.tgz", "integrity": "sha512-pw77m8QywdsoFdFOgmc8roF1inBI0rciqzO8ffRUgLoq7+ee9o5eFqtEcS6hHOOplgifAUUisP8cAnwl9nUYPw==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-musl": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.3.0.tgz", "integrity": "sha512-tJs7v2MnV2F8w6X1UpPHl/43OfxjUy9SuJ2ZPoxn79v9vYteChVYO/ueLHCpRMmyTUIVML3N9z4azl9ENH8Xxg==", "dev": true, "optional": true }, "@rollup/rollup-win32-arm64-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.3.0.tgz", "integrity": "sha512-OKGxp6kATQdTyI2DF+e9s+hB3/QZB45b6e+dzcfW1SUqiF6CviWyevhmT4USsMEdP3mlpC9zxLz3Oh+WaTMOSw==", "dev": true, "optional": true }, "@rollup/rollup-win32-ia32-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.3.0.tgz", "integrity": "sha512-DDZ5AH68JJ2ClQFEA1aNnfA7Ybqyeh0644rGbrLOdNehTmzfICHiWSn0OprzYi9HAshTPQvlwrM+bi2kuaIOjQ==", "dev": true, "optional": true }, "@rollup/rollup-win32-x64-msvc": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.3.0.tgz", "integrity": "sha512-dMvGV8p92GQ8jhNlGIKpyhVZPzJlT258pPrM5q2F8lKcc9Iv9BbfdnhX1OfinYWnb9ms5zLw6MlaMnqLfUkKnQ==", "dev": true, "optional": true }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true }, "@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { "version": "11.2.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.0" } }, "@sinonjs/samsam": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", "dev": true, "requires": { "@sinonjs/commons": "^2.0.0", "lodash.get": "^4.4.2", "type-detect": "^4.0.8" }, "dependencies": { "@sinonjs/commons": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "requires": { "type-detect": "4.0.8" } } } }, "@sinonjs/text-encoding": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, "@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "dev": true }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dev": true, "requires": { "defer-to-connect": "^1.0.1" } }, "@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", "dev": true }, "@types/cors": { "version": "2.8.13", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", "dev": true, "requires": { "@types/node": "*" } }, "@types/estree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "dev": true }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "@types/node": { "version": "18.11.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz", "integrity": "sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==", "dev": true }, "@types/parsimmon": { "version": "1.10.6", "resolved": "https://registry.npmjs.org/@types/parsimmon/-/parsimmon-1.10.6.tgz", "integrity": "sha512-FwAQwMRbkhx0J6YELkwIpciVzCcgEqXEbIrIn3a2P5d3kGEHQ3wVhlN3YdVepYP+bZzCYO6OjmD4o9TGOZ40rA==", "dev": true }, "@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, "@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "acorn": { "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" }, "dependencies": { "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true } } }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "aggregate-error": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, "requires": { "clean-stack": "^4.0.0", "indent-string": "^5.0.0" } }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, "requires": { "string-width": "^4.1.0" } }, "ansi-escapes": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "requires": { "type-fest": "^1.0.2" }, "dependencies": { "type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true } } }, "ansi-regex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "append-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", "dev": true, "requires": { "buffer-equal": "^1.0.0" } }, "append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "requires": { "default-require-extensions": "^3.0.0" } }, "application-config": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/application-config/-/application-config-2.0.0.tgz", "integrity": "sha512-NC5/0guSZK3/UgUDfCk/riByXzqz0owL1L3r63JPSBzYk5QALrp3bLxbsR7qeSfvYfFmAhnp3dbqYsW3U9MpZQ==", "dev": true, "requires": { "application-config-path": "^0.1.0", "load-json-file": "^6.2.0", "write-json-file": "^4.2.0" } }, "application-config-path": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", "dev": true }, "aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, "aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "requires": { "dequal": "^2.0.3" } }, "array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "requires": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" } }, "array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" } }, "array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.2.1" } }, "array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "array.prototype.tosorted": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.1.3" } }, "arraybuffer.prototype.slice": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" } }, "arrify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", "dev": true }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "requires": { "safer-buffer": "~2.1.0" } }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", "dev": true }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", "dev": true, "requires": { "inherits": "2.0.1" } } } }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "asynciterator.prototype": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", "dev": true, "requires": { "has-symbols": "^1.0.3" } }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true }, "aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "axe-core": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true }, "axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, "requires": { "dequal": "^2.0.3" } }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", "dev": true, "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", "dev": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true } } }, "babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "detect-indent": "^4.0.0", "jsesc": "^1.3.0", "lodash": "^4.17.4", "source-map": "^0.5.7", "trim-right": "^1.0.1" }, "dependencies": { "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==", "dev": true } } }, "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-polyfill-corejs2": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", "dev": true, "requires": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.4.3", "semver": "^6.3.1" } }, "babel-plugin-polyfill-corejs3": { "version": "0.8.6", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.4.3", "core-js-compat": "^3.33.1" } }, "babel-plugin-polyfill-regenerator": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.4.3" } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "dev": true, "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" }, "dependencies": { "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true } } }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", "dev": true, "requires": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "lodash": "^4.17.4" } }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "debug": "^2.6.8", "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", "dev": true, "requires": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" }, "dependencies": { "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", "dev": true } } }, "babelify": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", "dev": true, "requires": {} }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, "before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" }, "dependencies": { "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, "body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "requires": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", "chalk": "^4.1.0", "cli-boxes": "^2.2.1", "string-width": "^4.2.2", "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" }, "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, "browser-pack": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { "combine-source-map": "~0.8.0", "defined": "^1.0.0", "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" } }, "browser-resolve": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "requires": { "resolve": "^1.17.0" } }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "browserify": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "requires": { "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", "browserify-zlib": "~0.2.0", "buffer": "~5.2.1", "cached-path-relative": "^1.0.0", "concat-stream": "^1.6.0", "console-browserify": "^1.1.0", "constants-browserify": "~1.0.0", "crypto-browserify": "^3.0.0", "defined": "^1.0.0", "deps-sort": "^2.0.1", "domain-browser": "^1.2.0", "duplexer2": "~0.1.2", "events": "^3.0.0", "glob": "^7.1.0", "has": "^1.0.0", "htmlescape": "^1.1.0", "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", "os-browserify": "~0.3.0", "parents": "^1.0.1", "path-browserify": "^1.0.0", "process": "~0.11.0", "punycode": "^1.3.2", "querystring-es3": "~0.2.0", "read-only-stream": "^2.0.0", "readable-stream": "^2.0.2", "resolve": "^1.1.4", "shasum-object": "^1.0.0", "shell-quote": "^1.6.1", "stream-browserify": "^3.0.0", "stream-http": "^3.0.0", "string_decoder": "^1.1.1", "subarg": "^1.0.0", "syntax-error": "^1.1.1", "through2": "^2.0.0", "timers-browserify": "^1.0.1", "tty-browserify": "0.0.1", "url": "~0.11.0", "util": "~0.12.0", "vm-browserify": "^1.0.0", "xtend": "^4.0.0" } }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.3", "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, "browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "browserify-istanbul": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/browserify-istanbul/-/browserify-istanbul-3.0.1.tgz", "integrity": "sha512-CMIXoxEgyUFxSwqL3WR573/46vrQK74Z+pw0IXylQTJOxqs3UvakWuUPz8siOcOu+qQKP+MehNIcvlqMHCWQ2g==", "dev": true, "requires": { "istanbul-lib-instrument": "^1.8.0", "minimatch": "^3.0.4", "object-assign": "^4.1.1", "through": "^2.3.8" } }, "browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, "browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { "pako": "~1.0.5" } }, "browserslist": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001541", "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.13" } }, "buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, "buffer-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", "dev": true }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, "builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^3.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^4.1.0", "responselike": "^1.0.2" }, "dependencies": { "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" } }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true } } }, "cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", "dev": true }, "caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "requires": { "hasha": "^5.0.0", "make-dir": "^3.0.0", "package-hash": "^4.0.0", "write-file-atomic": "^3.0.0" }, "dependencies": { "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" } } } }, "call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "requires": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", "set-function-length": "^1.1.1" } }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "caniuse-lite": { "version": "1.0.30001561", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, "chai": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", "deep-eql": "^4.1.3", "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", "type-detect": "^4.0.8" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "changelog-parser": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/changelog-parser/-/changelog-parser-3.0.1.tgz", "integrity": "sha512-1AEVJgnFEO4v5ukfEH/j9cr2Z39Y/GCieNi605azhufAolXF4vQAwZBY8BrUVRkvlI3gwe3i621/PIAW0zmmEQ==", "dev": true, "requires": { "line-reader": "^0.2.4", "remove-markdown": "^0.5.0" } }, "check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "requires": { "get-func-name": "^2.0.2" } }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" } }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "clean-stack": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", "dev": true, "requires": { "escape-string-regexp": "5.0.0" }, "dependencies": { "escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true } } }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, "cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "requires": { "restore-cursor": "^4.0.0" } }, "cli-spinners": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", "dev": true }, "cli-truncate": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "requires": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" }, "dependencies": { "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" } } } }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" } }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" } } } } } }, "clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true }, "clone-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "dev": true }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" } }, "clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "requires": { "mimic-response": "^1.0.0" }, "dependencies": { "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true } } }, "clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", "dev": true }, "cloneable-readable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, "requires": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", "readable-stream": "^2.3.5" } }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", "dev": true, "requires": { "convert-source-map": "~1.1.0", "inline-source-map": "~0.6.0", "lodash.memoize": "~3.0.3", "source-map": "~0.5.3" }, "dependencies": { "convert-source-map": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", "dev": true } } }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, "requires": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" }, "dependencies": { "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" } } } }, "confusing-browser-globals": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, "connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", "finalhandler": "1.1.2", "parseurl": "~1.3.3", "utils-merge": "1.0.1" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, "cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, "core-js-compat": { "version": "3.33.2", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", "dev": true, "requires": { "browserslist": "^4.22.1" } }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "requires": { "object-assign": "^4", "vary": "^1" } }, "coveralls": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", "dev": true, "requires": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.5", "request": "^2.88.2" } }, "cp-file": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-10.0.0.tgz", "integrity": "sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==", "dev": true, "requires": { "graceful-fs": "^4.2.10", "nested-error-stacks": "^2.1.1", "p-event": "^5.0.1" } }, "cpy": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/cpy/-/cpy-10.1.0.tgz", "integrity": "sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==", "dev": true, "requires": { "arrify": "^3.0.0", "cp-file": "^10.0.0", "globby": "^13.1.4", "junk": "^4.0.1", "micromatch": "^4.0.5", "nested-error-stacks": "^2.1.1", "p-filter": "^3.0.0", "p-map": "^6.0.0" } }, "cpy-cli": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-5.0.0.tgz", "integrity": "sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==", "dev": true, "requires": { "cpy": "^10.1.0", "meow": "^12.0.1" } }, "create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", "ripemd160": "^2.0.0", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dev": true, "requires": { "node-fetch": "^2.6.12" } }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, "dependencies": { "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", "create-hash": "^1.1.0", "create-hmac": "^1.1.0", "diffie-hellman": "^5.0.0", "inherits": "^2.0.1", "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" } }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, "custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", "dev": true }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, "dash-ast": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", "dev": true }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true }, "debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, "decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "requires": { "mimic-response": "^3.1.0" } }, "deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "requires": { "type-detect": "^4.0.0" } }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, "default-require-extensions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "requires": { "strip-bom": "^4.0.0" } }, "defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "requires": { "clone": "^1.0.2" }, "dependencies": { "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true } } }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, "define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dev": true, "requires": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" } }, "define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "requires": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "dev": true }, "definitelytyped-header-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/definitelytyped-header-parser/-/definitelytyped-header-parser-1.2.0.tgz", "integrity": "sha512-xpg8uu/2YD/reaVsZV4oJ4g7UDYFqQGWvT1W9Tsj6q4VtWBSaig38Qgah0ZMnQGF9kAsAim08EXDO1nSi0+Nog==", "dev": true, "requires": { "@types/parsimmon": "^1.3.0", "parsimmon": "^1.2.0" } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, "deps-sort": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "requires": { "JSONStream": "^1.0.3", "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" } }, "dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", "dev": true, "requires": { "repeating": "^2.0.0" } }, "detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, "requires": { "acorn-node": "^1.8.2", "defined": "^1.0.0", "minimist": "^1.2.6" } }, "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", "dev": true }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { "path-type": "^4.0.0" } }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, "requires": { "custom-event": "~1.0.0", "ent": "~2.2.0", "extend": "^3.0.0", "void-elements": "^2.0.0" } }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" }, "dependencies": { "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true } } }, "download-file-sync": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/download-file-sync/-/download-file-sync-1.0.4.tgz", "integrity": "sha512-vH92qNH508jZZA12HQNq/aiMDfagr4JvjFiI17Bi8oYjsxwv5ZVIi7iHkYmUXxOQUr90tcVX+8EPePjAqG1Y0w==", "dev": true }, "dts-critic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/dts-critic/-/dts-critic-1.2.0.tgz", "integrity": "sha512-z6VI1Sz7xxy0BgN6YsWuG9hbRIfph3U9hwrfNHLnLzsq865VYyjo5xKKUgXPuqMgJ04BUF1LGYQJ+kWyWwvUvQ==", "dev": true, "requires": { "definitelytyped-header-parser": "^1.2.0", "download-file-sync": "^1.0.4", "yargs": "^12.0.5" } }, "dtslint": { "version": "0.4.9", "resolved": "https://registry.npmjs.org/dtslint/-/dtslint-0.4.9.tgz", "integrity": "sha512-QKOfpKIcpJi38gXWQ1uzm/jFU+1xqPVjrow8PSgs1N7CeY819A0Lm1VvYdM4GD1i964B2QKUyJAAjWiK8YPzlA==", "dev": true, "requires": { "definitelytyped-header-parser": "^1.0.1", "dts-critic": "^1.0.1", "fs-extra": "^6.0.1", "request": "^2.88.0", "strip-json-comments": "^2.0.1", "tslint": "^5.12.0", "typescript": "next" }, "dependencies": { "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tslint": { "version": "5.20.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" } } } }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, "requires": { "readable-stream": "^2.0.2" } }, "duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, "duplexify": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", "dev": true, "requires": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", "readable-stream": "^3.1.1", "stream-shift": "^1.0.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "electron-to-chromium": { "version": "1.4.580", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.580.tgz", "integrity": "sha512-T5q3pjQon853xxxHUq3ZP68ZpvJHuSMY2+BZaW3QzjS4HvNuvsMmZ/+lU+nCrftre1jFZ+OSlExynXWBihnXzw==", "dev": true }, "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.1", "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" } }, "engine.io": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", "dev": true, "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", "ws": "~8.2.3" } }, "engine.io-parser": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", "dev": true }, "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { "version": "1.22.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.13" } }, "es-iterator-helpers": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", "dev": true, "requires": { "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.1", "es-abstract": "^1.22.1", "es-set-tostringtag": "^2.0.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "iterator.prototype": "^1.1.2", "safe-array-concat": "^1.0.1" } }, "es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "requires": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", "hasown": "^2.0.0" } }, "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "requires": { "has": "^1.0.3" } }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "eslint": { "version": "8.53.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", "@eslint/js": "8.53.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "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.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "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.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { "is-glob": "^4.0.3" } }, "globals": { "version": "13.19.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "eslint-config-airbnb": { "version": "19.0.4", "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", "dev": true, "requires": { "eslint-config-airbnb-base": "^15.0.0", "object.assign": "^4.1.2", "object.entries": "^1.1.5" } }, "eslint-config-airbnb-base": { "version": "15.0.0", "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "requires": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", "object.entries": "^1.1.5", "semver": "^6.3.0" } }, "eslint-config-prettier": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" }, "dependencies": { "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } } } }, "eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "requires": { "debug": "^3.2.7" }, "dependencies": { "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } } } }, "eslint-plugin-import": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "requires": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", "hasown": "^2.0.0", "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.7", "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, "dependencies": { "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } } } }, "eslint-plugin-jsx-a11y": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", "dev": true, "requires": { "@babel/runtime": "^7.23.2", "aria-query": "^5.3.0", "array-includes": "^3.1.7", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "=4.7.0", "axobject-query": "^3.2.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "es-iterator-helpers": "^1.0.15", "hasown": "^2.0.0", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.entries": "^1.1.7", "object.fromentries": "^2.0.7" } }, "eslint-plugin-react": { "version": "7.33.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.6", "object.fromentries": "^2.0.6", "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "dependencies": { "resolve": { "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } } } }, "eslint-plugin-react-hooks": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, "peer": true, "requires": {} }, "eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, "espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" } }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" } }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, "execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" }, "dependencies": { "is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true }, "mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true }, "onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "requires": { "mimic-fn": "^4.0.0" } }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true } } }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "requires": { "@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": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, "fastq": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" } }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "requires": { "ee-first": "1.1.1" } } } }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" }, "dependencies": { "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } } } }, "flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, "follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { "is-callable": "^1.1.3" } }, "foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, "fs-extra": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", "through2": "^2.0.3" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "function.prototype.name": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "gauge": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", "signal-exit": "^4.0.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.5" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } } } }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-assigned-identifiers": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true }, "get-intrinsic": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "requires": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" } }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, "get-stream": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "gh-release": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/gh-release/-/gh-release-7.0.2.tgz", "integrity": "sha512-5gVe+BHFa9OtsjOa72hFRBsfsCIIMYbba35wtEJIkAzZjPXQkUmpLhyrIYYdouh0JRTNNwZ4sDD7eiUhE8T/IQ==", "dev": true, "requires": { "@octokit/rest": "^19.0.5", "changelog-parser": "^3.0.0", "deep-extend": "^0.6.0", "gauge": "^v5.0.0", "gh-release-assets": "^2.0.0", "ghauth": "^5.0.0", "github-url-to-object": "^4.0.4", "inquirer": "^8.0.0", "shelljs": "^0.8.4", "update-notifier": "^5.0.0", "yargs": "^17.0.0" }, "dependencies": { "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { "type-fest": "^0.21.3" } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { "restore-cursor": "^3.1.0" } }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "inquirer": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", "ora": "^5.4.1", "run-async": "^2.4.0", "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", "wrap-ansi": "^7.0.0" } }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "requires": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, "requires": { "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" } }, "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true } } }, "gh-release-assets": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/gh-release-assets/-/gh-release-assets-2.0.1.tgz", "integrity": "sha512-KrhmYIA/5oQdfEl9vQ2yF6DOM2QOAjpCOsNKFkc7X3dOTefSixttW0ysot3noQ+3XL8NdkdC7z+mqfePzIwexg==", "dev": true, "requires": { "async": "^3.2.0", "mime": "^3.0.0", "progress-stream": "^2.0.0", "pumpify": "^2.0.1", "simple-get": "^4.0.0", "util-extend": "^1.0.1" } }, "ghauth": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ghauth/-/ghauth-5.0.1.tgz", "integrity": "sha512-WzgL12dczZX/VrvVTkoFAJLU3pb6PDT+TS60kLlaU51fuNEv6VoYpRXlnwIjkMIhqWead9+dLBEzj0E1ghYMkg==", "dev": true, "requires": { "application-config": "^2.0.0", "node-fetch": "^2.6.0", "ora": "^4.0.5", "read": "^1.0.7" } }, "github-url-to-object": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-4.0.6.tgz", "integrity": "sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ==", "dev": true, "requires": { "is-url": "^1.1.0" } }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "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" } }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, "requires": { "extend": "^3.0.0", "glob": "^7.1.1", "glob-parent": "^3.1.0", "is-negated-glob": "^1.0.0", "ordered-read-streams": "^1.0.0", "pumpify": "^1.3.5", "readable-stream": "^2.1.5", "remove-trailing-separator": "^1.0.1", "to-absolute-glob": "^2.0.0", "unique-stream": "^2.0.2" }, "dependencies": { "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" } }, "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "requires": { "is-extglob": "^2.1.0" } }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" } } } }, "global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "requires": { "ini": "2.0.0" } }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globalthis": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "requires": { "define-properties": "^1.1.3" } }, "globby": { "version": "13.2.2", "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "requires": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" } }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "requires": { "get-intrinsic": "^1.1.3" } }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", "cacheable-request": "^6.0.0", "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", "get-stream": "^4.1.0", "lowercase-keys": "^1.0.1", "mimic-response": "^1.0.1", "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" }, "dependencies": { "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "requires": { "mimic-response": "^1.0.0" } }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" } }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true } } }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true } } }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "requires": { "get-intrinsic": "^1.1.1" } }, "has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "requires": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" }, "dependencies": { "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true } } }, "hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, "requires": { "function-bind": "^1.1.2" } }, "hat": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", "integrity": "sha512-zpImx2GoKXy42fVDSEad2BPKuSQdLcqsCYa48K3zHSzM/ugWuYjLDr8IXxpVuL7uCLHw56eaiLxCRthhOzf5ug==", "dev": true }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", "dev": true }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" }, "dependencies": { "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, "human-signals": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true }, "husky": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true }, "i18next-browser-languagedetector": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.1.0.tgz", "integrity": "sha512-cr2k7u1XJJ4HTOjM9GyOMtbOA47RtUoWRAtt52z43r3AoMs2StYKyjS3URPhzHaf+mn10hY9dZWamga5WPQjhA==", "dev": true, "requires": { "@babel/runtime": "^7.19.4" } }, "i18next-fs-backend": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.2.0.tgz", "integrity": "sha512-VOPHhdDX0M/csRqEw+9Ectpf6wvTIg1MZDfAHxc3JKnAlJz7fcZSAKAeyDohOq0xuLx57esYpJopIvBaRb0Bag==", "dev": true }, "i18next-http-backend": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.3.1.tgz", "integrity": "sha512-jnagFs5cnq4ryb+g92Hex4tB5kj3tWmiRWx8gHMCcE/PEgV1fjH5rC7xyJmPSgyb9r2xgcP8rvZxPKgsmvMqTw==", "dev": true, "requires": { "cross-fetch": "4.0.0" } }, "i18next-localstorage-cache": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/i18next-localstorage-cache/-/i18next-localstorage-cache-1.1.1.tgz", "integrity": "sha512-6kgVSg48bhmYCHppMCMExKBiiGOrb85jQBQMPnAwxVumn/fkXJYEfxV0rdfL0EYcZT+ciOqw+7VIMWkTVuk6Ng==", "dev": true }, "i18next-sprintf-postprocessor": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/i18next-sprintf-postprocessor/-/i18next-sprintf-postprocessor-0.2.2.tgz", "integrity": "sha512-c/IT9xuMyTfJ/3Ds+DPtb0vYVuykbMyGChZ5OGZTzFDV7Kgst1nrNOwdbZ+PkcA5kLXEE3U0RKkNbabj07261w==", "dev": true }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, "inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", "dev": true, "requires": { "source-map": "~0.5.3" } }, "insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "requires": { "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" } }, "internal-slot": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "requires": { "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, "interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { "loose-envify": "^1.0.0" } }, "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" } }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" } }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" } }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-builtin-module": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "requires": { "builtin-modules": "^3.3.0" } }, "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { "ci-info": "^2.0.0" } }, "is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "requires": { "hasown": "^2.0.0" } }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-finalizationregistry": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, "requires": { "call-bind": "^1.0.2" } }, "is-finite": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "requires": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" } }, "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true }, "is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { "isobject": "^3.0.1" } }, "is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "requires": { "@types/estree": "*" } }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { "is-unc-path": "^1.0.0" } }, "is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "requires": { "call-bind": "^1.0.2" } }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "is-typed-array": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "requires": { "which-typed-array": "^1.1.11" } }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { "unc-path-regex": "^0.1.2" } }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, "is-valid-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true }, "is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { "call-bind": "^1.0.2" } }, "is-weakset": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "isbinaryfile": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, "istanbul-lib-coverage": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", "dev": true }, "istanbul-lib-hook": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { "append-transform": "^2.0.0" } }, "istanbul-lib-instrument": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { "babel-generator": "^6.18.0", "babel-template": "^6.16.0", "babel-traverse": "^6.18.0", "babel-types": "^6.18.0", "babylon": "^6.18.0", "istanbul-lib-coverage": "^1.2.1", "semver": "^5.3.0" }, "dependencies": { "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "istanbul-lib-processinfo": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "requires": { "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" }, "dependencies": { "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { "aggregate-error": "^3.0.0" } }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } } } }, "istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" }, "dependencies": { "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" } }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, "dependencies": { "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "istanbul-reports": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "iterator.prototype": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, "requires": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" } }, "jackspeak": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" } }, "js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", "dev": true }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" } }, "jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" } }, "jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "junk": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "dev": true }, "just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "karma": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", "dev": true, "requires": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", "glob": "^7.1.7", "graceful-fs": "^4.2.6", "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", "lodash": "^4.17.21", "log4js": "^6.4.1", "mime": "^2.5.2", "minimatch": "^3.0.4", "mkdirp": "^0.5.5", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", "socket.io": "^4.4.1", "source-map": "^0.6.1", "tmp": "^0.2.1", "ua-parser-js": "^0.7.30", "yargs": "^16.1.1" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { "rimraf": "^3.0.0" } }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } } } }, "karma-browserify": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-8.1.0.tgz", "integrity": "sha512-q5OWuCfdXMfyhkRrH8XP5LiixD4lx0uCmlf6yQmGeQNHLH4Hoofur3tBJtSEhOXmY0mOdBe8ek2UUxicjmGqFQ==", "dev": true, "requires": { "convert-source-map": "^1.8.0", "hat": "^0.0.3", "js-string-escape": "^1.0.0", "lodash": "^4.17.21", "minimatch": "^3.0.0", "os-shim": "^0.1.3" } }, "karma-chai": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", "integrity": "sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg==", "dev": true, "requires": {} }, "karma-chrome-launcher": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", "dev": true, "requires": { "which": "^1.2.1" } }, "karma-cli": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-2.0.0.tgz", "integrity": "sha512-1Kb28UILg1ZsfqQmeELbPzuEb5C6GZJfVIk0qOr8LNYQuYWmAaqP16WpbpKEjhejDrDYyYOwwJXSZO6u7q5Pvw==", "dev": true, "requires": { "resolve": "^1.3.3" } }, "karma-coverage": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.1", "istanbul-reports": "^3.0.5", "minimatch": "^3.0.4" }, "dependencies": { "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "requires": { "@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" } } } }, "karma-coveralls": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/karma-coveralls/-/karma-coveralls-2.1.0.tgz", "integrity": "sha512-l2qg7ufv7ooPJ5gFDfQM63eI6LaNGjGlkR8PIvBsi/m3nrfY+m4a7ph6fvQ7Zb+gDTWlo92NM5H0p+VTk8lupw==", "dev": true, "requires": { "coveralls": "~3.0.0", "lcov-result-merger": "^3.0.0", "through2": "^2.0.0", "vinyl-fs": "^3.0.2" }, "dependencies": { "coveralls": { "version": "3.0.14", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.14.tgz", "integrity": "sha512-nEQqCHzxiFfu1dEHYxe7xrbF5vFmx122mTWIM+BkiAOmsWbSAcucNk8stELnNk2lS1biTUjFOCIf8v8ZN225IA==", "dev": true, "requires": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.5", "request": "^2.88.2" } } } }, "karma-mocha": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", "dev": true, "requires": { "minimist": "^1.2.3" } }, "karma-rollup-preprocessor": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/karma-rollup-preprocessor/-/karma-rollup-preprocessor-7.0.8.tgz", "integrity": "sha512-WiuBCS9qsatJuR17dghiTARBZ7LF+ml+eb7qJXhw7IbsdY0lTWELDRQC/93J9i6636CsAXVBL3VJF4WtaFLZzA==", "dev": true, "requires": { "chokidar": "^3.3.1", "debounce": "^1.2.0" } }, "karma-sinon": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", "integrity": "sha512-wrkyAxJmJbn75Dqy17L/8aILJWFm7znd1CE8gkyxTBFnjMSOe2XTJ3P30T8SkxWZHmoHX0SCaUJTDBEoXs25Og==", "dev": true, "requires": {} }, "karma-spec-reporter": { "version": "0.0.36", "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.36.tgz", "integrity": "sha512-11bvOl1x6ryKZph7kmbmMpbi8vsngEGxGOoeTlIcDaH3ab3j8aPJnZ+r+K/SS0sBSGy5VGkGYO2+hLct7hw/6w==", "dev": true, "requires": { "colors": "1.4.0" } }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dev": true, "requires": { "json-buffer": "3.0.0" } }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "requires": { "inherits": "^2.0.1", "stream-splicer": "^2.0.0" } }, "language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true }, "language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "requires": { "language-subtag-registry": "^0.3.20" } }, "latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dev": true, "requires": { "package-json": "^6.3.0" } }, "lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "requires": { "readable-stream": "^2.0.5" } }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { "invert-kv": "^2.0.0" } }, "lcov-parse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", "integrity": "sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==", "dev": true }, "lcov-result-merger": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lcov-result-merger/-/lcov-result-merger-3.3.0.tgz", "integrity": "sha512-Krg9p24jGaIT93RBMA8b5qLHDEiAXTavaTiEdMAZaJS93PsBKIcg/89cw/8rgeSfRuQX+I9x7h73SHFjCZ6cHg==", "dev": true, "requires": { "through2": "^2.0.3", "vinyl": "^2.1.0", "vinyl-fs": "^3.0.2", "yargs": "^16.2.0" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } } } }, "lead": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", "dev": true, "requires": { "flush-write-stream": "^1.0.2" } }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true }, "line-reader": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/line-reader/-/line-reader-0.2.4.tgz", "integrity": "sha512-342xzyZZS9uTiKwHJcMacopVl/WjrMMCZS1Qg4Uhl/WBknWRrGFdKOIS1Kec6SaiTcZMtmuxWvvIbPXj/+FMjA==", "dev": true }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "lint-staged": { "version": "15.0.2", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.2.tgz", "integrity": "sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==", "dev": true, "requires": { "chalk": "5.3.0", "commander": "11.1.0", "debug": "4.3.4", "execa": "8.0.1", "lilconfig": "2.1.0", "listr2": "7.0.2", "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", "yaml": "2.3.3" }, "dependencies": { "chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true }, "commander": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true } } }, "listr2": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", "dev": true, "requires": { "cli-truncate": "^3.1.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^5.0.1", "rfdc": "^1.3.0", "wrap-ansi": "^8.1.0" }, "dependencies": { "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" } }, "wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } } } }, "load-json-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "requires": { "graceful-fs": "^4.1.15", "parse-json": "^5.0.0", "strip-bom": "^4.0.0", "type-fest": "^0.6.0" } }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { "p-locate": "^5.0.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", "dev": true }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "log-update": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, "requires": { "ansi-escapes": "^5.0.0", "cli-cursor": "^4.0.0", "slice-ansi": "^5.0.0", "strip-ansi": "^7.0.1", "wrap-ansi": "^8.0.1" }, "dependencies": { "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" } }, "wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } } } }, "log4js": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz", "integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==", "dev": true, "requires": { "date-format": "^4.0.14", "debug": "^4.3.4", "flatted": "^3.2.7", "rfdc": "^1.3.0", "streamroller": "^3.1.3" } }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, "requires": { "get-func-name": "^2.0.0" } }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { "yallist": "^3.0.2" } }, "magic-string": { "version": "0.30.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" }, "dependencies": { "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true } } }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" }, "dependencies": { "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { "p-defer": "^1.0.0" } }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true }, "mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" } }, "meow": { "version": "12.1.1", "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { "mime-db": "1.52.0" } }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true }, "minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { "minimist": "^1.2.6" } }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, "mocha": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "requires": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "dependencies": { "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } } } }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" } }, "minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" }, "dependencies": { "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" } } } }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } }, "module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "requires": { "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", "defined": "^1.0.0", "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", "stream-combiner2": "^1.1.1", "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", "dev": true }, "nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "nested-error-stacks": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", "dev": true }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "nise": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz", "integrity": "sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==", "dev": true, "requires": { "@sinonjs/commons": "^2.0.0", "@sinonjs/fake-timers": "^10.0.2", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", "path-to-regexp": "^1.7.0" }, "dependencies": { "@sinonjs/commons": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.0" }, "dependencies": { "@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "requires": { "type-detect": "4.0.8" } } } } } }, "node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, "requires": { "whatwg-url": "^5.0.0" } }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "requires": { "process-on-spawn": "^1.0.0" } }, "node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, "now-and-later": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, "requires": { "once": "^1.3.2" } }, "npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "requires": { "path-key": "^4.0.0" }, "dependencies": { "path-key": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true } } }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "requires": { "@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" }, "dependencies": { "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" } }, "p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { "aggregate-error": "^3.0.0" } }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { "find-up": "^4.0.0" } }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { "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-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } } } }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true }, "object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "object.entries": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "object.fromentries": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "object.groupby": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1" } }, "object.hasown": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "requires": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4" } }, "object.values": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" } }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" } }, "ora": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", "dev": true, "requires": { "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.2.0", "is-interactive": "^1.0.0", "log-symbols": "^3.0.0", "mute-stream": "0.0.8", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { "restore-cursor": "^3.1.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "log-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { "chalk": "^2.4.2" }, "dependencies": { "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", "dev": true, "requires": { "readable-stream": "^2.0.1" } }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, "os-locale": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { "execa": "^1.0.0", "lcid": "^2.0.0", "mem": "^4.0.0" }, "dependencies": { "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" } }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" } }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, "requires": { "path-key": "^2.0.0" } }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", "integrity": "sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==", "dev": true }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, "outpipe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", "dev": true, "requires": { "shell-quote": "^1.4.2" } }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", "dev": true }, "p-event": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", "dev": true, "requires": { "p-timeout": "^5.0.2" } }, "p-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", "dev": true, "requires": { "p-map": "^5.1.0" }, "dependencies": { "p-map": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, "requires": { "aggregate-error": "^4.0.0" } } } }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true }, "p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { "yocto-queue": "^0.1.0" } }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { "p-limit": "^3.0.2" } }, "p-map": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-6.0.0.tgz", "integrity": "sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==", "dev": true }, "p-timeout": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "package-hash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "requires": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" } }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dev": true, "requires": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" } }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" } }, "parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", "dev": true, "requires": { "path-platform": "~0.11.15" } }, "parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" } }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@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" } }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "parsimmon": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.18.1.tgz", "integrity": "sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw==", "dev": true }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", "dev": true }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-platform": { "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", "dev": true }, "path-scurry": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "requires": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "dependencies": { "lru-cache": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", "dev": true } } }, "path-to-regexp": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "requires": { "isarray": "0.0.1" }, "dependencies": { "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true } } }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" } }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pidtree": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { "find-up": "^3.0.0" }, "dependencies": { "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" } }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true } } }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true }, "prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, "requires": { "fromentries": "^1.2.0" } }, "progress-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", "integrity": "sha512-xJwOWR46jcXUq6EH9yYyqp+I52skPySOeHfkxOZ2IY1AiBi/sFJhbhAKHoV3OTw/omQ45KTio9215dRJ2Yxd3Q==", "dev": true, "requires": { "speedometer": "~1.0.0", "through2": "~2.0.3" } }, "prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" }, "dependencies": { "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "pumpify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", "dev": true, "requires": { "duplexify": "^4.1.1", "inherits": "^2.0.3", "pump": "^3.0.0" } }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, "pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, "requires": { "escape-goat": "^2.0.0" } }, "qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, "qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "requires": { "side-channel": "^1.0.4" } }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "dev": true }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" } }, "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "dependencies": { "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true } } }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "requires": { "mute-stream": "~0.0.4" } }, "read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", "dev": true, "requires": { "readable-stream": "^2.0.2" } }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" } }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "requires": { "resolve": "^1.1.6" } }, "reflect.getprototypeof": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" } }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" } }, "regexp.prototype.flags": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "set-function-name": "^2.0.0" } }, "regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "requires": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" } }, "registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "requires": { "rc": "1.2.8" } }, "registry-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, "requires": { "rc": "^1.2.8" } }, "regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "requires": { "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true } } }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "requires": { "es6-error": "^4.0.1" } }, "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, "requires": { "is-buffer": "^1.1.5", "is-utf8": "^0.2.1" } }, "remove-bom-stream": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", "dev": true, "requires": { "remove-bom-buffer": "^3.0.0", "safe-buffer": "^5.1.0", "through2": "^2.0.3" } }, "remove-markdown": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.5.0.tgz", "integrity": "sha512-x917M80K97K5IN1L8lUvFehsfhR8cYjGQ/yAMRI9E7JIKivtl5Emo5iD13DhMr+VojzMCiYk8V2byNPwT/oapg==", "dev": true }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", "dev": true, "requires": { "is-finite": "^1.0.0" } }, "replace-ext": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, "dependencies": { "qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", "dev": true }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", "dev": true, "requires": { "value-or-function": "^3.0.0" } }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "requires": { "lowercase-keys": "^1.0.0" } }, "restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "rimraf": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", "dev": true, "requires": { "glob": "^10.3.7" }, "dependencies": { "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" } }, "foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" } }, "glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "requires": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" } }, "minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" } }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true } } }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "rollup": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.3.0.tgz", "integrity": "sha512-scIi1NrKLDIYSPK66jjECtII7vIgdAMFmFo8h6qm++I6nN9qDSV35Ku6erzGVqYjx+lj+j5wkusRMr++8SyDZg==", "dev": true, "requires": { "@rollup/rollup-android-arm-eabi": "4.3.0", "@rollup/rollup-android-arm64": "4.3.0", "@rollup/rollup-darwin-arm64": "4.3.0", "@rollup/rollup-darwin-x64": "4.3.0", "@rollup/rollup-linux-arm-gnueabihf": "4.3.0", "@rollup/rollup-linux-arm64-gnu": "4.3.0", "@rollup/rollup-linux-arm64-musl": "4.3.0", "@rollup/rollup-linux-x64-gnu": "4.3.0", "@rollup/rollup-linux-x64-musl": "4.3.0", "@rollup/rollup-win32-arm64-msvc": "4.3.0", "@rollup/rollup-win32-ia32-msvc": "4.3.0", "@rollup/rollup-win32-x64-msvc": "4.3.0", "fsevents": "~2.3.2" } }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { "queue-microtask": "^1.2.2" } }, "rxjs": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.6.0.tgz", "integrity": "sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==", "dev": true, "requires": { "tslib": "^2.1.0" } }, "safe-array-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, "dependencies": { "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" } }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, "requires": { "semver": "^6.3.0" } }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", "dev": true, "requires": { "define-data-property": "^1.1.1", "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" } }, "set-function-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dev": true, "requires": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.0" } }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { "kind-of": "^6.0.2" } }, "shasum-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, "requires": { "fast-safe-stringify": "^2.0.7" } }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true }, "shell-quote": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", "dev": true }, "shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "requires": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" } }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" } }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true }, "simple-get": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "requires": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sinon": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.0", "@sinonjs/fake-timers": "^11.2.2", "@sinonjs/samsam": "^8.0.0", "diff": "^5.1.0", "nise": "^5.1.5", "supports-color": "^7.2.0" }, "dependencies": { "diff": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true }, "slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" }, "dependencies": { "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true } } }, "smob": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.0.tgz", "integrity": "sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==", "dev": true }, "socket.io": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz", "integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==", "dev": true, "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", "engine.io": "~6.2.1", "socket.io-adapter": "~2.4.0", "socket.io-parser": "~4.2.1" } }, "socket.io-adapter": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", "dev": true }, "socket.io-parser": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", "dev": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" } }, "sort-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", "dev": true, "requires": { "is-plain-obj": "^2.0.0" }, "dependencies": { "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true } } }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" }, "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "requires": { "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" }, "dependencies": { "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" } }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "speedometer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", "integrity": "sha512-lgxErLl/7A5+vgIIXsh9MbeukOaCb2axgQ+bKCdIE+ibNT4XNYGNCR1qFEGq6F+YDASXK3Fh/c5FgtZchFolxw==", "dev": true }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true }, "stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, "requires": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, "requires": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, "stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", "readable-stream": "^3.6.0", "xtend": "^4.0.2" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } } } }, "stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, "streamroller": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.3.tgz", "integrity": "sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w==", "dev": true, "requires": { "date-format": "^4.0.14", "debug": "^4.3.4", "fs-extra": "^8.1.0" }, "dependencies": { "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } } } }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { "safe-buffer": "~5.2.0" } }, "string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } } } }, "string-width-cjs": { "version": "npm:string-width@4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } } } }, "string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" } }, "string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "string.prototype.trimend": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "string.prototype.trimstart": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "strip-ansi-cjs": { "version": "npm:strip-ansi@6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true } } }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true }, "strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, "requires": { "minimist": "^1.1.0" } }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { "acorn-node": "^1.2.0" } }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "through2-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, "requires": { "through2": "~2.0.0", "xtend": "~4.0.0" } }, "timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", "dev": true, "requires": { "process": "~0.11.0" } }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "~1.0.2" } }, "to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", "dev": true, "requires": { "is-absolute": "^1.0.0", "is-negated-glob": "^1.0.0" } }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "to-through": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", "dev": true, "requires": { "through2": "^2.0.3" } }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" }, "dependencies": { "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true } } }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", "dev": true }, "tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, "dependencies": { "json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true } } }, "tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "tslint": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.13.0", "tsutils": "^2.29.0" }, "dependencies": { "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { "tslib": "^1.8.1" }, "dependencies": { "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" } }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", "is-typed-array": "^1.1.10" } }, "typed-array-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, "requires": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" } }, "typed-array-byte-offset": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" } }, "typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, "requires": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "is-typed-array": "^1.1.9" } }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true }, "ua-parser-js": { "version": "0.7.32", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", "dev": true }, "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true }, "undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, "requires": { "acorn-node": "^1.3.0", "dash-ast": "^1.0.0", "get-assigned-identifiers": "^1.2.0", "simple-concat": "^1.0.0", "xtend": "^4.0.1" } }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true }, "unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, "unique-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, "requires": { "json-stable-stringify-without-jsonify": "^1.0.1", "through2-filter": "^3.0.0" } }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "requires": { "crypto-random-string": "^2.0.0" } }, "universal-user-agent": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", "dev": true }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, "update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" } }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, "requires": { "boxen": "^5.0.0", "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", "is-installed-globally": "^0.4.0", "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", "latest-version": "^5.1.0", "pupa": "^2.1.1", "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" } }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" }, "dependencies": { "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true } } }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" }, "dependencies": { "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true } } }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "requires": { "prepend-http": "^2.0.0" } }, "util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", "which-typed-array": "^1.1.2" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "util-extend": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", "dev": true }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "value-or-function": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", "dev": true }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" }, "dependencies": { "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true } } }, "vinyl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, "requires": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", "clone-stats": "^1.0.0", "cloneable-readable": "^1.0.0", "remove-trailing-separator": "^1.0.1", "replace-ext": "^1.0.0" } }, "vinyl-fs": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, "requires": { "fs-mkdirp-stream": "^1.0.0", "glob-stream": "^6.1.0", "graceful-fs": "^4.0.0", "is-valid-glob": "^1.0.0", "lazystream": "^1.0.0", "lead": "^1.0.0", "object.assign": "^4.0.4", "pumpify": "^1.3.5", "readable-stream": "^2.3.3", "remove-bom-buffer": "^3.0.0", "remove-bom-stream": "^1.2.0", "resolve-options": "^1.1.0", "through2": "^2.0.0", "to-through": "^2.0.0", "value-or-function": "^3.0.0", "vinyl": "^2.0.0", "vinyl-sourcemap": "^1.1.0" }, "dependencies": { "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" } } } }, "vinyl-sourcemap": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", "dev": true, "requires": { "append-buffer": "^1.0.2", "convert-source-map": "^1.5.0", "graceful-fs": "^4.1.6", "normalize-path": "^2.1.1", "now-and-later": "^2.0.0", "remove-bom-buffer": "^3.0.0", "vinyl": "^2.0.0" }, "dependencies": { "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } } } }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true }, "watchify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz", "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==", "dev": true, "requires": { "anymatch": "^3.1.0", "browserify": "^17.0.0", "chokidar": "^3.4.0", "defined": "^1.0.0", "outpipe": "^1.1.0", "through2": "^4.0.2", "xtend": "^4.0.2" }, "dependencies": { "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { "readable-stream": "3" } } } }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "requires": { "defaults": "^1.0.3" } }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "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-builtin-type": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, "requires": { "function.prototype.name": "^1.1.5", "has-tostringtag": "^1.0.0", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", "is-generator-function": "^1.0.10", "is-regex": "^1.1.4", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", "which-typed-array": "^1.1.9" }, "dependencies": { "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "requires": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" } }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, "which-typed-array": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" } }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, "requires": { "string-width": "^4.0.0" } }, "workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } } } }, "wrap-ansi-cjs": { "version": "npm:wrap-ansi@7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "write-json-file": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", "dev": true, "requires": { "detect-indent": "^6.0.0", "graceful-fs": "^4.1.15", "is-plain-obj": "^2.0.0", "make-dir": "^3.0.0", "sort-keys": "^4.0.0", "write-file-atomic": "^3.0.0" }, "dependencies": { "detect-indent": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" } } } }, "ws": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, "requires": {} }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "yaml": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", "dev": true }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { "cliui": "^4.0.0", "decamelize": "^1.2.0", "find-up": "^3.0.0", "get-caller-file": "^1.0.1", "os-locale": "^3.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" }, "dependencies": { "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" } }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" } }, "yargs-parser": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } } } }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "dependencies": { "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true } } }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } } i18next-23.7.6/package.json000066400000000000000000000123301452441263500154040ustar00rootroot00000000000000{ "name": "i18next", "version": "23.7.6", "description": "i18next internationalization framework", "main": "./dist/cjs/i18next.js", "module": "./dist/esm/i18next.js", "types": "./index.v4.d.ts", "typesVersions": { "<5.0": { "typescript/t.d.ts": [ "typescript/t.v4.d.ts" ], "index.d.ts": [ "index.v4.d.ts" ] } }, "exports": { "./package.json": "./package.json", ".": { "import": { "types": "./index.d.mts", "default": "./dist/esm/i18next.js" }, "require": { "types": "./index.d.ts", "default": "./dist/cjs/i18next.js" } } }, "keywords": [ "i18next", "internationalization", "i18n", "translation", "localization", "l10n", "globalization", "gettext" ], "homepage": "https://www.i18next.com", "bugs": "https://github.com/i18next/i18next/issues", "repository": { "type": "git", "url": "https://github.com/i18next/i18next.git" }, "funding": [ { "type": "individual", "url": "https://locize.com" }, { "type": "individual", "url": "https://locize.com/i18next.html" }, { "type": "individual", "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" } ], "dependencies": { "@babel/runtime": "^7.23.2" }, "devDependencies": { "@babel/core": "^7.23.3", "@babel/eslint-parser": "^7.23.3", "@babel/plugin-proposal-async-generator-functions": "^7.20.7", "@babel/plugin-transform-modules-commonjs": "^7.23.3", "@babel/plugin-transform-runtime": "^7.23.3", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.23.3", "@babel/preset-react": "^7.23.3", "@babel/register": "^7.22.15", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "0.4.4", "babelify": "^10.0.0", "browserify": "17.0.0", "browserify-istanbul": "3.0.1", "chai": "4.3.10", "coveralls": "3.1.1", "cpy-cli": "^5.0.0", "dtslint": "^0.4.2", "eslint": "8.53.0", "eslint-config-airbnb": "19.0.4", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import": "2.29.0", "eslint-plugin-jsx-a11y": "6.8.0", "eslint-plugin-react": "7.33.2", "gh-release": "7.0.2", "husky": "^8.0.3", "i18next-browser-languagedetector": "7.1.0", "i18next-fs-backend": "2.2.0", "i18next-http-backend": "2.3.1", "i18next-localstorage-cache": "1.1.1", "i18next-sprintf-postprocessor": "0.2.2", "karma": "6.4.2", "karma-browserify": "8.1.0", "karma-chai": "0.1.0", "karma-chrome-launcher": "3.2.0", "karma-cli": "2.0.0", "karma-coverage": "2.2.1", "karma-coveralls": "2.1.0", "karma-mocha": "2.0.1", "karma-rollup-preprocessor": "7.0.8", "karma-sinon": "1.0.5", "karma-spec-reporter": "0.0.36", "lint-staged": "^15.0.2", "mocha": "10.2.0", "nyc": "^15.1.0", "prettier": "^3.0.3", "rimraf": "5.0.5", "rollup": "^4.3.0", "sinon": "17.0.1", "tslint": "^6.1.3", "typescript": "5.1.3", "watchify": "4.0.0" }, "scripts": { "pretest": "npm run generate_ts_v4_index && npm run test:typescript && npm run test:typescript:customtypes && npm run test:typescript:defaulttypes && npm run test:typescript:fallbacktypes && npm run test:typescript:noninterop && npm run test:typescript:customcontextseparator", "lint": "eslint src", "test": "npm run lint && npm run test:new && npm run test:compat", "test:new": "karma start karma.conf.js --singleRun", "test:compat": "karma start karma.backward.conf.js --singleRun", "test:typescript": "tslint --project tsconfig.json", "test:typescript:defaulttypes": "tslint --project test/typescript/default-types/tsconfig.json", "test:typescript:customtypes": "tslint --project test/typescript/custom-types/tsconfig.json", "test:typescript:fallbacktypes": "tslint --project test/typescript/fallback-types/tsconfig.json", "test:typescript:customcontextseparator": "tslint --project test/typescript/custom-context-separator/tsconfig.json", "test:typescript:noninterop": "tslint --project tsconfig.nonEsModuleInterop.json", "tdd": "karma start karma.conf.js", "tdd:compat": "karma start karma.backward.conf.js", "build": "rimraf dist && rollup -c && echo '{\"type\":\"module\"}' > dist/esm/package.json && cpy \"./dist/umd/*.js\" ./", "generate_ts_v4_index": "cp index.d.ts index.v4.d.ts && node -e \"fs.writeFileSync('index.v4.d.ts', fs.readFileSync('index.v4.d.ts').toString().replace(/.js'/g, '.d.ts\\''))\"", "fix_dist_package": "node -e 'console.log(`{\"type\":\"module\",\"version\":\"${process.env.npm_package_version}\"}`)' > dist/esm/package.json", "preversion": "npm run test && npm run build && git push", "postversion": "npm run fix_dist_package && git push && git push --tags && npm run release", "prettier": "prettier --write \"{,**/}*.{ts,tsx,js,json,md}\"", "prepare": "husky install", "release": "gh-release" }, "author": "Jan Mühlemann (https://github.com/jamuhl)", "license": "MIT", "lint-staged": { "*.{ts,tsx,js,json,md}": "prettier --write" } } i18next-23.7.6/rollup.config.mjs000066400000000000000000000032121452441263500164110ustar00rootroot00000000000000/* eslint-disable import/no-extraneous-dependencies */ import babel from '@rollup/plugin-babel'; import nodeResolve from '@rollup/plugin-node-resolve'; import terser from '@rollup/plugin-terser'; import { readFileSync } from 'fs'; const pkg = JSON.parse(readFileSync(new URL('./package.json', import.meta.url))); const getBabelOptions = ({ useESModules }) => ({ exclude: /node_modules/, babelHelpers: 'runtime', plugins: [['@babel/transform-runtime', { useESModules }]], comments: false, }); const input = './src/index.js'; const inputCjs = './src/index.cjs.js'; const name = 'i18next'; // check relative and absolute paths for windows and unix const external = (id) => !id.startsWith('.') && !id.startsWith('/') && !id.includes(':'); export default [ { input: inputCjs, output: { format: 'cjs', file: pkg.main }, external, plugins: [babel(getBabelOptions({ useESModules: false }))], }, { input, output: { format: 'esm', file: pkg.module }, external, plugins: [babel(getBabelOptions({ useESModules: true }))], }, { input, output: { format: 'esm', file: './dist/esm/i18next.bundled.js' }, external, plugins: [ babel({ exclude: /node_modules/, babelHelpers: 'bundled', comments: false, }), ], }, { input: inputCjs, output: { format: 'umd', name, file: `dist/umd/${name}.js` }, plugins: [babel(getBabelOptions({ useESModules: true })), nodeResolve()], }, { input: inputCjs, output: { format: 'umd', name, file: `dist/umd/${name}.min.js` }, plugins: [babel(getBabelOptions({ useESModules: true })), nodeResolve(), terser()], }, ]; i18next-23.7.6/sample.html000066400000000000000000000030641452441263500152710ustar00rootroot00000000000000

open console
i18next-23.7.6/src/000077500000000000000000000000001452441263500137065ustar00rootroot00000000000000i18next-23.7.6/src/BackendConnector.js000066400000000000000000000207231452441263500174520ustar00rootroot00000000000000import * as utils from './utils.js'; import baseLogger from './logger.js'; import EventEmitter from './EventEmitter.js'; function removePending(q, name) { if (q.pending[name] !== undefined) { delete q.pending[name]; q.pendingCount--; } } class Connector extends EventEmitter { constructor(backend, store, services, options = {}) { super(); this.backend = backend; this.store = store; this.services = services; this.languageUtils = services.languageUtils; this.options = options; this.logger = baseLogger.create('backendConnector'); this.waitingReads = []; this.maxParallelReads = options.maxParallelReads || 10; this.readingCalls = 0; this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5; this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350; this.state = {}; this.queue = []; if (this.backend && this.backend.init) { this.backend.init(services, options.backend, options); } } queueLoad(languages, namespaces, options, callback) { // find what needs to be loaded const toLoad = {}; const pending = {}; const toLoadLanguages = {}; const toLoadNamespaces = {}; languages.forEach((lng) => { let hasAllNamespaces = true; namespaces.forEach((ns) => { const name = `${lng}|${ns}`; if (!options.reload && this.store.hasResourceBundle(lng, ns)) { this.state[name] = 2; // loaded } else if (this.state[name] < 0) { // nothing to do for err } else if (this.state[name] === 1) { if (pending[name] === undefined) pending[name] = true; } else { this.state[name] = 1; // pending hasAllNamespaces = false; if (pending[name] === undefined) pending[name] = true; if (toLoad[name] === undefined) toLoad[name] = true; if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true; } }); if (!hasAllNamespaces) toLoadLanguages[lng] = true; }); if (Object.keys(toLoad).length || Object.keys(pending).length) { this.queue.push({ pending, pendingCount: Object.keys(pending).length, loaded: {}, errors: [], callback, }); } return { toLoad: Object.keys(toLoad), pending: Object.keys(pending), toLoadLanguages: Object.keys(toLoadLanguages), toLoadNamespaces: Object.keys(toLoadNamespaces), }; } loaded(name, err, data) { const s = name.split('|'); const lng = s[0]; const ns = s[1]; if (err) this.emit('failedLoading', lng, ns, err); if (data) { this.store.addResourceBundle(lng, ns, data); } // set loaded this.state[name] = err ? -1 : 2; // consolidated loading done in this run - only emit once for a loaded namespace const loaded = {}; // callback if ready this.queue.forEach((q) => { utils.pushPath(q.loaded, [lng], ns); removePending(q, name); if (err) q.errors.push(err); if (q.pendingCount === 0 && !q.done) { // only do once per loaded -> this.emit('loaded', q.loaded); Object.keys(q.loaded).forEach((l) => { if (!loaded[l]) loaded[l] = {}; const loadedKeys = q.loaded[l]; if (loadedKeys.length) { loadedKeys.forEach((n) => { if (loaded[l][n] === undefined) loaded[l][n] = true; }); } }); /* eslint no-param-reassign: 0 */ q.done = true; if (q.errors.length) { q.callback(q.errors); } else { q.callback(); } } }); // emit consolidated loaded event this.emit('loaded', loaded); // remove done load requests this.queue = this.queue.filter((q) => !q.done); } read(lng, ns, fcName, tried = 0, wait = this.retryTimeout, callback) { if (!lng.length) return callback(null, {}); // noting to load // Limit parallelism of calls to backend // This is needed to prevent trying to open thousands of // sockets or file descriptors, which can cause failures // and actually make the entire process take longer. if (this.readingCalls >= this.maxParallelReads) { this.waitingReads.push({ lng, ns, fcName, tried, wait, callback }); return; } this.readingCalls++; const resolver = (err, data) => { this.readingCalls--; if (this.waitingReads.length > 0) { const next = this.waitingReads.shift(); this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback); } if (err && data /* = retryFlag */ && tried < this.maxRetries) { setTimeout(() => { this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback); }, wait); return; } callback(err, data); }; const fc = this.backend[fcName].bind(this.backend); if (fc.length === 2) { // no callback try { const r = fc(lng, ns); if (r && typeof r.then === 'function') { // promise r.then((data) => resolver(null, data)).catch(resolver); } else { // sync resolver(null, r); } } catch (err) { resolver(err); } return; } // normal with callback return fc(lng, ns, resolver); } /* eslint consistent-return: 0 */ prepareLoading(languages, namespaces, options = {}, callback) { if (!this.backend) { this.logger.warn('No backend was added via i18next.use. Will not load resources.'); return callback && callback(); } if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages); if (typeof namespaces === 'string') namespaces = [namespaces]; const toLoad = this.queueLoad(languages, namespaces, options, callback); if (!toLoad.toLoad.length) { if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now return null; // pendings will trigger callback } toLoad.toLoad.forEach((name) => { this.loadOne(name); }); } load(languages, namespaces, callback) { this.prepareLoading(languages, namespaces, {}, callback); } reload(languages, namespaces, callback) { this.prepareLoading(languages, namespaces, { reload: true }, callback); } loadOne(name, prefix = '') { const s = name.split('|'); const lng = s[0]; const ns = s[1]; this.read(lng, ns, 'read', undefined, undefined, (err, data) => { if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err); if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data); this.loaded(name, err, data); }); } saveMissing(languages, namespace, key, fallbackValue, isUpdate, options = {}, clb = () => {}) { if ( this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace) ) { this.logger.warn( `did not save key "${key}" as the namespace "${namespace}" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!', ); return; } // ignore non valid keys if (key === undefined || key === null || key === '') return; if (this.backend && this.backend.create) { const opts = { ...options, isUpdate, }; const fc = this.backend.create.bind(this.backend); if (fc.length < 6) { // no callback try { let r; if (fc.length === 5) { // future callback-less api for i18next-locize-backend r = fc(languages, namespace, key, fallbackValue, opts); } else { r = fc(languages, namespace, key, fallbackValue); } if (r && typeof r.then === 'function') { // promise r.then((data) => clb(null, data)).catch(clb); } else { // sync clb(null, r); } } catch (err) { clb(err); } } else { // normal with callback fc(languages, namespace, key, fallbackValue, clb /* unused callback */, opts); } } // write to store to avoid resending if (!languages || !languages[0]) return; this.store.addResource(languages[0], namespace, key, fallbackValue); } } export default Connector; i18next-23.7.6/src/EventEmitter.js000066400000000000000000000016261452441263500166640ustar00rootroot00000000000000class EventEmitter { constructor() { this.observers = {}; } on(events, listener) { events.split(' ').forEach((event) => { this.observers[event] = this.observers[event] || []; this.observers[event].push(listener); }); return this; } off(event, listener) { if (!this.observers[event]) return; if (!listener) { delete this.observers[event]; return; } this.observers[event] = this.observers[event].filter((l) => l !== listener); } emit(event, ...args) { if (this.observers[event]) { const cloned = [].concat(this.observers[event]); cloned.forEach((observer) => { observer(...args); }); } if (this.observers['*']) { const cloned = [].concat(this.observers['*']); cloned.forEach((observer) => { observer.apply(observer, [event, ...args]); }); } } } export default EventEmitter; i18next-23.7.6/src/Formatter.js000066400000000000000000000103741452441263500162140ustar00rootroot00000000000000import baseLogger from './logger.js'; import { getCleanedCode } from './utils.js'; function parseFormatStr(formatStr) { let formatName = formatStr.toLowerCase().trim(); const formatOptions = {}; if (formatStr.indexOf('(') > -1) { const p = formatStr.split('('); formatName = p[0].toLowerCase().trim(); const optStr = p[1].substring(0, p[1].length - 1); // extra for currency if (formatName === 'currency' && optStr.indexOf(':') < 0) { if (!formatOptions.currency) formatOptions.currency = optStr.trim(); } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) { if (!formatOptions.range) formatOptions.range = optStr.trim(); } else { const opts = optStr.split(';'); opts.forEach((opt) => { if (!opt) return; const [key, ...rest] = opt.split(':'); const val = rest .join(':') .trim() .replace(/^'+|'+$/g, ''); // trim and replace '' if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val; if (val === 'false') formatOptions[key.trim()] = false; if (val === 'true') formatOptions[key.trim()] = true; // eslint-disable-next-line no-restricted-globals if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10); }); } } return { formatName, formatOptions, }; } function createCachedFormatter(fn) { const cache = {}; return function invokeFormatter(val, lng, options) { const key = lng + JSON.stringify(options); let formatter = cache[key]; if (!formatter) { formatter = fn(getCleanedCode(lng), options); cache[key] = formatter; } return formatter(val); }; } class Formatter { constructor(options = {}) { this.logger = baseLogger.create('formatter'); this.options = options; this.formats = { number: createCachedFormatter((lng, opt) => { const formatter = new Intl.NumberFormat(lng, { ...opt }); return (val) => formatter.format(val); }), currency: createCachedFormatter((lng, opt) => { const formatter = new Intl.NumberFormat(lng, { ...opt, style: 'currency' }); return (val) => formatter.format(val); }), datetime: createCachedFormatter((lng, opt) => { const formatter = new Intl.DateTimeFormat(lng, { ...opt }); return (val) => formatter.format(val); }), relativetime: createCachedFormatter((lng, opt) => { const formatter = new Intl.RelativeTimeFormat(lng, { ...opt }); return (val) => formatter.format(val, opt.range || 'day'); }), list: createCachedFormatter((lng, opt) => { const formatter = new Intl.ListFormat(lng, { ...opt }); return (val) => formatter.format(val); }), }; this.init(options); } /* eslint no-param-reassign: 0 */ init(services, options = { interpolation: {} }) { const iOpts = options.interpolation; this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ','; } add(name, fc) { this.formats[name.toLowerCase().trim()] = fc; } addCached(name, fc) { this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc); } format(value, format, lng, options = {}) { const formats = format.split(this.formatSeparator); const result = formats.reduce((mem, f) => { const { formatName, formatOptions } = parseFormatStr(f); if (this.formats[formatName]) { let formatted = mem; try { // options passed explicit for that formatted value const valOptions = (options && options.formatParams && options.formatParams[options.interpolationkey]) || {}; // language const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng; formatted = this.formats[formatName](mem, l, { ...formatOptions, ...options, ...valOptions, }); } catch (error) { this.logger.warn(error); } return formatted; // eslint-disable-next-line no-else-return } else { this.logger.warn(`there was no format function for ${formatName}`); } return mem; }, value); return result; } } export default Formatter; i18next-23.7.6/src/Interpolator.js000066400000000000000000000231351452441263500167320ustar00rootroot00000000000000import * as utils from './utils.js'; import baseLogger from './logger.js'; function deepFindWithDefaults( data, defaultData, key, keySeparator = '.', ignoreJSONStructure = true, ) { let path = utils.getPathWithDefaults(data, defaultData, key); if (!path && ignoreJSONStructure && typeof key === 'string') { path = utils.deepFind(data, key, keySeparator); if (path === undefined) path = utils.deepFind(defaultData, key, keySeparator); } return path; } class Interpolator { constructor(options = {}) { this.logger = baseLogger.create('interpolator'); this.options = options; this.format = (options.interpolation && options.interpolation.format) || ((value) => value); this.init(options); } /* eslint no-param-reassign: 0 */ init(options = {}) { if (!options.interpolation) options.interpolation = { escapeValue: true }; const iOpts = options.interpolation; this.escape = iOpts.escape !== undefined ? iOpts.escape : utils.escape; this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true; this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false; this.prefix = iOpts.prefix ? utils.regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{'; this.suffix = iOpts.suffix ? utils.regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}'; this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ','; this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-'; this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || ''; this.nestingPrefix = iOpts.nestingPrefix ? utils.regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || utils.regexEscape('$t('); this.nestingSuffix = iOpts.nestingSuffix ? utils.regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || utils.regexEscape(')'); this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ','; this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000; this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false; // the regexp this.resetRegExp(); } reset() { if (this.options) this.init(this.options); } resetRegExp() { // the regexp const regexpStr = `${this.prefix}(.+?)${this.suffix}`; this.regexp = new RegExp(regexpStr, 'g'); const regexpUnescapeStr = `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`; this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g'); const nestingRegexpStr = `${this.nestingPrefix}(.+?)${this.nestingSuffix}`; this.nestingRegexp = new RegExp(nestingRegexpStr, 'g'); } interpolate(str, data, lng, options) { let match; let value; let replaces; const defaultData = (this.options && this.options.interpolation && this.options.interpolation.defaultVariables) || {}; function regexSafe(val) { return val.replace(/\$/g, '$$$$'); } const handleFormat = (key) => { if (key.indexOf(this.formatSeparator) < 0) { const path = deepFindWithDefaults( data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure, ); return this.alwaysFormat ? this.format(path, undefined, lng, { ...options, ...data, interpolationkey: key }) : path; } const p = key.split(this.formatSeparator); const k = p.shift().trim(); const f = p.join(this.formatSeparator).trim(); return this.format( deepFindWithDefaults( data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure, ), f, lng, { ...options, ...data, interpolationkey: k, }, ); }; this.resetRegExp(); const missingInterpolationHandler = (options && options.missingInterpolationHandler) || this.options.missingInterpolationHandler; const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables; const todos = [ { // unescape if has unescapePrefix/Suffix regex: this.regexpUnescape, safeValue: (val) => regexSafe(val), }, { // regular escape on demand regex: this.regexp, safeValue: (val) => (this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)), }, ]; todos.forEach((todo) => { replaces = 0; /* eslint no-cond-assign: 0 */ while ((match = todo.regex.exec(str))) { const matchedVar = match[1].trim(); value = handleFormat(matchedVar); if (value === undefined) { if (typeof missingInterpolationHandler === 'function') { const temp = missingInterpolationHandler(str, match, options); value = typeof temp === 'string' ? temp : ''; } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) { value = ''; // undefined becomes empty string } else if (skipOnVariables) { value = match[0]; continue; // this makes sure it continues to detect others } else { this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`); value = ''; } } else if (typeof value !== 'string' && !this.useRawValueToEscape) { value = utils.makeString(value); } const safeValue = todo.safeValue(value); str = str.replace(match[0], safeValue); if (skipOnVariables) { todo.regex.lastIndex += value.length; todo.regex.lastIndex -= match[0].length; } else { todo.regex.lastIndex = 0; } replaces++; if (replaces >= this.maxReplaces) { break; } } }); return str; } nest(str, fc, options = {}) { let match; let value; let clonedOptions; // if value is something like "myKey": "lorem $(anotherKey, { "count": {{aValueInOptions}} })" function handleHasOptions(key, inheritedOptions) { const sep = this.nestingOptionsSeparator; if (key.indexOf(sep) < 0) return key; const c = key.split(new RegExp(`${sep}[ ]*{`)); let optionsString = `{${c[1]}`; key = c[0]; optionsString = this.interpolate(optionsString, clonedOptions); const matchedSingleQuotes = optionsString.match(/'/g); const matchedDoubleQuotes = optionsString.match(/"/g); if ( (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes) || matchedDoubleQuotes.length % 2 !== 0 ) { optionsString = optionsString.replace(/'/g, '"'); } try { clonedOptions = JSON.parse(optionsString); if (inheritedOptions) clonedOptions = { ...inheritedOptions, ...clonedOptions }; } catch (e) { this.logger.warn(`failed parsing options string in nesting for key ${key}`, e); return `${key}${sep}${optionsString}`; } // assert we do not get a endless loop on interpolating defaultValue again and again delete clonedOptions.defaultValue; return key; } // regular escape on demand while ((match = this.nestingRegexp.exec(str))) { let formatters = []; clonedOptions = { ...options }; clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions; clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup delete clonedOptions.defaultValue; // assert we do not get a endless loop on interpolating defaultValue again and again /** * If there is more than one parameter (contains the format separator). E.g.: * - t(a, b) * - t(a, b, c) * * And those parameters are not dynamic values (parameters do not include curly braces). E.g.: * - Not t(a, { "key": "{{variable}}" }) * - Not t(a, b, {"keyA": "valueA", "keyB": "valueB"}) */ let doReduce = false; if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) { const r = match[1].split(this.formatSeparator).map((elem) => elem.trim()); match[1] = r.shift(); formatters = r; doReduce = true; } value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions); // is only the nesting key (key1 = '$(key2)') return the value without stringify if (value && match[0] === str && typeof value !== 'string') return value; // no string to include or empty if (typeof value !== 'string') value = utils.makeString(value); if (!value) { this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`); value = ''; } if (doReduce) { value = formatters.reduce( // eslint-disable-next-line no-loop-func (v, f) => this.format(v, f, options.lng, { ...options, interpolationkey: match[1].trim() }), value.trim(), ); } // Nested keys should not be escaped by default #854 // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value); str = str.replace(match[0], value); this.regexp.lastIndex = 0; } return str; } } export default Interpolator; i18next-23.7.6/src/LanguageUtils.js000066400000000000000000000125061452441263500170140ustar00rootroot00000000000000import baseLogger from './logger.js'; import { getCleanedCode } from './utils.js'; function capitalize(string) { return string.charAt(0).toUpperCase() + string.slice(1); } class LanguageUtil { constructor(options) { this.options = options; this.supportedLngs = this.options.supportedLngs || false; this.logger = baseLogger.create('languageUtils'); } getScriptPartFromCode(code) { code = getCleanedCode(code); if (!code || code.indexOf('-') < 0) return null; const p = code.split('-'); if (p.length === 2) return null; p.pop(); if (p[p.length - 1].toLowerCase() === 'x') return null; return this.formatLanguageCode(p.join('-')); } getLanguagePartFromCode(code) { code = getCleanedCode(code); if (!code || code.indexOf('-') < 0) return code; const p = code.split('-'); return this.formatLanguageCode(p[0]); } formatLanguageCode(code) { // http://www.iana.org/assignments/language-tags/language-tags.xhtml if (typeof code === 'string' && code.indexOf('-') > -1) { const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab']; let p = code.split('-'); if (this.options.lowerCaseLng) { p = p.map((part) => part.toLowerCase()); } else if (p.length === 2) { p[0] = p[0].toLowerCase(); p[1] = p[1].toUpperCase(); if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase()); } else if (p.length === 3) { p[0] = p[0].toLowerCase(); // if length 2 guess it's a country if (p[1].length === 2) p[1] = p[1].toUpperCase(); if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase(); if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase()); if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase()); } return p.join('-'); } return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code; } isSupportedCode(code) { if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) { code = this.getLanguagePartFromCode(code); } return ( !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1 ); } getBestMatchFromCodes(codes) { if (!codes) return null; let found; // pick first supported code or if no restriction pick the first one (highest prio) codes.forEach((code) => { if (found) return; const cleanedLng = this.formatLanguageCode(code); if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng; }); // if we got no match in supportedLngs yet - check for similar locales // first de-CH --> de // second de-CH --> de-DE if (!found && this.options.supportedLngs) { codes.forEach((code) => { if (found) return; const lngOnly = this.getLanguagePartFromCode(code); // eslint-disable-next-line no-return-assign if (this.isSupportedCode(lngOnly)) return (found = lngOnly); // eslint-disable-next-line array-callback-return found = this.options.supportedLngs.find((supportedLng) => { if (supportedLng === lngOnly) return supportedLng; if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return; if (supportedLng.indexOf(lngOnly) === 0) return supportedLng; }); }); } // if nothing found, use fallbackLng if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0]; return found; } getFallbackCodes(fallbacks, code) { if (!fallbacks) return []; if (typeof fallbacks === 'function') fallbacks = fallbacks(code); if (typeof fallbacks === 'string') fallbacks = [fallbacks]; if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks; if (!code) return fallbacks.default || []; // assume we have an object defining fallbacks let found = fallbacks[code]; if (!found) found = fallbacks[this.getScriptPartFromCode(code)]; if (!found) found = fallbacks[this.formatLanguageCode(code)]; if (!found) found = fallbacks[this.getLanguagePartFromCode(code)]; if (!found) found = fallbacks.default; return found || []; } toResolveHierarchy(code, fallbackCode) { const fallbackCodes = this.getFallbackCodes( fallbackCode || this.options.fallbackLng || [], code, ); const codes = []; const addCode = (c) => { if (!c) return; if (this.isSupportedCode(c)) { codes.push(c); } else { this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`); } }; if (typeof code === 'string' && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) { if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code)); if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code)); if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code)); } else if (typeof code === 'string') { addCode(this.formatLanguageCode(code)); } fallbackCodes.forEach((fc) => { if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc)); }); return codes; } } export default LanguageUtil; i18next-23.7.6/src/PluralResolver.js000066400000000000000000000170131452441263500172270ustar00rootroot00000000000000import baseLogger from './logger.js'; import { getCleanedCode } from './utils.js' // definition http://translate.sourceforge.net/wiki/l10n/pluralforms /* eslint-disable */ let sets = [ { lngs: ['ach','ak','am','arn','br','fil','gun','ln','mfe','mg','mi','oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti','tr','uz','wa'], nr: [1,2], fc: 1 }, { lngs: ['af','an','ast','az','bg','bn','ca','da','de','dev','el','en', 'eo','es','et','eu','fi','fo','fur','fy','gl','gu','ha','hi', 'hu','hy','ia','it','kk','kn','ku','lb','mai','ml','mn','mr','nah','nap','nb', 'ne','nl','nn','no','nso','pa','pap','pms','ps','pt-PT','rm','sco', 'se','si','so','son','sq','sv','sw','ta','te','tk','ur','yo'], nr: [1,2], fc: 2 }, { lngs: ['ay','bo','cgg','fa','ht','id','ja','jbo','ka','km','ko','ky','lo', 'ms','sah','su','th','tt','ug','vi','wo','zh'], nr: [1], fc: 3 }, { lngs: ['be','bs', 'cnr', 'dz','hr','ru','sr','uk'], nr: [1,2,5], fc: 4 }, { lngs: ['ar'], nr: [0,1,2,3,11,100], fc: 5 }, { lngs: ['cs','sk'], nr: [1,2,5], fc: 6 }, { lngs: ['csb','pl'], nr: [1,2,5], fc: 7 }, { lngs: ['cy'], nr: [1,2,3,8], fc: 8 }, { lngs: ['fr'], nr: [1,2], fc: 9 }, { lngs: ['ga'], nr: [1,2,3,7,11], fc: 10 }, { lngs: ['gd'], nr: [1,2,3,20], fc: 11 }, { lngs: ['is'], nr: [1,2], fc: 12 }, { lngs: ['jv'], nr: [0,1], fc: 13 }, { lngs: ['kw'], nr: [1,2,3,4], fc: 14 }, { lngs: ['lt'], nr: [1,2,10], fc: 15 }, { lngs: ['lv'], nr: [1,2,0], fc: 16 }, { lngs: ['mk'], nr: [1,2], fc: 17 }, { lngs: ['mnk'], nr: [0,1,2], fc: 18 }, { lngs: ['mt'], nr: [1,2,11,20], fc: 19 }, { lngs: ['or'], nr: [2,1], fc: 2 }, { lngs: ['ro'], nr: [1,2,20], fc: 20 }, { lngs: ['sl'], nr: [5,1,2,3], fc: 21 }, { lngs: ['he','iw'], nr: [1,2,20,21], fc: 22 } ] let _rulesPluralsTypes = { 1: function(n) {return Number(n > 1);}, 2: function(n) {return Number(n != 1);}, 3: function(n) {return 0;}, 4: function(n) {return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);}, 5: function(n) {return Number(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5);}, 6: function(n) {return Number((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);}, 7: function(n) {return Number(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);}, 8: function(n) {return Number((n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3);}, 9: function(n) {return Number(n >= 2);}, 10: function(n) {return Number(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4) ;}, 11: function(n) {return Number((n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3);}, 12: function(n) {return Number(n%10!=1 || n%100==11);}, 13: function(n) {return Number(n !== 0);}, 14: function(n) {return Number((n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3);}, 15: function(n) {return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);}, 16: function(n) {return Number(n%10==1 && n%100!=11 ? 0 : n !== 0 ? 1 : 2);}, 17: function(n) {return Number(n==1 || n%10==1 && n%100!=11 ? 0 : 1);}, 18: function(n) {return Number(n==0 ? 0 : n==1 ? 1 : 2);}, 19: function(n) {return Number(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);}, 20: function(n) {return Number(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);}, 21: function(n) {return Number(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0); }, 22: function(n) {return Number(n==1 ? 0 : n==2 ? 1 : (n<0 || n>10) && n%10==0 ? 2 : 3); } }; /* eslint-enable */ const nonIntlVersions = ['v1', 'v2', 'v3']; const intlVersions = ['v4']; const suffixesOrder = { zero: 0, one: 1, two: 2, few: 3, many: 4, other: 5, }; function createRules() { const rules = {}; sets.forEach((set) => { set.lngs.forEach((l) => { rules[l] = { numbers: set.nr, plurals: _rulesPluralsTypes[set.fc] }; }); }); return rules; } class PluralResolver { constructor(languageUtils, options = {}) { this.languageUtils = languageUtils; this.options = options; this.logger = baseLogger.create('pluralResolver'); if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) { this.options.compatibilityJSON = 'v3'; this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.'); } this.rules = createRules(); } addRule(lng, obj) { this.rules[lng] = obj; } getRule(code, options = {}) { if (this.shouldUseIntlApi()) { try { return new Intl.PluralRules(getCleanedCode(code), { type: options.ordinal ? 'ordinal' : 'cardinal' }); } catch { return; } } return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)]; } needsPlural(code, options = {}) { const rule = this.getRule(code, options); if (this.shouldUseIntlApi()) { return rule && rule.resolvedOptions().pluralCategories.length > 1; } return rule && rule.numbers.length > 1; } getPluralFormsOfKey(code, key, options = {}) { return this.getSuffixes(code, options).map((suffix) => `${key}${suffix}`); } getSuffixes(code, options = {}) { const rule = this.getRule(code, options); if (!rule) { return []; } if (this.shouldUseIntlApi()) { return rule.resolvedOptions().pluralCategories .sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]) .map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`); } return rule.numbers.map((number) => this.getSuffix(code, number, options)); } getSuffix(code, count, options = {}) { const rule = this.getRule(code, options); if (rule) { if (this.shouldUseIntlApi()) { return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`; } return this.getSuffixRetroCompatible(rule, count); } this.logger.warn(`no plural rule found for: ${code}`); return ''; } getSuffixRetroCompatible(rule, count) { const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count)); let suffix = rule.numbers[idx]; // special treatment for lngs only having singular and plural if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) { if (suffix === 2) { suffix = 'plural'; } else if (suffix === 1) { suffix = ''; } } const returnSuffix = () => ( this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString() ); // COMPATIBILITY JSON // v1 if (this.options.compatibilityJSON === 'v1') { if (suffix === 1) return ''; if (typeof suffix === 'number') return `_plural_${suffix.toString()}`; return returnSuffix(); // eslint-disable-next-line no-else-return } else if (/* v2 */ this.options.compatibilityJSON === 'v2') { return returnSuffix(); } else if (/* v3 - gettext index */ this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) { return returnSuffix(); } return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString(); } shouldUseIntlApi() { return !nonIntlVersions.includes(this.options.compatibilityJSON); } } export default PluralResolver; i18next-23.7.6/src/README.md000066400000000000000000000005431452441263500151670ustar00rootroot00000000000000# i18next: learn once - translate everywhere ## visit ➡️ [i18next.com](https://www.i18next.com) ```js import i18next from 'https://deno.land/x/i18next/index.js'; // or import i18next from 'https://raw.githubusercontent.com/i18next/i18next/master/src/index.js' // or import i18next from 'https://cdn.jsdelivr.net/gh/i18next/i18next/src/index.js' ``` i18next-23.7.6/src/ResourceStore.js000066400000000000000000000076331452441263500170610ustar00rootroot00000000000000import EventEmitter from './EventEmitter.js'; import * as utils from './utils.js'; class ResourceStore extends EventEmitter { constructor(data, options = { ns: ['translation'], defaultNS: 'translation' }) { super(); this.data = data || {}; this.options = options; if (this.options.keySeparator === undefined) { this.options.keySeparator = '.'; } if (this.options.ignoreJSONStructure === undefined) { this.options.ignoreJSONStructure = true; } } addNamespaces(ns) { if (this.options.ns.indexOf(ns) < 0) { this.options.ns.push(ns); } } removeNamespaces(ns) { const index = this.options.ns.indexOf(ns); if (index > -1) { this.options.ns.splice(index, 1); } } getResource(lng, ns, key, options = {}) { const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure; let path = [lng, ns]; if (key && typeof key !== 'string') path = path.concat(key); if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key); if (lng.indexOf('.') > -1) { path = lng.split('.'); } const result = utils.getPath(this.data, path); if (result || !ignoreJSONStructure || typeof key !== 'string') return result; return utils.deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator); } addResource(lng, ns, key, value, options = { silent: false }) { const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; let path = [lng, ns]; if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key); if (lng.indexOf('.') > -1) { path = lng.split('.'); value = ns; ns = path[1]; } this.addNamespaces(ns); utils.setPath(this.data, path, value); if (!options.silent) this.emit('added', lng, ns, key, value); } addResources(lng, ns, resources, options = { silent: false }) { /* eslint no-restricted-syntax: 0 */ for (const m in resources) { if ( typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]' ) this.addResource(lng, ns, m, resources[m], { silent: true }); } if (!options.silent) this.emit('added', lng, ns, resources); } addResourceBundle(lng, ns, resources, deep, overwrite, options = { silent: false }) { let path = [lng, ns]; if (lng.indexOf('.') > -1) { path = lng.split('.'); deep = resources; resources = ns; ns = path[1]; } this.addNamespaces(ns); let pack = utils.getPath(this.data, path) || {}; if (deep) { utils.deepExtend(pack, resources, overwrite); } else { pack = { ...pack, ...resources }; } utils.setPath(this.data, path, pack); if (!options.silent) this.emit('added', lng, ns, resources); } removeResourceBundle(lng, ns) { if (this.hasResourceBundle(lng, ns)) { delete this.data[lng][ns]; } this.removeNamespaces(ns); this.emit('removed', lng, ns); } hasResourceBundle(lng, ns) { return this.getResource(lng, ns) !== undefined; } getResourceBundle(lng, ns) { if (!ns) ns = this.options.defaultNS; // COMPATIBILITY: remove extend in v2.1.0 if (this.options.compatibilityAPI === 'v1') return { ...{}, ...this.getResource(lng, ns) }; return this.getResource(lng, ns); } getDataByLanguage(lng) { return this.data[lng]; } hasLanguageSomeTranslations(lng) { const data = this.getDataByLanguage(lng); const n = (data && Object.keys(data)) || []; return !!n.find((v) => data[v] && Object.keys(data[v]).length > 0); } toJSON() { return this.data; } } export default ResourceStore; i18next-23.7.6/src/Translator.js000066400000000000000000000513051452441263500164010ustar00rootroot00000000000000import baseLogger from './logger.js'; import EventEmitter from './EventEmitter.js'; import postProcessor from './postProcessor.js'; import * as utils from './utils.js'; const checkedLoadedFor = {}; class Translator extends EventEmitter { constructor(services, options = {}) { super(); utils.copy( [ 'resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils', ], services, this, ); this.options = options; if (this.options.keySeparator === undefined) { this.options.keySeparator = '.'; } this.logger = baseLogger.create('translator'); } changeLanguage(lng) { if (lng) this.language = lng; } exists(key, options = { interpolation: {} }) { if (key === undefined || key === null) { return false; } const resolved = this.resolve(key, options); return resolved && resolved.res !== undefined; } extractFromKey(key, options) { let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator; if (nsSeparator === undefined) nsSeparator = ':'; const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; let namespaces = options.ns || this.options.defaultNS || []; const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1; const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !utils.looksLikeObjectPath(key, nsSeparator, keySeparator); if (wouldCheckForNsInKey && !seemsNaturalLanguage) { const m = key.match(this.interpolator.nestingRegexp); if (m && m.length > 0) { return { key, namespaces, }; } const parts = key.split(nsSeparator); if ( nsSeparator !== keySeparator || (nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) ) namespaces = parts.shift(); key = parts.join(keySeparator); } if (typeof namespaces === 'string') namespaces = [namespaces]; return { key, namespaces, }; } translate(keys, options, lastKey) { if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) { /* eslint prefer-rest-params: 0 */ options = this.options.overloadTranslationOptionHandler(arguments); } if (typeof options === 'object') options = { ...options }; if (!options) options = {}; // non valid keys handling if (keys === undefined || keys === null /* || keys === '' */) return ''; if (!Array.isArray(keys)) keys = [String(keys)]; const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails; // separators const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; // get namespace(s) const { key, namespaces } = this.extractFromKey(keys[keys.length - 1], options); const namespace = namespaces[namespaces.length - 1]; // return key on CIMode const lng = options.lng || this.language; const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode; if (lng && lng.toLowerCase() === 'cimode') { if (appendNamespaceToCIMode) { const nsSeparator = options.nsSeparator || this.options.nsSeparator; if (returnDetails) { return { res: `${namespace}${nsSeparator}${key}`, usedKey: key, exactUsedKey: key, usedLng: lng, usedNS: namespace, usedParams: this.getUsedParamsDetails(options), }; } return `${namespace}${nsSeparator}${key}`; } if (returnDetails) { return { res: key, usedKey: key, exactUsedKey: key, usedLng: lng, usedNS: namespace, usedParams: this.getUsedParamsDetails(options), }; } return key; } // resolve from store const resolved = this.resolve(keys, options); let res = resolved && resolved.res; const resUsedKey = (resolved && resolved.usedKey) || key; const resExactUsedKey = (resolved && resolved.exactUsedKey) || key; const resType = Object.prototype.toString.apply(res); const noObject = ['[object Number]', '[object Function]', '[object RegExp]']; const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays; // object const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject; const handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number'; if ( handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]') ) { if (!options.returnObjects && !this.options.returnObjects) { if (!this.options.returnedObjectHandler) { this.logger.warn('accessing an object - but returnObjects options is not enabled!'); } const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, { ...options, ns: namespaces }) : `key '${key} (${this.language})' returned an object instead of string.`; if (returnDetails) { resolved.res = r; resolved.usedParams = this.getUsedParamsDetails(options); return resolved; } return r; } // if we got a separator we loop over children - else we just return object as is // as having it set to false means no hierarchy so no lookup for nested values if (keySeparator) { const resTypeIsArray = resType === '[object Array]'; const copy = resTypeIsArray ? [] : {}; // apply child translation on a copy /* eslint no-restricted-syntax: 0 */ const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey; for (const m in res) { if (Object.prototype.hasOwnProperty.call(res, m)) { const deepKey = `${newKeyToUse}${keySeparator}${m}`; copy[m] = this.translate(deepKey, { ...options, ...{ joinArrays: false, ns: namespaces }, }); if (copy[m] === deepKey) copy[m] = res[m]; // if nothing found use original value as fallback } } res = copy; } } else if ( handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]' ) { // array special treatment res = res.join(joinArrays); if (res) res = this.extendTranslation(res, keys, options, lastKey); } else { // string, empty or null let usedDefault = false; let usedKey = false; const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string'; const hasDefaultValue = Translator.hasDefaultValue(options); const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : ''; const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, { ordinal: false }) : ''; const defaultValue = options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue; // fallback value if (!this.isValidLookup(res) && hasDefaultValue) { usedDefault = true; res = defaultValue; } if (!this.isValidLookup(res)) { usedKey = true; res = key; } const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey; const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res; // save missing const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing; if (usedKey || usedDefault || updateMissing) { this.logger.log( updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res, ); if (keySeparator) { const fk = this.resolve(key, { ...options, keySeparator: false }); if (fk && fk.res) this.logger.warn( 'Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.', ); } let lngs = []; const fallbackLngs = this.languageUtils.getFallbackCodes( this.options.fallbackLng, options.lng || this.language, ); if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) { for (let i = 0; i < fallbackLngs.length; i++) { lngs.push(fallbackLngs[i]); } } else if (this.options.saveMissingTo === 'all') { lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language); } else { lngs.push(options.lng || this.language); } const send = (l, k, specificDefaultValue) => { const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing; if (this.options.missingKeyHandler) { this.options.missingKeyHandler( l, namespace, k, defaultForMissing, updateMissing, options, ); } else if (this.backendConnector && this.backendConnector.saveMissing) { this.backendConnector.saveMissing( l, namespace, k, defaultForMissing, updateMissing, options, ); } this.emit('missingKey', l, namespace, k, res); }; if (this.options.saveMissing) { if (this.options.saveMissingPlurals && needsPluralHandling) { lngs.forEach((language) => { this.pluralResolver.getSuffixes(language, options).forEach((suffix) => { send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue); }); }); } else { send(lngs, key, defaultValue); } } } // extend res = this.extendTranslation(res, keys, options, resolved, lastKey); // append namespace if still key if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`; // parseMissingKeyHandler if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) { if (this.options.compatibilityAPI !== 'v1') { res = this.options.parseMissingKeyHandler( this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined, ); } else { res = this.options.parseMissingKeyHandler(res); } } } // return if (returnDetails) { resolved.res = res; resolved.usedParams = this.getUsedParamsDetails(options); return resolved; } return res; } extendTranslation(res, key, options, resolved, lastKey) { if (this.i18nFormat && this.i18nFormat.parse) { res = this.i18nFormat.parse( res, { ...this.options.interpolation.defaultVariables, ...options }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, { resolved }, ); } else if (!options.skipInterpolation) { // i18next.parsing if (options.interpolation) this.interpolator.init({ ...options, ...{ interpolation: { ...this.options.interpolation, ...options.interpolation } }, }); const skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables); let nestBef; if (skipOnVariables) { const nb = res.match(this.interpolator.nestingRegexp); // has nesting aftbeforeer interpolation nestBef = nb && nb.length; } // interpolate let data = options.replace && typeof options.replace !== 'string' ? options.replace : options; if (this.options.interpolation.defaultVariables) data = { ...this.options.interpolation.defaultVariables, ...data }; res = this.interpolator.interpolate(res, data, options.lng || this.language, options); // nesting if (skipOnVariables) { const na = res.match(this.interpolator.nestingRegexp); // has nesting after interpolation const nestAft = na && na.length; if (nestBef < nestAft) options.nest = false; } if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = resolved.usedLng; if (options.nest !== false) res = this.interpolator.nest( res, (...args) => { if (lastKey && lastKey[0] === args[0] && !options.context) { this.logger.warn( `It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`, ); return null; } return this.translate(...args, key); }, options, ); if (options.interpolation) this.interpolator.reset(); } // post process const postProcess = options.postProcess || this.options.postProcess; const postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess; if ( res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false ) { res = postProcessor.handle( postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? { i18nResolved: { ...resolved, usedParams: this.getUsedParamsDetails(options) }, ...options, } : options, this, ); } return res; } resolve(keys, options = {}) { let found; let usedKey; // plain key let exactUsedKey; // key with context / plural let usedLng; let usedNS; if (typeof keys === 'string') keys = [keys]; // forEach possible key keys.forEach((k) => { if (this.isValidLookup(found)) return; const extracted = this.extractFromKey(k, options); const key = extracted.key; usedKey = key; let namespaces = extracted.namespaces; if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS); const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string'; const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi(); const needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== ''; const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng); namespaces.forEach((ns) => { if (this.isValidLookup(found)) return; usedNS = ns; if ( !checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS) ) { checkedLoadedFor[`${codes[0]}-${ns}`] = true; this.logger.warn( `key "${usedKey}" for languages "${codes.join( ', ', )}" won't get resolved as namespace "${usedNS}" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!', ); } codes.forEach((code) => { if (this.isValidLookup(found)) return; usedLng = code; const finalKeys = [key]; if (this.i18nFormat && this.i18nFormat.addLookupKeys) { this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options); } else { let pluralSuffix; if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options); const zeroSuffix = `${this.options.pluralSeparator}zero`; const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`; // get key for plural if needed if (needsPluralHandling) { finalKeys.push(key + pluralSuffix); if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) { finalKeys.push( key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator), ); } if (needsZeroSuffixLookup) { finalKeys.push(key + zeroSuffix); } } // get key for context if needed if (needsContextHandling) { const contextKey = `${key}${this.options.contextSeparator}${options.context}`; finalKeys.push(contextKey); // get key for context + plural if needed if (needsPluralHandling) { finalKeys.push(contextKey + pluralSuffix); if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) { finalKeys.push( contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator), ); } if (needsZeroSuffixLookup) { finalKeys.push(contextKey + zeroSuffix); } } } } // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only let possibleKey; /* eslint no-cond-assign: 0 */ while ((possibleKey = finalKeys.pop())) { if (!this.isValidLookup(found)) { exactUsedKey = possibleKey; found = this.getResource(code, ns, possibleKey, options); } } }); }); }); return { res: found, usedKey, exactUsedKey, usedLng, usedNS }; } isValidLookup(res) { return ( res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '') ); } getResource(code, ns, key, options = {}) { if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options); return this.resourceStore.getResource(code, ns, key, options); } getUsedParamsDetails(options = {}) { // we need to remember to extend this array whenever new option properties are added const optionsKeys = [ 'defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation', ]; const useOptionsReplaceForData = options.replace && typeof options.replace !== 'string'; let data = useOptionsReplaceForData ? options.replace : options; if (useOptionsReplaceForData && typeof options.count !== 'undefined') { data.count = options.count; } if (this.options.interpolation.defaultVariables) { data = { ...this.options.interpolation.defaultVariables, ...data }; } // avoid reporting options (execpt count) as usedParams if (!useOptionsReplaceForData) { data = { ...data }; for (const key of optionsKeys) { delete data[key]; } } return data; } static hasDefaultValue(options) { const prefix = 'defaultValue'; for (const option in options) { if ( Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option] ) { return true; } } return false; } } export default Translator; i18next-23.7.6/src/defaults.js000066400000000000000000000071471452441263500160640ustar00rootroot00000000000000export function get() { return { debug: false, initImmediate: true, ns: ['translation'], defaultNS: ['translation'], fallbackLng: ['dev'], fallbackNS: false, // string or array of namespaces supportedLngs: false, // array with supported languages nonExplicitSupportedLngs: false, load: 'all', // | currentOnly | languageOnly preload: false, // array with preload languages simplifyPluralSuffix: true, keySeparator: '.', nsSeparator: ':', pluralSeparator: '_', contextSeparator: '_', partialBundledLanguages: false, // allow bundling certain languages that are not remotely fetched saveMissing: false, // enable to send missing values updateMissing: false, // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth) saveMissingTo: 'fallback', // 'current' || 'all' saveMissingPlurals: true, // will save all forms not only singular key missingKeyHandler: false, // function(lng, ns, key, fallbackValue) -> override if prefer on handling missingInterpolationHandler: false, // function(str, match) postProcess: false, // string or array of postProcessor names postProcessPassResolved: false, // pass resolved object into 'options.i18nResolved' for postprocessor returnNull: false, // allows null value as valid translation returnEmptyString: true, // allows empty string value as valid translation returnObjects: false, joinArrays: false, // or string to join array returnedObjectHandler: false, // function(key, value, options) triggered if key returns object but returnObjects is set to false parseMissingKeyHandler: false, // function(key) parsed a key that was not found in t() before returning appendNamespaceToMissingKey: false, appendNamespaceToCIMode: false, overloadTranslationOptionHandler: function handle(args) { let ret = {}; if (typeof args[1] === 'object') ret = args[1]; if (typeof args[1] === 'string') ret.defaultValue = args[1]; if (typeof args[2] === 'string') ret.tDescription = args[2]; if (typeof args[2] === 'object' || typeof args[3] === 'object') { const options = args[3] || args[2]; Object.keys(options).forEach((key) => { ret[key] = options[key]; }); } return ret; }, interpolation: { escapeValue: true, format: (value, format, lng, options) => value, prefix: '{{', suffix: '}}', formatSeparator: ',', // prefixEscaped: '{{', // suffixEscaped: '}}', // unescapeSuffix: '', unescapePrefix: '-', nestingPrefix: '$t(', nestingSuffix: ')', nestingOptionsSeparator: ',', // nestingPrefixEscaped: '$t(', // nestingSuffixEscaped: ')', // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data maxReplaces: 1000, // max replaces to prevent endless loop skipOnVariables: true, }, }; } /* eslint no-param-reassign: 0 */ export function transformOptions(options) { // create namespace object if namespace is passed in as string if (typeof options.ns === 'string') options.ns = [options.ns]; if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng]; if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS]; // extend supportedLngs with cimode if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) { options.supportedLngs = options.supportedLngs.concat(['cimode']); } return options; } i18next-23.7.6/src/i18next.js000066400000000000000000000455371452441263500155620ustar00rootroot00000000000000import baseLogger from './logger.js'; import EventEmitter from './EventEmitter.js'; import ResourceStore from './ResourceStore.js'; import Translator from './Translator.js'; import LanguageUtils from './LanguageUtils.js'; import PluralResolver from './PluralResolver.js'; import Interpolator from './Interpolator.js'; import Formatter from './Formatter.js'; import BackendConnector from './BackendConnector.js'; import { get as getDefaults, transformOptions } from './defaults.js'; import postProcessor from './postProcessor.js'; import { defer } from './utils.js'; function noop() { } // Binds the member functions of the given class instance so that they can be // destructured or used as callbacks. function bindMemberFunctions(inst) { const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst)) mems.forEach((mem) => { if (typeof inst[mem] === 'function') { inst[mem] = inst[mem].bind(inst) } }) } class I18n extends EventEmitter { constructor(options = {}, callback) { super(); this.options = transformOptions(options); this.services = {}; this.logger = baseLogger; this.modules = { external: [] }; bindMemberFunctions(this); if (callback && !this.isInitialized && !options.isClone) { // https://github.com/i18next/i18next/issues/879 if (!this.options.initImmediate) { this.init(options, callback); return this; } setTimeout(() => { this.init(options, callback); }, 0); } } init(options = {}, callback) { if (typeof options === 'function') { callback = options; options = {}; } if (!options.defaultNS && options.defaultNS !== false && options.ns) { if (typeof options.ns === 'string') { options.defaultNS = options.ns; } else if (options.ns.indexOf('translation') < 0) { options.defaultNS = options.ns[0]; } } const defOpts = getDefaults(); this.options = { ...defOpts, ...this.options, ...transformOptions(options) }; if (this.options.compatibilityAPI !== 'v1') { this.options.interpolation = { ...defOpts.interpolation, ...this.options.interpolation }; // do not use reference } if (options.keySeparator !== undefined) { this.options.userDefinedKeySeparator = options.keySeparator; } if (options.nsSeparator !== undefined) { this.options.userDefinedNsSeparator = options.nsSeparator; } function createClassOnDemand(ClassOrObject) { if (!ClassOrObject) return null; if (typeof ClassOrObject === 'function') return new ClassOrObject(); return ClassOrObject; } // init services if (!this.options.isClone) { if (this.modules.logger) { baseLogger.init(createClassOnDemand(this.modules.logger), this.options); } else { baseLogger.init(null, this.options); } let formatter; if (this.modules.formatter) { formatter = this.modules.formatter; } else if (typeof Intl !== 'undefined') { formatter = Formatter; } const lu = new LanguageUtils(this.options); this.store = new ResourceStore(this.options.resources, this.options); const s = this.services; s.logger = baseLogger; s.resourceStore = this.store; s.languageUtils = lu; s.pluralResolver = new PluralResolver(lu, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON, simplifyPluralSuffix: this.options.simplifyPluralSuffix, }); if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) { s.formatter = createClassOnDemand(formatter); s.formatter.init(s, this.options); this.options.interpolation.format = s.formatter.format.bind(s.formatter); } s.interpolator = new Interpolator(this.options); s.utils = { hasLoadedNamespace: this.hasLoadedNamespace.bind(this) } s.backendConnector = new BackendConnector( createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options, ); // pipe events from backendConnector s.backendConnector.on('*', (event, ...args) => { this.emit(event, ...args); }); if (this.modules.languageDetector) { s.languageDetector = createClassOnDemand(this.modules.languageDetector); if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options); } if (this.modules.i18nFormat) { s.i18nFormat = createClassOnDemand(this.modules.i18nFormat); if (s.i18nFormat.init) s.i18nFormat.init(this); } this.translator = new Translator(this.services, this.options); // pipe events from translator this.translator.on('*', (event, ...args) => { this.emit(event, ...args); }); this.modules.external.forEach(m => { if (m.init) m.init(this); }); } this.format = this.options.interpolation.format; if (!callback) callback = noop; if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) { const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng) if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0] } if (!this.services.languageDetector && !this.options.lng) { this.logger.warn('init: no languageDetector is used and no lng is defined'); } // append api const storeApi = [ 'getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage', ]; storeApi.forEach(fcName => { this[fcName] = (...args) => this.store[fcName](...args); }); const storeApiChained = [ 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', ]; storeApiChained.forEach(fcName => { this[fcName] = (...args) => { this.store[fcName](...args); return this; }; }); const deferred = defer(); const load = () => { const finish = (err, t) => { if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!'); this.isInitialized = true; if (!this.options.isClone) this.logger.log('initialized', this.options); this.emit('initialized', this.options); deferred.resolve(t); // not rejecting on err (as err is only a loading translation failed warning) callback(err, t); }; // fix for use cases when calling changeLanguage before finished to initialized (i.e. https://github.com/i18next/i18next/issues/1552) if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this)); this.changeLanguage(this.options.lng, finish); }; if (this.options.resources || !this.options.initImmediate) { load(); } else { setTimeout(load, 0); } return deferred; } /* eslint consistent-return: 0 */ loadResources(language, callback = noop) { let usedCallback = callback; const usedLng = typeof language === 'string' ? language : this.language; if (typeof language === 'function') usedCallback = language; if (!this.options.resources || this.options.partialBundledLanguages) { if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback(); // avoid loading resources for cimode const toLoad = []; const append = lng => { if (!lng) return; if (lng === 'cimode') return; const lngs = this.services.languageUtils.toResolveHierarchy(lng); lngs.forEach(l => { if (l === 'cimode') return; if (toLoad.indexOf(l) < 0) toLoad.push(l); }); }; if (!usedLng) { // at least load fallbacks in this case const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng); fallbacks.forEach(l => append(l)); } else { append(usedLng); } if (this.options.preload) { this.options.preload.forEach(l => append(l)); } this.services.backendConnector.load(toLoad, this.options.ns, (e) => { if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language); usedCallback(e); }); } else { usedCallback(null); } } reloadResources(lngs, ns, callback) { const deferred = defer(); if (!lngs) lngs = this.languages; if (!ns) ns = this.options.ns; if (!callback) callback = noop; this.services.backendConnector.reload(lngs, ns, err => { deferred.resolve(); // not rejecting on err (as err is only a loading translation failed warning) callback(err); }); return deferred; } use(module) { if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()') if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()') if (module.type === 'backend') { this.modules.backend = module; } if (module.type === 'logger' || (module.log && module.warn && module.error)) { this.modules.logger = module; } if (module.type === 'languageDetector') { this.modules.languageDetector = module; } if (module.type === 'i18nFormat') { this.modules.i18nFormat = module; } if (module.type === 'postProcessor') { postProcessor.addPostProcessor(module); } if (module.type === 'formatter') { this.modules.formatter = module; } if (module.type === '3rdParty') { this.modules.external.push(module); } return this; } setResolvedLanguage(l) { if (!l || !this.languages) return; if (['cimode', 'dev'].indexOf(l) > -1) return; for (let li = 0; li < this.languages.length; li++) { const lngInLngs = this.languages[li]; if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue; if (this.store.hasLanguageSomeTranslations(lngInLngs)) { this.resolvedLanguage = lngInLngs; break; } } } changeLanguage(lng, callback) { this.isLanguageChangingTo = lng; const deferred = defer(); this.emit('languageChanging', lng); const setLngProps = (l) => { this.language = l; this.languages = this.services.languageUtils.toResolveHierarchy(l); // find the first language resolved language this.resolvedLanguage = undefined; this.setResolvedLanguage(l); }; const done = (err, l) => { if (l) { setLngProps(l); this.translator.changeLanguage(l); this.isLanguageChangingTo = undefined; this.emit('languageChanged', l); this.logger.log('languageChanged', l); } else { this.isLanguageChangingTo = undefined; } deferred.resolve((...args) => this.t(...args)); if (callback) callback(err, (...args) => this.t(...args)); }; const setLng = lngs => { // if detected lng is falsy, set it to empty array, to make sure at least the fallbackLng will be used if (!lng && !lngs && this.services.languageDetector) lngs = []; // depending on API in detector lng can be a string (old) or an array of languages ordered in priority const l = typeof lngs === 'string' ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs); if (l) { if (!this.language) { setLngProps(l); } if (!this.translator.language) this.translator.changeLanguage(l); if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l); } this.loadResources(l, err => { done(err, l); }); }; if (!lng && this.services.languageDetector && !this.services.languageDetector.async) { setLng(this.services.languageDetector.detect()); } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) { if (this.services.languageDetector.detect.length === 0) { this.services.languageDetector.detect().then(setLng); } else { this.services.languageDetector.detect(setLng); } } else { setLng(lng); } return deferred; } getFixedT(lng, ns, keyPrefix) { const fixedT = (key, opts, ...rest) => { let options; if (typeof opts !== 'object') { options = this.options.overloadTranslationOptionHandler([key, opts].concat(rest)); } else { options = { ...opts }; } options.lng = options.lng || fixedT.lng; options.lngs = options.lngs || fixedT.lngs; options.ns = options.ns || fixedT.ns; options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix; const keySeparator = this.options.keySeparator || '.'; let resultKey if (options.keyPrefix && Array.isArray(key)) { resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`); } else { resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key; } return this.t(resultKey, options); }; if (typeof lng === 'string') { fixedT.lng = lng; } else { fixedT.lngs = lng; } fixedT.ns = ns; fixedT.keyPrefix = keyPrefix; return fixedT; } t(...args) { return this.translator && this.translator.translate(...args); } exists(...args) { return this.translator && this.translator.exists(...args); } setDefaultNamespace(ns) { this.options.defaultNS = ns; } hasLoadedNamespace(ns, options = {}) { if (!this.isInitialized) { this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages); return false; } if (!this.languages || !this.languages.length) { this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages); return false; } const lng = options.lng || this.resolvedLanguage || this.languages[0]; const fallbackLng = this.options ? this.options.fallbackLng : false; const lastLng = this.languages[this.languages.length - 1]; // we're in cimode so this shall pass if (lng.toLowerCase() === 'cimode') return true; const loadNotPending = (l, n) => { const loadState = this.services.backendConnector.state[`${l}|${n}`]; return loadState === -1 || loadState === 2; }; // optional injected check if (options.precheck) { const preResult = options.precheck(this, loadNotPending); if (preResult !== undefined) return preResult; } // loaded -> SUCCESS if (this.hasResourceBundle(lng, ns)) return true; // were not loading at all -> SEMI SUCCESS if (!this.services.backendConnector.backend || (this.options.resources && !this.options.partialBundledLanguages)) return true; // failed loading ns - but at least fallback is not pending -> SEMI SUCCESS if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true; return false; } loadNamespaces(ns, callback) { const deferred = defer(); if (!this.options.ns) { if (callback) callback(); return Promise.resolve(); } if (typeof ns === 'string') ns = [ns]; ns.forEach(n => { if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n); }); this.loadResources(err => { deferred.resolve(); if (callback) callback(err); }); return deferred; } loadLanguages(lngs, callback) { const deferred = defer(); if (typeof lngs === 'string') lngs = [lngs]; const preloaded = this.options.preload || []; const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0); // Exit early if all given languages are already preloaded if (!newLngs.length) { if (callback) callback(); return Promise.resolve(); } this.options.preload = preloaded.concat(newLngs); this.loadResources(err => { deferred.resolve(); if (callback) callback(err); }); return deferred; } dir(lng) { if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language); if (!lng) return 'rtl'; const rtlLngs = [ 'ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb' ]; const languageUtils = (this.services && this.services.languageUtils) || new LanguageUtils(getDefaults()) // for uninitialized usage return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr'; } static createInstance(options = {}, callback) { return new I18n(options, callback) } cloneInstance(options = {}, callback = noop) { const forkResourceStore = options.forkResourceStore; if (forkResourceStore) delete options.forkResourceStore; const mergedOptions = { ...this.options, ...options, ...{ isClone: true } }; const clone = new I18n(mergedOptions); if ((options.debug !== undefined || options.prefix !== undefined)) { clone.logger = clone.logger.clone(options); } const membersToCopy = ['store', 'services', 'language']; membersToCopy.forEach(m => { clone[m] = this[m]; }); clone.services = { ...this.services }; clone.services.utils = { hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone) }; if (forkResourceStore) { clone.store = new ResourceStore(this.store.data, mergedOptions); clone.services.resourceStore = clone.store; } clone.translator = new Translator(clone.services, mergedOptions); clone.translator.on('*', (event, ...args) => { clone.emit(event, ...args); }); clone.init(mergedOptions, callback); clone.translator.options = mergedOptions; // sync options clone.translator.backendConnector.services.utils = { hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone) }; return clone; } toJSON() { return { options: this.options, store: this.store, language: this.language, languages: this.languages, resolvedLanguage: this.resolvedLanguage }; } } const instance = I18n.createInstance(); instance.createInstance = I18n.createInstance; export default instance; i18next-23.7.6/src/index.cjs.js000066400000000000000000000000751452441263500161330ustar00rootroot00000000000000import i18next from './i18next.js'; export default i18next; i18next-23.7.6/src/index.js000066400000000000000000000013171452441263500153550ustar00rootroot00000000000000import i18next from './i18next.js'; export default i18next; export const createInstance = i18next.createInstance; export const dir = i18next.dir; export const init = i18next.init; export const loadResources = i18next.loadResources; export const reloadResources = i18next.reloadResources; export const use = i18next.use; export const changeLanguage = i18next.changeLanguage; export const getFixedT = i18next.getFixedT; export const t = i18next.t; export const exists = i18next.exists; export const setDefaultNamespace = i18next.setDefaultNamespace; export const hasLoadedNamespace = i18next.hasLoadedNamespace; export const loadNamespaces = i18next.loadNamespaces; export const loadLanguages = i18next.loadLanguages; i18next-23.7.6/src/logger.js000066400000000000000000000027371452441263500155340ustar00rootroot00000000000000const consoleLogger = { type: 'logger', log(args) { this.output('log', args); }, warn(args) { this.output('warn', args); }, error(args) { this.output('error', args); }, output(type, args) { /* eslint no-console: 0 */ if (console && console[type]) console[type].apply(console, args); }, }; class Logger { constructor(concreteLogger, options = {}) { this.init(concreteLogger, options); } init(concreteLogger, options = {}) { this.prefix = options.prefix || 'i18next:'; this.logger = concreteLogger || consoleLogger; this.options = options; this.debug = options.debug; } log(...args) { return this.forward(args, 'log', '', true); } warn(...args) { return this.forward(args, 'warn', '', true); } error(...args) { return this.forward(args, 'error', ''); } deprecate(...args) { return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true); } forward(args, lvl, prefix, debugOnly) { if (debugOnly && !this.debug) return null; if (typeof args[0] === 'string') args[0] = `${prefix}${this.prefix} ${args[0]}`; return this.logger[lvl](args); } create(moduleName) { return new Logger(this.logger, { ...{ prefix: `${this.prefix}:${moduleName}:` }, ...this.options, }); } clone(options) { options = options || this.options; options.prefix = options.prefix || this.prefix; return new Logger(this.logger, options); } } export default new Logger(); i18next-23.7.6/src/postProcessor.js000066400000000000000000000005601452441263500171320ustar00rootroot00000000000000export default { processors: {}, addPostProcessor(module) { this.processors[module.name] = module; }, handle(processors, value, key, options, translator) { processors.forEach((processor) => { if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator); }); return value; }, }; i18next-23.7.6/src/utils.js000066400000000000000000000120011452441263500153760ustar00rootroot00000000000000// http://lea.verou.me/2016/12/resolve-promises-externally-with-this-one-weird-trick/ export function defer() { let res; let rej; const promise = new Promise((resolve, reject) => { res = resolve; rej = reject; }); promise.resolve = res; promise.reject = rej; return promise; } export function makeString(object) { if (object == null) return ''; /* eslint prefer-template: 0 */ return '' + object; } export function copy(a, s, t) { a.forEach((m) => { if (s[m]) t[m] = s[m]; }); } function getLastOfPath(object, path, Empty) { function cleanKey(key) { return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key; } function canNotTraverseDeeper() { return !object || typeof object === 'string'; } const stack = typeof path !== 'string' ? [].concat(path) : path.split('.'); while (stack.length > 1) { if (canNotTraverseDeeper()) return {}; const key = cleanKey(stack.shift()); if (!object[key] && Empty) object[key] = new Empty(); // prevent prototype pollution if (Object.prototype.hasOwnProperty.call(object, key)) { object = object[key]; } else { object = {}; } } if (canNotTraverseDeeper()) return {}; return { obj: object, k: cleanKey(stack.shift()), }; } export function setPath(object, path, newValue) { const { obj, k } = getLastOfPath(object, path, Object); obj[k] = newValue; } export function pushPath(object, path, newValue, concat) { const { obj, k } = getLastOfPath(object, path, Object); obj[k] = obj[k] || []; if (concat) obj[k] = obj[k].concat(newValue); if (!concat) obj[k].push(newValue); } export function getPath(object, path) { const { obj, k } = getLastOfPath(object, path); if (!obj) return undefined; return obj[k]; } export function getPathWithDefaults(data, defaultData, key) { const value = getPath(data, key); if (value !== undefined) { return value; } // Fallback to default values return getPath(defaultData, key); } export function deepExtend(target, source, overwrite) { /* eslint no-restricted-syntax: 0 */ for (const prop in source) { if (prop !== '__proto__' && prop !== 'constructor') { if (prop in target) { // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch if ( typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String ) { if (overwrite) target[prop] = source[prop]; } else { deepExtend(target[prop], source[prop], overwrite); } } else { target[prop] = source[prop]; } } } return target; } export function regexEscape(str) { /* eslint no-useless-escape: 0 */ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); } /* eslint-disable */ var _entityMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/', }; /* eslint-enable */ export function escape(data) { if (typeof data === 'string') { return data.replace(/[&<>"'\/]/g, (s) => _entityMap[s]); } return data; } const chars = [' ', ',', '?', '!', ';']; export function looksLikeObjectPath(key, nsSeparator, keySeparator) { nsSeparator = nsSeparator || ''; keySeparator = keySeparator || ''; const possibleChars = chars.filter( (c) => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0, ); if (possibleChars.length === 0) return true; const r = new RegExp(`(${possibleChars.map((c) => (c === '?' ? '\\?' : c)).join('|')})`); let matched = !r.test(key); if (!matched) { const ki = key.indexOf(keySeparator); if (ki > 0 && !r.test(key.substring(0, ki))) { matched = true; } } return matched; } export function deepFind(obj, path, keySeparator = '.') { if (!obj) return undefined; if (obj[path]) return obj[path]; const paths = path.split(keySeparator); let current = obj; for (let i = 0; i < paths.length; ++i) { if (!current) return undefined; if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) { return undefined; } if (current[paths[i]] === undefined) { let j = 2; let p = paths.slice(i, i + j).join(keySeparator); let mix = current[p]; while (mix === undefined && paths.length > i + j) { j++; p = paths.slice(i, i + j).join(keySeparator); mix = current[p]; } if (mix === undefined) return undefined; if (mix === null) return null; if (path.endsWith(p)) { if (typeof mix === 'string') return mix; if (p && typeof mix[p] === 'string') return mix[p]; } const joinedPath = paths.slice(i + j).join(keySeparator); if (joinedPath) return deepFind(mix, joinedPath, keySeparator); return undefined; } current = current[paths[i]]; } return current; } export function getCleanedCode(code) { if (code && code.indexOf('_') > 0) return code.replace('_', '-'); return code; } i18next-23.7.6/test/000077500000000000000000000000001452441263500140765ustar00rootroot00000000000000i18next-23.7.6/test/backend/000077500000000000000000000000001452441263500154655ustar00rootroot00000000000000i18next-23.7.6/test/backend/backendConnector.load.retry.spec.skip.js000066400000000000000000000251161452441263500252520ustar00rootroot00000000000000import BackendConnector from '../../src/BackendConnector.js'; import BackendMock from './backendMock.js'; import Interpolator from '../../src/Interpolator.js'; import ResourceStore from '../../src/ResourceStore.js'; describe('BackendConnector load retry', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should load data', (done) => { connector.load(['en'], ['retry2'], function (err) { expect(err).to.be.not.ok; expect(connector.store.getResourceBundle('en', 'retry2')).to.eql({ status: 'nok', retries: 2, }); done(); }); }); }); }); describe('BackendConnector load all fail - 1 namespace', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should call callback on complete failure', (done) => { connector.load(['en'], ['fail'], function (err) { expect(err).to.eql(['failed loading']); expect(connector.store.getResourceBundle('en', 'fail')).to.eql({}); done(); }); }).timeout(12000); }); }); describe('BackendConnector load all fail - 10 namespaces', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should call callback on complete failure - taking no longer than 1 namespace', (done) => { connector.load( ['en'], ['fail1', 'fail2', 'fail3', 'fail4', 'fail5', 'fail6', 'fail7', 'fail8', 'fail9', 'fail10'], function (err) { expect(err).to.eql([ 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', ]); expect(connector.store.getResourceBundle('en', 'fail1')).to.eql({}); done(); }, ); }).timeout(12000); }); }); describe('BackendConnector load only one succeeds', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should call callback', (done) => { connector.load(['en'], ['fail', 'fail2', 'concurrently'], function (err) { expect(err).to.eql(['failed loading', 'failed loading']); expect(connector.store.getResourceBundle('en', 'fail')).to.eql({}); expect(connector.store.getResourceBundle('en', 'fail2')).to.eql({}); expect(connector.store.getResourceBundle('en', 'concurrently')).to.eql({ status: 'ok', namespace: 'concurrently', }); done(); }); }).timeout(12000); }); }); describe('BackendConnector load only one succeeds with retries', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should call callback', (done) => { connector.load(['en'], ['fail', 'fail2', 'concurrently', 'retry2'], function (err) { expect(err).to.eql(['failed loading', 'failed loading']); expect(connector.store.getResourceBundle('en', 'fail')).to.eql({}); expect(connector.store.getResourceBundle('en', 'fail2')).to.eql({}); expect(connector.store.getResourceBundle('en', 'concurrently')).to.eql({ status: 'ok', namespace: 'concurrently', }); expect(connector.store.getResourceBundle('en', 'retry2')).to.eql({ status: 'nok', retries: 2, }); done(); }); }).timeout(12000); }); }); describe('BackendConnector reload retry', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#reload', () => { it('should reload data', () => { connector.reload(['es'], ['noretry'], () => {}); expect(connector.store.getResourceBundle('es', 'noretry')).to.eql({ status: 'nok', retries: 0, }); }); }); }); describe('BackendConnector retry with default maxRetries=5', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { // retryTimeout: 350, // This is the default value // maxRetries: 5, // This is the default value backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('retry 1 time', (done) => { connector.load(['en'], ['retry1'], function (err) { expect(connector.store.getResourceBundle('en', 'retry1')).to.eql({ status: 'nok', retries: 1, }); done(); }); }).timeout(10850); it('retry 5 times', (done) => { connector.load(['en'], ['retry5'], function (err) { expect(connector.store.getResourceBundle('en', 'retry5')).to.eql({ status: 'nok', retries: 5, }); done(); }); }).timeout(10850 + 250); // ((2^5) - 1) * 350 = 10850 it('fail after retrying 5 times', (done) => { connector.load(['en'], ['retry6'], function (err) { expect(err).to.eql(['failed loading']); expect(connector.store.getResourceBundle('en', 'retry6')).to.eql({}); done(); }); }).timeout(10850 + 250); // ((2^5) - 1) * 350 = 10850 }); }); describe('BackendConnector retry with maxRetries=6', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { // retryTimeout: 350, // This is the default value maxRetries: 6, backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('retry 1 time', (done) => { connector.load(['en'], ['retry1'], function (err) { expect(connector.store.getResourceBundle('en', 'retry1')).to.eql({ status: 'nok', retries: 1, }); done(); }); }).timeout(10850); it('retry 5 times', (done) => { connector.load(['en'], ['retry5'], function (err) { expect(connector.store.getResourceBundle('en', 'retry5')).to.eql({ status: 'nok', retries: 5, }); done(); }); }).timeout(10850 + 250); // ((2^5) - 1) * 350 = 10850 it('retry 6 times', (done) => { connector.load(['en'], ['retry6'], function (err) { expect(connector.store.getResourceBundle('en', 'retry6')).to.eql({ status: 'nok', retries: 6, }); done(); }); }).timeout(22050 + 250); // ((2^6) - 1) * 350 = 22050 it('fail after retrying 6 times', (done) => { connector.load(['en'], ['retry7'], function (err) { expect(err).to.eql(['failed loading']); expect(connector.store.getResourceBundle('en', 'retry7')).to.eql({}); done(); }); }).timeout(22050 + 250); // ((2^6) - 1) * 350 = 22050 }); }); // All tests have 250ms of code-execution buffer time built in. // To ensure test correctness, the tests should never time out. describe('BackendConnector retry with shorter intervals', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { retryTimeout: 100, backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('retry 1 time', (done) => { connector.load(['en'], ['retry1'], function (err) { expect(connector.store.getResourceBundle('en', 'retry1')).to.eql({ status: 'nok', retries: 1, }); done(); }); }).timeout(100 + 250); it('retry 5 times', (done) => { connector.load(['en'], ['retry5'], function (err) { expect(connector.store.getResourceBundle('en', 'retry5')).to.eql({ status: 'nok', retries: 5, }); done(); }); }).timeout(3100 + 250); // ((2^5) - 1) * 100 = 3100 }); }); describe('BackendConnector retry with default maxRetries=0', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { // retryTimeout: 350, // This is the default value maxRetries: 0, // This is the default value backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('succeeds', (done) => { connector.load(['en'], ['concurrently'], function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'concurrently')).to.eql({ status: 'ok', namespace: 'concurrently', }); done(); }); }).timeout(10850); it('does not retry', (done) => { connector.load(['en'], ['retry0'], function (err) { expect(err).to.eql(['failed loading']); expect(connector.store.getResourceBundle('en', 'retry0')).to.eql({}); done(); }); }).timeout(10850); }); }); i18next-23.7.6/test/backend/backendConnector.parallel.spec.js000066400000000000000000000106551452441263500240200ustar00rootroot00000000000000import BackendConnector from '../../src/BackendConnector.js'; import BackendMock from './backendMockSleepy.js'; import Interpolator from '../../src/Interpolator.js'; import ResourceStore from '../../src/ResourceStore.js'; import { expect } from 'chai'; describe('BackendConnector with sleepy backend', () => { describe('#load', () => { describe('10 max parallel', () => { let connector; beforeEach(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { maxParallelReads: 10, backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); it('backend should not be called 20 times before any have returned', (done) => { const namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`namespace${i}`); } connector.load(['en'], namespaces, function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'namespace1')).to.eql({ status: 'ok', }); expect(connector.backend.parallelCallsHighWaterMark).to.be.lessThan(20); expect(connector.backend.parallelCallsHighWaterMark).to.eql(10); done(); }); }); }); describe('100 max parallel', () => { let connector; beforeEach(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { maxParallelReads: 100, backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); it('backend should be called 20 times before any have returned', (done) => { let namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`namespace${i}`); } connector.load(['en'], namespaces, function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'namespace1')).to.eql({ status: 'ok', }); expect(connector.backend.parallelCallsHighWaterMark).to.eql(20); done(); }); }); it('backend should get more calls 2nd time around', (done) => { let namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`namespace${i}`); } connector.load(['en'], namespaces, function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'namespace1')).to.eql({ status: 'ok', }); expect(connector.backend.parallelCallsHighWaterMark).to.eql(20); // Run again with higher call count - different namespace names namespaces = []; for (let i = 0; i < 30; i++) { namespaces.push(`namespace-run2${i}`); } connector.load(['en'], namespaces, function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'namespace1')).to.eql({ status: 'ok', }); expect(connector.backend.parallelCallsHighWaterMark).to.eql(30); done(); }); }); }); it('reloading already loaded should not increase high watermark', (done) => { let namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`namespace${i}`); } connector.load(['en'], namespaces, function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'namespace1')).to.eql({ status: 'ok', }); expect(connector.backend.parallelCallsHighWaterMark).to.eql(20); // Run again with higher call count - same namespace names namespaces = []; for (let i = 0; i < 30; i++) { namespaces.push(`namespace${i}`); } connector.load(['en'], namespaces, function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'namespace1')).to.eql({ status: 'ok', }); expect(connector.backend.parallelCallsHighWaterMark).to.eql(20); done(); }); }); }); }); }); }); i18next-23.7.6/test/backend/backendConnector.perf.spec.js000066400000000000000000000021131452441263500231460ustar00rootroot00000000000000import BackendConnector from '../../src/BackendConnector.js'; import BackendMock from './backendMock.js'; import Interpolator from '../../src/Interpolator.js'; import ResourceStore from '../../src/ResourceStore.js'; import { expect } from 'chai'; describe('BackendConnector performance test', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should load 10,000 items in under the 2 second timeout', (done) => { const namespaces = []; for (let i = 0; i < 10000; i++) { namespaces.push(`namespace${i}`); } connector.load(['en'], namespaces, function (err) { expect(err).to.be.not.ok; expect(connector.store.getResourceBundle('en', 'namespace1')).to.eql({ status: 'nok', retries: 0, }); done(); }); }); }); }); i18next-23.7.6/test/backend/backendConnector.perfErrorRetries.spec.skip.js000066400000000000000000000022621452441263500264700ustar00rootroot00000000000000import BackendConnector from '../../src/BackendConnector.js'; import BackendMock from './backendMock.js'; import Interpolator from '../../src/Interpolator.js'; import ResourceStore from '../../src/ResourceStore.js'; import { expect } from 'chai'; describe('BackendConnector performance (retry) test', () => { let connector; before(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should load retry (failed) items mixed with concurrent longer items in under the 12 seconds timeout', (done) => { const namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`concurrentlyLonger${i}`); } for (let i = 0; i < 3; i++) { namespaces.push(`fail${i}`); } for (let i = 0; i < 20; i++) { namespaces.push(`concurrently${i}`); } connector.load(['en'], namespaces, function (err) { expect(err).to.be.ok; done(); }); }).timeout(12000); }); }); i18next-23.7.6/test/backend/backendConnector.signatures.spec.js000066400000000000000000000116161452441263500244060ustar00rootroot00000000000000import BackendConnector from '../../src/BackendConnector.js'; import BackendMock from './backendMock.js'; import BackendMockPromise from './backendMockPromise.js'; import BackendMockSync from './backendMockSync.js'; import Interpolator from '../../src/Interpolator.js'; import ResourceStore from '../../src/ResourceStore.js'; import { expect } from 'chai'; describe('BackendConnector with different signatures', () => { describe('BackendConnector with callback signature', () => { let connector; beforeEach(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, {}, ); }); describe('#load', () => { it('should work as usual', (done) => { connector.load(['en'], ['normal'], function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'normal')).to.eql({ status: 'ok', language: 'en', namespace: 'normal', }); done(); }); }); }); describe('#saveMissing', () => { it('should work as usual', (done) => { connector.saveMissing( ['en'], 'normal', 'missing.key', 'some fallback', false, { tDescription: 'some descr' }, (err) => { expect(err).to.be.oneOf([null, undefined]); expect(connector.backend.created).to.eql({ en: { normal: { 'missing.key': { fallbackValue: 'some fallback', options: { tDescription: 'some descr', isUpdate: false, }, }, }, }, }); done(); }, ); }); }); }); describe('BackendConnector with promise signature', () => { let connector; beforeEach(() => { connector = new BackendConnector( new BackendMockPromise(), new ResourceStore(), { interpolator: new Interpolator(), }, {}, ); }); describe('#load', () => { it('should work as usual', (done) => { connector.load(['en'], ['namespace2'], function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'namespace2')).to.eql({ status: 'ok', language: 'en', namespace: 'namespace2', }); done(); }); }); }); describe('#saveMissing', () => { it('should work as usual', (done) => { connector.saveMissing( ['en'], 'namespace2', 'missing.key', 'some fallback', false, { tDescription: 'some descr' }, (err) => { expect(err).to.be.oneOf([null, undefined]); expect(connector.backend.created).to.eql({ en: { namespace2: { 'missing.key': { fallbackValue: 'some fallback', options: { tDescription: 'some descr', isUpdate: false, }, }, }, }, }); done(); }, ); }); }); }); describe('BackendConnector with sync signature', () => { let connector; beforeEach(() => { connector = new BackendConnector( new BackendMockSync(), new ResourceStore(), { interpolator: new Interpolator(), }, {}, ); }); describe('#load', () => { it('should work as usual', (done) => { connector.load(['en'], ['namespace3'], function (err) { expect(err).to.eql(undefined); expect(connector.store.getResourceBundle('en', 'namespace3')).to.eql({ status: 'ok', language: 'en', namespace: 'namespace3', }); done(); }); }); }); describe('#saveMissing', () => { it('should work as usual', (done) => { connector.saveMissing( ['en'], 'namespace3', 'missing.key', 'some fallback', false, { tDescription: 'some descr' }, (err) => { expect(err).to.be.oneOf([null, undefined]); expect(connector.backend.created).to.eql({ en: { namespace3: { 'missing.key': { fallbackValue: 'some fallback', options: { tDescription: 'some descr', isUpdate: false, }, }, }, }, }); done(); }, ); }); }); }); }); i18next-23.7.6/test/backend/backendMock.js000066400000000000000000000056121452441263500202300ustar00rootroot00000000000000class Backend { constructor(services, options = {}) { this.init(services, options); } init(services, options) { this.services = services; this.options = options; this.retries = {}; this.created = {}; } read(language, namespace, callback) { if (!this.retries[language]) this.retries[language] = 0; if (namespace.indexOf('fail') === 0) { return callback('failed loading', true); } else if (namespace === 'retry0') { this.retries[language]++; return callback('failed loading', true); } else if (namespace === 'retry1' && this.retries[language] < 1) { this.retries[language]++; return callback('failed loading', true); } else if (namespace === 'retry2' && this.retries[language] < 2) { this.retries[language]++; return callback('failed loading', true); } else if (namespace === 'retry5' && this.retries[language] < 5) { this.retries[language]++; return callback('failed loading', true); } else if (namespace === 'retry6' && this.retries[language] < 6) { this.retries[language]++; return callback('failed loading', true); } else if (namespace === 'retry7' && this.retries[language] < 7) { this.retries[language]++; return callback('failed loading', true); // // Is a retry, but not set to fail after a specific // } else if (namespace.indexOf('retry') === 0) { // } } else if (namespace.indexOf('concurrentlyLonger') === 0) { setTimeout(() => { callback(null, { status: 'ok', namespace }); }, 400); return; } else if (namespace.indexOf('concurrently') === 0) { setTimeout(() => { callback(null, { status: 'ok', namespace }); }, 200); return; } else if (namespace.indexOf('normal') === 0) { callback(null, { status: 'ok', namespace, language }); return; } else { callback(null, { status: 'nok', retries: this.retries[language] }); delete this.retries[language]; return; } } readMulti(languages, namespaces, callback) { const language = languages[0]; const namespace = namespaces[0]; if (!this.retries[language]) this.retries[language] = 0; if (namespace === 'retry2' && this.retries[language] < 2) { this.retries[language]++; return callback('failed loading', true); } else { callback(null, { [language]: { [namespace]: { status: 'nok', retries: this.retries[language] } }, }); delete this.retries[language]; return; } } create(languages, namespace, key, fallbackValue, callback, options) { languages.forEach((l) => { this.created[l] = this.created[l] || {}; this.created[l][namespace] = this.created[l][namespace] || {}; this.created[l][namespace][key] = { fallbackValue, options, }; }); callback(null); } } Backend.type = 'backend'; export default Backend; i18next-23.7.6/test/backend/backendMockPromise.js000066400000000000000000000017741452441263500215740ustar00rootroot00000000000000class Backend { constructor(services, options = {}) { this.init(services, options); } init(services, options) { this.services = services; this.options = options; this.created = {}; } read(language, namespace) { return new Promise((resolve) => { setTimeout(() => { resolve({ status: 'ok', language, namespace }); }, 15); }); } // async read(language, namespace) { // const r = await new Promise((resolve) => { // setTimeout(() => { // resolve({ status: 'ok', language, namespace }); // }, 15); // }) // return r // } create(languages, namespace, key, fallbackValue, options) { languages.forEach((l) => { this.created[l] = this.created[l] || {}; this.created[l][namespace] = this.created[l][namespace] || {}; this.created[l][namespace][key] = { fallbackValue, options, }; }); return new Promise((resolve) => setTimeout(() => resolve(), 15)); } } export default Backend; i18next-23.7.6/test/backend/backendMockSleepy.js000066400000000000000000000011471452441263500214110ustar00rootroot00000000000000class Backend { constructor(services, options = {}) { this.init(services, options); } init(services, options) { this.services = services; this.options = options; this.retries = {}; this.parallelCalls = 0; this.parallelCallsHighWaterMark = 0; } read(language, namespace, callback) { this.parallelCalls++; if (this.parallelCalls > this.parallelCallsHighWaterMark) { this.parallelCallsHighWaterMark = this.parallelCalls; } setTimeout(() => { this.parallelCalls--; return callback(null, { status: 'ok' }); }, 15); } } export default Backend; i18next-23.7.6/test/backend/backendMockSync.js000066400000000000000000000011711452441263500210610ustar00rootroot00000000000000class Backend { constructor(services, options = {}) { this.init(services, options); } init(services, options) { this.services = services; this.options = options; this.created = {}; } read(language, namespace) { return { status: 'ok', language, namespace }; } create(languages, namespace, key, fallbackValue, options) { languages.forEach((l) => { this.created[l] = this.created[l] || {}; this.created[l][namespace] = this.created[l][namespace] || {}; this.created[l][namespace][key] = { fallbackValue, options, }; }); } } export default Backend; i18next-23.7.6/test/backward/000077500000000000000000000000001452441263500156545ustar00rootroot00000000000000i18next-23.7.6/test/backward/compatibility/000077500000000000000000000000001452441263500205255ustar00rootroot00000000000000i18next-23.7.6/test/backward/compatibility/v1.js000066400000000000000000000113311452441263500214100ustar00rootroot00000000000000/* eslint no-param-reassign: 0 */ //import logger from '../logger'; function convertInterpolation(options) { options.interpolation = { unescapeSuffix: 'HTML', }; options.interpolation.prefix = options.interpolationPrefix || '__'; options.interpolation.suffix = options.interpolationSuffix || '__'; options.interpolation.escapeValue = options.escapeInterpolation || false; options.interpolation.nestingPrefix = options.reusePrefix || '$t('; options.interpolation.nestingSuffix = options.reuseSuffix || ')'; return options; } export function convertAPIOptions(options) { if (options.resStore) options.resources = options.resStore; if (options.ns && options.ns.defaultNs) { options.defaultNS = options.ns.defaultNs; options.ns = options.ns.namespaces; } else { options.defaultNS = options.ns || 'translation'; } if (options.fallbackToDefaultNS && options.defaultNS) options.fallbackNS = options.defaultNS; options.saveMissing = options.sendMissing; options.saveMissingTo = options.sendMissingTo || 'current'; options.returnNull = !options.fallbackOnNull; options.returnEmptyString = !options.fallbackOnEmpty; options.returnObjects = options.returnObjectTrees; options.joinArrays = '\n'; options.returnedObjectHandler = options.objectTreeKeyHandler; options.parseMissingKeyHandler = options.parseMissingKey; options.appendNamespaceToMissingKey = true; options.nsSeparator = options.nsseparator || ':'; options.keySeparator = options.keyseparator || '.'; if (options.shortcutFunction === 'sprintf') { options.overloadTranslationOptionHandler = function handle(args) { const values = []; for (let i = 1; i < args.length; i++) { values.push(args[i]); } return { postProcess: 'sprintf', sprintf: values, }; }; } if (options.shortcutFunction === 'defaultValue') { options.overloadTranslationOptionHandler = function handle(args) { return { defaultValue: args[1] }; }; } options.supportedLngs = options.lngWhitelist; options.preload = options.preload; if (options.load === 'current') options.load = 'currentOnly'; if (options.load === 'unspecific') options.load = 'languageOnly'; // backend options.backend = options.backend || {}; options.backend.loadPath = options.resGetPath || 'locales/__lng__/__ns__.json'; options.backend.addPath = options.resPostPath || 'locales/add/__lng__/__ns__'; options.backend.allowMultiLoading = options.dynamicLoad; // cache options.cache = options.cache || {}; options.cache.prefix = 'res_'; options.cache.expirationTime = 7 * 24 * 60 * 60 * 1000; options.cache.enabled = options.useLocalStorage; options = convertInterpolation(options); if (options.defaultVariables) options.interpolation.defaultVariables = options.defaultVariables; // COMPATIBILITY: deprecation // if (options.getAsync === false) throw deprecation error return options; } export function convertJSONOptions(options) { options = convertInterpolation(options); options.joinArrays = '\n'; return options; } export function convertTOptions(options) { if ( options.interpolationPrefix || options.interpolationSuffix || options.escapeInterpolation !== undefined ) { options = convertInterpolation(options); } options.nsSeparator = options.nsseparator; options.keySeparator = options.keyseparator; options.returnObjects = options.returnObjectTrees; return options; } export function appendBackwardsAPI(i18n) { i18n.lng = () => { //logger.deprecate('i18next.lng() can be replaced by i18next.language for detected language or i18next.languages for languages ordered by translation lookup.'); return i18n.services.languageUtils.toResolveHierarchy(i18n.language)[0]; }; i18n.hasLoadedNamespace = function () { return true; }; i18n.preload = (lngs, cb) => { //logger.deprecate('i18next.preload() can be replaced with i18next.loadLanguages()'); i18n.loadLanguages(lngs, cb); }; i18n.setLng = (lng, options, callback) => { //logger.deprecate('i18next.setLng() can be replaced with i18next.changeLanguage() or i18next.getFixedT() to get a translation function with fixed language or namespace.'); if (typeof options === 'function') { callback = options; options = {}; } if (!options) options = {}; if (options.fixLng === true) { if (callback) return callback(null, i18n.getFixedT(lng)); } return i18n.changeLanguage(lng, callback); }; i18n.addPostProcessor = (name, fc) => { //logger.deprecate('i18next.addPostProcessor() can be replaced by i18next.use({ type: \'postProcessor\', name: \'name\', process: fc })'); i18n.use({ type: 'postProcessor', name, process: fc, }); }; } i18next-23.7.6/test/backward/locales/000077500000000000000000000000001452441263500172765ustar00rootroot00000000000000i18next-23.7.6/test/backward/locales/de/000077500000000000000000000000001452441263500176665ustar00rootroot00000000000000i18next-23.7.6/test/backward/locales/de/translation.json000066400000000000000000000002631452441263500231200ustar00rootroot00000000000000{ "simple_de": "ok_from_de", "xhr_simple_de": "xhr_ok_from_de", "test": { "simple_de": "ok_from_de" }, "route": { "key1": "key1_de", "key2": "key2_de" } } i18next-23.7.6/test/backward/locales/dev/000077500000000000000000000000001452441263500200545ustar00rootroot00000000000000i18next-23.7.6/test/backward/locales/dev/ns.common.json000066400000000000000000000002241452441263500226540ustar00rootroot00000000000000{ "simple_dev": "ok_from_common_dev", "test": { "simple_dev": "ok_from_common_dev", "fallback_dev": "ok_from_common_dev-fallback" } } i18next-23.7.6/test/backward/locales/dev/ns.special.json000066400000000000000000000001431452441263500230040ustar00rootroot00000000000000{ "simple_dev": "ok_from_special_dev", "test": { "simple_dev": "ok_from_special_dev" } } i18next-23.7.6/test/backward/locales/dev/translation.json000066400000000000000000000001721452441263500233050ustar00rootroot00000000000000{ "simple_dev": "ok_from_dev", "xhr_simple_dev": "xhr_ok_from_dev", "test": { "simple_dev": "ok_from_dev" } } i18next-23.7.6/test/backward/locales/en-US/000077500000000000000000000000001452441263500202255ustar00rootroot00000000000000i18next-23.7.6/test/backward/locales/en-US/ns.common.json000066400000000000000000000001511452441263500230240ustar00rootroot00000000000000{ "simple_en-US": "ok_from_common_en-US", "test": { "simple_en-US": "ok_from_common_en-US" } } i18next-23.7.6/test/backward/locales/en-US/ns.special.json000066400000000000000000000001531452441263500231560ustar00rootroot00000000000000{ "simple_en-US": "ok_from_special_en-US", "test": { "simple_en-US": "ok_from_special_en-US" } } i18next-23.7.6/test/backward/locales/en-US/translation.json000066400000000000000000000002061452441263500234540ustar00rootroot00000000000000{ "simple_en-US": "ok_from_en-US", "xhr_simple_en-US": "xhr_ok_from_en-US", "test": { "simple_en-US": "ok_from_en-US" } } i18next-23.7.6/test/backward/locales/en/000077500000000000000000000000001452441263500177005ustar00rootroot00000000000000i18next-23.7.6/test/backward/locales/en/ns.common.json000066400000000000000000000002161452441263500225010ustar00rootroot00000000000000{ "simple_en": "ok_from_common_en", "test": { "simple_en": "ok_from_common_en", "fallback_en": "ok_from_common_en-fallback" } } i18next-23.7.6/test/backward/locales/en/ns.special.json000066400000000000000000000001371452441263500226330ustar00rootroot00000000000000{ "simple_en": "ok_from_special_en", "test": { "simple_en": "ok_from_special_en" } } i18next-23.7.6/test/backward/locales/en/translation.json000066400000000000000000000002631452441263500231320ustar00rootroot00000000000000{ "simple_en": "ok_from_en", "xhr_simple_en": "xhr_ok_from_en", "test": { "simple_en": "ok_from_en" }, "route": { "key1": "key1_en", "key2": "key2_en" } } i18next-23.7.6/test/backward/locales/fr/000077500000000000000000000000001452441263500177055ustar00rootroot00000000000000i18next-23.7.6/test/backward/locales/fr/translation.json000066400000000000000000000001171452441263500231350ustar00rootroot00000000000000{ "simple_fr": "ok_from_fr", "test": { "simple_fr": "ok_from_fr" } } i18next-23.7.6/test/backward/pluralResolver.compat.js000066400000000000000000000232771452441263500225300ustar00rootroot00000000000000import PluralResolver from '../../src/PluralResolver'; import LanguageUtils from '../../src/LanguageUtils'; describe('PluralResolver', () => { describe('getRule()', () => { let pr; before(() => { let lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { simplifyPluralSuffix: true, compatibilityJSON: 'v3' }); }); it('correctly returns getRule for a supported locale', () => { const rule = pr.getRule('en'); expect(rule.numbers).to.deep.equal([1, 2]); expect(rule.plurals).to.be.a('function'); }); it('correctly returns getRule for an unsupported locale', () => { expect(pr.getRule('non-existent')).to.be.undefined; }); }); describe('needsPlural()', () => { let pr; before(() => { let lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { simplifyPluralSuffix: true, compatibilityJSON: 'v3' }); }); var tests = [ { args: ['en'], expected: true }, { args: ['fr'], expected: true }, { args: ['ar'], expected: true }, { args: ['ru'], expected: true }, { args: ['ms'], expected: false }, { args: ['lo'], expected: false }, { args: ['su'], expected: false }, { args: ['ach'], expected: true }, { args: ['af'], expected: true }, { args: ['ay'], expected: false }, { args: ['be'], expected: true }, { args: ['cs'], expected: true }, { args: ['csb'], expected: true }, { args: ['cy'], expected: true }, { args: ['ga'], expected: true }, { args: ['gd'], expected: true }, { args: ['is'], expected: true }, { args: ['jv'], expected: true }, { args: ['kw'], expected: true }, { args: ['lt'], expected: true }, { args: ['lv'], expected: true }, { args: ['mk'], expected: true }, { args: ['mnk'], expected: true }, { args: ['mt'], expected: true }, { args: ['or'], expected: true }, { args: ['ro'], expected: true }, { args: ['sl'], expected: true }, { args: ['he'], expected: true }, ]; tests.forEach((test) => { it('correctly returns needsPlural for ' + JSON.stringify(test.args) + ' args', () => { expect(pr.needsPlural.apply(pr, test.args)).to.eql(test.expected); }); }); }); describe('getSuffix()', () => { var cu, pr; before(() => { cu = new LanguageUtils({ fallbackCode: 'en' }); pr = new PluralResolver(cu, { simplifyPluralSuffix: true, compatibilityJSON: 'v3' }); }); var tests = [ { args: ['en', 0], expected: 'plural' }, { args: ['en', 1], expected: '' }, { args: ['en', 10], expected: 'plural' }, { args: ['en', 10.5], expected: 'plural' }, { args: ['fr', 0], expected: '' }, { args: ['fr', 1], expected: '' }, { args: ['fr', 10], expected: 'plural' }, { args: ['fr', 10.5], expected: 'plural' }, { args: ['pt', 0], expected: '' }, { args: ['pt', 1], expected: '' }, { args: ['pt', 10], expected: 'plural' }, { args: ['pt', 10.5], expected: 'plural' }, { args: ['pt-PT', 0], expected: 'plural' }, { args: ['pt-PT', 1], expected: '' }, { args: ['pt-PT', 10], expected: 'plural' }, { args: ['pt-PT', 10.5], expected: 'plural' }, { args: ['pt-BR', 0], expected: '' }, { args: ['pt-BR', 1], expected: '' }, { args: ['pt-BR', 10], expected: 'plural' }, { args: ['pt-BR', 10.5], expected: 'plural' }, { args: ['ach', 0], expected: '' }, { args: ['ach', 1], expected: '' }, { args: ['ach', 10], expected: 'plural' }, { args: ['ach', 10.5], expected: 'plural' }, // only singular { args: ['su', 0], expected: '0' }, { args: ['su', 1], expected: '0' }, { args: ['su', 10], expected: '0' }, // ar { args: ['ar', 0], expected: '0' }, { args: ['ar', 1], expected: '1' }, { args: ['ar', 2], expected: '2' }, { args: ['ar', 3], expected: '3' }, { args: ['ar', 4], expected: '3' }, { args: ['ar', 104], expected: '3' }, { args: ['ar', 11], expected: '4' }, { args: ['ar', 99], expected: '4' }, { args: ['ar', 199], expected: '4' }, { args: ['ar', 100], expected: '5' }, // be { args: ['be', 0], expected: '2' }, { args: ['be', 1], expected: '0' }, { args: ['be', 5], expected: '2' }, // sk { args: ['sk', 0], expected: '2' }, { args: ['sk', 1], expected: '0' }, { args: ['sk', 5], expected: '2' }, // pl { args: ['pl', 0], expected: '2' }, { args: ['pl', 1], expected: '0' }, { args: ['pl', 5], expected: '2' }, // cy { args: ['cy', 0], expected: '2' }, { args: ['cy', 1], expected: '0' }, { args: ['cy', 3], expected: '2' }, { args: ['cy', 8], expected: '3' }, // ga { args: ['ga', 1], expected: '0' }, { args: ['ga', 2], expected: '1' }, { args: ['ga', 3], expected: '2' }, { args: ['ga', 7], expected: '3' }, { args: ['ga', 11], expected: '4' }, // gd { args: ['gd', 1], expected: '0' }, { args: ['gd', 2], expected: '1' }, { args: ['gd', 3], expected: '2' }, { args: ['gd', 20], expected: '3' }, // is { args: ['is', 1], expected: '' }, { args: ['is', 2], expected: 'plural' }, // jv { args: ['jv', 0], expected: '0' }, { args: ['jv', 1], expected: '1' }, // kw { args: ['kw', 1], expected: '0' }, { args: ['kw', 2], expected: '1' }, { args: ['kw', 3], expected: '2' }, { args: ['kw', 4], expected: '3' }, // lt { args: ['lt', 1], expected: '0' }, { args: ['lt', 2], expected: '1' }, { args: ['lt', 10], expected: '2' }, // lv { args: ['lv', 1], expected: '0' }, { args: ['lv', 2], expected: '1' }, { args: ['lv', 0], expected: '2' }, // mk { args: ['mk', 1], expected: '' }, { args: ['mk', 2], expected: 'plural' }, { args: ['mk', 0], expected: 'plural' }, { args: ['mk', 11], expected: 'plural' }, { args: ['mk', 21], expected: '' }, { args: ['mk', 31], expected: '' }, { args: ['mk', 311], expected: 'plural' }, // mnk { args: ['mnk', 0], expected: '0' }, { args: ['mnk', 1], expected: '1' }, { args: ['mnk', 2], expected: '2' }, // mt { args: ['mt', 1], expected: '0' }, { args: ['mt', 2], expected: '1' }, { args: ['mt', 11], expected: '2' }, { args: ['mt', 20], expected: '3' }, // or { args: ['or', 2], expected: '1' }, { args: ['or', 1], expected: '0' }, // ro { args: ['ro', 0], expected: '1' }, { args: ['ro', 1], expected: '0' }, { args: ['ro', 20], expected: '2' }, // sl { args: ['sl', 5], expected: '0' }, { args: ['sl', 1], expected: '1' }, { args: ['sl', 2], expected: '2' }, { args: ['sl', 3], expected: '3' }, // he { args: ['he', 0], expected: '3' }, { args: ['he', 0.5], expected: '3' }, { args: ['he', 1], expected: '0' }, { args: ['he', 2], expected: '1' }, { args: ['he', 3], expected: '3' }, { args: ['he', 20], expected: '2' }, { args: ['he', 21], expected: '3' }, { args: ['he', 30], expected: '2' }, { args: ['he', 100], expected: '2' }, { args: ['he', 101], expected: '3' }, ]; tests.forEach((test) => { it('correctly returns suffix for ' + JSON.stringify(test.args) + ' args', () => { expect(pr.getSuffix.apply(pr, test.args)).to.eql(test.expected); }); }); }); describe('getPluralFormsOfKey()', () => { let pr; before(() => { let lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { simplifyPluralSuffix: true, prepend: '_', compatibilityJSON: 'v3', }); }); var tests = [ { args: ['en', 'key'], expected: ['key', 'key_plural'] }, { args: ['ar', 'key'], expected: ['key_0', 'key_1', 'key_2', 'key_3', 'key_4', 'key_5'] }, ]; tests.forEach((test) => { it( 'correctly returns pluralforms of a given key for ' + JSON.stringify(test.args) + ' args', () => { expect(pr.getPluralFormsOfKey.apply(pr, test.args)).to.eql(test.expected); }, ); }); }); describe('getPluralFormsOfKey() with nonSimplifiedPluralSuffix', () => { let pr; before(() => { let lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { simplifyPluralSuffix: false, prepend: '_', compatibilityJSON: 'v3', }); }); var tests = [ { args: ['en', 'key'], expected: ['key_0', 'key_1'] }, { args: ['ar', 'key'], expected: ['key_0', 'key_1', 'key_2', 'key_3', 'key_4', 'key_5'] }, ]; tests.forEach((test) => { it( 'correctly returns pluralforms of a given key for ' + JSON.stringify(test.args) + ' args', () => { expect(pr.getPluralFormsOfKey.apply(pr, test.args)).to.eql(test.expected); }, ); }); }); describe('getSuffixes()', () => { let pr; before(() => { let lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { simplifyPluralSuffix: true, prepend: '_', compatibilityJSON: 'v3', }); }); var tests = [ { args: [], expected: [] }, { args: ['en'], expected: ['', '_plural'] }, { args: ['ar'], expected: ['_0', '_1', '_2', '_3', '_4', '_5'] }, ]; tests.forEach((test) => { it( 'correctly returns pluralforms of a given key for ' + JSON.stringify(test.args) + ' args', () => { expect(pr.getSuffixes.apply(pr, test.args)).to.eql(test.expected); }, ); }); }); }); i18next-23.7.6/test/backward/v1.11.1.compat.js000066400000000000000000003122411452441263500204040ustar00rootroot00000000000000// i18next, v1.10.2 // Copyright (c)2015 Jan Mühlemann (jamuhl). // Distributed under MIT license // https://www.i18next.com // import i18n from '../../i18next.js'; import i18n from '../../src/i18next.js'; import HttpApi from 'i18next-http-backend'; import Cache from 'i18next-localstorage-cache'; import sprintf from 'i18next-sprintf-postprocessor'; import LanguageDetector from 'i18next-browser-languagedetector'; import * as utils from '../../src/utils'; import * as compat from './compatibility/v1'; let arr = []; let each = arr.forEach; let slice = arr.slice; export function extend(obj) { each.call(slice.call(arguments, 1), function (source) { if (source) { for (var prop in source) { obj[prop] = source[prop]; } } }); return compat.convertAPIOptions(obj); //return obj; } i18n.functions = { extend: extend, }; let httpApi = new HttpApi(); let cache = new Cache(); cache.debouncedStore = cache.store; // store without debounce i18n.use(httpApi).use(cache).use(new LanguageDetector()).use(sprintf); compat.appendBackwardsAPI(i18n); var originalT = i18n.t; i18n.t = function (key, opts) { if (arguments.length > 2) return originalT.apply(i18n, arguments); if (typeof opts === 'object') opts = compat.convertTOptions(opts); return originalT.call(i18n, key, opts); }; describe('i18next', function () { var opts; beforeEach(function () { opts = compat.convertAPIOptions({ compatibilityAPI: 'v1', compatibilityJSON: 'v1', lng: 'en-US', load: 'all', fallbackLng: 'dev', fallbackNS: [], fallbackOnNull: true, fallbackOnEmpty: false, preload: [], lowerCaseLng: false, ns: 'translation', fallbackToDefaultNS: false, resGetPath: 'http://localhost:9877/locales/__lng__/__ns__.json', dynamicLoad: false, useLocalStorage: false, sendMissing: false, resStore: false, getAsync: true, returnObjectTrees: false, debug: false, selectorAttr: 'data-i18n', postProcess: '', parseMissingKey: '', interpolationPrefix: '__', interpolationSuffix: '__', defaultVariables: false, shortcutFunction: 'sprintf', objectTreeKeyHandler: null, lngWhitelist: null, resources: null, }); }); describe('Initialisation', function () { describe('determining language directionality', function () { beforeEach(function (done) { i18n.init(opts, function (t) { done(); }); }); it('returns ltr for en-US', function () { i18n.setLng('en-US'); expect(i18n.dir()).to.equal('ltr'); }); it('returns ltr for unknown language', function () { i18n.setLng('unknown'); expect(i18n.dir()).to.equal('ltr'); }); it('returns rtl for ar', function (done) { i18n.setLng('ar', function () { expect(i18n.dir()).to.equal('rtl'); done(); }); }); it('returns rtl for ar-IR', function (done) { i18n.setLng('ar-Ir', function () { expect(i18n.dir()).to.equal('rtl'); done(); }); }); }); describe('with passed in resource set', function () { var resStore = { dev: { translation: { simple_dev: 'ok_from_dev' } }, en: { translation: { simple_en: 'ok_from_en' } }, 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should provide passed in resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); }); describe('loading from server', function () { describe('with static route', function () { beforeEach(function (done) { i18n.init(opts, function (err, t) { done(); }); }); it('it should provide loaded resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); expect(i18n.t('xhr_simple_en-US')).to.equal('xhr_ok_from_en-US'); expect(i18n.t('xhr_simple_en')).to.equal('xhr_ok_from_en'); expect(i18n.t('xhr_simple_dev')).to.equal('xhr_ok_from_dev'); }); }); }); describe('advanced initialisation options', function () { describe('setting fallbackLng', function () { var resStore = { dev1: { translation: { simple_dev1: 'ok_from_dev1' } }, en: { translation: { simple_en: 'ok_from_en' } }, 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, fallbackLng: 'dev1' }), function (t) { done(); }, ); }); it('it should provide passed in resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev1')).to.equal('ok_from_dev1'); }); }); describe('multiple fallbackLng', function () { var resStore = { dev1: { translation: { simple_dev1: 'ok_from_dev1', simple_dev: 'ok_from_dev1' } }, dev2: { translation: { simple_dev2: 'ok_from_dev2', simple_dev: 'ok_from_dev2' } }, en: { translation: { simple_en: 'ok_from_en' } }, 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, fallbackLng: ['dev1', 'dev2'] }), function (t) { done(); }, ); }); it('it should provide passed in resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); // in one expect(i18n.t('simple_dev1')).to.equal('ok_from_dev1'); expect(i18n.t('simple_dev2')).to.equal('ok_from_dev2'); // in both expect(i18n.t('simple_dev')).to.equal('ok_from_dev1'); }); }); describe('adding resources after init', function () { var resStore = { dev: { translation: { simple_dev: 'ok_from_dev' } }, en: { translation: { simple_en: 'ok_from_en' } }, //, //'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } } }; describe('resources', function () { beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { i18n.addResource('en-US', 'translation', 'some.deep.thing', 'ok_from_en-US'); done(); }); }); it('it should provide passed in resources for translation', function () { expect(i18n.t('some.deep.thing')).to.equal('ok_from_en-US'); }); describe('multiple resources', function () { beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { i18n.addResources('en-US', 'translation', { 'some.other.deep.thing': 'ok_from_en-US_1', 'some.other.deep.deeper.thing': 'ok_from_en-US_2', }); done(); }); }); it('it should add the new namespace to the namespace array', function () { expect(i18n.t('some.other.deep.thing')).to.equal('ok_from_en-US_1'); expect(i18n.t('some.other.deep.deeper.thing')).to.equal('ok_from_en-US_2'); }); }); }); describe('bundles', function () { beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { i18n.addResourceBundle('en-US', 'translation', { 'simple_en-US': 'ok_from_en-US' }); done(); }); }); it('it should provide passed in resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); describe('with a additional namespace', function () { beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { i18n.addResourceBundle('en-US', 'newNamespace', { 'simple_en-US': 'ok_from_en-US', }); done(); }); }); it('it should add the new namespace to the namespace array', function () { expect(i18n.options.ns).to.contain('newNamespace'); }); }); describe('with using deep switch', function () { beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { i18n.addResourceBundle('en-US', 'translation', { deep: { 'simple_en-US_1': 'ok_from_en-US_1' }, }); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_2': 'ok_from_en-US_2' } }, true, ); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_3': 'ok_from_en-US_3' } }, true, ); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_3': 'ok_from_en-US_3-overwrite' } }, true, ); done(); }); }); it('it should add the new namespace to the namespace array', function () { expect(i18n.t('deep.simple_en-US_1')).to.equal('ok_from_en-US_1'); expect(i18n.t('deep.simple_en-US_2')).to.equal('ok_from_en-US_2'); }); it('it should not overwrite any existing entries if the overwrite switch is off', function () { expect(i18n.t('deep.simple_en-US_3')).to.equal('ok_from_en-US_3'); }); }); describe('with using deep switch and overwrite switch', function () { beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { i18n.addResourceBundle('en-US', 'translation', { deep: { 'simple_en-US_1': 'ok_from_en-US_1' }, }); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_2': 'ok_from_en-US_2' } }, true, ); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_3': 'ok_from_en-US_3' } }, true, ); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_3': 'ok_from_en-US_3-overwrite' } }, true, true, ); done(); }); }); it('it should add the new namespace to the namespace array', function () { expect(i18n.t('deep.simple_en-US_1')).to.equal('ok_from_en-US_1'); expect(i18n.t('deep.simple_en-US_2')).to.equal('ok_from_en-US_2'); }); it('it should overwrite any existing entries if the overwrite switch is on', function () { expect(i18n.t('deep.simple_en-US_3')).to.equal('ok_from_en-US_3-overwrite'); }); }); describe('check if exists', function () { beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { i18n.addResourceBundle('en-US', 'translation', { deep: { 'simple_en-US_1': 'ok_from_en-US_1' }, }); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_2': 'ok_from_en-US_2' } }, true, ); done(); }); }); it('it should return true for existing bundle', function () { expect(i18n.hasResourceBundle('en-US', 'translation')).to.be.true; }); it('it should return false for non-existing bundle', function () { expect(i18n.hasResourceBundle('de-CH', 'translation')).to.not.be.true; }); }); }); }); describe('getting resources after init', function () { var resStore = { dev: { translation: { test: 'ok_from_dev' } }, en: { translation: { test: 'ok_from_en' } }, 'en-US': { translation: { test: 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function () { done(); }); }); it('it should return resources for existing bundle', function () { var devTranslation = i18n.getResourceBundle('dev', 'translation'); var enTranslation = i18n.getResourceBundle('en', 'translation'); var enUSTranslation = i18n.getResourceBundle('en-US', 'translation'); expect(devTranslation.test).to.equal('ok_from_dev'); expect(enTranslation.test).to.equal('ok_from_en'); expect(enUSTranslation.test).to.equal('ok_from_en-US'); }); it('it should return empty object for non-existing bundle', function () { var nonExisting = i18n.getResourceBundle('en-GB', 'translation'); expect(Object.keys(nonExisting).length).to.equal(0); }); it('it should use default namespace when namespace argument is left out', function () { var enTranslation = i18n.getResourceBundle('en'); expect(enTranslation.test).to.equal('ok_from_en'); }); it('it should return a clone of the resources', function () { var enTranslation = i18n.getResourceBundle('en'); enTranslation.test = 'ok_from_en_changed'; expect(enTranslation.test).to.equal('ok_from_en_changed'); expect(resStore.en.translation.test).to.equal('ok_from_en'); }); }); describe('removing resources after init', function () { var resStore = { dev: { translation: { test: 'ok_from_dev' } }, en: { translation: { test: 'ok_from_en' } }, 'en-US': { translation: { test: 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { i18n.removeResourceBundle('en-US', 'translation'); done(); }); }); it('it should remove resources', function () { expect(i18n.t('test')).to.equal('ok_from_en'); }); }); describe('setting load', function () { describe('to current', function () { var spy; beforeEach(function (done) { spy = sinon.spy(httpApi, 'read'); i18n.init( i18n.functions.extend(opts, { load: 'current', }), function (t) { done(); }, ); }); afterEach(function () { spy.restore(); }); it('it should load only current and fallback language', function () { expect(spy.callCount).to.equal(2); // en-US, en }); it('it should provide loaded resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).not.to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); }); describe('to unspecific', function () { var spy; beforeEach(function (done) { spy = sinon.spy(httpApi, 'read'); i18n.init( i18n.functions.extend(opts, { load: 'unspecific', }), function (t) { done(); }, ); }); afterEach(function () { spy.restore(); }); it('it should load only unspecific and fallback language', function () { expect(spy.callCount).to.equal(2); // en-US, en }); it('it should provide loaded resources for translation', function () { expect(i18n.t('simple_en-US')).not.to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); it('it should return unspecific language', function () { expect(i18n.lng()).to.equal('en'); }); }); }); describe('with fallback language set to false', function () { var spy; beforeEach(function (done) { spy = sinon.spy(httpApi, 'read'); i18n.init( i18n.functions.extend(opts, { fallbackLng: false, }), function (t) { done(); }, ); }); afterEach(function () { spy.restore(); }); it('it should load only specific and unspecific languages', function () { expect(spy.callCount).to.equal(2); // en-US, en }); it('it should provide loaded resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).not.to.equal('ok_from_dev'); }); }); describe('preloading multiple languages', function () { var spy; beforeEach(function (done) { spy = sinon.spy(httpApi, 'read'); i18n.init( i18n.functions.extend(opts, { preload: ['fr', 'de-DE'], }), function (t) { done(); }, ); }); afterEach(function () { spy.restore(); }); it('it should load additional languages', function () { expect(spy.callCount).to.equal(6); // en-US, en, de-DE, de, fr, dev }); describe('changing the language', function () { beforeEach(function (done) { spy.resetHistory(); //if (i18n.sync.resStore) i18n.sync.resStore = {}; // to reset for test on server! i18n.setLng('de-DE', function (t) { done(); }); }); it('it should not reload the preloaded languages', function () { expect(spy.callCount).to.equal(0); // de-DE the missing one }); }); }); describe.skip('[WONT FIX - HARD DEPRECATION]with synchronous flag', function () { beforeEach(function () { i18n.init(i18n.functions.extend(opts, { getAsync: false })); }); it('it should provide loaded resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); }); describe('with namespace', function () { describe('with one namespace set', function () { beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { ns: 'ns.special' }), function (t) { done(); }); }); it('it should provide loaded resources for translation', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_special_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_special_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_special_dev'); }); }); describe('with more than one namespace set', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { ns: { namespaces: ['ns.common', 'ns.special'], defaultNs: 'ns.special' }, }), function (t) { done(); }, ); }); it('it should provide loaded resources for translation', function () { // default ns expect(i18n.t('simple_en-US')).to.equal('ok_from_special_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_special_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_special_dev'); // ns prefix expect(i18n.t('ns.common:simple_en-US')).to.equal('ok_from_common_en-US'); expect(i18n.t('ns.common:simple_en')).to.equal('ok_from_common_en'); expect(i18n.t('ns.common:simple_dev')).to.equal('ok_from_common_dev'); // ns in options expect(i18n.t('simple_en-US', { ns: 'ns.common' })).to.equal('ok_from_common_en-US'); expect(i18n.t('simple_en', { ns: 'ns.common' })).to.equal('ok_from_common_en'); expect(i18n.t('simple_dev', { ns: 'ns.common' })).to.equal('ok_from_common_dev'); }); describe('and fallbacking to default namespace', function () { var resStore = { dev: { 'ns.special': { simple_dev: 'ok_from_dev' } }, en: { 'ns.special': { simple_en: 'ok_from_en' } }, 'en-US': { 'ns.special': { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { fallbackToDefaultNS: true, resStore: resStore, ns: { namespaces: ['ns.common', 'ns.special'], defaultNs: 'ns.special' }, }), function (t) { done(); }, ); }); it('it should fallback to default ns', function () { // default ns fallback lookup expect(i18n.t('ns.common:simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('ns.common:simple_en')).to.equal('ok_from_en'); expect(i18n.t('ns.common:simple_dev')).to.equal('ok_from_dev'); // ns in options expect(i18n.t('simple_en-US', { ns: 'ns.common' })).to.equal('ok_from_en-US'); expect(i18n.t('simple_en', { ns: 'ns.common' })).to.equal('ok_from_en'); expect(i18n.t('simple_dev', { ns: 'ns.common' })).to.equal('ok_from_dev'); }); }); describe('and fallbacking to set namespace', function () { var resStore = { dev: { 'ns.special': { simple_dev: 'ok_from_dev' }, 'ns.fallback': { simple_fallback: 'ok_from_fallback' }, }, en: { 'ns.special': { simple_en: 'ok_from_en' } }, 'en-US': { 'ns.special': { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { fallbackNS: 'ns.fallback', resStore: resStore, ns: { namespaces: ['ns.common', 'ns.special', 'ns.fallback'], defaultNs: 'ns.special', }, }), function (t) { done(); }, ); }); it('it should fallback to set fallback namespace', function () { expect(i18n.t('ns.common:simple_fallback')).to.equal('ok_from_fallback'); }); }); describe('and fallbacking to multiple set namespace', function () { var resStore = { dev: { 'ns.common': {}, 'ns.special': { simple_dev: 'ok_from_dev' }, 'ns.fallback1': { simple_fallback: 'ok_from_fallback1', simple_fallback1: 'ok_from_fallback1', }, }, en: { 'ns.special': { simple_en: 'ok_from_en' }, 'ns.fallback2': { simple_fallback: 'ok_from_fallback2', simple_fallback2: 'ok_from_fallback2', }, }, 'en-US': { 'ns.special': { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { fallbackNS: ['ns.fallback1', 'ns.fallback2'], resStore: resStore, ns: { namespaces: ['ns.common', 'ns.special', 'ns.fallback'], defaultNs: 'ns.special', }, }), function (t) { done(); }, ); }); it('it should fallback to set fallback namespace', function () { expect(i18n.t('ns.common:simple_fallback')).to.equal( 'ok_from_fallback1', ); /* first wins */ expect(i18n.t('ns.common:simple_fallback1')).to.equal('ok_from_fallback1'); expect(i18n.t('ns.common:simple_fallback2')).to.equal('ok_from_fallback2'); }); describe('and post missing', function () { var spy; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { fallbackNS: ['ns.fallback1', 'ns.fallback2'], resStore: resStore, sendMissing: true /* must be changed to saveMissing */, ns: { namespaces: ['ns.common', 'ns.special', 'ns.fallback'], defaultNs: 'ns.special', }, }), function (err, t) { spy = sinon.spy(httpApi, 'create'); t('ns.common:notExisting'); done(); }, ); }); afterEach(function () { spy.restore(); }); it('it should post only to origin namespace', function () { expect(spy.callCount).to.equal(1); expect(spy.args[0][0][0]).to.equal('en-US'); expect(spy.args[0][1]).to.equal('ns.common'); expect(spy.args[0][2]).to.equal('notExisting'); expect(spy.args[0][3]).to.equal('notExisting'); }); }); }); }); describe('with reloading additional namespace', function () { describe('without using localStorage', function () { beforeEach(function (done) { i18n.init(opts, function (t) { i18n.setDefaultNamespace('ns.special'); i18n.loadNamespaces(['ns.common', 'ns.special'], done); }); }); it('it should provide loaded resources for translation', function () { // default ns expect(i18n.t('simple_en-US')).to.equal('ok_from_special_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_special_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_special_dev'); // ns prefix expect(i18n.t('ns.common:simple_en-US')).to.equal('ok_from_common_en-US'); expect(i18n.t('ns.common:simple_en')).to.equal('ok_from_common_en'); expect(i18n.t('ns.common:simple_dev')).to.equal('ok_from_common_dev'); // ns in options expect(i18n.t('simple_en-US', { ns: 'ns.common' })).to.equal('ok_from_common_en-US'); expect(i18n.t('simple_en', { ns: 'ns.common' })).to.equal('ok_from_common_en'); expect(i18n.t('simple_dev', { ns: 'ns.common' })).to.equal('ok_from_common_dev'); }); it('it should add the new namespaces to the namespace array', function () { expect(i18n.options.ns).to.contain('ns.common'); expect(i18n.options.ns).to.contain('ns.special'); }); describe('and fallbackToDefaultNS turned on', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { ns: 'ns.common', fallbackToDefaultNS: true, }), function (t) { i18n.loadNamespaces(['ns.special'], done); }, ); }); it('it should fallback to default namespace', function () { expect(i18n.t('ns.special:test.fallback_en')).to.equal( 'ok_from_common_en-fallback', ); expect(i18n.t('ns.special:test.fallback_dev')).to.equal( 'ok_from_common_dev-fallback', ); }); }); }); // cache was removed // describe('with using localStorage', function() { // // var spy; // // before(function() { // if (typeof window !== 'undefined') { // safe use on server // window.localStorage.removeItem('res_en-US'); // window.localStorage.removeItem('res_en'); // window.localStorage.removeItem('res_dev'); // } // }); // // beforeEach(function(done) { // spy = sinon.spy(httpApi, 'read'); // i18n.init(i18n.functions.extend(opts, { // useLocalStorage: true // }), function(t) { // i18n.setDefaultNamespace('ns.special'); // i18n.loadNamespaces(['ns.common', 'ns.special'], done); // }); // }); // // afterEach(function() { // spy.restore(); // }); // // it('it should load language', function() { // expect(spy.callCount).to.equal(9); // en-US, en, de-DE, de, fr, dev * 3 namespaces (translate, common, special) // }); // // describe('on later reload of namespaces', function() { // // beforeEach(function(done) { // spy.reset(); // i18n.init(i18n.functions.extend(opts, { // useLocalStorage: true, // ns: 'translation' // }), function(t) { // i18n.setDefaultNamespace('ns.special'); // i18n.loadNamespaces(['ns.common', 'ns.special'], done); // }); // }); // // it('it should not reload language', function() { // expect(spy.callCount).to.equal(0); // }); // // }); // // }); // }); }); // describe('using localStorage', function() { // // var spy; // // before(function() { // window.localStorage.removeItem('res_en-US'); // window.localStorage.removeItem('res_en'); // window.localStorage.removeItem('res_dev'); // }); // // beforeEach(function(done) { // spy = sinon.spy(httpApi, 'read'); // i18n.init(i18n.functions.extend(opts, { // useLocalStorage: true // }), function(t) { done(); }); // }); // // afterEach(function() { // spy.restore(); // }); // // it('it should load language', function() { // expect(spy.callCount).to.equal(3); // en-US, en, de-DE, de, fr, dev // }); // // describe('on later init', function() { // // beforeEach(function(done) { // spy.reset(); // i18n.init(function(t) { done(); }); // }); // // it('it should not reload language', function() { // expect(spy.callCount).to.equal(0); // de-DE, de, fr, dev // }); // // describe('on later init - after caching duration', function() { // // beforeEach(function(done) { // spy.reset(); // // // expired // var local = window.localStorage.getItem('res_en-US'); // local = JSON.parse(local); // local.i18nStamp = 0; // window.localStorage.setItem('res_en-US', JSON.stringify(local)); // // i18n.init(function(t) { done(); }); // }); // // it('it should reload language', function() { // expect(spy.callCount).to.equal(1); // de-DE, de, fr, dev // }); // // }); // // }); // // }); describe("using function provided in callback's argument", function () { var cbT; var resStore = { dev: { translation: { simple_dev: 'ok_from_dev' } }, en: { translation: { simple_en: 'ok_from_en' } }, 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (err, t) { cbT = t; done(); }); }); it('it should provide loaded resources for translation', function () { expect(cbT('simple_en-US')).to.equal('ok_from_en-US'); expect(cbT('simple_en')).to.equal('ok_from_en'); expect(cbT('simple_dev')).to.equal('ok_from_dev'); }); }); describe('with lowercase flag', function () { describe('default behaviour will uppercase specific country part.', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { lng: 'en-us', resStore: { 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }, }), function (t) { done(); }, ); }); it('it should translate the uppercased lng value', function () { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); }); it('it should get uppercased set language', function () { expect(i18n.lng()).to.equal('en-US'); }); }); describe('overridden behaviour will accept lowercased country part.', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { lng: 'en-us', lowerCaseLng: true, resStore: { 'en-us': { translation: { 'simple_en-us': 'ok_from_en-us' } }, }, }), function (t) { done(); }, ); }); it('it should translate the lowercase lng value', function () { expect(i18n.t('simple_en-us')).to.equal('ok_from_en-us'); }); it('it should get lowercased set language', function () { expect(i18n.lng()).to.equal('en-us'); }); }); }); describe('with language whitelist', function () { var resStore = { 'zh-CN': { translation: { string_one: 'good_zh-CN' } }, en: { translation: { string_one: 'good_en' } }, zh: { translation: { string_one: 'BAD_zh' } }, 'en-US': { translation: { string_one: 'BAD_en-ZH' } }, }; it('should degrade UNwhitelisted 2-part lang code (en-US) to WHITELISTED 1-part (en)', function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, lngWhitelist: ['en', 'zh-CN'], lng: 'en-US', }), function () { expect(i18n.lng()).to.equal('en'); expect(i18n.t('string_one')).to.equal('good_en'); done(); }, ); }); it('should NOT degrade WHITELISTED 2-part lang code (zh-CN) to UNwhitelisted 1-part (en)', function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, lngWhitelist: ['en', 'zh-CN'], lng: 'zh-CN', }), function () { expect(i18n.lng()).to.equal('zh-CN'); expect(i18n.t('string_one')).to.equal('good_zh-CN'); done(); }, ); }); }); }); }); describe('basic functionality', function () { describe('CI mode', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: { 'en-US': { translation: { simpleTest: 'ok_from_en-US' } }, 'de-DE': { translation: { simpleTest: 'ok_from_de-DE' } }, }, }), function (t) { done(); }, ); }); it('it should provide resources for set language', function (done) { expect(i18n.t('simpleTest')).to.equal('ok_from_en-US'); i18n.setLng('CIMode', function (err, t) { expect(t('simpleTest')).to.equal('simpleTest'); done(); }); }); }); describe('setting language', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: { 'en-US': { translation: { simpleTest: 'ok_from_en-US' } }, 'de-DE': { translation: { simpleTest: 'ok_from_de-DE' } }, }, }), function (t) { done(); }, ); }); it('it should provide resources for set language', function (done) { expect(i18n.t('simpleTest')).to.equal('ok_from_en-US'); i18n.setLng('de-DE', function (err, t) { expect(t('simpleTest')).to.equal('ok_from_de-DE'); done(); }); }); it('should be possible to call setLng multiple times to get specialized callbacks', function (done) { i18n.setLng('de-DE', { fixLng: true }, function (err, deDE) { expect(deDE.lng).to.equal('de-DE'); i18n.setLng('en-US', { fixLng: true }, function (err, enUS) { expect(deDE.lng).to.equal('de-DE'); expect(enUS.lng).to.equal('en-US'); expect(deDE('simpleTest')).to.equal('ok_from_de-DE'); expect(enUS('simpleTest')).to.equal('ok_from_en-US'); done(); }); }); }); }); describe('preloading multiple languages', function () { var spy; beforeEach(function (done) { spy = sinon.spy(httpApi, 'read'); i18n.init(opts, function (t) { done(); }); }); afterEach(function () { spy.restore(); }); it('it should preload resources for languages', function (done) { spy.resetHistory(); //if (i18n.sync.resStore) i18n.sync.resStore = {}; // to reset for test on server! i18n.preload('de-DE', function (t) { expect(spy.callCount).to.equal(2); // de-DE, de done(); }); }); }); describe('postprocessing tranlation', function () { describe('having a postprocessor', function () { before(function () { i18n.addPostProcessor('myProcessor', function (val, key, opts) { return 'ok_from_postprocessor'; }); i18n.addPostProcessor('myProcessor2', function (val, key, opts) { return val + ' ok'; }); }); beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: { 'en-US': { translation: { simpleTest: 'ok_from_en-US' } }, 'de-DE': { translation: { simpleTest: 'ok_from_de-DE' } }, }, }), function (t) { done(); }, ); }); it('it should postprocess the translation by passing in postProcess name to t function', function () { expect(i18n.t('simpleTest', { postProcess: 'myProcessor' })).to.equal( 'ok_from_postprocessor', ); }); it('it should postprocess on default value', function () { expect( i18n.t('notFound1', { defaultValue: 'defaultValue', postProcess: 'myProcessor2' }), ).to.equal('defaultValue ok'); }); it('it should postprocess on missing value', function () { expect(i18n.t('notFound2', { postProcess: 'myProcessor2' })).to.equal('notFound2 ok'); }); it('it should postprocess with multiple post processors', function () { expect(i18n.t('simpleTest', { postProcess: ['myProcessor', 'myProcessor2'] })).to.equal( 'ok_from_postprocessor ok', ); }); it('it should postprocess on missing value with multiple post processes', function () { expect(i18n.t('notFound2', { postProcess: ['myProcessor', 'myProcessor2'] })).to.equal( 'ok_from_postprocessor ok', ); }); describe('or setting it as default on init', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: { 'en-US': { translation: { simpleTest: 'ok_from_en-US' } }, 'de-DE': { translation: { simpleTest: 'ok_from_de-DE' } }, }, postProcess: 'myProcessor', shortcutFunction: 'defaultValue', }), function (t) { done(); }, ); }); it('it should postprocess the translation by default', function () { expect(i18n.t('simpleTest')).to.equal('ok_from_postprocessor'); }); }); }); }); describe('post missing resources', function () { describe('to fallback', function () { var server, stub, spy; beforeEach(function (done) { server = sinon.fakeServer.create(); spy = sinon.spy(httpApi, 'create'); //spy = sinon.spy(i18n.services.backendConnector, 'saveMissing'); server.respondWith([200, { 'Content-Type': 'text/html', 'Content-Length': 2 }, 'OK']); i18n.init( i18n.functions.extend(opts, { sendMissing: true, resStore: { 'en-US': { translation: {} }, en: { translation: {} }, dev: { translation: {} }, }, }), function (t) { done(); }, ); }); afterEach(function () { server.restore(); //stub.restore(); spy.restore(); }); it('it should post missing resource to server', function () { i18n.t('missing'); server.respond(); expect(spy.calledOnce).to.equal(true); }); it('it should post missing resource to server when language is passed in', function () { i18n.t('missing_en', { lng: 'en' }); server.respond(); expect(spy.calledOnce).to.equal(true); }); it('it should call with right arguments', function () { i18n.t('missing'); expect(spy.args[0][0][0]).to.equal('en-US'); expect(spy.args[0][1]).to.equal('translation'); expect(spy.args[0][2]).to.equal('missing'); expect(spy.args[0][3]).to.equal('missing'); }); describe('with fallbackLng set to false', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { lng: 'de', sendMissing: true, fallbackLng: false, sendMissingTo: 'fallback', resStore: { 'en-US': { translation: {} }, en: { translation: {} }, dev: { translation: {} }, }, }), function (t) { done(); }, ); }); it('it should post missing resource to server', function () { i18n.t('missing'); server.respond(); expect(spy.calledOnce).to.equal(true); }); it('it should call post missing with right arguments', function () { i18n.t('missing'); expect(spy.args[0][0][0]).to.equal('de'); expect(spy.args[0][1]).to.equal('translation'); expect(spy.args[0][2]).to.equal('missing'); expect(spy.args[0][3]).to.equal('missing'); }); it.skip('[NOT EXPOSED] it should call ajax with right arguments', function () { i18n.t('missing'); expect(stub.args[0][0].url).to.equal('locales/add/de/translation'); }); }); }); describe('to current', function () { var server, spy; beforeEach(function (done) { server = sinon.fakeServer.create(); spy = sinon.stub(httpApi, 'create'); server.respondWith([200, { 'Content-Type': 'text/html', 'Content-Length': 2 }, 'OK']); i18n.init( i18n.functions.extend(opts, { sendMissing: true, sendMissingTo: 'current', //fallbackLng: false, resStore: { 'en-US': { translation: {} }, en: { translation: {} }, dev: { translation: {} }, }, }), function (t) { done(); }, ); }); afterEach(function () { server.restore(); spy.restore(); }); it('it should post missing resource for all lng to server', function () { i18n.t('missing'); server.respond(); expect(spy.calledOnce).to.equal(true); }); it('it should call post missing with right arguments', function () { i18n.t('missing2'); expect(spy.args[0][0][0]).to.equal('en-US'); expect(spy.args[0][1]).to.equal('translation'); expect(spy.args[0][2]).to.equal('missing2'); expect(spy.args[0][3]).to.equal('missing2'); }); }); describe('to all', function () { var server, spy; beforeEach(function (done) { server = sinon.fakeServer.create(); spy = sinon.spy(httpApi, 'create'); server.respondWith([200, { 'Content-Type': 'text/html', 'Content-Length': 2 }, 'OK']); i18n.init( i18n.functions.extend(opts, { sendMissing: true, sendMissingTo: 'all', resStore: { 'en-US': { translation: {} }, en: { translation: {} }, dev: { translation: {} }, }, }), function (t) { done(); }, ); }); afterEach(function () { server.restore(); spy.restore(); }); it('it should post missing resource for all lng to server', function () { i18n.t('missing'); server.respond(); expect(spy.calledOnce).to.equal(true); }); it('it should call post missing with right arguments', function () { i18n.t('missing2'); expect(spy.args[0][0]).to.eql(['en-US', 'en', 'dev']); expect(spy.args[0][1]).to.equal('translation'); expect(spy.args[0][2]).to.equal('missing2'); expect(spy.args[0][3]).to.equal('missing2'); }); }); }); describe('using objectTreeKeyHandler', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { objectTreeKeyHandler: function (key, value, lng, ns, opts) { return i18n.t(key + '.a'); }, resStore: { 'en-US': { translation: { simpleTest: { a: 'a value', b: 'b value' } } }, }, returnObjectTrees: false, }), function (t) { done(); }, ); }); it('it should apply objectTreeKeyHandler', function () { expect(i18n.t('simpleTest')).to.equal('a value'); }); }); describe.skip('[WONT BE EXPOSED AS I18N]Global variable conflict', function () { it( 'it should rename global "window.i18n" to "window.i18next"' + ' and restore window.i18n conflicting reference', function () { window.i18n.noConflict(); expect(window.i18n.isFakeConflictingLib).to.equal(true); expect(window.i18next).to.be.an(Object); expect(window.i18next.t).to.be.a(Function); }, ); }); }); describe('translation functionality', function () { describe('keys with non supported values', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { test: 'hi', }, }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should not break on null key', function () { expect(i18n.t(null)).to.equal(''); }); it('it should not break on undefined key', function () { expect(i18n.t(undefined)).to.equal(''); }); it('it should stringify first on number key', function () { expect(i18n.t(1)).to.equal(i18n.t('1')); expect(i18n.t(1.1)).to.equal(i18n.t('1.1')); }); }); describe('resource is missing', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should return key', function () { expect(i18n.t('missing')).to.equal('translation:missing'); }); it('it should return default value if set', function () { expect(i18n.t('missing', { defaultValue: 'defaultOfMissing' })).to.equal( 'defaultOfMissing', ); }); describe('with namespaces', function () { it('it should return key', function () { expect(i18n.t('translate:missing')).to.equal('translate:missing'); }); it('it should return default value if set', function () { expect(i18n.t('translate:missing', { defaultValue: 'defaultOfMissing' })).to.equal( 'defaultOfMissing', ); }); describe('and function parseMissingKey set', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { parseMissingKey: function (key) { var ret = key; if (ret.indexOf(':')) { ret = ret.substring(ret.lastIndexOf(':') + 1, ret.length); } if (ret.indexOf('.')) { ret = ret.substring(ret.lastIndexOf('.') + 1, ret.length); } return ret; }, }), function (t) { done(); }, ); }); it('it should parse key', function () { expect(i18n.t('translate:missing')).to.equal('missing'); expect(i18n.t('translate:somenesting.missing')).to.equal('missing'); }); it('it should return default value if set', function () { expect(i18n.t('translate:missing', { defaultValue: 'defaultOfMissing' })).to.equal( 'defaultOfMissing', ); }); }); }); }); describe('Check for existence of keys', function () { var resStore = { dev: { translation: { iExist: '' } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should exist', function () { expect(i18n.exists('iExist')).to.equal(true); }); it('it should not exist', function () { expect(i18n.exists('iDontExist')).to.equal(false); }); describe('missing on unspecific', function () { var resStore = { dev: { translation: { iExist: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore, lng: 'en' }), function (t) { done(); }); }); it('it should exist', function () { expect(i18n.exists('iExist')).to.equal(true); }); it('it should not exist', function () { expect(i18n.exists('iDontExist')).to.equal(false); }); }); }); describe('resource string is null', function () { var resStore = { dev: { translation: { key1: null, key2: { key3: null } } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, returnObjectTrees: true, fallbackOnNull: false, }), function (t) { done(); }, ); }); it('it should translate value', function () { expect(i18n.t('key1')).to.equal(null); expect(i18n.t('key2')).to.eql({ key3: null }); }); describe('with option fallbackOnNull = true', function () { var resStore = { dev: { translation: { key1: 'fallbackKey1', key2: { key3: 'fallbackKey3' } } }, en: { translation: {} }, 'en-US': { translation: { key1: null, key2: { key3: null } } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, fallbackOnNull: true }), function (t) { done(); }, ); }); it('it should translate to fallback value', function () { expect(i18n.t('key1')).to.equal('fallbackKey1'); expect(i18n.t('key2.key3')).to.eql('fallbackKey3'); }); }); }); describe('key with empty string value as valid option', function () { var resStore = { dev: { translation: { empty: '' } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should translate correctly', function () { expect(i18n.t('empty')).to.equal(''); }); describe('missing on unspecific', function () { var resStore = { dev: { translation: { empty: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore, lng: 'en' }), function (t) { done(); }); }); it('it should translate correctly', function () { expect(i18n.t('empty')).to.equal('text'); }); }); describe('on specific language', function () { var resStore = { dev: { translation: { empty: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should translate correctly', function () { expect(i18n.t('empty')).to.equal(''); }); }); }); describe('key with empty string set to fallback if empty', function () { var resStore = { dev: { translation: { empty: '' } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, fallbackOnEmpty: true }), function (t) { done(); }, ); }); it('it should translate correctly', function () { expect(i18n.t('empty')).to.equal('translation:empty'); }); describe('missing on unspecific', function () { var resStore = { dev: { translation: { empty: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, lng: 'en', fallbackOnEmpty: true }), function (t) { done(); }, ); }); it('it should translate correctly', function () { expect(i18n.t('empty')).to.equal('text'); }); }); describe('on specific language', function () { var resStore = { dev: { translation: { empty: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, fallbackOnEmpty: true }), function (t) { done(); }, ); }); it('it should translate correctly', function () { expect(i18n.t('empty')).to.equal('text'); }); }); }); describe('resource key as array', function () { var resStore = { dev: { translation: { existing1: 'hello _name_', existing2: 'howdy __name__' } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); describe('when none of the keys exist', function () { it('return the same value as translating the last non-existent key', function () { expect(i18n.t(['nonexistent1', 'nonexistent2'], { name: 'Joe' })).to.equal( i18n.t('nonexistent2', { name: 'Joe' }), ); }); }); describe('when one of the keys exist', function () { it('return the same value as translating the one existing key', function () { expect(i18n.t(['nonexistent1', 'existing2'], { name: 'Joe' })).to.equal( i18n.t('existing2', { name: 'Joe' }), ); }); }); describe('when two or more of the keys exist', function () { it('return the same value as translating the first existing key', function () { expect(i18n.t(['nonexistent1', 'existing2', 'existing1'], { name: 'Joe' })).to.equal( i18n.t('existing2', { name: 'Joe' }), ); }); }); }); describe('resource string as array', function () { var resStore = { dev: { translation: { testarray: ['title', 'text'] } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should translate nested value', function () { expect(i18n.t('testarray')).to.equal('title\ntext'); }); }); describe('accessing tree values', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { test: { 'simple_en-US': 'ok_from_en-US' }, }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, }), function (t) { done(); }, ); }); it('it should return nested string as usual', function () { expect(i18n.t('test.simple_en-US')).to.equal('ok_from_en-US'); }); it('it should not fail silently on accessing an objectTree', function () { expect(i18n.t('test')).to.equal("key 'test (en-US)' returned an object instead of string."); }); describe('optional return an objectTree for UI components,...', function () { describe('with init flag', function () { var resStore = { dev: { translation: { test_dev: { res_dev: 'added __replace__' }, }, }, en: { translation: {} }, 'en-US': { translation: { test_en_US: { res_en_US: 'added __replace__' }, }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { returnObjectTrees: true, resStore: resStore, }), function (t) { done(); }, ); }); it('it should return objectTree applying options', function () { expect(i18n.t('test_en_US', { replace: 'two' })).to.eql({ res_en_US: 'added two' }); expect(i18n.t('test_en_US', { replace: 'three' })).to.eql({ res_en_US: 'added three' }); expect(i18n.t('test_en_US', { replace: 'four' })).to.eql({ res_en_US: 'added four' }); // from fallback expect(i18n.t('test_dev', { replace: 'two' })).to.eql({ res_dev: 'added two' }); }); }); describe('with flag in options', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { test: { res: 'added __replace__', id: 0, regex: /test/, func: function () {}, template: '4', title: 'About...', text: 'Site description', media: ['test'], }, }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { returnObjectTrees: false, resStore: resStore, }), function (t) { done(); }, ); }); it('it should return objectTree', function () { expect(i18n.t('test', { returnObjectTrees: true, replace: 'two' })).to.eql({ res: 'added two', id: 0, regex: resStore['en-US'].translation.test.regex, func: resStore['en-US'].translation.test.func, template: '4', title: 'About...', text: 'Site description', media: ['test'], }); //expect(i18n.t('test', { returnObjectTrees: true, replace: 'three' })).to.eql({ 'res': 'added three' }); //expect(i18n.t('test', { returnObjectTrees: true, replace: 'four' })).to.eql({ 'res': 'added four' }); }); }); }); }); describe('resource nesting', function () { var resStore = { dev: { translation: { nesting1: '1 $t(nesting2)' } }, en: { translation: { nesting2: '2 $t(nesting3)' } }, 'en-US': { translation: { nesting3: '3' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should translate nested value', function () { expect(i18n.t('nesting1')).to.equal('1 2 3'); }); it('it should apply nested value on defaultValue', function () { expect(i18n.t('nesting_default', { defaultValue: '0 $t(nesting1)' })).to.equal('0 1 2 3'); }); describe('resource nesting syntax error', function () { var resStore = { dev: { translation: { nesting1: '1 $t(nesting2' } }, en: { translation: { nesting2: '2 $t(nesting3)' } }, 'en-US': { translation: { nesting3: '3' } }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it.skip('[WONT FIX - FIX YOUR APPLICATION]it should translate nested value', function () { expect(i18n.t('nesting1')).to.equal(''); }); }); describe('with setting new options', function () { var resStore = { dev: { translation: { nesting1: '$t(nesting2, {"count": __girls__}) and __count__ boy', nesting1_plural: '$t(nesting2, {"count": __girls__}) and __count__ boys', }, }, en: { translation: { nesting2: '__count__ girl', nesting2_plural: '__count__ girls', }, }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should translate nested value and set new options', function () { expect(i18n.t('nesting1', { count: 2, girls: 3 })).to.equal('3 girls and 2 boys'); expect(i18n.t('nesting1', { count: 1, girls: 3 })).to.equal('3 girls and 1 boy'); }); }); }); describe('resource nesting with multiple namespaces and fallbackNS', function () { var resStore = { dev: { translation1: { nesting1: '1 $t(nesting2)' } }, en: { translation: { nesting2: '2 $t(nesting3)' } }, 'en-US': { translation: { nesting3: '3' } }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, ns: { namespaces: ['translation1', 'translation'], defaultNs: 'translation1' }, fallbackNS: ['translation'], }), function (t) { done(); }, ); }); it('it should translate nested value', function () { expect(i18n.t('translation1:nesting1')).to.equal('1 2 3'); }); }); describe('interpolation - replacing values inside a string', function () { describe('default i18next way', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added __toAdd__', interpolationTest2: 'added __toAdd__ __toAdd__ twice', interpolationTest3: 'added __child.one__ __child.two__', interpolationTest4: 'added __child.grandChild.three__', }, }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should replace passed in key/values', function () { expect(i18n.t('interpolationTest1', { toAdd: 'something' })).to.equal('added something'); expect(i18n.t('interpolationTest1', { toAdd: null })).to.equal('added '); expect(i18n.t('interpolationTest1', {})).to.equal('added '); expect(i18n.t('interpolationTest2', { toAdd: 'something' })).to.equal( 'added something something twice', ); expect(i18n.t('interpolationTest3', { child: { one: '1', two: '2' } })).to.equal( 'added 1 2', ); expect(i18n.t('interpolationTest4', { child: { grandChild: { three: '3' } } })).to.equal( 'added 3', ); }); it('it should replace passed in key/values in replace member', function () { expect(i18n.t('interpolationTest1', { replace: { toAdd: 'something' } })).to.equal( 'added something', ); expect(i18n.t('interpolationTest2', { replace: { toAdd: 'something' } })).to.equal( 'added something something twice', ); expect( i18n.t('interpolationTest3', { replace: { child: { one: '1', two: '2' } } }), ).to.equal('added 1 2'); expect( i18n.t('interpolationTest4', { replace: { child: { grandChild: { three: '3' } } } }), ).to.equal('added 3'); }); it('it should not escape HTML', function () { expect(i18n.t('interpolationTest1', { toAdd: '' })).to.equal('added '); }); it('it should replace passed in key/values on defaultValue', function () { expect( i18n.t('interpolationTest5', { defaultValue: 'added __toAdd__', toAdd: 'something' }), ).to.equal('added something'); }); it('it should escape dollar signs in replacement values', function () { expect(i18n.t('interpolationTest1', { toAdd: '$&' })).to.equal('added $&'); }); }); describe('default i18next way - different prefix/suffix', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added *toAdd*', interpolationTest2: 'added *toAdd* *toAdd* twice', interpolationTest3: 'added *child.one* *child.two*', interpolationTest4: 'added *child.grandChild.three*', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, interpolationPrefix: '*', interpolationSuffix: '*', }), function (t) { done(); }, ); }); it('it should replace passed in key/values', function () { expect(i18n.t('interpolationTest1', { toAdd: 'something' })).to.equal('added something'); expect(i18n.t('interpolationTest2', { toAdd: 'something' })).to.equal( 'added something something twice', ); expect(i18n.t('interpolationTest3', { child: { one: '1', two: '2' } })).to.equal( 'added 1 2', ); expect(i18n.t('interpolationTest4', { child: { grandChild: { three: '3' } } })).to.equal( 'added 3', ); }); it('it should replace passed in key/values on defaultValue', function () { expect( i18n.t('interpolationTest5', { defaultValue: 'added *toAdd*', toAdd: 'something' }), ).to.equal('added something'); }); }); describe('default i18next way - different prefix/suffix via options', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added *toAdd*', interpolationTest2: 'added *toAdd* *toAdd* twice', interpolationTest3: 'added *child.one* *child.two*', interpolationTest4: 'added *child.grandChild.three*', interpolationTest5: 'added *count*', interpolationTest5_plural: 'added *count*', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, }), function (t) { done(); }, ); }); it('it should replace passed in key/values', function () { expect( i18n.t('interpolationTest1', { toAdd: 'something', interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added something'); expect( i18n.t('interpolationTest2', { toAdd: 'something', interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added something something twice'); expect( i18n.t('interpolationTest3', { child: { one: '1', two: '2' }, interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added 1 2'); expect( i18n.t('interpolationTest4', { child: { grandChild: { three: '3' } }, interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added 3'); expect( i18n.t('interpolationTest5', { count: 3, interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added 3'); }); it('it should replace passed in key/values on defaultValue', function () { expect( i18n.t('interpolationTest6', { defaultValue: 'added *toAdd*', toAdd: 'something', interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added something'); }); }); describe('default i18next way - with escaping interpolated arguments per default', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added __toAdd__', interpolationTest5: 'added __toAddHTML__', interpolationTest6: 'added __child.oneHTML__', interpolationTest7: 'added __toAddHTML__ __toAdd__', interpolationTest8: 'added __toAdd1__ __toAdd2__', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, escapeInterpolation: true, }), function (t) { done(); }, ); }); it('it should escape HTML', function () { expect(i18n.t('interpolationTest1', { toAdd: '' })).to.equal('added <html>'); }); it('it should not escape when HTML is suffixed', function () { expect(i18n.t('interpolationTest5', { toAdd: '' })).to.equal('added '); expect(i18n.t('interpolationTest6', { child: { one: '<1>' } })).to.equal('added <1>'); }); it('it should support both escaping and not escaping HTML', function () { expect( i18n.t('interpolationTest7', { toAdd: '', escapeInterpolation: true }), ).to.equal('added <html>'); }); it('should not accept interpolations from inside interpolations', function () { expect( i18n.t('interpolationTest8', { toAdd1: '__toAdd2HTML__', toAdd2: '' }), ).to.equal('added <html>'); }); it('it should escape dollar signs in replacement values', function () { expect(i18n.t('interpolationTest1', { toAdd: '$&' })).to.equal('added $&'); }); }); describe('default i18next way - with escaping interpolated arguments per default via options', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added __toAdd__', interpolationTest5: 'added __toAddHTML__', interpolationTest6: 'added __child.oneHTML__', interpolationTest7: 'added __toAddHTML__ __toAdd__', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, }), function (t) { done(); }, ); }); it('it should escape HTML', function () { expect( i18n.t('interpolationTest1', { toAdd: '', escapeInterpolation: true }), ).to.equal('added <html>'); }); it('it should not escape when HTML is suffixed', function () { expect( i18n.t('interpolationTest5', { toAdd: '', escapeInterpolation: true }), ).to.equal('added '); expect( i18n.t('interpolationTest6', { child: { one: '<1>', escapeInterpolation: true } }), ).to.equal('added <1>'); }); it('it should support both escaping and not escaping HTML', function () { expect( i18n.t('interpolationTest7', { toAdd: '', escapeInterpolation: true }), ).to.equal('added <html>'); }); it('it should escape dollar signs in replacement values', function () { expect(i18n.t('interpolationTest1', { toAdd: '$&', escapeInterpolation: true })).to.equal( 'added $&', ); }); }); describe('using sprintf', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'The first 4 letters of the english alphabet are: %s, %s, %s and %s', interpolationTest2: 'Hello %(users[0].name)s, %(users[1].name)s and %(users[2].name)s', interpolationTest3: 'The last letter of the english alphabet is %s', interpolationTest4: 'Water freezes at %d degrees', }, }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should replace passed in key/values', function () { expect( i18n.t('interpolationTest1', { postProcess: 'sprintf', sprintf: ['a', 'b', 'c', 'd'] }), ).to.equal('The first 4 letters of the english alphabet are: a, b, c and d'); expect( i18n.t('interpolationTest2', { postProcess: 'sprintf', sprintf: { users: [{ name: 'Dolly' }, { name: 'Molly' }, { name: 'Polly' }] }, }), ).to.equal('Hello Dolly, Molly and Polly'); }); it('it should recognize the sprintf syntax and automatically add the sprintf processor', function () { expect(i18n.t('interpolationTest1', 'a', 'b', 'c', 'd')).to.equal( 'The first 4 letters of the english alphabet are: a, b, c and d', ); expect(i18n.t('interpolationTest3', 'z')).to.equal( 'The last letter of the english alphabet is z', ); expect(i18n.t('interpolationTest4', 0)).to.equal('Water freezes at 0 degrees'); }); }); describe('with default variables', function () { var defaultVariables = { name: 'John', }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { defaultVariables: defaultVariables }), function (t) { done(); }, ); }); it('it should use default variable', function () { expect(i18n.t('Hello __name__')).to.equal('Hello John'); }); it('it should replace default variable', function () { expect(i18n.t('Hello __name__', { name: 'Ben' })).to.equal('Hello Ben'); }); }); }); describe('plural usage', function () { describe('basic usage - singular and plural form', function () { var resStore = { dev: { 'ns.2': { pluralTest: 'singular from ns.2', pluralTest_plural: 'plural from ns.2', pluralTestWithCount: '__count__ item from ns.2', pluralTestWithCount_plural: '__count__ items from ns.2', }, }, en: {}, 'en-US': { 'ns.1': { pluralTest: 'singular', pluralTest_plural: 'plural', pluralTestWithCount: '__count__ item', pluralTestWithCount_plural: '__count__ items', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, ns: { namespaces: ['ns.1', 'ns.2'], defaultNs: 'ns.1' }, }), function (t) { done(); }, ); }); it('it should provide correct plural or singular form', function () { expect(i18n.t('pluralTest', { count: 0 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 1 })).to.equal('singular'); expect(i18n.t('pluralTest', { count: 2 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 7 })).to.equal('plural'); }); it('it should provide correct plural or singular form with interpolation', function () { expect(i18n.t('pluralTestWithCount', { count: 0 })).to.equal('0 items'); expect(i18n.t('pluralTestWithCount', { count: 1 })).to.equal('1 item'); expect(i18n.t('pluralTestWithCount', { count: 7 })).to.equal('7 items'); }); it('it should provide correct plural or singular form for second namespace', function () { expect(i18n.t('ns.2:pluralTest', { count: 0 })).to.equal('plural from ns.2'); expect(i18n.t('ns.2:pluralTest', { count: 1 })).to.equal('singular from ns.2'); expect(i18n.t('ns.2:pluralTest', { count: 2 })).to.equal('plural from ns.2'); expect(i18n.t('ns.2:pluralTest', { count: 7 })).to.equal('plural from ns.2'); }); it('it should provide correct plural or singular form for second namespace with interpolation', function () { expect(i18n.t('ns.2:pluralTestWithCount', { count: 1 })).to.equal('1 item from ns.2'); expect(i18n.t('ns.2:pluralTestWithCount', { count: 7 })).to.equal('7 items from ns.2'); }); }); describe('fallback on count with non-plurals', function () { var resStore = { dev: { 'ns.2': { pluralTestWithCount: '__count__ item from ns.2', }, }, en: {}, 'en-US': { 'ns.1': { pluralTestWithCount: '__count__ item', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, ns: { namespaces: ['ns.1', 'ns.2'], defaultNs: 'ns.1' }, }), function (t) { done(); }, ); }); it('it should provide correct singular form', function () { expect(i18n.t('pluralTestWithCount', { count: 0 })).to.equal('0 item'); expect(i18n.t('pluralTestWithCount', { count: 1 })).to.equal('1 item'); expect(i18n.t('pluralTestWithCount', { count: 7 })).to.equal('7 item'); }); it('it should provide correct singular form for second namespace', function () { expect(i18n.t('ns.2:pluralTestWithCount', { count: 1 })).to.equal('1 item from ns.2'); expect(i18n.t('ns.2:pluralTestWithCount', { count: 7 })).to.equal('7 item from ns.2'); }); }); describe('Plurals with passing lng to translation function', function () { var resStore = { nl: { translation: { pluralTest: 'item', pluralTest_plural: 'items', pluralTestWithCount: '__count__ item', pluralTestWithCount_plural: '__count__ items', }, }, }; // beforeEach(function(done) { // i18n.init(i18n.functions.extend(opts, { // supportedLngs: ['nl'], // resStore: resStore // }), // function(t) { done(); }); // }); beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, }), function (t) { done(); }, ); }); it('should return the correct string for key', function () { expect(i18n.t('pluralTest', { count: 12, lng: 'nl' })).to.equal('items'); expect(i18n.t('pluralTest', { count: 0, lng: 'nl' })).to.equal('items'); }); it('should return the correct string for key with count interpoation', function () { expect(i18n.t('pluralTestWithCount', { count: 12, lng: 'nl' })).to.equal('12 items'); expect(i18n.t('pluralTestWithCount', { count: 0, lng: 'nl' })).to.equal('0 items'); }); }); describe('basic usage - singular and plural form on fallbacks', function () { var resStore = { fr: { translation: {}, }, en: { translation: { pluralTest: 'singular', pluralTest_plural: 'plural', pluralTestWithCount: '__count__ item', pluralTestWithCount_plural: '__count__ items', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, lng: 'fr', fallbackLng: 'en', }), function (t) { done(); }, ); }); it('it should provide correct plural or singular form', function () { expect(i18n.t('pluralTest', { count: 0 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 1 })).to.equal('singular'); expect(i18n.t('pluralTest', { count: 2 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 7 })).to.equal('plural'); }); it('it should provide correct plural or singular form with count', function () { expect(i18n.t('pluralTestWithCount', { count: 0 })).to.equal('0 items'); expect(i18n.t('pluralTestWithCount', { count: 1 })).to.equal('1 item'); expect(i18n.t('pluralTestWithCount', { count: 7 })).to.equal('7 items'); }); }); describe('basic usage 2 - singular and plural form in french', function () { var resStore = { dev: { 'ns.2': { pluralTest: 'singular from ns.2', pluralTest_plural: 'plural from ns.2', pluralTestWithCount: '__count__ item from ns.2', pluralTestWithCount_plural: '__count__ items from ns.2', }, }, en: {}, fr: { 'ns.1': { pluralTest: 'singular', pluralTest_plural: 'plural', pluralTestWithCount: '__count__ item', pluralTestWithCount_plural: '__count__ items', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { lng: 'fr', resStore: resStore, ns: { namespaces: ['ns.1', 'ns.2'], defaultNs: 'ns.1' }, }), function (t) { done(); }, ); }); it('it should provide correct plural or singular form', function () { expect(i18n.t('pluralTest', { count: 0 })).to.equal('singular'); expect(i18n.t('pluralTest', { count: 1 })).to.equal('singular'); expect(i18n.t('pluralTest', { count: 2 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 7 })).to.equal('plural'); }); it('it should provide correct plural or singular form with count', function () { expect(i18n.t('pluralTestWithCount', { count: 0 })).to.equal('0 item'); expect(i18n.t('pluralTestWithCount', { count: 1 })).to.equal('1 item'); expect(i18n.t('pluralTestWithCount', { count: 7 })).to.equal('7 items'); }); }); describe('extended usage - multiple plural forms - ar', function () { var resStore = { dev: { translation: {} }, ar: { translation: { key: 'singular', key_plural_0: 'zero', key_plural_2: 'two', key_plural_3: 'few', key_plural_11: 'many', key_plural_100: 'plural', }, }, 'ar-??': { translation: {} }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { lng: 'ar', resStore: resStore }), function (t) { done(); }); }); it('it should provide correct plural forms', function () { expect(i18n.t('key', { count: 0 })).to.equal('zero'); expect(i18n.t('key', { count: 1 })).to.equal('singular'); expect(i18n.t('key', { count: 2 })).to.equal('two'); expect(i18n.t('key', { count: 3 })).to.equal('few'); expect(i18n.t('key', { count: 4 })).to.equal('few'); expect(i18n.t('key', { count: 104 })).to.equal('few'); expect(i18n.t('key', { count: 11 })).to.equal('many'); expect(i18n.t('key', { count: 99 })).to.equal('many'); expect(i18n.t('key', { count: 199 })).to.equal('many'); expect(i18n.t('key', { count: 100 })).to.equal('plural'); }); }); describe('extended usage - multiple plural forms - ru', function () { var resStore = { dev: { translation: {} }, ru: { translation: { key: '1,21,31', key_plural_2: '2,3,4', key_plural_5: '0,5,6', }, }, 'ru-??': { translation: {} }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { lng: 'ru', resStore: resStore }), function (t) { done(); }); }); it('it should provide correct plural forms', function () { expect(i18n.t('key', { count: 0 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 1 })).to.equal('1,21,31'); expect(i18n.t('key', { count: 2 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 3 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 4 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 104 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 11 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 24 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 25 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 99 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 199 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 100 })).to.equal('0,5,6'); }); }); describe('extended usage - ask for a key in a language with a different plural form', function () { var resStore = { en: { translation: { key: 'singular_en', key_plural: 'plural_en', }, }, zh: { translation: { key: 'singular_zh', }, }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { lng: 'zh', resStore: resStore }), function (t) { done(); }); }); it('it should provide translation for passed in language with 1 item', function () { expect(i18n.t('key', { lng: 'en', count: 1 })).to.equal('singular_en'); }); it('it should provide translation for passed in language with 2 items', function () { expect(i18n.t('key', { lng: 'en', count: 2 })).to.equal('plural_en'); }); }); }); describe.skip('[WONT FIX - FIND A BETTER SOLUTION]indefinite article usage', function () { describe('basic usage - singular, plural and indefinite', function () { var resStore = { dev: { 'ns.2': { thing: '__count__ thing from ns.2', thing_plural: '__count__ things from ns.2', thing_indefinite: 'A thing from ns.2', thing_plural_indefinite: 'Some things from ns.2', }, 'ns.3': { thing: '__count__ things', thing_indefinite: 'A thing', thing_plural_indefinite: 'Some things', }, }, en: {}, 'en-US': { 'ns.1': { thing: '__count__ thing', thing_plural: '__count__ things', thing_indefinite: 'A thing', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, ns: { namespaces: ['ns.1', 'ns.2', 'ns.3'], defaultNs: 'ns.1' }, }), function (t) { done(); }, ); }); it('it should provide the indefinite article when requested for singular forms', function () { expect(i18n.t('thing')).to.equal('__count__ thing'); expect(i18n.t('thing', { indefinite_article: true })).to.equal('A thing'); expect(i18n.t('thing', { count: 1 })).to.equal('1 thing'); expect(i18n.t('thing', { count: 5 })).to.equal('5 things'); expect(i18n.t('thing', { count: 1, indefinite_article: true })).to.equal('A thing'); expect(i18n.t('thing', { count: 5, indefinite_article: true })).to.equal('5 things'); }); it('it should provide the indefinite article when requested for singular forms for second namespace', function () { expect(i18n.t('ns.2:thing', { count: 1 })).to.equal('1 thing from ns.2'); expect(i18n.t('ns.2:thing', { count: 5 })).to.equal('5 things from ns.2'); expect(i18n.t('ns.2:thing', { count: 1, indefinite_article: true })).to.equal( 'A thing from ns.2', ); expect(i18n.t('ns.2:thing', { count: 5, indefinite_article: true })).to.equal( 'Some things from ns.2', ); }); it('it should provide the right indefinite translations from the third namespace', function () { expect(i18n.t('ns.3:thing', { count: 5 })).to.equal('5 things'); expect(i18n.t('ns.3:thing', { count: 1, indefinite_article: true })).to.equal('A thing'); expect(i18n.t('ns.3:thing', { count: 5, indefinite_article: true })).to.equal( 'Some things', ); }); }); describe('extended usage - indefinite articles in languages with different plural forms', function () { var resStore = { dev: { translation: {}, }, zh: { translation: { key: '__count__ thing', key_indefinite: 'a thing', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { lng: 'zh', resStore: resStore, }), function (t) { done(); }, ); }); it('it should provide the correct indefinite articles', function () { expect(i18n.t('key', { count: 1 })).to.equal('1 thing'); expect(i18n.t('key', { count: 5 })).to.equal('5 thing'); expect(i18n.t('key', { count: 1, indefinite_article: true })).to.equal('a thing'); expect(i18n.t('key', { count: 5, indefinite_article: true })).to.equal('a thing'); }); }); }); describe('context usage', function () { describe('basic usage', function () { var resStore = { dev: { 'ns.2': { friend_context: 'A friend from ns2', friend_context_male: 'A boyfriend from ns2', friend_context_female: 'A girlfriend from ns2', }, }, en: { 'ns.1': { friend_context: 'A friend', friend_context_male: 'A boyfriend', friend_context_female: 'A girlfriend', }, }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, ns: { namespaces: ['ns.1', 'ns.2'], defaultNs: 'ns.1' }, }), function (t) { done(); }, ); }); it('it should provide correct context form', function () { expect(i18n.t('friend_context')).to.equal('A friend'); expect(i18n.t('friend_context', { context: '' })).to.equal('A friend'); expect(i18n.t('friend_context', { context: 'male' })).to.equal('A boyfriend'); expect(i18n.t('friend_context', { context: 'female' })).to.equal('A girlfriend'); }); it('it should provide correct context form for second namespace', function () { expect(i18n.t('ns.2:friend_context')).to.equal('A friend from ns2'); expect(i18n.t('ns.2:friend_context', { context: '' })).to.equal('A friend from ns2'); expect(i18n.t('ns.2:friend_context', { context: 'male' })).to.equal( 'A boyfriend from ns2', ); expect(i18n.t('ns.2:friend_context', { context: 'female' })).to.equal( 'A girlfriend from ns2', ); }); }); describe('extended usage - in combination with plurals', function () { var resStore = { dev: { translation: {} }, en: { translation: { friend_context: '__count__ friend', friend_context_male: '__count__ boyfriend', friend_context_female: '__count__ girlfriend', friend_context_plural: '__count__ friends', friend_context_male_plural: '__count__ boyfriends', friend_context_female_plural: '__count__ girlfriends', }, }, 'en-US': { translation: {} }, }; beforeEach(function (done) { i18n.init(i18n.functions.extend(opts, { resStore: resStore }), function (t) { done(); }); }); it('it should provide correct context with plural forms', function () { expect(i18n.t('friend_context', { count: 1 })).to.equal('1 friend'); expect(i18n.t('friend_context', { context: '', count: 1 })).to.equal('1 friend'); expect(i18n.t('friend_context', { context: 'male', count: 1 })).to.equal('1 boyfriend'); expect(i18n.t('friend_context', { context: 'female', count: 1 })).to.equal( '1 girlfriend', ); expect(i18n.t('friend_context', { count: 10 })).to.equal('10 friends'); expect(i18n.t('friend_context', { context: '', count: 10 })).to.equal('10 friends'); expect(i18n.t('friend_context', { context: 'male', count: 10 })).to.equal( '10 boyfriends', ); expect(i18n.t('friend_context', { context: 'female', count: 10 })).to.equal( '10 girlfriends', ); }); }); }); describe('with passed in languages different from set one', function () { beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { preload: ['de-DE'], }), function (t) { done(); }, ); }); it('it should provide translation for passed in language', function () { expect(i18n.t('simple_de', { lng: 'de-DE' })).to.equal('ok_from_de'); }); describe.skip('[WONT FIX - HARD DEPRECATION OF SYNC LOADING]with language not preloaded', function () { it('it should provide translation for passed in language after loading file sync', function () { var expectedValue = i18n.clientVersion ? 'simple_fr' : 'ok_from_fr'; expect(i18n.t('simple_fr', { lng: 'fr' })).to.equal(expectedValue); }); }); }); describe('using sprintf', function () { var resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { test: 'hi', }, }, }; beforeEach(function (done) { i18n.init( i18n.functions.extend(opts, { resStore: resStore, shortcutFunction: 'defaultValue' }), function (t) { done(); }, ); }); it('it should recognize the defaultValue syntax set as shortcutFunction', function () { expect(i18n.t('notFound', 'second param defaultValue')).to.equal( 'second param defaultValue', ); }); }); }); }); i18next-23.7.6/test/eventEmitter.spec.js000066400000000000000000000052461452441263500200470ustar00rootroot00000000000000import EventEmitter from '../src/EventEmitter'; describe('i18next', () => { describe('published', () => { let emitter; beforeEach(() => { emitter = new EventEmitter(); }); it('it should emit', (done) => { // test on emitter.on('ok', (payload) => { expect(payload).to.equal('data ok'); done(); }); // test off const nok = (payload) => { expect(payload).to.equal('not called as off'); done(); }; emitter.on('nok', nok); emitter.off('nok', nok); emitter.emit('nok', 'there should be no listener'); emitter.emit('ok', 'data ok'); }); it('it should emit wildcard', (done) => { // test on emitter.on('*', (name, payload) => { expect(name).to.equal('ok'); expect(payload).to.equal('data ok'); done(); }); emitter.emit('ok', 'data ok'); }); it('it should emit with array params', (done) => { // test on emitter.on('array-event', (array, data) => { expect(array).to.eql(['array ok 1', 'array ok 2']); expect(data).to.equal('data ok'); done(); }); emitter.emit('array-event', ['array ok 1', 'array ok 2'], 'data ok'); }); it('it should emit wildcard with array params', (done) => { // test on emitter.on('*', (ev, array, data) => { expect(ev).to.equal('array-event'); expect(array).to.eql(['array ok 1', 'array ok 2']); expect(data).to.equal('data ok'); done(); }); emitter.emit('array-event', ['array ok 1', 'array ok 2'], 'data ok'); }); it('it should return itself', () => { // test on const returned = emitter.on('*'); expect(returned).to.equal(emitter); }); it('it should correctly unbind observers', () => { const calls1 = []; const listener1 = (payload) => { calls1.push(payload); }; const calls2 = []; const listener2 = (payload) => { calls2.push(payload); }; const calls3 = []; const listener3 = (payload) => { calls3.push(payload); }; emitter.on('events', listener1); emitter.on('events', listener2); emitter.on('events', listener3); emitter.on('events', listener1); emitter.emit('events', 1); emitter.off('events', listener1); emitter.emit('events', 2); emitter.off('events', listener2); emitter.emit('events', 3); emitter.off('events', listener2); emitter.off('events'); emitter.emit('events', 4); expect(calls1).to.eql([1, 1]); expect(calls2).to.eql([1, 2]); expect(calls3).to.eql([1, 2, 3]); }); }); }); i18next-23.7.6/test/i18next.backend.concurrentLoad.spec.js000066400000000000000000000022421452441263500232340ustar00rootroot00000000000000import i18next from '../src/i18next.js'; import BackendMock from './backend/backendMock.js'; describe('i18next backend', () => { const i18n = i18next.createInstance(); before(() => { i18n.use(BackendMock).init({ fallbackLng: 'en', fallbackNS: 'concurrently', ns: [], defaultNS: '', }); }); describe('loadNamespaces concurrently', () => { it('should load data correctly', (done) => { let finished = 0; const loadedClb = (index) => function () { const handlingNS = index === 1 ? 'concurrentlyLonger' : 'concurrently'; finished += index; if (i18n.t('status') !== 'ok') return done(`Expected "${i18n.t('status')}" to equal "ok"`); if (i18n.t('namespace', { ns: handlingNS }) !== handlingNS) return done( `Expected "${i18n.t('namespace', { ns: handlingNS })}" to equal "${handlingNS}"`, ); if (finished === 3) done(); }; setTimeout(() => { i18n.loadNamespaces(['concurrentlyLonger']).then(loadedClb(1)); i18n.loadNamespaces(['concurrently']).then(loadedClb(2)); }, 0); }); }); }); i18next-23.7.6/test/i18next.defaults.spec.js000066400000000000000000000052461452441263500205020ustar00rootroot00000000000000import * as defaultFc from '../src/defaults'; const defaults = defaultFc.get(); describe('defaults', () => { it('it should have default shortcut', () => { expect(defaults.overloadTranslationOptionHandler(['key', 'my default value'])).to.eql({ defaultValue: 'my default value', }); }); it('defaultValue as option', () => { expect( defaults.overloadTranslationOptionHandler(['key', { defaultValue: 'option default value' }]), ).to.eql({ defaultValue: 'option default value' }); }); it('description', () => { expect( defaults.overloadTranslationOptionHandler(['key', 'my default value', 'the description']), ).to.eql({ defaultValue: 'my default value', tDescription: 'the description' }); }); it('description with options defaultValue', () => { // Options overwrites params default value expect( defaults.overloadTranslationOptionHandler(['key', 'my default value', 'the description']), ).to.eql({ defaultValue: 'my default value', tDescription: 'the description' }); }); it('interpolation', () => { expect( defaults.overloadTranslationOptionHandler([ 'key', 'my default value {{params}}', { params: 'the value' }, ]), ).to.eql({ defaultValue: 'my default value {{params}}', params: 'the value' }); }); it('interpolation with options defaultValue', () => { // Options overwrites params default value expect( defaults.overloadTranslationOptionHandler([ 'key', 'my default value {{params}}', { defaultValue: 'options default value', params: 'the value' }, ]), ).to.eql({ defaultValue: 'options default value', params: 'the value' }); }); it('interpolation description', () => { expect( defaults.overloadTranslationOptionHandler([ 'key', 'my default value {{params}}', 'the description', { params: 'the value' }, ]), ).to.eql({ defaultValue: 'my default value {{params}}', params: 'the value', tDescription: 'the description', }); }); it('interpolation description with options defaultValue', () => { // Options overwrites params default value expect( defaults.overloadTranslationOptionHandler([ 'key', 'my default value {{params}}', 'the description', { defaultValue: 'options default value', params: 'the value' }, ]), ).to.eql({ defaultValue: 'options default value', params: 'the value', tDescription: 'the description', }); }); it('it should have default format function', () => { expect(defaults.interpolation.format('my value', '###', 'de')).to.equal('my value'); }); }); i18next-23.7.6/test/i18next.extendTranslation.spec.js000066400000000000000000000035241452441263500223760ustar00rootroot00000000000000import i18next from '../src/i18next.js'; const instance = i18next.createInstance(); describe('extendTranslation', () => { describe('parse function should access globals defaultVariables', () => { const tests = [ { name: 'should have no impact when no options and no defaultVariables', options: {}, defaultVariables: {}, expected: {}, }, { name: 'should have no impact when no defaultVariables is given', options: { foo: 'bar' }, defaultVariables: {}, expected: { foo: 'bar' }, }, { name: 'should work when no options are provided', options: {}, defaultVariables: { foo: 'baz' }, expected: { foo: 'baz' }, }, { name: 'should be merged with provided options', options: { foo: 'bar' }, defaultVariables: { foo2: 'baz' }, expected: { foo: 'bar', foo2: 'baz' }, }, { name: 'should not override provided options', options: { foo: 'bar' }, defaultVariables: { foo: 'baz' }, expected: { foo: 'bar' }, }, ]; tests.forEach((test, i) => { it('it ' + test.name, () => { instance .use({ type: 'i18nFormat', parse: (_res, options) => { expect(options).to.deep.equals(test.expected); }, }) .init( { lng: 'en', interpolation: { defaultVariables: test.defaultVariables, }, resources: { en: { translation: { test1: '', }, }, }, }, (err, t) => { t('translation:test1', test.options); }, ); }); }); }); }); i18next-23.7.6/test/i18next.hasLoadedNamespace.spec.js000066400000000000000000000136331452441263500223730ustar00rootroot00000000000000import i18next from '../src/i18next.js'; const Logger = { type: 'logger', entries: { log: [], warn: [], error: [], }, log: function (args) { this.entries.log.push(args[0]); }, warn: function (args) { this.entries.warn.push(args[0]); }, error: function (args) { this.entries.error.push(args[0]); }, reset: function () { this.entries = { log: [], warn: [], error: [], }; }, }; const Backend = { type: 'backend', init(services, options) { this.services = services; this.options = options; }, read(language, namespace, callback) { if (namespace.indexOf('fail') === 0) return callback('failed', false); callback(null, { status: 'ok', key: `${language}-${namespace}` }); }, created: [], create(languages, namespace, key) { this.created.push(`${languages.join('-')}-${namespace}-${key}`); }, reset() { this.created = []; }, }; let i18n = i18next.createInstance(); i18n.use(Backend); i18n.use(Logger); describe('i18next', () => { describe('hasLoadedNamespace', () => { describe('not called init()', () => { it('it should nok', () => { expect(i18n.isInitialized).to.not.be.ok; expect(i18n.hasLoadedNamespace('ns1')).to.equal(false); }); }); describe('called init() not detecting lng', () => { it('it should ok - but warn about issue', (done) => { i18n.init({ debug: true, saveMissing: true }, (err, t) => { expect(i18n.isInitialized).to.be.ok; expect(i18n.hasLoadedNamespace('translation')).to.equal(false); expect(Logger.entries.warn[0]).to.equal( 'i18next: init: no languageDetector is used and no lng is defined', ); expect(Logger.entries.warn[1]).to.equal( 'i18next: hasLoadedNamespace: i18n.languages were undefined or empty', ); Logger.reset(); done(); }); }); }); describe('called init() properly', () => { before((done) => { i18n = i18n.cloneInstance({ debug: true, saveMissing: true, lng: 'en-US' }, () => { done(); }); }); it('it should ok for loaded ns', () => { expect(i18n.hasLoadedNamespace('translation')).to.equal(true); }); it('it should nok for not loaded ns', () => { expect(i18n.hasLoadedNamespace('ns1')).to.equal(false); }); describe('translator - calling t', () => { it('it should not log anything if loaded ns', () => { i18n.t('keyNotFound'); expect(Logger.entries.warn.length).to.equal(0); Logger.reset(); }); it('it should not call saveMissing create on backend if not loaded ns', () => { i18n.t('ns1:keyNotFound'); expect(Logger.entries.warn.length).to.equal(3); expect(Logger.entries.warn[0]).to.equal( 'i18next::translator: key "keyNotFound" for languages "en-US, en, dev" won\'t get resolved as namespace "ns1" was not yet loaded', ); Logger.reset(); }); }); describe('backendConnector - saveMissing', () => { it('it should call saveMissing create on backend if loaded ns', () => { i18n.t('keyNotFound'); expect(Backend.created.length).to.equal(1); expect(Backend.created[0]).to.equal('dev-translation-keyNotFound'); Backend.reset(); }); it('it should not call saveMissing create on backend if not loaded ns', () => { i18n.t('ns1:keyNotFound'); expect(Backend.created.length).to.equal(0); Backend.reset(); expect(Logger.entries.warn.length).to.equal(2); expect(Logger.entries.warn[1]).to.equal( 'i18next::backendConnector: did not save key "keyNotFound" as the namespace "ns1" was not yet loaded', ); Logger.reset(); }); }); }); describe('for a namespace failed loading', () => { before((done) => { i18n.loadNamespaces('fail-ns', () => { done(); }); }); it('it should ok for loaded ns', () => { expect(i18n.hasLoadedNamespace('fail-ns')).to.equal(true); }); }); }); describe('for lng = cimode', () => { before((done) => { i18n.changeLanguage('cimode', () => { done(); }); }); it('it should ok for loaded ns', () => { expect(i18n.hasLoadedNamespace('translation')).to.equal(true); }); it('it should ok for not loaded ns', () => { expect(i18n.hasLoadedNamespace('ns1')).to.equal(true); }); }); describe('not having a backend', () => { const i18n2 = i18next.createInstance(); i18n2.use(Logger); before((done) => { i18n2.init( { debug: true, lng: 'en-US', resources: { 'en-US': { translation: {} }, dev: { translation: {} } }, }, () => { done(); }, ); }); it('it should ok for passed in ns', () => { expect(i18n2.hasLoadedNamespace('translation')).to.equal(true); }); it('it should ok for not passed in ns - as there is no loading done', () => { expect(i18n2.hasLoadedNamespace('ns1')).to.equal(true); }); }); describe('having a backend and having resources but without partialBundledLanguages flag', () => { const i18n2 = i18next.createInstance(); i18n2.use(Backend); i18n2.use(Logger); before((done) => { i18n2.init( { debug: true, lng: 'en-US', resources: { 'en-US': { translation: {} }, dev: { translation: {} } }, }, () => { done(); }, ); }); it('it should ok for passed in ns', () => { expect(i18n2.hasLoadedNamespace('translation')).to.equal(true); }); it('it should ok for not passed in ns - as there is no loading done', () => { expect(i18n2.hasLoadedNamespace('notLoaded')).to.equal(true); }); }); }); i18next-23.7.6/test/i18next.interpolation.nesting.spec.js000066400000000000000000000114661452441263500232310ustar00rootroot00000000000000import i18next from '../src/i18next.js'; const instance = i18next.createInstance(); describe('i18next.interpolation.nesting', () => { before((done) => { instance.init( { lng: 'en', resources: { en: { translation: { test1: 'test $t(nest1) {{a}}', nest1: 'nest value', // options test2: 'test $t(nest2, { "b": "{{a}}" })', nest2: 'nest {{b}}', // 2 options test3: 'test $t(nest3, { "b": "{{a}}", "c": "{{b}}" })', nest3: 'nest {{b}} {{c}}', // , in key test102: '$t(test102, is, {"key": "success"})', 'test102, is': 'this test is {{key}}', // , in key and two options , separated test103: '$t(test103, is, {"key": "success", "key2": "full"})', 'test103, is': 'this test is {{key2}} {{key}}', keyA1: '{{text}} interpolated', keyB1: 'Text to interpolate => $t(keyA1, { "text": "foo" })', keyA1rec: '{{text}} interpolated | $t(keyB1rec)', keyB1rec: 'Text to interpolate => $t(keyA1rec, { "text": "foo" })', test_foo: "foo $t(test, { 'context': 'bar' })", test_bar: "bar $t(test, { 'context': 'baz' })", test_baz: 'baz', foo: '$t(bar, {"firstName": "{{firstName}}", "lastName": "{{lastName}}" })', fooSingle: `$t(bar, {'firstName': '{{firstName}}', 'lastName': '{{lastName}}' })`, bar: '{{firstName}} {{lastName}}', item_one: 'item', item_other: 'items', thing_one: 'thing', thing_other: 'things', phrase: 'A: $t(thing, { "count": 1 }) B: $t(item)', phrase2: 'A: $t(thing, { "count": 2 }) B: $t(item)', date_MMDD: 'DD/MM/YY', dateTest: '$t({{format}}, customdDateFormatter)', }, }, }, }, () => { done(); }, ); instance.services.formatter.add( 'customdDateFormatter', (value, lng, options) => `${value} | ${lng}`, ); }); describe('nesting', () => { var tests = [ { args: ['test1', { a: 'foo' }], expected: 'test nest value foo', }, { args: ['test2', { a: 'foo' }], expected: 'test nest foo', }, { args: ['test3', { a: 'foo', b: 'bar' }], expected: 'test nest foo bar', }, { args: ['test102'], expected: 'this test is success', }, { args: ['test103'], expected: 'this test is full success', }, { args: ['$t(test1)', { a: 'foo' }], expected: 'test nest value foo', }, { args: ['$t(translation:test1)', { a: 'foo' }], expected: 'test nest value foo', }, { args: ['something $t(test1)', { a: 'foo' }], expected: 'something test nest value foo', }, { args: ['something $t(translation:test1)', { a: 'foo' }], expected: 'something test nest value foo', }, { args: ['keyB1'], expected: 'Text to interpolate => foo interpolated', }, { args: ['keyB1rec'], expected: 'Text to interpolate => foo interpolated | ', }, { args: ['test', { context: 'foo' }], expected: 'foo bar baz', }, { args: [ 'foo', { firstName: `Cool`, lastName: `O'Dood`, interpolation: { escapeValue: false } }, ], expected: `Cool O'Dood`, }, { args: [ 'foo', { firstName: `C'ool`, lastName: `O'Dood`, interpolation: { escapeValue: false } }, ], expected: `C'ool O'Dood`, }, { args: [ 'fooSingle', { firstName: `Cool`, lastName: `Dood`, interpolation: { escapeValue: false } }, ], expected: `Cool Dood`, }, { args: [ 'bar', { firstName: `Cool`, lastName: `O'Dood`, interpolation: { escapeValue: false } }, ], expected: `Cool O'Dood`, }, { args: [ 'bar', { firstName: `C'ool`, lastName: `O'Dood`, interpolation: { escapeValue: false } }, ], expected: `C'ool O'Dood`, }, { args: ['phrase'], expected: 'A: thing B: item', }, { args: ['phrase2'], expected: 'A: things B: item', }, { args: ['dateTest', { format: 'date_MMDD' }], expected: 'DD/MM/YY | en', }, ]; tests.forEach((test) => { it('correctly nests for ' + JSON.stringify(test.args) + ' args', () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/i18next.interpolation.notSkipOnVariables.spec.js000066400000000000000000000040751452441263500253350ustar00rootroot00000000000000import i18next from '../src/i18next.js'; const instance = i18next.createInstance(); describe('i18next.interpolation.nesting (skipOnVariables: false)', () => { before((done) => { instance.init( { lng: 'en', interpolation: { skipOnVariables: false, }, resources: { en: { translation: { key: 'value {{a}}', key2: 'value {{a}} {{b}}', keyWithoutVar: 'value', nested: 'nested stuff', keyWithNest: '$t(nested2) value', keyWithNestAndVar: '$t(nested2) value {{a}}', nested2: 'HI', }, }, }, }, () => { done(); }, ); }); describe('nesting', () => { var tests = [ { args: ['keyWithoutVar'], expected: 'value', }, { args: ['key', { a: 'hahaha' }], expected: 'value hahaha', }, { args: ['keyWithNest'], expected: 'HI value', }, { args: ['keyWithNestAndVar', { a: 'normal value' }], expected: 'HI value normal value', }, { args: ['keyWithNestAndVar', { a: '$t(nested)' }], expected: 'HI value nested stuff', }, { args: ['key', { a: '{{nested}}' }], expected: 'value ', }, { args: ['key2', { a: '{{nested}}', b: 'something' }], expected: 'value something', }, { args: [ '{{a}} {{w}} {{a}} {{other}}', { a: '{{b}}', b: 'c', w: 'normal', other: 'whatever' }, ], expected: 'c normal c whatever', }, { args: [ '{{a}} {{w}} {{a}} {{other}}', { a: ' {{b}}', b: 'c', w: 'normal', other: 'whatever' }, ], expected: ' c normal c whatever', }, ]; tests.forEach((test) => { it('correctly nests for ' + JSON.stringify(test.args) + ' args', () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/i18next.interpolation.skipOnVariables.spec.js000066400000000000000000000043731452441263500246550ustar00rootroot00000000000000import i18next from '../src/i18next.js'; const instance = i18next.createInstance(); describe('i18next.interpolation.nesting', () => { before((done) => { instance.init( { lng: 'en', interpolation: { // skipOnVariables: true, // true by default }, resources: { en: { translation: { key: 'value {{a}}', key2: 'value {{a}} {{b}}', keyWithoutVar: 'value', nested: 'nested stuff', keyWithNest: '$t(nested2) value', keyWithNestAndVar: '$t(nested2) value {{a}}', nested2: 'HI', cur: 'Save {{CURRENCY}}{{AMOUNT}}', }, }, }, }, () => { done(); }, ); }); describe('nesting', () => { var tests = [ { args: ['keyWithoutVar'], expected: 'value', }, { args: ['key', { a: 'hahaha' }], expected: 'value hahaha', }, { args: ['keyWithNest'], expected: 'HI value', }, { args: ['keyWithNestAndVar', { a: 'normal value' }], expected: 'HI value normal value', }, { args: ['keyWithNestAndVar', { a: '$t(nested)' }], expected: '$t(nested2) value $t(nested)', }, { args: ['key', { a: '{{nested}}' }], expected: 'value {{nested}}', }, { args: ['key2', { a: '{{nested}}', b: 'something' }], expected: 'value {{nested}} something', }, { args: [ '{{a}} {{w}} {{a}} {{other}}', { a: '{{b}}', b: 'c', w: 'normal', other: 'whatever' }, ], expected: '{{b}} normal {{b}} whatever', }, { args: [ '{{a}} {{w}} {{a}} {{other}}', { a: ' {{b}}', b: 'c', w: 'normal', other: 'whatever' }, ], expected: ' {{b}} normal {{b}} whatever', }, { args: ['cur', { CURRENCY: '$', AMOUNT: 23 }], expected: 'Save $23', }, ]; tests.forEach((test) => { it('correctly nests for ' + JSON.stringify(test.args) + ' args', () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/i18next.promises.spec.js000066400000000000000000000023321452441263500205250ustar00rootroot00000000000000import i18next from '../src/i18next.js'; describe('i18next', () => { describe('promise based api', () => { describe('init()', () => { it('it should return a promise', (done) => { i18next.init().then((t) => { expect(typeof t).to.equal('function'); done(); }); }); }); describe('changeLanguage()', () => { it('it should return a promise', (done) => { i18next.init(); i18next.changeLanguage().then((t) => { expect(typeof t).to.equal('function'); done(); }); }); }); describe('loadLanguages()', () => { it('it should return a promise', (done) => { i18next.init(); i18next.loadLanguages('en').then(() => { done(); }); }); }); describe('loadNamespaces()', () => { it('it should return a promise', (done) => { i18next.init(); i18next.loadNamespaces('common').then(() => { done(); }); }); }); describe('reloadResources()', () => { it('it should return a promise', (done) => { i18next.init(); i18next.reloadResources().then(() => { done(); }); }); }); }); }); i18next-23.7.6/test/i18next.spec.js000066400000000000000000000255321452441263500166740ustar00rootroot00000000000000import i18next from '../src/i18next.js'; import { get as getDefaults } from '../src/defaults'; describe('i18next', () => { before(() => { i18next.init({ foo: 'bar', debug: false, }); i18next.changeLanguage('en'); }); describe('instance creation', () => { describe('createInstance()', () => { let newInstance; before(() => { newInstance = i18next.createInstance({ bar: 'foo' }); }); it('it should not inherit options from initial i18next', () => { expect(newInstance.options.foo).to.not.be.ok; expect(newInstance.options.bar).to.equal('foo'); }); it('it has own instance of resource store', () => { expect(newInstance.store).to.not.equal(i18next.store); }); }); describe('cloneInstance()', () => { let newInstance; before(() => { newInstance = i18next.cloneInstance({ bar: 'foo' }); }); it('it should inherit options from initial i18next', () => { expect(newInstance.options.foo).to.equal('bar'); expect(newInstance.options.bar).to.equal('foo'); }); it('it has shared instance of resource store', () => { expect(newInstance.store).to.equal(i18next.store); }); it('it is set to same language', () => { expect(newInstance.language).to.equal(i18next.language); }); it('it can change language independent to original', () => { newInstance.changeLanguage('de'); expect(newInstance.language).to.equal('de'); expect(i18next.language).to.equal('en'); }); }); describe('create/cloneInstance()', () => { let instance1; let instance2; before((done) => { instance1 = i18next.cloneInstance({ lng: 'en' }, () => { instance2 = instance1.cloneInstance({ lng: 'de' }, () => done()); }); }); it('it should have correct lngs', () => { expect(instance1.language).to.equal('en'); expect(instance1.languages).to.eql(['en', 'dev']); expect(instance2.language).to.equal('de'); expect(instance2.languages).to.eql(['de', 'dev']); expect(instance1.translator.language).to.equal('en'); expect(instance2.translator.language).to.equal('de'); }); }); describe('cloneInstance({ forkResourceStore: true })', () => { let orgInstance; let newInstance; before(() => { orgInstance = i18next.createInstance(); orgInstance.init({ lng: 'en', resources: { en: { translation: { deeper: { key: 'value here', }, }, }, }, }); newInstance = orgInstance.cloneInstance({ forkResourceStore: true, keySeparator: '__' }); }); it('it not has shared instance of resource store', () => { expect(newInstance.store).not.to.equal(orgInstance.store); expect(orgInstance.t('deeper.key')).to.equal('value here'); expect(orgInstance.t('deeper.key')).not.to.equal(newInstance.t('deeper.key')); expect(newInstance.t('deeper__key')).to.equal('value here'); expect(orgInstance.t('deeper.key')).to.equal(newInstance.t('deeper__key')); }); }); }); describe('i18next - functions', () => { describe('t', () => { it('is usable as a free function', () => { const { t } = i18next; expect(t('key')).to.equal('key'); }); }); describe('getFixedT', () => { it('it should have lng, ns on t', () => { const t = i18next.getFixedT('de', 'common'); expect(t.lng).to.equal('de'); expect(t.ns).to.equal('common'); }); it('should handle default value', () => { const t = i18next.getFixedT(null, null); const translatedKey = t('key', 'default'); const translatedSecondKey = t('key', { defaultValue: 'default' }); expect(translatedKey).to.equal('default'); expect(translatedSecondKey).to.equal('default'); }); it('should apply keyPrefix', () => { i18next.addResource('fr', 'translation', 'deeply.nested.key', 'ici!'); const t = i18next.getFixedT('fr', null, 'deeply.nested'); expect(t('key')).to.equal('ici!'); expect(t.keyPrefix).to.equal('deeply.nested'); }); it('should apply keyPrefix and also be able to overwrite it', () => { i18next.addResource('it', 'translation', 'deeply.nested.key', 'quì!'); const t = i18next.getFixedT('it', null, 'deeply.nested'); expect(t('nested.key', { keyPrefix: 'deeply' })).to.equal('quì!'); expect(t.keyPrefix).to.equal('deeply.nested'); }); it('should apply keyPrefix also for fallback keys', () => { i18next.addResource('fr', 'translation', 'group.key1', 'Translation 1'); i18next.addResource('fr', 'translation', 'group.key2', 'Translation 2'); const t = i18next.getFixedT('fr', null, 'group'); expect(t('key1')).to.equal('Translation 1'); expect(t.keyPrefix).to.equal('group'); expect(t('key2')).to.equal('Translation 2'); expect(t.keyPrefix).to.equal('group'); expect(i18next.t(['group.key1', 'group.key2'], { lng: 'fr' })).to.equal('Translation 1'); expect(t(['key1', 'key2'])).to.equal('Translation 1'); }); }); }); describe('chained resource manipulation', () => { describe('can add resources', () => { it('it adds resources by addResource', () => { i18next .addResource('de', 'translation', 'test', 'test') .addResource('de', 'translation', 'nest.test', 'test_nest'); expect(i18next.getResource('de', 'translation', 'test')).to.equal('test'); expect(i18next.getResource('de', 'translation', 'nest.test')).to.equal('test_nest'); }); it('it adds resources by addResources', () => { i18next .addResources('fr', 'translation', { hi: 'salut', }) .addResources('fr', 'translation', { hi: 'salut', hello: 'bonjour', }); expect(i18next.getResource('fr', 'translation', 'hi')).to.equal('salut'); expect(i18next.getResource('fr', 'translation', 'hello')).to.equal('bonjour'); }); it('it adds resources by addResourceBundle', () => { i18next .addResourceBundle('en.translation', { something1: 'deeper1' }) .addResourceBundle('en.translation', { something2: 'deeper2' }); expect(i18next.getResource('en.translation')).to.eql({ something1: 'deeper1', something2: 'deeper2', }); }); describe('can remove resources bundle', () => { it('it removes resources by removeResourceBundle', () => { i18next.removeResourceBundle('en', 'translation'); expect(i18next.getResourceBundle('en', 'translation')).to.be.not.ok; }); }); }); }); describe('#JSON.stringify', () => { let newInstance; before(() => { newInstance = i18next.createInstance({ some: 'options' }); }); it('it should JSON.stringify non-initialized without errors', () => { expect(JSON.stringify(newInstance)).to.equal( JSON.stringify({ options: { some: 'options' }, }), ); }); it('it should JSON.stringify initialized without errors', (done) => { newInstance.init({ other: 'opts' }, (err) => { if (err) return done(err); newInstance.addResourceBundle('en', 'translation', { key: 'value' }); newInstance.changeLanguage('en'); expect(JSON.stringify(newInstance)).to.equal( JSON.stringify({ options: { ...getDefaults(), some: 'options', other: 'opts', ignoreJSONStructure: true, }, store: { en: { translation: { key: 'value', }, }, }, language: 'en', languages: ['en', 'dev'], resolvedLanguage: 'en', }), ); done(); }); }); }); describe('language properties', () => { let newInstance; before((done) => { newInstance = i18next.createInstance({ fallbackLng: 'en', resources: { en: { translation: { key: 'value in en', }, }, de: { translation: { key: 'value in de', }, }, fr: { translation: {}, }, }, }); newInstance.init({}, done); }); describe('after init', () => { it('it should have the appropriate language properties', () => { expect(newInstance).to.have.property('language', 'en'); expect(newInstance).to.have.property('languages'); expect(newInstance.languages).to.have.lengthOf(1); expect(newInstance.languages[0]).to.equal('en'); expect(newInstance).to.have.property('resolvedLanguage', 'en'); }); }); describe('after changeLanguage with a non available language', () => { before(() => { newInstance.changeLanguage('it'); }); it('it should have the appropriate language properties', () => { expect(newInstance).to.have.property('language', 'it'); expect(newInstance).to.have.property('languages'); expect(newInstance.languages).to.have.lengthOf(2); expect(newInstance.languages[0]).to.equal('it'); expect(newInstance.languages[1]).to.equal('en'); expect(newInstance).to.have.property('resolvedLanguage', 'en'); }); }); describe('after changeLanguage with a region specific language', () => { before(() => { newInstance.changeLanguage('de-CH'); }); it('it should have the appropriate language properties', () => { expect(newInstance).to.have.property('language', 'de-CH'); expect(newInstance).to.have.property('languages'); expect(newInstance.languages).to.have.lengthOf(3); expect(newInstance.languages[0]).to.equal('de-CH'); expect(newInstance.languages[1]).to.equal('de'); expect(newInstance.languages[2]).to.equal('en'); expect(newInstance).to.have.property('resolvedLanguage', 'de'); }); }); describe('after changeLanguage with an empty loaded language', () => { before(() => { newInstance.changeLanguage('fr'); }); it('it should have the appropriate language properties', () => { expect(newInstance).to.have.property('language', 'fr'); expect(newInstance).to.have.property('languages'); expect(newInstance.languages).to.have.lengthOf(2); expect(newInstance.languages[0]).to.equal('fr'); expect(newInstance.languages[1]).to.equal('en'); expect(newInstance).to.have.property('resolvedLanguage', 'en'); }); }); }); }); i18next-23.7.6/test/i18next.translation.formatting-legacyFunction.spec.js000066400000000000000000000107161452441263500263500ustar00rootroot00000000000000import i18next from '../src/i18next.js'; const instance = i18next.createInstance(); describe('i18next.translation.formatting.legacyFunction', () => { before((done) => { instance.init( { lng: 'en', resources: { en: { translation: { oneFormatterTest: 'The following text is uppercased: $t(key5, uppercase)', anotherOneFormatterTest: 'The following text is underscored: $t(key6, underscore)', twoFormattersTest: 'The following text is uppercased: $t(key5, uppercase). The following text is underscored: $t(key5, underscore)', twoFormattersTogetherTest: 'The following text is uppercased, underscored, then uri component encoded: $t(key7, uppercase, underscore, encodeuricomponent)', oneFormatterUsingAnotherFormatterTest: 'The following text is lowercased: $t(twoFormattersTogetherTest, lowercase)', oneFormatterUsingCurrencyTest: 'The following text is an amount: $t(key8, currency)', missingTranslationTest: 'No text will be shown when the translation key is missing: $t(, uppercase)', key5: 'Here is some text', key6: 'Here is some text with numb3r5', key7: 'Here is some: text? with, (punctuation)', key8: '10000', withSpace: ' there', keyWithNesting: 'hi$t(withSpace)', twoInterpolationsWithUniqueFormatOptions: 'The value is {{localValue, currency}} or {{altValue, currency}}', }, }, }, interpolation: { format: function (value, format, lng, options) { if (format === 'uppercase') return value.toUpperCase(); if (format === 'lowercase') return value.toLowerCase(); if (format === 'underscore') return value.replace(/\s+/g, '_'); if (format === 'encodeuricomponent') return encodeURIComponent(value); if (format === 'currency') return Intl.NumberFormat(options.parmOptions[options.interpolationkey].locale, { style: 'currency', currency: options.parmOptions[options.interpolationkey].currency, }).format(value); return value; }, }, }, () => { done(); }, ); }); describe('formatting', () => { var tests = [ { args: ['oneFormatterTest'], expected: 'The following text is uppercased: HERE IS SOME TEXT', }, { args: ['anotherOneFormatterTest'], expected: 'The following text is underscored: Here_is_some_text_with_numb3r5', }, { args: ['twoFormattersTest'], expected: 'The following text is uppercased: HERE IS SOME TEXT. The following text is underscored: Here_is_some_text', }, { args: ['twoFormattersTogetherTest'], expected: 'The following text is uppercased, underscored, then uri component encoded: HERE_IS_SOME%3A_TEXT%3F_WITH%2C_(PUNCTUATION)', }, { args: ['oneFormatterUsingAnotherFormatterTest'], expected: 'The following text is lowercased: the following text is uppercased, underscored, then uri component encoded: here_is_some%3a_text%3f_with%2c_(punctuation)', }, { args: ['missingTranslationTest'], expected: 'No text will be shown when the translation key is missing: ', }, { args: ['keyWithNesting'], expected: 'hi there', }, { args: [ 'twoInterpolationsWithUniqueFormatOptions', { localValue: 12345.67, altValue: 16543.21, parmOptions: { localValue: { currency: 'USD', locale: 'en-US' }, altValue: { currency: 'CHF', locale: 'de-CH' }, }, }, ], expected: 'The value is $12,345.67 or CHF 16’543.21', }, { args: [ 'oneFormatterUsingCurrencyTest', { parmOptions: { key8: { currency: 'USD', locale: 'en-US' }, }, }, ], expected: 'The following text is an amount: $10,000.00', }, ]; tests.forEach((test) => { it('correctly formats translations for ' + JSON.stringify(test.args), () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/i18next.translation.formatting.noEscape.spec.js000066400000000000000000000016031452441263500251270ustar00rootroot00000000000000import i18next from '../src/i18next.js'; const instance = i18next.createInstance(); describe('i18next.translation.formatting without escaping', () => { before((done) => { instance.init( { lng: 'en', interpolation: { escapeValue: false, }, resources: { en: { translation: { intlDateTime: 'On the {{val, datetime}}', }, }, }, }, done, ); }); describe('formatting', () => { var tests = [ { args: ['intlDateTime', { val: new Date(Date.UTC(2012, 11, 20, 3, 0, 0)) }], expected: 'On the 12/20/2012', }, ]; tests.forEach((test) => { it('correctly formats translations for ' + JSON.stringify(test.args), () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/i18next.translation.formatting.spec.js000066400000000000000000000215641452441263500234030ustar00rootroot00000000000000import i18next from '../src/i18next.js'; const instance = i18next.createInstance(); describe('i18next.translation.formatting', () => { before((done) => { instance.init( { lng: 'en', resources: { en: { translation: { oneFormatterTest: 'The following text is uppercased: $t(key5, uppercase)', anotherOneFormatterTest: 'The following text is underscored: $t(key6, underscore)', twoFormattersTest: 'The following text is uppercased: $t(key5, uppercase). The following text is underscored: $t(key5, underscore)', twoFormattersTogetherTest: 'The following text is uppercased, underscored, then uri component encoded: $t(key7, uppercase, underscore, encodeuricomponent)', oneFormatterUsingAnotherFormatterTest: 'The following text is lowercased: $t(twoFormattersTogetherTest, lowercase)', twoFormattersTogetherInterpolationTest: 'pre format {{value, uppercase, underscore}} after format', oneFormatterUsingCurrencyTest: 'The following text is an amount: $t(key8, currency)', missingTranslationTest: 'No text will be shown when the translation key is missing: $t(, uppercase)', key5: 'Here is some text', key6: 'Here is some text with numb3r5', key7: 'Here is some: text? with, (punctuation)', key8: '10000', withSpace: ' there', keyWithNesting: 'hi$t(withSpace)', intlNumber: 'Some {{val, number}}', intlNumberWithOptions: 'Some {{val, number(minimumFractionDigits: 2)}}', intlNumberWithOptions2: '{{val,number(useGrouping:false)}}', intlCurrencyWithOptions: 'The value is {{val, currency(currency: USD)}}', intlCurrencyWithOptionsSimplified: 'The value is {{val, currency(USD)}}', twoIntlCurrencyWithUniqueFormatOptions: 'The value is {{localValue, currency}} or {{altValue, currency}}', intlDateTime: 'On the {{val, datetime}}', intlRelativeTime: 'Lorem {{val, relativetime}}', intlRelativeTimeWithOptions: 'Lorem {{val, relativetime(quarter)}}', intlRelativeTimeWithOptionsExplicit: 'Lorem {{val, relativetime(range: quarter; style: short;)}}', intlList: 'A list of {{val, list}}', keyCustomFormatWithColon: 'Before {{date, customDate(format: EEEE d MMMM yyyy HH:mm; otherParam: 0)}}', keyCustomCachedFormatWithColon: 'Before {{date, customDateCached(format: EEEE d MMMM yyyy HH:mm; otherParam: 0)}}', }, }, }, }, () => { // add some custom formats used by legacy instance.services.formatter.add('uppercase', (value, lng, options) => { return value.toUpperCase(); }); instance.services.formatter.add('lowercase', (value, lng, options) => { return value.toLowerCase(); }); instance.services.formatter.add('underscore', (value, lng, options) => { return value.replace(/\s+/g, '_'); }); instance.services.formatter.add('encodeuricomponent', (value, lng, options) => { return encodeURIComponent(value); }); instance.services.formatter.add('customDate', (value, lng, options) => { return `customized date in format ${options.format} (and other param ${options.otherParam})`; }); instance.services.formatter.addCached('customDateCached', (lng, options) => { return (val) => `customized cached ${lng} date in format ${options.format} (and other param ${ options.otherParam }) for ${val.getTime()}`; }); done(); }, ); }); describe('formatting', () => { // some legacy tests var tests = [ { args: ['oneFormatterTest'], expected: 'The following text is uppercased: HERE IS SOME TEXT', }, { args: ['anotherOneFormatterTest'], expected: 'The following text is underscored: Here_is_some_text_with_numb3r5', }, { args: ['twoFormattersTest'], expected: 'The following text is uppercased: HERE IS SOME TEXT. The following text is underscored: Here_is_some_text', }, { args: ['twoFormattersTogetherTest'], expected: 'The following text is uppercased, underscored, then uri component encoded: HERE_IS_SOME%3A_TEXT%3F_WITH%2C_(PUNCTUATION)', }, { args: ['oneFormatterUsingAnotherFormatterTest'], expected: 'The following text is lowercased: the following text is uppercased, underscored, then uri component encoded: here_is_some%3a_text%3f_with%2c_(punctuation)', }, { args: ['twoFormattersTogetherInterpolationTest', { value: 'my interpolated value' }], expected: 'pre format MY_INTERPOLATED_VALUE after format', }, { args: ['missingTranslationTest'], expected: 'No text will be shown when the translation key is missing: ', }, { args: ['keyWithNesting'], expected: 'hi there', }, ]; // number formatting tests = tests.concat([ { args: ['intlNumber', { val: 1000 }], expected: 'Some 1,000', }, { args: ['intlNumber', { val: 1000.1, minimumFractionDigits: 3 }], expected: 'Some 1,000.100', }, { args: ['intlNumberWithOptions', { val: 2000 }], expected: 'Some 2,000.00', }, { args: ['intlNumberWithOptions', { val: 2000, minimumFractionDigits: 3 }], expected: 'Some 2,000.000', }, { args: [ 'intlNumberWithOptions', { val: 2000, formatParams: { val: { minimumFractionDigits: 3 } } }, ], expected: 'Some 2,000.000', }, { args: ['intlNumberWithOptions2', { val: 123456 }], expected: '123456', }, ]); // currency tests = tests.concat([ { args: ['intlCurrencyWithOptions', { val: 2000 }], expected: 'The value is $2,000.00', }, { args: ['intlCurrencyWithOptionsSimplified', { val: 2000 }], expected: 'The value is $2,000.00', }, { args: [ 'twoIntlCurrencyWithUniqueFormatOptions', { localValue: 12345.67, altValue: 16543.21, formatParams: { localValue: { currency: 'USD', locale: 'en-US' }, altValue: { currency: 'DKK', locale: 'da' }, }, }, ], expected: 'The value is $12,345.67 or 16.543,21 kr.', }, ]); // datetime tests = tests.concat([ { args: ['intlDateTime', { val: new Date(Date.UTC(2012, 11, 20, 3, 0, 0)) }], expected: 'On the 12/20/2012', // / = / }, { args: [ 'intlDateTime', { val: new Date(Date.UTC(2012, 11, 20, 3, 0, 0)), formatParams: { val: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }, }, }, ], expected: 'On the Thursday, December 20, 2012', }, ]); // relativetime tests = tests.concat([ { args: ['intlRelativeTime', { val: 3 }], expected: 'Lorem in 3 days', }, { args: ['intlRelativeTime', { val: -3 }], expected: 'Lorem 3 days ago', }, { args: ['intlRelativeTimeWithOptions', { val: -3 }], expected: 'Lorem 3 quarters ago', }, { args: ['intlRelativeTimeWithOptionsExplicit', { val: -3 }], expected: 'Lorem 3 qtrs. ago', }, { args: ['intlRelativeTimeWithOptionsExplicit', { val: -3, style: 'long' }], expected: 'Lorem 3 quarters ago', }, ]); // list tests = tests.concat([ { args: ['intlList', { val: ['locize', 'i18next', 'awesome'] }], expected: 'A list of locize, i18next, and awesome', }, ]); // custom tests = tests.concat([ { args: ['keyCustomFormatWithColon', { date: new Date(Date.UTC(2022, 0, 4, 14, 33, 10)) }], expected: 'Before customized date in format EEEE d MMMM yyyy HH:mm (and other param 0)', }, { args: [ 'keyCustomCachedFormatWithColon', { date: new Date(Date.UTC(2022, 0, 4, 14, 33, 10)) }, ], expected: 'Before customized cached en date in format EEEE d MMMM yyyy HH:mm (and other param 0) for 1641306790000', }, ]); tests.forEach((test) => { it('correctly formats translations for ' + JSON.stringify(test.args), () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/i18next.translation.t.spec.js000066400000000000000000000011211452441263500214570ustar00rootroot00000000000000import i18next from '../src/i18next.js'; describe('i18next t default returns', () => { let i18n; before(() => { i18n = i18next.createInstance(); i18n.init({ fallbackLng: 'en', resources: { en: { translation: { key: 'normal', keyNull: null, keyEmpty: '', }, }, }, }); }); it('it should not return null values by default', () => { expect(i18n.t('key')).to.equal('normal'); expect(i18n.t('keyNull')).to.equal('keyNull'); expect(i18n.t('keyEmpty')).to.equal(''); }); }); i18next-23.7.6/test/i18next.use.spec.js000066400000000000000000000007641452441263500174670ustar00rootroot00000000000000import i18next from '../src/i18next.js'; describe('i18next.use()', () => { describe('passing an undefined module', () => { it('it should throw accordingly', () => { const badFn = () => i18next.use(undefined); expect(badFn).to.throw(/undefined module/); }); }); describe('passing a module with wrong interface', () => { it('it should throw accordingly', () => { const badFn = () => i18next.use({}); expect(badFn).to.throw(/wrong module/); }); }); }); i18next-23.7.6/test/interpolation.spec.js000066400000000000000000000366711452441263500202710ustar00rootroot00000000000000import Interpolator from '../src/Interpolator'; describe('Interpolator', () => { describe('interpolate()', () => { var ip; before(() => { ip = new Interpolator({ interpolation: { escapeValue: false } }); }); var tests = [ { args: ['test', { test: '123' }], expected: 'test' }, { args: ['test {{test}}', { test: '123' }], expected: 'test 123' }, { args: ['test {{test}} a {{bit.more}}', { test: '123', bit: { more: '456' } }], expected: 'test 123 a 456', }, { args: ['test {{ test }}', { test: '123' }], expected: 'test 123' }, { args: ['test {{ test }}', { test: null }], expected: 'test ' }, { args: ['test {{ test }}', { test: undefined }], expected: 'test ' }, { args: ['test {{ test }}', {}], expected: 'test ' }, { args: ['test {{test.deep}}', { test: { deep: '123' } }], expected: 'test 123' }, ]; tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - defaultVariables', () => { var ip; before(() => { ip = new Interpolator({ interpolation: { escapeValue: false, defaultVariables: { test: '123', bit: { more: '456' } }, }, }); }); var tests = [ { args: ['test'], expected: 'test' }, { args: ['test {{test}}'], expected: 'test 123' }, { args: ['test {{test}} a {{bit.more}}'], expected: 'test 123 a 456', }, // prio has passed in variables { args: ['test {{ test }}', { test: '124' }], expected: 'test 124' }, { args: ['test {{ test }}', { test: null }], expected: 'test ' }, // Override default variable only with null, not with undefined. { args: ['test {{ test }}', { test: undefined }], expected: 'test 123' }, ]; tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - options', () => { var tests = [ { options: { interpolation: {} }, expected: { escapeValue: true, prefix: '{{', suffix: '}}', formatSeparator: ',', unescapePrefix: '-', unescapeSuffix: '', nestingPrefix: '\\$t\\(', nestingSuffix: '\\)', }, }, { options: {}, expected: { escapeValue: true, prefix: '{{', suffix: '}}', formatSeparator: ',', unescapePrefix: '-', unescapeSuffix: '', nestingPrefix: '\\$t\\(', nestingSuffix: '\\)', }, }, { description: 'uses and regex escapes prefix and suffix', options: { interpolation: { prefix: '(*(', suffix: ')*)', prefixEscaped: '\\(\\^\\(', suffixEscaped: ')\\^\\)', }, }, expected: { prefix: '\\(\\*\\(', suffix: '\\)\\*\\)' }, }, { description: 'uses prefixEscaped and suffixEscaped if prefix and suffix not provided', options: { interpolation: { prefixEscaped: '<<', suffixEscaped: '>>' } }, expected: { prefix: '<<', suffix: '>>' }, }, { description: 'uses unescapePrefix if provided', options: { interpolation: { unescapePrefix: '=>' } }, expected: { unescapePrefix: '=>', unescapeSuffix: '' }, }, { description: 'uses unescapeSuffix if provided', options: { interpolation: { unescapeSuffix: '<=' } }, expected: { unescapePrefix: '', unescapeSuffix: '<=' }, }, { description: 'uses unescapeSuffix if both unescapePrefix and unescapeSuffix are provided', options: { interpolation: { unescapePrefix: '=>', unescapeSuffix: '<=' } }, expected: { unescapePrefix: '', unescapeSuffix: '<=' }, }, { description: 'uses and regex escapes nestingPrefix and nestingSuffix', options: { interpolation: { nestingPrefix: 'nest(', nestingSuffix: ')nest', nestingPrefixEscaped: 'neste\\(', nestingSuffixEscaped: '\\)neste', }, }, expected: { nestingPrefix: 'nest\\(', nestingSuffix: '\\)nest' }, }, { description: 'uses nestingPrefixEscaped and nestingSuffixEscaped if nestingPrefix and nestingSuffix not provided', options: { interpolation: { nestingPrefixEscaped: 'neste\\(', nestingSuffixEscaped: '\\)neste' }, }, expected: { nestingPrefix: 'neste\\(', nestingSuffix: '\\)neste' }, }, { description: 'uses maxReplaces if provided', options: { interpolation: { maxReplaces: 100 } }, expected: { maxReplaces: 100 }, }, ]; tests.forEach((test) => { describe(test.description || 'when called with ' + JSON.stringify(test.options), () => { var ip; before(() => { ip = new Interpolator(test.options); }); Object.keys(test.expected).forEach((key) => { it(key + ' is set correctly', () => { expect(ip[key]).to.eql(test.expected[key]); }); }); }); }); }); describe('interpolate() - with formatter', () => { var ip; before(() => { ip = new Interpolator({ interpolation: { escapeValue: false, format: function (value, format, lng, options) { if (format === 'uppercase') return value.toUpperCase(); if (format === 'lowercase') return value.toLowerCase(); if (format === 'throw') throw new Error('Formatter error'); if (format === 'currency') return Intl.NumberFormat(options.parmOptions[options.interpolationkey].locale, { style: 'currency', currency: options.parmOptions[options.interpolationkey].currency, }).format(value); return value; }, }, }); }); var tests = [ { args: ['test {{test, uppercase}}', { test: 'up' }], expected: 'test UP' }, { args: ['test {{test, lowercase}}', { test: 'DOWN' }], expected: 'test down' }, { args: [ 'test {{localValue, currency}} {{altValue, currency}}', { localValue: 12345.67, altValue: 16543.21, parmOptions: { localValue: { currency: 'USD', locale: 'en-US' }, altValue: { currency: 'EUR', locale: 'fr-FR' }, }, }, ], expected: 'test $12,345.67 16 543,21 €', }, ]; tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); it('correctly manage exception in formatter', () => { expect(() => { ip.interpolate.apply(ip, ['test {{test, throw}}', { test: 'up' }]); }).to.throw(Error, 'Formatter error'); const test = tests[0]; expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); describe('interpolate() - with formatter using a special formatSeparator', () => { let ip; before(() => { ip = new Interpolator({ interpolation: { formatSeparator: '|', format: function (value, format, lng) { if (format === 'uppercase') return value.toUpperCase(); return value; }, }, }); }); var tests = [{ args: ['test {{test | uppercase}}', { test: 'up' }], expected: 'test UP' }]; tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - with formatter always', () => { let ip; before(() => { ip = new Interpolator({ interpolation: { alwaysFormat: true, format: function (value, format, lng) { if (format === 'uppercase') return value.toUpperCase(); return value.toLowerCase(); }, }, }); }); var tests = [ { args: ['test {{test, uppercase}}', { test: 'up' }], expected: 'test UP' }, { args: ['test {{test}}', { test: 'DOWN' }], expected: 'test down' }, ]; tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - unescape', () => { var ip; before(() => { ip = new Interpolator({}); }); var tests = [ { args: ['test {{test}}', { test: '
foo' }], expected: 'test <a>foo</a>', }, { args: ['test {{test.deep}}', { test: { deep: 'foo' } }], expected: 'test <a>foo</a>', }, { args: ['test {{- test.deep}}', { test: { deep: 'foo' } }], expected: 'test foo', }, { args: [ 'test {{- test}} {{- test2}} {{- test3}}', { test: ' ', test2: 'test2', test3: 'test3' }, ], expected: 'test test2 test3', }, { args: ['test {{- test}}', {}], expected: 'test ', }, { args: ['test {{- test}}', { test: null }], expected: 'test ', }, ]; tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - nesting', () => { var ip; before(() => { ip = new Interpolator({}); }); var tests = [ { args: [ 'test $t(test)', function () { return 'success'; }, ], expected: 'test success', }, { args: [ '$t(test, {"key": "success"})', function (key, opts) { return 'test ' + opts.key; }, ], expected: 'test success', }, { args: [ "$t(test, {'key': 'success'})", function (key, opts) { return 'test ' + opts.key; }, ], expected: 'test success', }, { args: [ '$t(test, is, {"key": "success"})', function (key, opts) { return 'test, is ' + opts.key; }, ], expected: 'test, is success', }, { args: [ '$t(test, is, ok)', function () { return 'test, is, ok'; }, ], expected: 'test, is, ok', }, { args: [ '$t(ns:test)', function () { return 'test from ns'; }, ], expected: 'test from ns', }, ]; tests.forEach((test) => { it('correctly nests for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.nest.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - backwards compatible', () => { var ip; before(() => { ip = new Interpolator({ interpolation: { escapeValue: true, prefix: '__', suffix: '__', unescapeSuffix: 'HTML', }, }); }); var tests = [ { args: ['test __test__', { test: '123' }], expected: 'test 123' }, { args: ['test __test__ a __bit.more__', { test: '123', bit: { more: '456' } }], expected: 'test 123 a 456', }, { args: ['test __ test __', { test: '123' }], expected: 'test 123' }, { args: ['test __test.deep__', { test: { deep: '123' } }], expected: 'test 123' }, { args: ['test __test__', { test: 'foo' }], expected: 'test <a>foo</a>', }, { args: ['test __test.deep__', { test: { deep: 'foo' } }], expected: 'test <a>foo</a>', }, { args: ['test __test.deepHTML__', { test: { deep: 'foo' } }], expected: 'test foo', }, ]; tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - max replaced to prevent endless loop', () => { var ip; before(() => { ip = new Interpolator({ interpolation: { maxReplaces: 10, }, }); }); var tests = [ { args: ['test {{test}}', { test: 'tested {{test}}' }], expected: 'test tested tested tested tested tested tested tested tested tested tested {{test}}', }, ]; tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - with undefined interpolation value', () => { var ip; var tests = [{ args: ['{{test}}'], expected: '' }]; before(() => { ip = new Interpolator({ missingInterpolationHandler: (str, match) => { expect(str).to.eql('{{test}}'); expect(match[0]).to.eql('{{test}}'); expect(match[1]).to.eql('test'); }, }); }); tests.forEach((test) => { it( 'correctly calls missingInterpolationHandler for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }, ); }); }); describe('interpolate() - with undefined interpolation value - filled by missingInterpolationHandler', () => { var ip; var tests = [{ args: ['{{test}}'], expected: 'test' }]; before(() => { ip = new Interpolator({ missingInterpolationHandler: (str, match) => { expect(str).to.eql('{{test}}'); expect(match[0]).to.eql('{{test}}'); expect(match[1]).to.eql('test'); return 'test'; }, }); }); tests.forEach((test) => { it( 'correctly calls missingInterpolationHandler for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }, ); }); it('correctly calls handler provided via options', () => { expect( ip.interpolate('{{custom}}', {}, null, { missingInterpolationHandler: (str, match) => 'overridden', }), ).to.eql('overridden'); }); }); describe('interpolate() - with null interpolation value - not filled by missingInterpolationHandler', () => { var ip; var tests = [{ args: ['{{test}}', { test: null }], expected: '' }]; before(() => { ip = new Interpolator({ missingInterpolationHandler: (str, match) => { return 'test'; }, }); }); tests.forEach((test) => { it('correctly interpolates for ' + JSON.stringify(test.args) + ' args', () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/languageDetector.spec.js000066400000000000000000000063551452441263500206530ustar00rootroot00000000000000import { createInstance } from '../src/index.js'; import { expect } from 'chai'; describe('LanguageDetector with different signatures', () => { describe('LanguageDetector with minimal sync signature', () => { let detectingLanguage = 'de-CH'; let i18n = createInstance(); i18n.use({ type: 'languageDetector', detect: () => detectingLanguage, }); describe('#init', () => { it('should work as usual', () => { i18n.init({ initImmediate: false }); expect(i18n.language).to.eql('de-CH'); }); }); describe('#changeLanguage', () => { it('should detect the language accordingly', () => { detectingLanguage = 'it'; i18n.changeLanguage(); expect(i18n.language).to.eql('it'); }); }); }); describe('LanguageDetector with full sync signature', () => { let detectingLanguage = 'de-CH'; let cachedLng; let i18n = createInstance(); i18n.use({ type: 'languageDetector', init: () => {}, detect: () => detectingLanguage, cacheUserLanguage: (l) => (cachedLng = l), }); describe('#init', () => { it('should work as usual', () => { i18n.init({ initImmediate: false }); expect(i18n.language).to.eql('de-CH'); expect(cachedLng).to.eql('de-CH'); }); }); describe('#changeLanguage', () => { it('should detect the language accordingly', () => { detectingLanguage = 'it'; i18n.changeLanguage(); expect(i18n.language).to.eql('it'); expect(cachedLng).to.eql('it'); }); }); }); describe('LanguageDetector with async callback signature', () => { let detectingLanguage = 'de-CH'; let i18n = createInstance(); i18n.use({ type: 'languageDetector', async: true, detect: (clb) => clb(detectingLanguage), }); describe('#init', () => { it('should work as usual', (done) => { i18n.init({}, (err) => { expect(i18n.language).to.eql('de-CH'); done(err); }); }); }); describe('#changeLanguage', () => { it('should detect the language accordingly', (done) => { detectingLanguage = 'it'; i18n.changeLanguage(undefined, (err) => { expect(i18n.language).to.eql('it'); done(err); }); }); }); }); describe('LanguageDetector with async promise signature', () => { let detectingLanguage = 'de-CH'; let cachedLng; let i18n = createInstance(); i18n.use({ type: 'languageDetector', async: true, detect: async () => Promise.resolve(detectingLanguage), cacheUserLanguage: async (l) => (cachedLng = l), }); describe('#init', () => { it('should work as usual', (done) => { i18n.init({}, (err) => { expect(i18n.language).to.eql('de-CH'); expect(cachedLng).to.eql('de-CH'); done(err); }); }); }); describe('#changeLanguage', () => { it('should detect the language accordingly', (done) => { detectingLanguage = 'it'; i18n.changeLanguage(undefined, (err) => { expect(i18n.language).to.eql('it'); expect(cachedLng).to.eql('it'); done(err); }); }); }); }); }); i18next-23.7.6/test/languageUtils.spec.js000066400000000000000000000305651452441263500202020ustar00rootroot00000000000000import LanguageUtils from '../src/LanguageUtils'; describe('LanguageUtils', () => { describe('toResolveHierarchy()', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: 'en' }); }); var tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['de-CH'], expected: ['de-CH', 'de', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'nb', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'en'] }, { args: ['de-x-custom1'], expected: ['de-x-custom1', 'de', 'en'] }, { args: ['de-DE-x-custom1'], expected: ['de-DE-x-custom1', 'de', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - extended fallback object', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: { de: ['de-CH', 'en'], 'de-CH': ['fr', 'it', 'en'], 'zh-Hans': ['zh-Hant', 'zh', 'en'], 'zh-Hant': ['zh-Hans', 'zh', 'en'], nb: ['no'], nn: ['no'], default: ['en'], }, }); }); var tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'de-CH', 'en'] }, { args: ['de-CH'], expected: ['de-CH', 'de', 'fr', 'it', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'nb', 'no'] }, { args: ['nn'], expected: ['nn', 'no'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'zh-Hans', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - fallback function returns object', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: () => ({ de: ['de-CH', 'en'], 'de-CH': ['fr', 'it', 'en'], 'zh-Hans': ['zh-Hant', 'zh', 'en'], 'zh-Hant': ['zh-Hans', 'zh', 'en'], nb: ['no'], nn: ['no'], default: ['en'], }), }); }); var tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'de-CH', 'en'] }, { args: ['de-CH'], expected: ['de-CH', 'de', 'fr', 'it', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'nb', 'no'] }, { args: ['nn'], expected: ['nn', 'no'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'zh-Hans', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - fallback function returns string', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: () => 'en', }); }); var tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['de-CH'], expected: ['de-CH', 'de', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'nb', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'en'] }, { args: ['de-x-custom1'], expected: ['de-x-custom1', 'de', 'en'] }, { args: ['de-DE-x-custom1'], expected: ['de-DE-x-custom1', 'de', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - fallback function returns array', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: () => ['de', 'en', 'zh'], }); }); var tests = [ { args: ['en'], expected: ['en', 'de', 'zh'] }, { args: ['de'], expected: ['de', 'en', 'zh'] }, { args: ['de-AT'], expected: ['de-AT', 'de', 'en', 'zh'] }, { args: ['zh-HK'], expected: ['zh-HK', 'zh', 'de', 'en'] }, { args: ['zh-CN'], expected: ['zh-CN', 'zh', 'de', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - cleanCode Option', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: 'en', cleanCode: true }); }); var tests = [ { args: ['EN'], expected: ['en'] }, { args: ['DE'], expected: ['de', 'en'] }, { args: ['DE', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['FR', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['DE-CH'], expected: ['de-CH', 'de', 'en'] }, { args: ['NB-NO'], expected: ['nb-NO', 'nb', 'en'] }, { args: ['ZH-HANT-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - lowerCaseLng Option', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: 'en', lowerCaseLng: true }); }); var tests = [ { args: ['EN'], expected: ['en'] }, { args: ['DE'], expected: ['de', 'en'] }, { args: ['DE', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['FR', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['DE-CH'], expected: ['de-ch', 'de', 'en'] }, { args: ['nb-NO'], expected: ['nb-no', 'nb', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh-hant-mo', 'zh-hant', 'zh', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - load Option: lngOnly', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: 'en', load: 'languageOnly' }); }); var tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['de-CH'], expected: ['de', 'en'] }, { args: ['nb-NO'], expected: ['nb', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - load Option: currentOnly', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: 'en', load: 'currentOnly' }); }); var tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['de-CH'], expected: ['de-CH', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - supportedLngs', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: 'en', supportedLngs: ['nb-NO', 'de', 'en'] }); cu.logger.debug = false; // silence }); var tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de'] }, { args: ['de-CH'], expected: ['de', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - non explicit supportedLngs ', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: ['en'], supportedLngs: ['de', 'en', 'zh'], nonExplicitSupportedLngs: true, }); }); var tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de-AT'], expected: ['de-AT', 'de', 'en'] }, { args: ['zh-HK'], expected: ['zh-HK', 'zh', 'en'] }, { args: ['zh-CN'], expected: ['zh-CN', 'zh', 'en'] }, ]; tests.forEach((test) => { it('correctly prepares resolver for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('getBestMatchFromCodes()', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: ['en'], supportedLngs: ['en-US', 'en', 'de-DE'], }); }); var tests = [ { args: [['en']], expected: 'en' }, { args: [['ru', 'en']], expected: 'en' }, { args: [['en-GB']], expected: 'en' }, { args: [['ru', 'en-GB']], expected: 'en' }, { args: [['de-CH']], expected: 'de-DE' }, { args: [['ru']], expected: 'en' }, { args: [[]], expected: 'en' }, ]; tests.forEach((test) => { it('correctly get best match for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.getBestMatchFromCodes.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('getBestMatchFromCodes() with dev', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: ['fr'], supportedLngs: ['dev', 'en', 'fr'], }); }); var tests = [ { args: [['de']], expected: 'fr' }, { args: [['ru', 'en']], expected: 'en' }, { args: [['en-GB']], expected: 'en' }, { args: [['ru', 'en-GB']], expected: 'en' }, { args: [['de-CH']], expected: 'fr' }, { args: [['ru']], expected: 'fr' }, { args: [[]], expected: 'fr' }, ]; tests.forEach((test) => { it('correctly get best match for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.getBestMatchFromCodes.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('getBestMatchFromCodes() with dev and nonExplicitSupportedLngs: true', () => { var cu; before(() => { cu = new LanguageUtils({ fallbackLng: ['fr'], supportedLngs: ['dev', 'en', 'fr'], nonExplicitSupportedLngs: true, }); }); var tests = [ { args: [['de']], expected: 'fr' }, { args: [['ru', 'en']], expected: 'en' }, { args: [['en-GB']], expected: 'en-GB' }, { args: [['ru', 'en-GB']], expected: 'en-GB' }, { args: [['de-CH']], expected: 'fr' }, { args: [['ru']], expected: 'fr' }, { args: [[]], expected: 'fr' }, ]; tests.forEach((test) => { it('correctly get best match for ' + JSON.stringify(test.args) + ' args', () => { expect(cu.getBestMatchFromCodes.apply(cu, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/locales/000077500000000000000000000000001452441263500155205ustar00rootroot00000000000000i18next-23.7.6/test/locales/en/000077500000000000000000000000001452441263500161225ustar00rootroot00000000000000i18next-23.7.6/test/locales/en/nonjson.json000066400000000000000000000000361452441263500205000ustar00rootroot00000000000000
sorry no json file
i18next-23.7.6/test/locales/en/test.json000066400000000000000000000000271452441263500177730ustar00rootroot00000000000000{ "key": "passing" } i18next-23.7.6/test/logger.spec.js000066400000000000000000000022531452441263500166460ustar00rootroot00000000000000import logger from '../src/logger'; const mockLogger = { type: 'logger', log(args) { return this.output('log', args); }, warn(args) { return this.output('warn', args); }, error(args) { return this.output('error', args); }, output(type, args) { return { type, args, }; }, }; describe('logger', () => { before(() => { logger.init(mockLogger, { debug: true }); }); describe('converting', () => { it('it should log', () => { expect(logger.log('hello').type).to.equal('log'); expect(logger.log('hello').args[0]).to.equal('i18next: hello'); }); it('it should warn', () => { expect(logger.warn('hello').type).to.equal('warn'); expect(logger.warn('hello').args[0]).to.equal('i18next: hello'); }); it('it should error', () => { expect(logger.error('hello').type).to.equal('error'); expect(logger.error('hello').args[0]).to.equal('i18next: hello'); }); it('it should warn deprecation', () => { expect(logger.deprecate('hello').type).to.equal('warn'); expect(logger.deprecate('hello').args[0]).to.equal('WARNING DEPRECATED: i18next: hello'); }); }); }); i18next-23.7.6/test/pluralResolver.spec.js000066400000000000000000000123301452441263500204050ustar00rootroot00000000000000import PluralResolver from '../src/PluralResolver'; import LanguageUtils from '../src/LanguageUtils'; describe('PluralResolver', () => { describe('getRule()', () => { let pr; before(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, {}); }); it('correctly returns getRule for a supported locale', () => { const expected = { resolvedOptions: () => {}, select: () => {}, }; const pluralRulesStub = sinon.stub(Intl, 'PluralRules').returns(expected); const locale = 'en'; expect(pr.getRule(locale)).to.deep.equal(expected); expect(pluralRulesStub.calledOnceWith(locale)).to.be.true; pluralRulesStub.restore(); }); it('correctly returns getRule for an unsupported locale', () => { const pluralRulesStub = sinon.stub(Intl, 'PluralRules').throws(); const locale = 'en'; expect(pr.getRule(locale)).to.be.undefined; expect(pluralRulesStub.calledOnceWith(locale)).to.be.true; pluralRulesStub.restore(); }); }); describe('needsPlural()', () => { let pr; before(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, {}); }); it('correctly returns needsPlural for locale with more than one plural form', () => { const pluralRulesStub = sinon.stub(Intl, 'PluralRules').returns({ resolvedOptions: () => ({ pluralCategories: ['one', 'other'] }), }); const locale = 'en'; expect(pr.needsPlural(locale)).to.be.true; expect(pluralRulesStub.calledOnceWith(locale)).to.be.true; pluralRulesStub.restore(); }); it('correctly returns needsPlural for locale with just one plural form', () => { const pluralRulesStub = sinon.stub(Intl, 'PluralRules').returns({ resolvedOptions: () => ({ pluralCategories: ['other'] }), }); const locale = 'ja'; expect(pr.needsPlural(locale)).to.be.false; expect(pluralRulesStub.calledOnceWith(locale)).to.be.true; pluralRulesStub.restore(); }); }); describe('getSuffix()', () => { let pr; before(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { prepend: '_' }); }); it('correctly returns suffix for a supported locale', () => { const locale = 'en'; const count = 10.5; const expected = 'other'; const selectStub = sinon.stub().returns(expected); const pluralRulesStub = sinon.stub(Intl, 'PluralRules').returns({ select: selectStub, }); expect(pr.getSuffix(locale, count)).to.equal(`_${expected}`); expect(pluralRulesStub.calledOnceWith(locale)).to.be.true; expect(selectStub.calledOnceWith(count)).to.be.true; pluralRulesStub.restore(); }); it('correctly returns suffix for an unsupported locale', () => { const locale = 'non-existent'; const pluralRulesStub = sinon.stub(Intl, 'PluralRules').throws(); expect(pr.getSuffix(locale, 10.5)).to.equal(''); expect(pluralRulesStub.calledOnceWith(locale)).to.be.true; pluralRulesStub.restore(); }); }); describe('getPluralFormsOfKey()', () => { let pr; before(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { prepend: '_' }); }); it('correctly returns plural forms for a given key', () => { const pluralRulesStub = sinon.stub(Intl, 'PluralRules').returns({ resolvedOptions: () => ({ pluralCategories: ['one', 'other'] }), }); const locale = 'en'; expect(pr.getPluralFormsOfKey(locale, 'key')).to.deep.equal(['key_one', 'key_other']); expect(pluralRulesStub.calledOnceWith(locale)).to.be.true; pluralRulesStub.restore(); }); }); describe('getSuffixes()', () => { let pr; before(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { prepend: '_' }); }); it('correctly returns plural suffixes for a given key', () => { const pluralRulesStub = sinon.stub(Intl, 'PluralRules').returns({ resolvedOptions: () => ({ pluralCategories: ['zero', 'one', 'two', 'few', 'many', 'other'], }), }); const locale = 'en'; expect(pr.getSuffixes(locale)).to.deep.equal([ '_zero', '_one', '_two', '_few', '_many', '_other', ]); expect(pluralRulesStub.calledOnceWith(locale)).to.be.true; pluralRulesStub.restore(); }); }); describe('shouldUseIntlApi()', () => { let lu; before(() => { lu = new LanguageUtils({ fallbackLng: 'en' }); }); const tests = [ { compatibilityJSON: 'v1', expected: false }, { compatibilityJSON: 'v2', expected: false }, { compatibilityJSON: 'v3', expected: false }, { compatibilityJSON: 'v4', expected: true }, { expected: true }, ]; tests.forEach(({ compatibilityJSON, expected }) => { it(`correctly returns shouldUseIntlApi for compatibilityJSON set to ${compatibilityJSON}`, () => { const pr = new PluralResolver(lu, { compatibilityJSON }); expect(pr.shouldUseIntlApi()).to.equal(expected); }); }); }); }); i18next-23.7.6/test/postProcessor.spec.js000066400000000000000000000012111452441263500202450ustar00rootroot00000000000000import postProcessor from '../src/postProcessor'; describe('postProcessor', () => { describe('add and handle()', () => { before(() => { postProcessor.addPostProcessor({ name: 'dummy', process: (value, key, options, translator) => { return value.toUpperCase(); }, }); }); var tests = [{ args: [['dummy'], 'test', 'key', {}, () => {}], expected: 'TEST' }]; tests.forEach((test) => { it('correctly process for ' + JSON.stringify(test.args) + ' args', () => { expect(postProcessor.handle.apply(postProcessor, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/resourceStore.fallback.spec.js000066400000000000000000000047331452441263500217760ustar00rootroot00000000000000import ResourceStore from '../src/ResourceStore.js'; describe('ResourceStore', () => { describe('nestedFlatFallback', () => { it('it should find the resource in various flat/nested combinations', () => { const data = { en: { translation: { a: { nested: 'a nested value', 'more.of': { nested: { here: { wow: 'cool', }, 'and.even.more': { gaga: 'strange', }, }, }, }, 'a.flat': 'a flat value', 'b.flat': { nested: 'mix value', more: { nesting: 'deep', 'flat.again': 'deep flat', }, more2: { 'flat.again': 'deep flat', deeper: { key: 'very deep', }, }, }, str: 'whatever', 'x.y': 'please no', }, }, }; const rs = new ResourceStore(data); expect(rs.toJSON()).to.equal(data); let ret = rs.getResource('en', 'translation', 'a.nested'); expect(ret).to.equal('a nested value'); ret = rs.getResource('en', 'translation', 'a.flat'); expect(ret).to.equal('a flat value'); ret = rs.getResource('en', 'translation', 'b.flat.nested'); expect(ret).to.equal('mix value'); ret = rs.getResource('en', 'translation', 'b.flat.more.nesting'); expect(ret).to.equal('deep'); ret = rs.getResource('en', 'translation', 'b.flat.more.flat.again'); expect(ret).to.equal('deep flat'); ret = rs.getResource('en', 'translation', 'b.flat.more2.flat.again'); expect(ret).to.equal('deep flat'); ret = rs.getResource('en', 'translation', 'b.flat.more2.deeper.key'); expect(ret).to.equal('very deep'); ret = rs.getResource('en', 'translation', 'a.more.of.nested.here.wow'); expect(ret).to.equal('cool'); ret = rs.getResource('en', 'translation', 'a.more.of.nested.and.even.more.gaga'); expect(ret).to.equal('strange'); ret = rs.getResource('en', 'translation', 'a.wrong'); expect(ret).to.equal(undefined); ret = rs.getResource('en', 'translation', 'str.wrong'); expect(ret).to.equal(undefined); ret = rs.getResource('en', 'translation', 'x.y.z'); expect(ret).to.equal(undefined); }); }); }); i18next-23.7.6/test/resourceStore.spec.js000066400000000000000000000147111452441263500202350ustar00rootroot00000000000000import ResourceStore from '../src/ResourceStore.js'; describe('ResourceStore', () => { describe('constructor', () => { it('it should set empty data if not passing them in', () => { let rs = new ResourceStore(); expect(rs.toJSON()).to.eql({}); }); it('it should set data if passing them in', () => { const data = { en: { translation: { test: 'test', }, }, }; let rs = new ResourceStore(data); expect(rs.toJSON()).to.equal(data); }); }); describe('resource manipulation', () => { let rs; describe('can add resources', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it adds resources by addResource', () => { // basic key rs.addResource('de', 'translation', 'test', 'test'); expect(rs.getResource('de', 'translation', 'test')).to.equal('test'); // dotted key rs.addResource('de', 'translation', 'nest.test', 'test_nest'); expect(rs.getResource('de', 'translation', 'nest.test')).to.equal('test_nest'); // using first param fullDot rs.addResource('de.translation.nest.fullDot', 'test_fullDot'); expect(rs.getResource('de.translation.nest.fullDot')).to.equal('test_fullDot'); // setting object rs.addResource('de.translation.nest.object', { something: 'deeper' }); expect(rs.getResource('de.translation.nest.object.something')).to.equal('deeper'); // getting object expect(rs.getResource('de.translation.nest.object')).to.eql({ something: 'deeper' }); }); it("it should emit 'added' event on addResource call", () => { const spy = sinon.spy(); rs.on('added', spy); rs.addResource('fr', 'translation', 'hi', 'salut'); expect(spy.calledWithExactly('fr', 'translation', 'hi', 'salut')).to.be.true; }); it("it should not emit 'added' event on addResource call with silent option", () => { const spy = sinon.spy(); rs.on('added', spy); rs.addResource('fr', 'translation', 'hi', 'salut', { silent: true }); expect(spy.notCalled).to.be.true; }); it("it should emit 'added' event on addResources call", () => { const spy = sinon.spy(); rs.on('added', spy); rs.addResources('fr', 'translation', { hi: 'salut', hello: 'bonjour', }); expect(spy.calledOnce).to.be.true; }); it("it should not emit 'added' event on addResources call with silent option", () => { const spy = sinon.spy(); rs.on('added', spy); rs.addResources( 'fr', 'translation', { hi: 'salut', hello: 'bonjour', }, { silent: true }, ); expect(spy.notCalled).to.be.true; }); it("it should emit 'added' event on addResourceBundle call", () => { const spy = sinon.spy(); rs.on('added', spy); rs.addResourceBundle( 'fr', 'translation', { hi: 'salut', hello: 'bonjour', }, true, true, ); expect(spy.calledOnce).to.be.true; }); it("it should not emit 'added' event on addResourceBundle call with silent option", () => { const spy = sinon.spy(); rs.on('added', spy); rs.addResourceBundle( 'fr', 'translation', { hi: 'salut', hello: 'bonjour', }, true, true, { silent: true }, ); expect(spy.notCalled).to.be.true; }); }); describe('can extend resources bundle', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it adds resources by addResourceBundle', () => { rs.addResourceBundle('en', 'translation', { something: 'deeper' }); expect(rs.getResource('en', 'translation')).to.eql({ something: 'deeper', test: 'test' }); // dotty rs.addResourceBundle('en.translation', { something1: 'deeper1' }); expect(rs.getResource('en.translation')).to.eql({ something: 'deeper', something1: 'deeper1', test: 'test', }); }); it('without polluting the prototype by __proto__', () => { const malicious_payload = '{"__proto__":{"vulnerable":"Polluted"}}'; rs.addResourceBundle('en', 'translation', JSON.parse(malicious_payload), true, true); expect({}.vulnerable).to.eql(undefined); }); it('without polluting the prototype by constructor', () => { const malicious_payload = '{"constructor": {"prototype": {"polluted": "yes"}}}'; rs.addResourceBundle('en', 'translation', JSON.parse(malicious_payload), true); expect({}.polluted).to.eql(undefined); }); }); describe('can check resources bundle', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it checks resources by hasResourceBundle', () => { expect(rs.hasResourceBundle('en', 'translation')).to.be.ok; expect(rs.hasResourceBundle('en', 'notExisting')).to.not.be.ok; }); }); describe('can get resources bundle', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it get resources by getResourceBundle', () => { expect(rs.getResourceBundle('en', 'translation')).to.be.eql({ test: 'test' }); }); }); describe('can remove resources bundle', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it removes resources by removeResourceBundle', () => { rs.removeResourceBundle('en', 'translation'); expect(rs.getResourceBundle('en', 'translation')).to.be.not.ok; }); }); describe('can get data by language', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it gets data by getDataByLanguage', () => { expect(rs.getDataByLanguage('en')).to.be.eql({ translation: { test: 'test' } }); }); }); }); }); i18next-23.7.6/test/translator/000077500000000000000000000000001452441263500162675ustar00rootroot00000000000000i18next-23.7.6/test/translator/translator.cimode.spec.js000066400000000000000000000040001452441263500232000ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() in cimode', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('cimode'); }); var tests = [ { args: [ 'translation:test', { appendNamespaceToCIMode: false, ns: 'translation', nsSeparator: ':' }, ], expected: 'test', }, { args: ['test', { appendNamespaceToCIMode: false, ns: 'translation', nsSeparator: ':' }], expected: 'test', }, { args: [ 'translation:test', { appendNamespaceToCIMode: true, ns: 'translation', nsSeparator: ':' }, ], expected: 'translation:test', }, { args: ['test', { appendNamespaceToCIMode: true, ns: 'translation', nsSeparator: ':' }], expected: 'translation:test', }, ]; tests.forEach((test) => { it('correctly return key for ' + JSON.stringify(test.args) + ' args in cimode', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.exists.spec.js000066400000000000000000000045541452441263500232750ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('exists()', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', deep: { test: 'deep_en', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['translation:test'], expected: true }, { args: ['translation:test', { lngs: ['en-US', 'en'] }], expected: true }, { args: ['translation:test', { lngs: ['de'] }], expected: true }, { args: ['translation:test', { lng: 'de' }], expected: true }, { args: ['translation:test', { lng: 'fr' }], expected: true }, { args: ['translation:test', { lng: 'en-US' }], expected: true }, { args: ['translation.test', { lng: 'en-US', nsSeparator: '.' }], expected: true }, { args: ['translation.deep.test', { lng: 'en-US', nsSeparator: '.' }], expected: true }, { args: ['deep.test', { lng: 'en-US', nsSeparator: '.' }], expected: true }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.exists.apply(t, test.args)).to.eql(test.expected); }); }); const nullishArgs = ['', undefined, null]; nullishArgs.forEach((nullishArg) => { it(`should return false if a "${nullishArg}" key is passed as an argument`, () => { expect(t.exists(nullishArg)).to.false; }); }); }); }); i18next-23.7.6/test/translator/translator.fallbackLng.spec.js000066400000000000000000000033421452441263500241500ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() - fallback', () => { let t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', notInDE: 'test_notInDE_en', }, }, fr: { translation: { test: 'test_fr', notInDE: 'test_notInDE_fr', }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('de'); }); const tests = [ { args: ['translation:notInDE', {}], expected: 'test_notInDE_en' }, { args: ['translation:notInDE', { fallbackLng: 'fr' }], expected: 'test_notInDE_fr' }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate(...test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.getResource.spec.js000066400000000000000000000025711452441263500242420ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('getResource()', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'test', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['en', 'translation', 'test'], expected: 'test' }, { args: ['de', 'translation', 'test'], expected: undefined }, ]; tests.forEach((test) => { it('correctly gets resource for ' + JSON.stringify(test.args) + ' args', () => { expect(t.getResource.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.naturalLng.spec.js000066400000000000000000000052161452441263500240610ustar00rootroot00000000000000import i18next from '../../src/i18next.js'; const instance = i18next.createInstance(); describe('Translator', () => { describe('translate() with natural language', () => { before((done) => { instance.init( { lng: 'en', fallbackLng: 'en', resources: { en: { translation: { 'test: with a sentence. or more text': 'test_en', errorCodes: { UNAUTHORIZED: 'Unauthorized', 'BAD REQUEST': 'Bad request', }, UNAUTHORIZED: 'Unauthorized 2', 'BAD REQUEST': 'Bad request 2', }, test: { anotherKey: 'from other ns', 'key with space': 'key with space from other ns', }, }, de: { translation: { 'test: with a sentence. or more text': 'test_de', }, }, }, }, () => { done(); }, ); }); const tests = [ { args: ['test: with a sentence. or more text'], expected: 'test_en' }, { args: ['test: with a sentence. or more text', { lngs: ['en-US', 'en'] }], expected: 'test_en', }, { args: ['test: with a sentence. or more text', { lngs: ['de'] }], expected: 'test_de' }, { args: ['test: with a sentence. or more text', { lng: 'de' }], expected: 'test_de' }, { args: ['test: with a sentence. or more text', { lng: 'fr' }], expected: 'test_en' }, { args: ['test: with a sentence. or more text', { lng: 'en-US' }], expected: 'test_en' }, { args: ['test:anotherKey', { lng: 'en' }], expected: 'from other ns' }, { args: ['errorCodes.UNAUTHORIZED', { lng: 'en' }], expected: 'Unauthorized' }, { args: ['errorCodes.BAD REQUEST', { lng: 'en' }], expected: 'Bad request' }, { args: ['translation:errorCodes.UNAUTHORIZED', { lng: 'en' }], expected: 'Unauthorized' }, { args: ['translation:errorCodes.BAD REQUEST', { lng: 'en' }], expected: 'Bad request' }, { args: ['translation:UNAUTHORIZED', { lng: 'en' }], expected: 'Unauthorized 2' }, { args: ['translation:BAD REQUEST', { lng: 'en', keySeparator: '.' }], expected: 'Bad request 2', }, { args: ['test:key with space', { lng: 'en', nsSeparator: ':' }], expected: 'key with space from other ns', }, ]; tests.forEach((test) => { it('correctly formats translations for ' + JSON.stringify(test.args), () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.array.spec.js000066400000000000000000000051461452441263500250660ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() with arrays', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: ['test_en_1', 'test_en_2', '{{myVar}}'], flagList: [ ['basic1', 'Basic1'], ['simple1', 'Simple1'], ], search: { flagList: [ ['basic', 'Basic'], ['simple', 'Simple'], ], }, keyArray_one: ['hello world {{count}}', 'hey {{count}}'], keyArray_other: ['hello world plural {{count}}', 'hey plural {{count}}'], }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { returnObjects: true, ns: 'translation', defaultNS: 'translation', keySeparator: '.', interpolation: { // interpolateResult: true, // interpolateDefaultValue: true, // interpolateKey: true }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['translation:test.0'], expected: 'test_en_1' }, { args: ['translation:test.2', { myVar: 'test' }], expected: 'test' }, { args: ['translation:test', { myVar: 'test', joinArrays: '+' }], expected: 'test_en_1+test_en_2+test', }, { args: ['translation:test', { myVar: 'test', joinArrays: '' }], expected: 'test_en_1test_en_2test', }, { args: [['search.flagList', 'flagList'], {}], expected: [ ['basic', 'Basic'], ['simple', 'Simple'], ], }, { args: ['keyArray', { count: 1 }], expected: ['hello world 1', 'hey 1'], }, { args: ['keyArray', { count: 100 }], expected: ['hello world plural 100', 'hey plural 100'], }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.combination.spec.js000066400000000000000000000076451452441263500262600ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() with combined functionality', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { key1: 'hello world', key2: 'It is: $t(key1)', key3: 'It is: {{val}}', // context with pluralization test_one: 'test_en', test_other: 'tests_en', test_male_one: 'test_male_en', test_male_other: 'tests_male_en', nest: { foo: 'bar', nest: '$t(nestedArray)', }, nestedArray: [ { a: 'b', c: 'd' }, { a: 'b', c: 'd' }, ], friends: '$t(friend, {"context": "male", "count": {{maleCount}} }) & $t(friend, {"context": "female", "count": {{femaleCount}} })', friend_male_zero: 'No boyfriend', friend_male_one: 'A boyfriend', friend_male_other: '{{count}} boyfriends', friend_female_zero: 'no girlfriend', friend_female_one: 'a girlfriend', friend_female_other: '{{count}} girlfriends', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { pluralSeparator: '_', contextSeparator: '_', keySeparator: '.', ns: 'translation', defaultNS: 'translation', interpolation: {}, returnObjects: true, }, ); t.changeLanguage('en'); }); var tests = [ // interpolation and nesting in var { args: ['key2'], expected: 'It is: hello world' }, { args: ['key3', { val: '$t(key1)' }], expected: 'It is: hello world' }, // disable nesting while interpolation { args: ['key3', { val: '$t(key1)', nest: false }], expected: 'It is: $t(key1)' }, // context with pluralization { args: ['test', { context: 'unknown', count: 1 }], expected: 'test_en' }, { args: ['test', { context: 'unknown', count: 2 }], expected: 'tests_en' }, { args: ['test', { context: 'male', count: 1 }], expected: 'test_male_en' }, { args: ['test', { context: 'male', count: 2 }], expected: 'tests_male_en' }, { args: ['nest'], expected: { foo: 'bar', nest: [ { a: 'b', c: 'd' }, { a: 'b', c: 'd' }, ], }, }, { args: ['friends', { maleCount: 0, femaleCount: 0 }], expected: 'No boyfriend & no girlfriend', }, { args: ['friends', { maleCount: 0, femaleCount: 5 }], expected: 'No boyfriend & 5 girlfriends', }, { args: ['friends', { maleCount: 5, femaleCount: 0 }], expected: '5 boyfriends & no girlfriend', }, { args: ['friends', { maleCount: 1, femaleCount: 2 }], expected: 'A boyfriend & 2 girlfriends', }, { args: ['friends', { maleCount: 2, femaleCount: 1 }], expected: '2 boyfriends & a girlfriend', }, // interpolation and nesting on defaultValue { args: ['noKeyFoundTestingDefault_1', { defaultValue: '{{val}} bar', val: '$t(foo)' }], expected: 'foo bar', }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.context.spec.js000066400000000000000000000066071452441263500254370ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() with context', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', test_male: 'test_male_en', test_female: 'test_female_en', test_1: 'test_one_en', }, }, de: { translation: { test: 'test_de', test_male: 'test_male_de', test_female: 'test_female_de', test_1: 'test_one_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { contextSeparator: '_', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['translation:test', { context: 'unknown' }], expected: 'test_en' }, { args: ['translation:test', { context: 'male' }], expected: 'test_male_en' }, { args: ['translation:test', { context: 'female' }], expected: 'test_female_en' }, { args: ['translation:test', { context: 'male', lngs: ['en-US', 'en'] }], expected: 'test_male_en', }, { args: ['translation:test', { context: 'female', lngs: ['en-US', 'en'] }], expected: 'test_female_en', }, { args: ['translation:test', { context: 'male', lngs: ['de'] }], expected: 'test_male_de' }, { args: ['translation:test', { context: 'female', lngs: ['de'] }], expected: 'test_female_de', }, { args: ['translation:test', { context: 'male', lng: 'de' }], expected: 'test_male_de' }, { args: ['translation:test', { context: 'female', lng: 'de' }], expected: 'test_female_de' }, { args: ['translation:test', { context: 'male', lng: 'fr' }], expected: 'test_male_en' }, { args: ['translation:test', { context: 'female', lng: 'fr' }], expected: 'test_female_en' }, { args: ['translation:test', { context: 'male', lng: 'en-US' }], expected: 'test_male_en' }, { args: ['translation:test', { context: 'female', lng: 'en-US' }], expected: 'test_female_en', }, { args: ['translation:test', { context: '1', lng: 'en-US' }], expected: 'test_one_en', }, { args: ['translation:test', { context: '1', lng: 'de' }], expected: 'test_one_de', }, { args: ['translation:test', { context: 1, lng: 'en-US' }], expected: 'test_one_en', }, { args: ['translation:test', { context: 1, lng: 'de' }], expected: 'test_one_de', }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.defaultValue.spec.js000066400000000000000000000032321452441263500263630ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() defaultValue', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: {}, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['translation:test', { defaultValue: 'test_en' }], expected: 'test_en' }, { args: ['translation:test', { defaultValue: 'test_en', count: 1 }], expected: 'test_en' }, { args: [ 'translation:test', { defaultValue_other: 'test_en_plural', defaultValue_one: 'test_en', count: 10 }, ], expected: 'test_en_plural', }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.escape.spec.js000066400000000000000000000036061452441263500252070ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() un/escape', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'text {{var}}', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, escapeValue: true, }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['translation:test', { var: 'a&b' }], expected: 'text a&b' }, { args: ['translation:test', { var: 'a&b', interpolation: { escapeValue: false } }], expected: 'text a&b', }, { args: ['translation:test', { var: ['a', 'b'] }], expected: 'text a,b' }, { args: [ 'translation:test', { var: ['a', 'b'], interpolation: { useRawValueToEscape: true, escape: (value) => value.join('-') }, }, ], expected: 'text a-b', }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.missing.spec.js000066400000000000000000000145331452441263500254210ustar00rootroot00000000000000import Interpolator from '../../src/Interpolator'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import ResourceStore from '../../src/ResourceStore.js'; import Translator from '../../src/Translator'; const NB_PLURALS_ARABIC = 6; const NB_PLURALS_ENGLISH_ORDINAL = 4; describe('Translator', () => { let t; let tServices; let missingKeyHandler; beforeEach(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', deep: { test: 'deep_en', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); tServices = { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }; missingKeyHandler = sinon.spy(); }); describe('translate() saveMissing', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); it('correctly sends missing for "translation:test.missing"', () => { expect(t.translate('translation:test.missing')).to.eql('test.missing'); expect(missingKeyHandler.calledWith(['en'], 'translation', 'test.missing', 'test.missing')).to .be.true; }); }); describe('translate() saveMissing with saveMissingPlurals options', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('ar'); }); [ { args: ['translation:test.missing', { count: 10 }], expected: NB_PLURALS_ARABIC }, { args: ['translation:test.missing', { count: 0 }], expected: NB_PLURALS_ARABIC }, ].forEach((test) => { it(`correctly sends missing for ${JSON.stringify(test.args)} args`, () => { t.translate.apply(t, test.args); expect(missingKeyHandler.callCount).to.eql(test.expected); expect( missingKeyHandler .getCall(0) .calledWith(['ar'], 'translation', 'test.missing_zero', 'test.missing'), ).to.be.true; }); }); }); describe('translate() saveMissing with saveMissingPlurals and defaults', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('ar'); t.translate('translation:test.missing', { count: 0, defaultValue_zero: 'default0', defaultValue_one: 'default1', }); }); it('correctly sends missing resolved value', () => { expect(missingKeyHandler.callCount).to.eql(NB_PLURALS_ARABIC); expect(missingKeyHandler.calledWith(['ar'], 'translation', 'test.missing_zero', 'default0')) .to.be.true; expect(missingKeyHandler.calledWith(['ar'], 'translation', 'test.missing_one', 'default1')).to .be.true; expect(missingKeyHandler.calledWith(['ar'], 'translation', 'test.missing_two', 'default0')).to .be.true; }); }); describe('translate() saveMissing with saveMissingPlurals options (ordinal)', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); [ { args: ['translation:test.missing', { count: 3, ordinal: true }], expected: NB_PLURALS_ENGLISH_ORDINAL, }, { args: ['translation:test.missing', { count: 0, ordinal: true }], expected: NB_PLURALS_ENGLISH_ORDINAL, }, ].forEach((test) => { it(`correctly sends missing for ${JSON.stringify(test.args)} args`, () => { t.translate.apply(t, test.args); expect(missingKeyHandler.callCount).to.eql(test.expected); expect( missingKeyHandler .getCall(0) .calledWith(['en'], 'translation', 'test.missing_ordinal_one', 'test.missing'), ).to.be.true; }); }); }); describe('translate() saveMissing with saveMissingPlurals and defaults (ordinal)', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); t.translate('translation:test.missing', { count: 0, ordinal: true, defaultValue_ordinal_one: 'default1', defaultValue_ordinal_other: 'defaultOther', }); }); it('correctly sends missing resolved value', () => { expect(missingKeyHandler.callCount).to.eql(NB_PLURALS_ENGLISH_ORDINAL); expect( missingKeyHandler.calledWith( ['en'], 'translation', 'test.missing_ordinal_other', 'defaultOther', ), ).to.be.true; expect( missingKeyHandler.calledWith(['en'], 'translation', 'test.missing_ordinal_one', 'default1'), ).to.be.true; expect( missingKeyHandler.calledWith( ['en'], 'translation', 'test.missing_ordinal_two', 'defaultOther', ), ).to.be.true; }); }); }); i18next-23.7.6/test/translator/translator.translate.noSeparator.spec.js000066400000000000000000000042731452441263500262450ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() with separators set to false', () => { var t; before(() => { const rs = new ResourceStore( { en: { translation: { 'test: with a sentence. or more text': 'test_en', }, }, de: { translation: { 'test: with a sentence. or more text': 'test_de', }, }, }, { keySeparator: false }, ); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { ns: ['translation'], defaultNS: 'translation', nsSeparator: false, keySeparator: false, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['test: with a sentence. or more text'], expected: 'test_en' }, { args: ['test: with a sentence. or more text', { lngs: ['en-US', 'en'] }], expected: 'test_en', }, { args: ['test: with a sentence. or more text', { lngs: ['de'] }], expected: 'test_de' }, { args: ['test: with a sentence. or more text', { lng: 'de' }], expected: 'test_de' }, { args: ['test: with a sentence. or more text', { lng: 'fr' }], expected: 'test_en' }, { args: ['test: with a sentence. or more text', { lng: 'en-US' }], expected: 'test_en' }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.plural.spec.js000066400000000000000000000147651452441263500252560ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() with plural', () => { let t; before(() => { const rs = new ResourceStore({ en: { translation: { test_one: 'test_en', test_other: 'tests_en', pos_test_ordinal_one: 'pos_test_en_one', pos_test_ordinal_two: 'pos_test_en_two', pos_test_ordinal_few: 'pos_test_en_few', pos_test_ordinal_other: 'pos_test_en_other', }, translationWithZero: { test_zero: 'test_zero', test_one: 'test_en', test_other: 'tests_en', }, }, de: { translation: { test_one: 'test_de', test_other: 'tests_de', }, }, ja: { translation: { test: 'test_ja', test_other: 'tests_ja', }, }, ar: { translation: { test: 'test_ar', test_few: 'tests_ar_few', test_many: 'tests_ar_many', test_one: 'tests_ar_one', test_two: 'tests_ar_two', test_zero: 'tests_ar_zero', test_other: 'tests_ar_other', }, }, it: { translation: { test: 'test_it', test_other: 'tests_it_other', test_many: 'tests_it_many', // ordinal }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { pluralSeparator: '_', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test', { count: 1 }], expected: 'test_en' }, { args: ['translation:test', { count: 2 }], expected: 'tests_en' }, { args: ['translation:test', { count: 0 }], expected: 'tests_en' }, { args: ['translation:pos_test', { count: 0, ordinal: true }], expected: 'pos_test_en_other', }, { args: ['translation:pos_test', { count: 1, ordinal: true }], expected: 'pos_test_en_one' }, { args: ['translation:pos_test', { count: 2, ordinal: true }], expected: 'pos_test_en_two' }, { args: ['translation:pos_test', { count: 3, ordinal: true }], expected: 'pos_test_en_few' }, { args: ['translation:pos_test', { count: 4, ordinal: true }], expected: 'pos_test_en_other', }, { args: ['translationWithZero:test', { count: 0 }], expected: 'test_zero' }, { args: ['translation:test', { count: 1, lngs: ['en-US', 'en'] }], expected: 'test_en' }, { args: ['translation:test', { count: 2, lngs: ['en-US', 'en'] }], expected: 'tests_en' }, { args: ['translation:test', { count: 1, lngs: ['de'] }], expected: 'test_de' }, { args: ['translation:test', { count: 2, lngs: ['de'] }], expected: 'tests_de' }, { args: ['translation:test', { count: 1, lng: 'de' }], expected: 'test_de' }, { args: ['translation:test', { count: 2, lng: 'de' }], expected: 'tests_de' }, { args: ['translation:test', { count: 1, lng: 'fr' }], expected: 'test_en' }, { args: ['translation:test', { count: 2, lng: 'fr' }], expected: 'tests_en' }, { args: ['translation:test', { count: 1, lng: 'en-US' }], expected: 'test_en' }, { args: ['translation:test', { count: 2, lng: 'en-US' }], expected: 'tests_en' }, { args: ['translation:test', { count: 1, lng: 'ja' }], expected: 'tests_ja' }, { args: ['translation:test', { count: 2, lng: 'ja' }], expected: 'tests_ja' }, { args: ['translation:test', { count: 10, lng: 'ja' }], expected: 'tests_ja' }, { args: ['translation:test', { count: 0, lng: 'ar' }], expected: 'tests_ar_zero' }, { args: ['translation:test', { count: 1, lng: 'ar' }], expected: 'tests_ar_one' }, { args: ['translation:test', { count: 2, lng: 'ar' }], expected: 'tests_ar_two' }, { args: ['translation:test', { count: 3, lng: 'ar' }], expected: 'tests_ar_few' }, { args: ['translation:test', { count: 15, lng: 'ar' }], expected: 'tests_ar_many' }, { args: ['translation:test', { count: 101, lng: 'ar' }], expected: 'tests_ar_other' }, { args: ['translation:test', { count: 0, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 1, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 2, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 3, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 15, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 0, lng: 'it' }], expected: 'tests_it_other' }, { args: ['translation:test', { count: 1, lng: 'it' }], expected: 'test_it' }, { args: ['translation:test', { count: 2, lng: 'it' }], expected: 'tests_it_other' }, { args: ['translation:test', { count: 11, lng: 'it' }], expected: 'tests_it_other' }, { args: ['translation:test', { count: 0, lng: 'it', ordinal: true }], expected: 'tests_it_other', // fallback }, { args: ['translation:test', { count: 1, lng: 'it', ordinal: true }], expected: 'tests_it_other', // fallback }, { args: ['translation:test', { count: 2, lng: 'it', ordinal: true }], expected: 'tests_it_other', // fallback }, { args: ['translation:test', { count: 11, lng: 'it', ordinal: true }], expected: 'tests_it_many', // fallback }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.returnObject.spec.js000066400000000000000000000126601452441263500264150ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; import logger from '../../src/logger'; describe('Translator', () => { describe('translate() with returnObjects=true', () => { var t; before(() => { const rs = new ResourceStore({ en: { common: { test: ['common_test_en_1', 'common_test_en_2'], something: { range: '[{{min}}..{{max}}]', }, somethingElse: { range: '[{{min}}..{{max}}]', hello: 'hello {{what}}', foo: 'bar', }, requirements: ['lorem ipsum', 'lorem ipsum', 'hello {{what}}'], boolean: { value: true }, number: { value: 42 }, }, special: { test: ['special_test_en_1', 'special_test_en_2'], }, withContext: { string: 'hello world', string_lined: ['hello', 'world'], }, }, de: { common: { test: ['common_test_de_1', 'common_test_de_2'], }, special: { test: ['special_test_de_1', 'special_test_de_2'], }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { keySeparator: '.', contextSeparator: '_', returnObjects: true, ns: ['common', 'special', 'withContext'], defaultNS: 'common', interpolation: {}, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['common:test'], expected: ['common_test_en_1', 'common_test_en_2'] }, { args: ['special:test'], expected: ['special_test_en_1', 'special_test_en_2'] }, { args: ['common:somethingElse', { min: '1', max: '1000', what: 'world' }], expected: { range: '[1..1000]', hello: 'hello world', foo: 'bar' }, }, { args: ['common:requirements', { what: 'world' }], expected: ['lorem ipsum', 'lorem ipsum', 'hello world'], }, // should not overwrite store value { args: ['common:something'], expected: { range: '[..]' } }, { args: ['common:something', { min: '1', max: '1000' }], expected: { range: '[1..1000]' } }, { args: ['common:something.range', { min: '1', max: '1000' }], expected: '[1..1000]' }, { args: ['common:boolean'], expected: { value: true } }, { args: ['common:number'], expected: { value: 42 } }, // with context { args: ['withContext:string'], expected: 'hello world' }, { args: ['withContext:string', { context: 'lined' }], expected: ['hello', 'world'] }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); describe('translate() with returnObjects=false', () => { let t; let loggerStub; let rs; let lu; const loggerSpy = sinon.spy(); before(() => { loggerStub = sinon.stub(logger, 'create'); loggerStub.returns({ warn: loggerSpy, log: sinon.spy(), }); rs = new ResourceStore({ en: { common: { array: ['common_array_en_1', 'common_array_en_2'], }, }, }); lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { keySeparator: '.', contextSeparator: '_', returnObjects: false, returnedObjectHandler: (...args) => args, ns: ['common', 'special'], defaultNS: 'common', interpolation: {}, }, ); t.changeLanguage('en'); }); describe('and "returnedObjectHandler" defined', () => { it('should not emit a warning', () => { t.translate.apply(t, ['common:array']); expect( loggerSpy.calledWith('accessing an object - but returnObjects options is not enabled!'), ).to.be.false; }); }); describe('and "returnedObjectHandler" is not defined', () => { it('should emit a warning', () => { t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { keySeparator: '.', contextSeparator: '_', returnObjects: false, ns: ['common', 'special'], defaultNS: 'common', interpolation: {}, }, ); t.changeLanguage('en'); t.translate.apply(t, ['common:array']); expect( loggerSpy.calledWith('accessing an object - but returnObjects options is not enabled!'), ).to.be.true; }); }); }); }); i18next-23.7.6/test/translator/translator.translate.separator.spec.js000066400000000000000000000045751452441263500257550ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate() separator usage', () => { var t; before(() => { const rs = new ResourceStore( { en: { translation: { test: 'test_en', deep: { test: 'testDeep_en', }, 'test::single': 'single_en', 'test.single': 'single_en', }, translation2: { test: 'test2_en', }, }, }, { keySeparator: '::', nsSeparator: ':::', }, ); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { keySeparator: '::', nsSeparator: ':::', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['translation:::test'], expected: 'test_en' }, { args: ['translation2:::test'], expected: 'test2_en' }, { args: ['translation:::deep::test'], expected: 'testDeep_en' }, { args: ['translation:test', { nsSeparator: ':', keySeparator: '.' }], expected: 'test_en' }, { args: ['translation2:test', { nsSeparator: ':', keySeparator: '.' }], expected: 'test2_en', }, { args: ['translation:deep.test', { nsSeparator: ':', keySeparator: '.' }], expected: 'testDeep_en', }, { args: ['translation:::test::single', { keySeparator: false }], expected: 'single_en' }, { args: ['translation:::test.single', { keySeparator: false }], expected: 'single_en' }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.skipInterpolation.spec.js000066400000000000000000000124611452441263500274640ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; import PostProcessor from '../../src/postProcessor'; describe('Translator', () => { describe('translate() skip interpolation', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en {{key}}', deep: { arr: ['deep_en arr {{key1}}', 'deep_en arr {{key2}}'], }, }, }, de: { translation: { test: 'test_de {{key}}', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { keySeparator: '.', defaultNS: 'translation', ns: 'translation', interpolation: {}, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['translation:test', { skipInterpolation: true }], expected: 'test_en {{key}}' }, { args: ['translation:test', { skipInterpolation: false, key: 'value' }], expected: 'test_en value', }, { args: ['translation:test', { lng: 'de', skipInterpolation: true }], expected: 'test_de {{key}}', }, { args: ['translation:test', { lng: 'fr', skipInterpolation: true }], expected: 'test_en {{key}}', }, { args: ['translation:deep', { returnObjects: true, skipInterpolation: true }], expected: { arr: ['deep_en arr {{key1}}', 'deep_en arr {{key2}}'] }, }, { args: [ 'translation:deep', { returnObjects: true, skipInterpolation: false, key1: 'value1', key2: 'value2' }, ], expected: { arr: ['deep_en arr value1', 'deep_en arr value2'] }, }, { args: ['translation:deep.arr', { joinArrays: ' + ', skipInterpolation: true }], expected: 'deep_en arr {{key1}} + deep_en arr {{key2}}', }, { args: [ 'translation:deep.arr', { joinArrays: ' + ', skipInterpolation: false, key1: '1', key2: '2' }, ], expected: 'deep_en arr 1 + deep_en arr 2', }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); describe('translate() skip interpolation should allow post process', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', simpleArr: ['simpleArr_en 1', 'simpleArr_en 2'], }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { keySeparator: '.', defaultNS: 'translation', ns: 'translation', interpolation: {}, }, ); PostProcessor.addPostProcessor({ name: 'postProcessValue', process: (value, key, options, translator) => 'post processed: ' + value, }); t.changeLanguage('en'); }); var tests = [ { args: ['translation:test', { skipInterpolation: true, postProcess: 'postProcessValue' }], expected: 'post processed: test_en', }, { args: ['translation:test', { skipInterpolation: false, postProcess: 'postProcessValue' }], expected: 'post processed: test_en', }, { args: [ 'translation:simpleArr', { returnObjects: true, skipInterpolation: true, postProcess: 'postProcessValue' }, ], expected: ['post processed: simpleArr_en 1', 'post processed: simpleArr_en 2'], }, { args: [ 'translation:simpleArr', { returnObjects: true, skipInterpolation: false, postProcess: 'postProcessValue' }, ], expected: ['post processed: simpleArr_en 1', 'post processed: simpleArr_en 2'], }, { args: [ 'translation:simpleArr', { joinArrays: ' + ', skipInterpolation: true, postProcess: 'postProcessValue' }, ], expected: 'post processed: simpleArr_en 1 + simpleArr_en 2', }, { args: [ 'translation:simpleArr', { joinArrays: ' + ', skipInterpolation: false, postProcess: 'postProcessValue' }, ], expected: 'post processed: simpleArr_en 1 + simpleArr_en 2', }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.spec.js000066400000000000000000000165311452441263500237510ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; describe('Translator', () => { describe('translate()', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', deep: { test: 'deep_en', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); var tests = [ { args: ['translation:test'], expected: 'test_en' }, { args: ['translation:test', { lngs: ['en-US', 'en'] }], expected: 'test_en' }, { args: ['translation:test', { lngs: ['de'] }], expected: 'test_de' }, { args: ['translation:test', { lng: 'de' }], expected: 'test_de' }, { args: ['translation:test', { lng: 'fr' }], expected: 'test_en' }, { args: ['translation:test', { lng: 'en-US' }], expected: 'test_en' }, { args: ['translation.test', { lng: 'en-US', nsSeparator: '.' }], expected: 'test_en' }, { args: ['translation.deep.test', { lng: 'en-US', nsSeparator: '.' }], expected: 'deep_en' }, { args: ['deep.test', { lng: 'en-US', nsSeparator: '.' }], expected: 'deep_en' }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); describe('with returnDetails option', () => { var tests = [ { args: ['translation:test', { returnDetails: true }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['test', { returnDetails: true }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lngs: ['en-US', 'en'] }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lngs: ['de'] }], expected: { usedKey: 'test', res: 'test_de', exactUsedKey: 'test', usedLng: 'de', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lng: 'de' }], expected: { usedKey: 'test', res: 'test_de', exactUsedKey: 'test', usedLng: 'de', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lng: 'fr' }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lng: 'en-US' }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation.test', { returnDetails: true, lng: 'en-US', nsSeparator: '.' }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation.deep.test', { returnDetails: true, lng: 'en-US', nsSeparator: '.' }], expected: { usedKey: 'deep.test', res: 'deep_en', exactUsedKey: 'deep.test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['deep.test', { returnDetails: true, lng: 'en-US', nsSeparator: '.' }], expected: { usedKey: 'deep.test', res: 'deep_en', exactUsedKey: 'deep.test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, testParam: 'test-param' }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: { testParam: 'test-param', }, }, }, { args: [ 'translation:test', { returnDetails: true, replace: { testParam: 'test-param' }, }, ], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: { testParam: 'test-param', }, }, }, { args: [ 'translation:test', { defaultValue: 'default', ordinal: true, context: undefined, replace: { testParam: 'test-param' }, lng: 'en', lngs: ['en', 'de'], fallbackLng: 'en', ns: ['translation', 'other'], keySeparator: '.', nsSeparator: ':', returnObjects: false, returnDetails: true, joinArrays: true, postProcess: false, interpolation: { escapeValue: false }, count: 1, }, ], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: { testParam: 'test-param', count: 1, }, }, }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.systemProperties.spec.js000066400000000000000000000040611452441263500273440ustar00rootroot00000000000000import Translator from '../../src/Translator'; import ResourceStore from '../../src/ResourceStore.js'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import Interpolator from '../../src/Interpolator'; // These tests originated from issues: // // https://github.com/i18next/i18next/issues/906 // https://github.com/i18next/i18next-xhr-backend/issues/258 // // should ignore non-string properties when finding 'deep' translations // (ex: `.length`, `.search`) // when a fallback is needed to find the actual definition of that property describe('Translator', () => { describe('translate()', () => { var t; before(() => { const rs = new ResourceStore({ en: { translation: { test: { length: 'test_length', search: 'test_search', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('de'); }); var tests = [ { args: ['test', { lng: 'de', nsSeparator: '.' }], expected: 'test_de' }, { args: ['test.length', { lng: 'de', nsSeparator: '.' }], expected: 'test_length' }, { args: ['test.search', { lng: 'de', nsSeparator: '.' }], expected: 'test_search' }, ]; tests.forEach((test) => { it('correctly translates for ' + JSON.stringify(test.args) + ' args', () => { expect(t.translate.apply(t, test.args)).to.eql(test.expected); }); }); }); }); i18next-23.7.6/test/translator/translator.translate.updateMissing.spec.js000066400000000000000000000117231452441263500265620ustar00rootroot00000000000000import Interpolator from '../../src/Interpolator'; import LanguageUtils from '../../src/LanguageUtils'; import PluralResolver from '../../src/PluralResolver'; import ResourceStore from '../../src/ResourceStore.js'; import Translator from '../../src/Translator'; describe('Translator', () => { let t; let tServices; let missingKeyHandler; beforeEach(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', deep: { test: 'deep_en', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); tServices = { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_', simplifyPluralSuffix: true }), interpolator: new Interpolator(), }; missingKeyHandler = sinon.spy(); }); describe('translate() using updateMissing', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, updateMissing: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); describe('without default value', () => { it('does not invoke missingKeyHandler', () => { expect(t.translate('translation:test')).to.eql('test_en'); expect(missingKeyHandler.notCalled).to.be.true; }); }); describe('with an unchanged default value', () => { it('does not invoke missingKeyHandler', () => { expect(t.translate('translation:test', { defaultValue: 'test_en' })).to.eql('test_en'); expect(missingKeyHandler.notCalled).to.be.true; }); }); describe('with a new default value', () => { it('correctly sends missing', () => { expect(t.translate('translation:test', { defaultValue: 'new value' })).to.eql('test_en'); expect(missingKeyHandler.calledOnce).to.be.true; expect(missingKeyHandler.calledWith(['en'], 'translation', 'test', 'new value', true)).to.be .true; }); }); }); describe('translate() using updateMissing with saveMissingPlurals', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, updateMissing: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); describe('without a count option', () => { it('only sends one missing key', () => { expect( t.translate('translation:test', { defaultValue: 'new value', defaultValue_plural: 'new values', }), ).to.eql('test_en'); expect(missingKeyHandler.calledOnce).to.be.true; expect(missingKeyHandler.calledWith(['en'], 'translation', 'test', 'new value', true)).to.be .true; }); }); describe('with a non-numeric count option', () => { it('only sends one missing key', () => { expect( t.translate('translation:test', { count: 'foo', defaultValue: 'new value', defaultValue_plural: 'new values', }), ).to.eql('test_en'); expect(missingKeyHandler.calledOnce).to.be.true; }); }); describe('without a default plural value', () => { [1, 2].forEach((count) => { it(`count=${count}: sends falls back on singular default value`, () => { expect( t.translate('translation:test', { count, defaultValue: 'new value', }), ).to.eql('test_en'); expect(missingKeyHandler.calledTwice).to.be.true; expect(missingKeyHandler.calledWith(['en'], 'translation', 'test_one', 'new value', true)) .to.be.true; expect( missingKeyHandler.calledWith(['en'], 'translation', 'test_other', 'new value', true), ).to.be.true; }); }); }); describe('with a numeric count option', () => { it('sends correct missing keys per default plural values', () => { expect( t.translate('translation:test', { count: 1, defaultValue_one: 'new value', defaultValue_other: 'new values', }), ).to.eql('test_en'); expect(missingKeyHandler.calledTwice).to.be.true; expect(missingKeyHandler.calledWith(['en'], 'translation', 'test_one', 'new value', true)) .to.be.true; expect( missingKeyHandler.calledWith(['en'], 'translation', 'test_other', 'new values', true), ).to.be.true; }); }); }); }); i18next-23.7.6/test/typescript/000077500000000000000000000000001452441263500163045ustar00rootroot00000000000000i18next-23.7.6/test/typescript/backend.test.ts000066400000000000000000000007201452441263500212200ustar00rootroot00000000000000import i18next from 'i18next'; import HttpBackend, { HttpBackendOptions } from 'i18next-http-backend'; import FsBackend, { FsBackendOptions } from 'i18next-fs-backend'; i18next.use(HttpBackend).init({ lng: 'en', // ... backend: { loadPath: 'some/path', customHeaders: { some: 'header', }, }, }); i18next.use(FsBackend).init({ lng: 'en', // ... backend: { loadPath: 'some/path', }, }); i18next-23.7.6/test/typescript/custom-context-separator/000077500000000000000000000000001452441263500232765ustar00rootroot00000000000000i18next-23.7.6/test/typescript/custom-context-separator/i18next.d.ts000066400000000000000000000006031452441263500253670ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'ctx'; contextSeparator: '|'; resources: { ctx: { beverage: 'beverage'; 'beverage|beer': 'beer'; 'dessert|cake': 'a nice cake'; 'dessert|muffin_one': 'a nice muffin'; 'dessert|muffin_other': '{{count}} nice muffins'; }; }; } } i18next-23.7.6/test/typescript/custom-context-separator/t.test.ts000066400000000000000000000004621452441263500250710ustar00rootroot00000000000000import { TFunction } from 'i18next'; function i18nextContextUsage(t: TFunction) { t('dessert', { context: 'cake' }).trim(); // context + plural t('dessert', { context: 'muffin', count: 3 }).trim(); // Without & with context t('beverage').trim(); t('beverage', { context: 'beer' }).trim(); } i18next-23.7.6/test/typescript/custom-context-separator/tsconfig.json000066400000000000000000000001241452441263500260020ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-23.7.6/test/typescript/custom-types/000077500000000000000000000000001452441263500207605ustar00rootroot00000000000000i18next-23.7.6/test/typescript/custom-types/getFixedT.test.ts000066400000000000000000000016251452441263500241750ustar00rootroot00000000000000import i18next from 'i18next'; const t1 = i18next.getFixedT(null, null, 'foo'); const t2 = i18next.getFixedT(null, 'alternate', 'foobar.deep'); t2('deeper.deeeeeper'); // t2('deeper').deeeeeper; // i18next would say: "key 'deeper (en)' returned an object instead of string." t2('deeper', { returnObjects: true }).deeeeeper; const t3 = i18next.getFixedT('en'); t3('foo'); // t3('alternate:foobar.deep.deeper.deeeeeper'); t3('foobar.deep.deeper.deeeeeper', { ns: 'alternate' }); const t4 = i18next.getFixedT('en', 'alternate', 'foobar'); t4('barfoo'); // @ts-expect-error const t5 = i18next.getFixedT(null, null, 'xxx'); const t6 = i18next.getFixedT(null, 'alternate', 'foobar'); // @ts-expect-error t6('xxx'); const t7 = i18next.getFixedT('en'); t7('bar'); // @ts-expect-error t7('alternate:foobar.barfoo'); // @ts-expect-error t7('foobar.barfoo'); t7('foobar.barfoo', { ns: 'alternate' }); t7('fallbackKey'); i18next-23.7.6/test/typescript/custom-types/i18next.d.ts000066400000000000000000000022051452441263500230510ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; fallbackNS: 'fallback'; resources: { custom: { foo: 'foo'; bar: 'bar'; baz: { bing: 'boop'; }; qux: 'some {{val, number}}'; inter: 'some {{val}}'; nullKey: null; }; fallback: { fallbackKey: 'fallback'; }; alternate: { baz: 'baz'; foobar: { barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }; }; plurals: { foo_zero: 'foo'; foo_one: 'foo'; foo_two: 'foo'; foo_many: 'foo'; foo_other: 'foo'; }; ctx: { foo: 'foo'; dessert_cake: 'a nice cake'; dessert_muffin_one: 'a nice muffin'; dessert_muffin_other: '{{count}} nice muffins'; }; ord: { place_ordinal_one: '1st place'; place_ordinal_two: '2nd place'; place_ordinal_few: '3rd place'; place_ordinal_other: '{{count}}th place'; }; }; } } i18next-23.7.6/test/typescript/custom-types/t.test.ts000066400000000000000000000124401452441263500225520ustar00rootroot00000000000000import i18next, { TFunction } from 'i18next'; function defaultNamespaceUsage(t: TFunction) { t('bar'); t('foo'); t('baz.bing'); t('inter', { val: 'xx' }); // @ts-expect-error t('inter', { wrongOrNoValPassed: 'xx' }); t('baz', { returnObjects: true }).bing; // @ts-expect-error t('baz'); // @ts-expect-error t('custom:bar'); // @ts-expect-error t('foobar'); } function namedDefaultNamespaceUsage(t: TFunction<'alternate'>) { t('foobar.barfoo'); t('foobar.deep.deeper.deeeeeper'); // t('foobar.deep.deeper').deeeeeper; // i18next would say: "key 'foobar.deep.deeper (en)' returned an object instead of string." t('foobar.deep.deeper', { returnObjects: true }).deeeeeper; // @ts-expect-error t('alternate:foobar.barfoo'); // @ts-expect-error t('foobar'); } function arrayNamespace(t: TFunction<['custom', 'alternate']>) { t('baz.bing'); t('alternate:baz'); t('baz', { ns: 'alternate' }); // t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." t('alternate:foobar.deep', { returnObjects: true }).deeper.deeeeeper; t('custom:bar'); t('bar', { ns: 'custom' }); t('bar'); t('baz', { ns: ['alternate', 'custom'] }); // @ts-expect-error t('baz'); // @ts-expect-error t('baz', { ns: 'custom' }); // @ts-expect-error t('alternate:foobar.deep'); } // @ts-expect-error function expectErrorWhenNamespaceDoesNotExist(t: TFunction<'foo'>) {} function expectTFunctionToReturnString(t: TFunction<'alternate'>) { t('baz').trim(); t('foobar.barfoo').trim(); const alternateTranslationKeys = ['baz', 'foobar.barfoo'] as const; alternateTranslationKeys .map((value) => { return t(value); }) .map((translation) => translation.trim()); // @ts-expect-error t('foobar', { returnObjects: true }).trim(); } function expectErrorWhenKeyNotInNamespace(t: TFunction<'alternate'>) { // @ts-expect-error t('bar'); t('foobar.barfoo'); t('foobar.barfoo', 'some default value'); t('foobar.barfoo', { defaultValue: 'some default value' }); // @ts-expect-error t('new.key'); // @ts-expect-error t('new.key', { other: 'stuff' }); t('new.key', { defaultValue: 'some default value' }); t('new.key', 'some default value'); } function i18nextTUsage() { i18next.t('foobar.barfoo', { ns: 'alternate' }); i18next.t('alternate:foobar.barfoo'); // i18next.t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." i18next.t('alternate:foobar.deep', { returnObjects: true }).deeper.deeeeeper; i18next.t('foobar.deep', { ns: 'alternate', returnObjects: true }).deeper.deeeeeper; i18next.t('foobar.deep', { ns: 'alternate', returnObjects: true, returnDetails: true }).res; i18next.t('custom:bar').trim(); i18next.t('bar', { ns: 'custom' }).trim(); // @ts-expect-error i18next.t('bar', { ns: 'alternate' }); i18next.t('bar', {}).trim(); i18next.t('bar').trim(); i18next.t('baz.bing').trim(); i18next.t('alternate:foobar.barfoo').trim(); // with interpolation i18next.t('custom:inter', { val: 'asdf' }).trim(); i18next.t('inter', { val: 'asdf', ns: 'custom' }).trim(); i18next.t('inter', { val: 'asdf' }).trim(); i18next.t('qux', { val: 'asdf' }).trim(); // @ts-expect-error i18next.t('custom:inter', { foo: 'asdf' }); i18next.t('custom:bar', { defaultValue: 'some default value' }); i18next.t('custom:bar', 'some default value'); i18next.t('bar', { ns: 'custom', defaultValue: 'some default value' }); i18next.t('bar', { defaultValue: 'some default value' }); i18next.t('bar', 'some default value'); const str: string = i18next.t('unknown-ns:unknown-key', 'default value'); } function expectErrorWhenInvalidKeyWithI18nextT() { // @ts-expect-error i18next.t('custom:test'); } function expectErrorWhenInvalidNamespaceWithI18nextT() { // @ts-expect-error i18next.t('test:bar'); } function i18nextTPluralsUsage() { i18next.t('plurals:foo', { count: 1 }).trim(); i18next.t('plurals:foo_many', { count: 10 }).trim(); } function i18nextOrdinalPluralUsage(t: TFunction<'ord'>) { t('place', { ordinal: true, count: 1 }).trim(); t('place', { ordinal: true, count: 2 }).trim(); t('place', { ordinal: true, count: 3 }).trim(); t('place', { ordinal: true, count: 4 }).trim(); } // @ts-expect-error function returnNeverWithInvalidNamespace(t: TFunction) { const result: never = t('foo'); } function nullTranslations() { // seems to work only when not using typesafe translations // i18next.t('nullKey').trim(); } function i18nextContextUsage(t: TFunction<'ctx'>) { t('dessert', { context: 'cake' }).trim(); // context + plural t('dessert', { context: 'muffin', count: 3 }).trim(); // @ts-expect-error // valid key with invalid context t('foo', { context: 'cake' }).trim(); } function expectErrorsForDifferentTFunctions( t1: TFunction<'ord'>, t2: TFunction<['ord', 'plurals']>, t3: TFunction<['plurals', 'ord']>, ) { const fn: (t: TFunction<'plurals'>) => void = () => {}; // @ts-expect-error fn(t1); // @ts-expect-error fn(t2); fn(t3); // no error } function usingTFunctionInsideAnotherTFunction(t: TFunction) { t('foo', { defaultValue: t('bar') }); t('foo', { something: t('bar') }); t('foo', { defaultValue: t('bar'), something: t('bar') }); } i18next-23.7.6/test/typescript/custom-types/tsconfig.json000066400000000000000000000001241452441263500234640ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-23.7.6/test/typescript/default-types/000077500000000000000000000000001452441263500210725ustar00rootroot00000000000000i18next-23.7.6/test/typescript/default-types/t.test.ts000066400000000000000000000007551452441263500226720ustar00rootroot00000000000000import { TFunction } from 'i18next'; function expectErrorsForDifferentTFunctions( t1: TFunction<'ord'>, t2: TFunction<['ord', 'plurals']>, t3: TFunction<['plurals', 'ord']>, t4: TFunction<[string, string]>, ) { const fn: (t: TFunction<'plurals'>) => void = () => {}; const fn2: (t: TFunction) => void = () => {}; // no error - not checked when CustomTypeOptions["resources"] is not provided fn(t1); fn(t2); fn(t3); fn(t4); fn2(t1); fn2(t2); fn2(t3); fn2(t4); } i18next-23.7.6/test/typescript/default-types/tsconfig.json000066400000000000000000000001241452441263500235760ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-23.7.6/test/typescript/exists.test.ts000066400000000000000000000003721452441263500211530ustar00rootroot00000000000000import i18next from 'i18next'; i18next.exists('friend'); i18next.exists(['friend', 'tree']); i18next.exists('friend', { myVar: 'someValue' }); i18next.exists(['friend', 'tree'], { myVar: 'someValue' }); const a: boolean = i18next.exists('my.key'); i18next-23.7.6/test/typescript/exposed.test.ts000066400000000000000000000021541452441263500213030ustar00rootroot00000000000000/** Exercise exposed types/imports for different tsconfig esmoduleinterop settings */ /* esModuleInterop: true, allowSyntheticDefaultImports: true */ import i18next, { Interpolator, Modules, WithT, ResourceStore, Formatter } from 'i18next'; i18next.init(); const lng = i18next.resolvedLanguage || i18next.language; const interpolator: Interpolator = i18next.services.interpolator; const mockWithT: WithT = { t: ((key: string) => key) as any, }; const modules: Modules = { external: [] }; const resourceStore: ResourceStore = i18next.services.resourceStore; resourceStore.on('added', console.log); resourceStore.off('added', console.log); resourceStore.off('added'); resourceStore.data['en']; const formatter: Formatter | undefined = i18next.services.formatter; formatter!.add('test', (value: any, lng: string | undefined, options: any) => 'formatted'); formatter!.addCached( 'test', (lng: string | undefined, options: any) => (value: any) => 'formatted', ); i18next.on('custom', (arg) => {}); i18next.emit('custom'); i18next.emit('custom', { some: 'opt' }); i18next.emit('custom', { some: 'opt' }, { more: 'stuff' }); i18next-23.7.6/test/typescript/fallback-types/000077500000000000000000000000001452441263500212055ustar00rootroot00000000000000i18next-23.7.6/test/typescript/fallback-types/getFixedT.test.ts000066400000000000000000000003731452441263500244210ustar00rootroot00000000000000import i18next from 'i18next'; const t = i18next.getFixedT('en'); t('bar'); // @ts-expect-error t('alternate:foobar.barfoo'); // @ts-expect-error t('foobar.barfoo'); t('foobar.barfoo', { ns: 'alternate' }); t('fallbackKey'); t('anotherFallbackKey'); i18next-23.7.6/test/typescript/fallback-types/i18next.d.ts000066400000000000000000000006631452441263500233040ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; fallbackNS: ['fallback', 'fallback2']; resources: { custom: { bar: 'bar'; }; fallback: { fallbackKey: 'fallback'; }; fallback2: { anotherFallbackKey: 'fallback2'; }; alternate: { foobar: { barfoo: 'barfoo'; }; }; }; } } i18next-23.7.6/test/typescript/fallback-types/tsconfig.json000066400000000000000000000001241452441263500237110ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-23.7.6/test/typescript/init.test.ts000066400000000000000000000245451452441263500206070ustar00rootroot00000000000000import i18next, { TFunction, createInstance } from 'i18next'; // i18next.js export default as esm module because the build is apart from commonjs. i18next.init( { lng: 'en', debug: true, resources: { en: { translation: { key: 'hello world', }, key: 'hello world', }, }, ignoreJSONStructure: false, }, (err, t) => { // initialized and ready to go! const value: string = t('key'); }, ); i18next.init({ initImmediate: false }); i18next.init( { lng: 'en', debug: true, resources: { en: { translation: { key: 'hello world', }, }, de: { translation: { key: 'hello welt', }, }, }, ignoreJSONStructure: true, }, // not necessary but check a non-inferred arg for paranoia's sake (err, t: TFunction) => { // init set content updateContent(); }, ); i18next.init( { ns: ['common', 'moduleA', 'moduleB'] as const, defaultNS: 'moduleA', }, (err, t) => { t('myKey'); // key in moduleA namespace (defined default) t('common:myKey'); // key in common namespace }, ); i18next.loadNamespaces('anotherNamespace', (err, t) => { /* ... */ }); // fallback to one language i18next.init( { lng: 'en-GB', }, () => { i18next.t('i18n'); // -> "Internationalisation" i18next.t('i18n_short'); // -> "i18n" (from en.json) // force loading en i18next.t('i18n', { lng: 'en' }); // -> "Internationalization" }, ); // fallback to one language i18next.init({ fallbackLng: 'en', }); // fallback ordered i18next.init({ fallbackLng: ['fr', 'en'], }); // fallback depending on user language i18next.init({ fallbackLng: { 'de-CH': ['fr', 'it'], 'zh-HANT': ['zh-HANS', 'en'], es: ['fr'], default: ['en'], }, }); const updateContent = () => { const value: string = i18next.t('key'); }; const changeLng = (lng: string) => { i18next.changeLanguage(lng); }; i18next.init( { // files to load ns: ['app', 'common'], // default namespace (needs no prefix on calling t) defaultNS: 'app', // fallback, can be a string or an array of namespaces fallbackNS: 'common', }, () => { i18next.t('title'); // -> "i18next" i18next.t('button.save'); // -> "save" (fallback from common) // without fallbackNS you would have to prefix namespace // to access keys in that namespace i18next.t('common:button.save'); // -> "save" }, ); i18next.init({ lng: 'de', // allow keys to be phrases having `:`, `.` nsSeparator: false, keySeparator: false, // do not load a fallback fallbackLng: false, }); const languageChangedCallback = () => { updateContent(); }; i18next.on('languageChanged', languageChangedCallback); i18next.off('languageChanged', languageChangedCallback); i18next.init( { fallbackLng: 'en', debug: true, ns: ['special', 'common'], defaultNS: 'special', backend: { // load from i18next-gitbook repo loadPath: 'https://raw.githubusercontent.com/i18next/i18next-gitbook/master/locales/{{lng}}/{{ns}}.json', crossDomain: true, }, }, (err, t) => { // init set content updateContent2(); }, ); // just set some content and react to language changes // could be optimized using vue-i18next, jquery-i18next, react-i18next, ... const updateContent2 = () => { const value: string = i18next.t('title', { what: 'i18next' }); const value2: string = i18next.t('common:button.save', { count: Math.floor(Math.random() * 2 + 1), }); const value3 = `detected user language: "${ i18next.language }" --> loaded languages: "${i18next.languages.join(', ')}"`; }; i18next.init( { fallbackLng: 'en', ns: ['file1', 'file2'], defaultNS: 'file1', debug: true, }, (err, t) => { if (err) { console.log('something went wrong loading', err); return; } t('key'); // -> same as i18next.t }, ); // with only callback i18next.init((err, t) => { if (err) { console.log('something went wrong loading', err); return; } t('key'); // -> same as i18next.t }); const v: string = i18next.t('my.key'); // fix language to german const de = i18next.getFixedT('de'); const z: string = de('myKey'); // verify we can get the German data const data = i18next.getDataByLanguage('de'); // verify the data.translation field exists console.log(data ? data.translation.myKey : 'data does not exist'); // verify the field for a specific namespace exists console.log(data ? data.common.myKey : 'data does not exist'); // or fix the namespace to anotherNamespace const anotherNamespace = i18next.getFixedT(null, 'anotherNamespace'); const x: string = anotherNamespace('anotherNamespaceKey'); // no need to prefix ns i18n.t('anotherNamespace:anotherNamespaceKey'); i18next.changeLanguage('en', (err, t) => { if (err) { console.log('something went wrong loading', err); return; } t('key'); // -> same as i18next.t }); i18next.loadNamespaces('myNamespace', (err, t) => { /* resources have been loaded */ }); i18next.loadNamespaces(['myNamespace1', 'myNamespace2'], (err, t) => { /* resources have been loaded */ }); i18next.loadLanguages('de', (err, t) => { /* resources have been loaded */ }); i18next.loadLanguages(['de', 'fr'], (err, t) => { /* resources have been loaded */ }); // reload all i18next.reloadResources(); // reload languages i18next.reloadResources(['de', 'fr'] as const); // reload namespaces for all languages i18next.reloadResources(null, ['ns1', 'ns2']); // reload namespaces in languages i18next.reloadResources(['de', 'fr'], ['ns1', 'ns2']); // for current language i18next.dir(); // for another language i18next.dir('en-US'); // -> "ltr"; i18next.dir('ar'); // -> "rtl"; const newInstance = i18next.createInstance( { fallbackLng: 'en', ns: ['file1', 'file2'] as const, defaultNS: 'file1', debug: true, }, (err, t) => { if (err) { console.log('something went wrong loading', err); return; } t('key'); // -> same as i18next.t }, ); // is the same as newInstance.init( { fallbackLng: 'en', ns: ['file1', 'file2'], defaultNS: 'file1', debug: true, }, (err, t) => { if (err) { console.log('something went wrong loading', err); return; } t('key'); // -> same as i18next.t }, ); const newInstance2 = i18next.cloneInstance( { fallbackLng: 'en', ns: ['file1', 'file2'], defaultNS: 'file1', debug: true, }, (err, t) => { if (err) { console.log('something went wrong loading', err); return; } t('key'); // -> same as i18next.t }, ); // is the same as const newInstance3 = i18next.cloneInstance(); newInstance.init( { fallbackLng: 'en', ns: ['file1', 'file2'], defaultNS: 'file1', debug: true, }, (err, t) => { if (err) { console.log('something went wrong loading', err); return; } t('key'); // -> same as i18next.t }, ); const cloneWithFork = i18next.cloneInstance( { forkResourceStore: true, keySeparator: '__', }, (err, t) => { if (err) { console.log('something went wrong loading', err); return; } t('key'); // -> same as i18next.t }, ); i18next.on('initialized', (options) => {}); i18next.on('loaded', (loaded) => {}); i18next.on('failedLoading', (lng: string, ns: string, msg: string) => {}); i18next.on('missingKey', (lngs: string[], namespace: string, key: string, res: string) => {}); i18next.on('added', (lng: string, ns: string) => {}); i18next.on('removed', (lng: string, ns: string) => {}); i18next.on('languageChanged', (lng: string) => {}); i18next.on('customEvent', () => {}); i18next.store.on('added', (lng: string, ns: string) => {}); i18next.store.on('removed', (lng: string, ns: string) => {}); i18next.getResource('en', 'test', 'key'); i18next.getResource('en', 'test', 'key', { keySeparator: '-', ignoreJSONStructure: false }); i18next.addResource('en', 'test', 'key', 'value'); i18next.addResource('en', 'test', 'key', 'value', { keySeparator: '-', silent: false, }); i18next.addResources('en', 'test', { key: 'value' }); i18next.addResourceBundle( 'en', 'translations', { key: 'value', }, true, true, ); const has: boolean = i18next.hasResourceBundle('en', 'test'); i18next.getResourceBundle('en', 'test'); i18next.removeResourceBundle('en', 'test'); i18next.init({ resources: { en: { namespace1: { key: 'hello from namespace 1', }, namespace2: { key: 'hello from namespace 2', }, }, de: { namespace1: { key: 'hallo von namespace 1', }, namespace2: { key: 'hallo von namespace 2', }, }, }, }); i18next.init(); i18next.addResourceBundle('en', 'namespace1', { key: 'hello from namespace 1', }); i18next.init({ backend: { // for all available options read the backend's repository readme file loadPath: '/locales/{{lng}}/{{ns}}.json', }, }); i18next.init({ ns: ['common', 'moduleA'], defaultNS: 'moduleA', }); i18next.init({ lng: 'en', fallbackLng: 'en', resources: { en: { translation: { key1: 'test', interpolateKey: 'add {{insert}} {{up, uppercase}}', interpolateKey2: 'add {{insert}} {{up, uppercase}}', }, }, }, interpolation: { escapeValue: false, // not needed for react!! formatSeparator: ',', format: (value, format, lng) => { if (format === 'uppercase') { return value.toUpperCase(); } if (value instanceof Date) { return value.toLocaleString(); } return value; }, }, }); i18next.init({ react: { hashTransKey: (defaultValue) => { if (typeof defaultValue === 'string') { return defaultValue.replace(/\s+/g, '_'); } throw new Error("Don't know how to make key for non-string defaultValue"); }, }, }); // Init with Locize options. // From https://github.com/i18next/react-i18next/blob/master/example/locize/src/i18n.js const locizeOptions = { projectId: '', apiKey: '', referenceLng: 'en', }; i18next.init({ fallbackLng: 'en', debug: true, saveMissing: true, interpolation: { escapeValue: false, // not needed for react as it escapes by default }, backend: locizeOptions, locizeLastUsed: locizeOptions, react: { bindI18n: 'languageChanged editorSaved', }, }); createInstance({ lng: 'en', fallbackLng: 'en', }); i18next-23.7.6/test/typescript/interpolator.test.ts000066400000000000000000000006761452441263500223650ustar00rootroot00000000000000import i18next, { Interpolator } from 'i18next'; const interpolator: Interpolator = i18next.services.interpolator; const initReturn: undefined = interpolator.init({}, false); const resetReturn: undefined = interpolator.reset(); const resetRegExpReturn: undefined = interpolator.resetRegExp(); const nestReturn: string = interpolator.nest('', () => undefined, {}); const interpolateReturn: string = interpolator.interpolate('', {}, '', {}); i18next-23.7.6/test/typescript/languageDetector.test.ts000066400000000000000000000013151452441263500231070ustar00rootroot00000000000000import { createInstance, LanguageDetectorAsyncModule, LanguageDetectorModule } from 'i18next'; let i18n = createInstance(); i18n .use({ type: 'languageDetector', detect: () => 'en', }) .init(); i18n = createInstance(); i18n .use({ type: 'languageDetector', async: true, detect: (clb) => clb('en'), }) .init(); i18n = createInstance(); i18n .use({ type: 'languageDetector', async: true, detect: async () => 'en', }) .init(); i18n = createInstance(); i18n .use({ type: 'languageDetector', async: true, detect: (clb: (lng: string) => void) => clb('en'), }) .init(); i18next-23.7.6/test/typescript/mock.test.ts000066400000000000000000000006171452441263500205670ustar00rootroot00000000000000import { WithT } from 'i18next'; /** * Exercises in mocking */ const mockWithT: WithT = { t: ((key: string) => key) as any, }; const translation = { fi: { article: { translationKey: 'translationValue', }, }, }; const mockWithTAndResources: WithT<'article'> = { t: ((key: string) => translation.fi.article[key as keyof typeof translation.fi.article] || key) as any, }; i18next-23.7.6/test/typescript/modules.test.ts000066400000000000000000000040211452441263500212770ustar00rootroot00000000000000import i18next, { Modules, BackendModule, LanguageDetectorModule, LoggerModule, I18nFormatModule, ThirdPartyModule, FormatterModule, } from 'i18next'; // declare modules in a way that the `type` is not widened // @see https://github.com/microsoft/TypeScript/issues/20271#issuecomment-347020203 const backendModule: BackendModule = { type: 'backend', init: () => null, read: (_language, _namespace, callback) => { callback(null, { key: 'value', }); }, create: () => null, readMulti: (_languages, _namespaces, callback) => { callback(null, { en: { namespace: { key: 'value', }, }, }); }, save: () => null, }; const languageDetectorModule: LanguageDetectorModule = { type: 'languageDetector', init: () => null, detect: () => '', cacheUserLanguage: () => null, }; const loggerModule: LoggerModule = { type: 'logger', log: () => null, warn: () => null, error: () => null, }; const i18nFormatModule: I18nFormatModule = { type: 'i18nFormat', }; const formatterModule: FormatterModule = { type: 'formatter', init: () => null, add: () => null, addCached: () => () => null, format: () => '', }; const thirdPartyModule: ThirdPartyModule = { type: '3rdParty', init: () => null, }; const externalModules = [thirdPartyModule]; const modules: Modules = { backend: backendModule, languageDetector: languageDetectorModule, i18nFormat: i18nFormatModule, logger: loggerModule, formatter: formatterModule, external: externalModules, }; i18next.use(backendModule); i18next.use(languageDetectorModule); i18next.use(loggerModule); i18next.use(i18nFormatModule); i18next.use(formatterModule); i18next.use(thirdPartyModule); // exercise class usage // Need both static and member definitions of type to satisfy use() signature, see #1442 class MyLoggerModule implements LoggerModule { static type: 'logger' = 'logger'; type: 'logger' = 'logger'; log = () => null; warn = () => null; error = () => null; } i18next.use(MyLoggerModule); i18next-23.7.6/test/typescript/t.test.ts000066400000000000000000000127271452441263500201060ustar00rootroot00000000000000import i18next, { TFunction } from 'i18next'; function basicUsage(t: TFunction) { t('friend'); t`friend`; t(['friend', 'tree']); t('friend', { myVar: 'someValue' }); t(['friend', 'tree'], { myVar: 'someValue' }); } function overloadedUsage(t: TFunction) { t('friend', 'test {{myVar}}', { myVar: 'someValue' }); t(['friend', 'tree'], 'test {{myVar}}', { myVar: 'someValue' }); } function returnCasts(t: TFunction) { const s: string = t('friend'); // same as const s2: string = t`friend`; // @ts-expect-error const s3: string = t('friend', { returnObjects: true }); const o: object = t('friend', { returnObjects: true }); const sa: string[] = t('friend', { returnObjects: true }); const oa: object[] = t('friend', { returnObjects: true }); } function defautValue(t: TFunction) { t('translation:test', { defaultValue: 'test_en' }); t('translation:test', { defaultValue: 'test_en', count: 1 }); t('translation:test', { defaultValue_other: 'test_en_plural', defaultValue_one: 'test_en', count: 10, }); // string (only) default value as second arg // https://www.i18next.com/translation-function/essentials#passing-a-default-value // https://github.com/i18next/i18next/blob/master/src/Translator.js#L66 t('translation:test', 'test_en'); } function callsMethodWithOptionalNullArg(t: TFunction) { function displayHint(hint?: string | null) { return String(hint); } displayHint(t('friend')); } function callsMethodWithRequiredNullArg(t: TFunction) { function displayHint(hint: string | null) { return String(hint); } displayHint(t('friend')); } function callsMethodWithRequiredArg(t: TFunction) { function displayHint(hint: string) { return String(hint); } displayHint(t('friend')); } function arrayKey(t: TFunction) { const error404 = '404'; t([`error.${error404}`, 'error.unspecific']); // -> "The page was not found" const error502 = '502'; t([`error.${error502}`, 'error.unspecific']); // -> "Something went wrong" } function stringKey(t: TFunction) { t('No one says a key can not be the fallback.'); // -> "Niemand sagt ein key kann nicht als Ersatz dienen." t('This will be shown if the current loaded translations to not have this.'); // -> "This will be shown if the current loaded translations to not have this." } function interpolation(t: TFunction) { // key = 'hello {{what}}' t('key', { what: i18next.format('world', 'uppercase') }); // -> hello WORLD t('key', { what: 'i18next', how: 'great' }); const author = { name: 'Jan', github: 'jamuhl', }; t('key', { author }); t('keyEscaped', { myVar: '' }); // -> "no danger <img />" t('keyUnescaped', { myVar: '' }); // -> "dangerous " t('keyEscaped', { myVar: '', interpolation: { escapeValue: false }, }); // -> "no danger " (obviously could be dangerous) t('key', { count: 0 }); // -> "items" t('key', { count: 1 }); // -> "item" t('key', { count: 5 }); // -> "items" t('key', { count: 100 }); // -> "items" t('keyWithCount', { count: 0 }); // -> "0 items" t('keyWithCount', { count: 1 }); // -> "1 item" t('keyWithCount', { count: 5 }); // -> "5 items" t('keyWithCount', { count: 100 }); // -> "100 items" t('key1_interval', { postProcess: 'interval', count: 1 }); // -> "one item" t('key1_interval', { postProcess: 'interval', count: 4 }); // -> "a few items" t('key1_interval', { postProcess: 'interval', count: 100 }); // -> "a lot of items" // not matching into a range it will fallback to // the regular plural form t('key2_interval', { postProcess: 'interval', count: 1 }); // -> "one item" t('key2_interval', { postProcess: 'interval', count: 4 }); // -> "a few items" t('key2_interval', { postProcess: 'interval', count: 100 }); // -> "100 items" t('friend', { context: 'male', count: 1 }); // -> "A boyfriend" t('friend', { context: 'female', count: 100 }); // -> "100 girlfriends" t('tree', { returnObjects: true, something: 'gold' }); // -> { res: 'added gold' } t('array', { returnObjects: true }); // -> ['a', 'b', 'c'] t('arrayJoin', { joinArrays: '+' }); // -> "line1+line2+line3" const objectResult: object = t('test', { returnObjects: true }); const detailsAndObjecbarriersLinkTexttResult: object | string | null = t('test', { returnObjects: true, returnDetails: true, }).res; // @ts-expect-error const notTrueObjectResult: object = t('test'); const resolved = t('key', { returnDetails: true }); resolved.res; resolved.res?.substring(2, 1); resolved.usedKey; resolved.exactUsedKey; resolved.usedNS; resolved.usedLng; resolved.usedParams; const r2 = t('keyTwo', { returnDetails: false }); r2?.substring(0, 2); // make sure it is a string const r3 = t('keyThree'); r3?.substring(0, 2); // make sure it is a string const r4 = t('keyTwo', { ns: 'whatever' }); r4?.substring(0, 2); // make sure it is a string t('arrayJoinWithInterpolation', { myVar: 'interpolate', joinArrays: ' ', }); // -> "you can interpolate" t('arrayOfObjects.0.name'); // -> "tom" t('welcome here :)', { nsSeparator: false }); // -> "welcome here :)" t('welcome ...', { keySeparator: false }); // -> "welcome ..." } function nullTranslations() { i18next.t('nullKey').trim(); } function usingTFunctionInsideAnotherTFunction(t: TFunction) { t('foobar', { defaultValue: t('inter') }); t('foobar', { defaultValue: t('inter'), someValue: t('inter') }); t('foobar', { something: t('inter') }); } i18next-23.7.6/test/typescript/tGeneric.test.ts000066400000000000000000000006071452441263500213750ustar00rootroot00000000000000import i18next from 'i18next'; type Keys = 'friend' | 'tree'; // check keys i18next.t('friend', { myVar: 'someValue' }); i18next.t(['friend', 'tree'], { myVar: 'someValue' }); // check interpolation values i18next.t('friend', { myVar: 'someValue' }); i18next.t(['friend', 'tree'], { myVar: 'someValue' }); i18next-23.7.6/test/utils.spec.js000066400000000000000000000012011452441263500165170ustar00rootroot00000000000000import * as utils from '../src/utils'; describe('utils', () => { describe('#deepExtend', () => { it('it should overwrite if flag set', () => { const res = utils.deepExtend( { some: 'thing', }, { some: 'else', }, true, ); expect(res).to.eql({ some: 'else', }); }); it('it should not overwrite', () => { const res = utils.deepExtend( { some: 'thing', }, { some: 'else', }, false, ); expect(res).to.eql({ some: 'thing', }); }); }); }); i18next-23.7.6/tsconfig.json000066400000000000000000000012231452441263500156240ustar00rootroot00000000000000{ "compilerOptions": { "module": "commonjs", "target": "es5", "lib": ["es6", "dom"], "jsx": "react", "moduleResolution": "node", "forceConsistentCasingInFileNames": true, "strict": true, "noEmit": true, "baseUrl": ".", "paths": { "i18next": ["./index.d.mts"] }, "esModuleInterop": true, "allowSyntheticDefaultImports": true }, "include": ["./index.d.mts", "./test/**/*.ts*"], "exclude": [ "test/typescript/nonEsModuleInterop/**/*.ts", "test/typescript/custom-types", "test/typescript/default-types", "test/typescript/fallback-types", "test/typescript/custom-context-separator" ] } i18next-23.7.6/tsconfig.nonEsModuleInterop.json000066400000000000000000000002531452441263500214160ustar00rootroot00000000000000{ "extends": "./tsconfig.json", "compilerOptions": { // typescript defaults to these "esModuleInterop": false, "allowSyntheticDefaultImports": false } } i18next-23.7.6/tslint.json000066400000000000000000000001571452441263500153320ustar00rootroot00000000000000{ "defaultSeverity": "error", "extends": "dtslint/dtslint.json", "rules": { "semicolon": false } } i18next-23.7.6/typescript/000077500000000000000000000000001452441263500153255ustar00rootroot00000000000000i18next-23.7.6/typescript/helpers.d.ts000066400000000000000000000005461452441263500175660ustar00rootroot00000000000000export type $MergeBy = Omit & K; export type $Dictionary = { [key: string]: T }; export type $OmitArrayKeys = Arr extends readonly any[] ? Omit : Arr; export type $PreservedValue = [Value] extends [never] ? Fallback : Value; export type $SpecialObject = object | Array; i18next-23.7.6/typescript/options.d.ts000066400000000000000000000431011452441263500176110ustar00rootroot00000000000000import type { $MergeBy, $PreservedValue, $Dictionary } from './helpers.d.ts'; /** * This interface can be augmented by users to add types to `i18next` default TypeOptions. * * Usage: * ```ts * // i18next.d.ts * import 'i18next'; * declare module 'i18next' { * interface CustomTypeOptions { * defaultNS: 'custom'; * returnNull: false; * returnObjects: false; * nsSeparator: ':'; * keySeparator: '.'; * jsonFormat: 'v4'; * allowObjectInHTMLChildren: false; * resources: { * custom: { * foo: 'foo'; * }; * }; * } * } * ``` */ export interface CustomTypeOptions {} /** * This interface can be augmented by users to add types to `i18next` default PluginOptions. */ export interface CustomPluginOptions {} export type TypeOptions = $MergeBy< { /** * Allows null values as valid translation */ returnNull: false; /** * Allows objects as valid translation result */ returnObjects: false; /** * Char to separate keys */ keySeparator: '.'; /** * Char to split namespace from key */ nsSeparator: ':'; /** * Char to split plural from key */ pluralSeparator: '_'; /** * Char to split context from key */ contextSeparator: '_'; /** * Default namespace used if not passed to translation function */ defaultNS: 'translation'; /** * Fallback namespace used if translation not found in given namespace * @default false */ fallbackNS: false; /** * Json Format Version - V4 allows plural suffixes */ jsonFormat: 'v4'; /** * Resources to initialize with */ resources: object; /** * Flag that allows HTML elements to receive objects. This is only useful for React applications * where you pass objects to HTML elements so they can be replaced to their respective interpolation * values (mostly with Trans component) */ allowObjectInHTMLChildren: false; /** * Prefix for interpolation */ interpolationPrefix: '{{'; /** * Suffix for interpolation */ interpolationSuffix: '}}'; }, CustomTypeOptions >; export type PluginOptions = $MergeBy< { /** * Options for language detection - check documentation of plugin * @default undefined */ detection?: object; /** * Options for backend - check documentation of plugin * @default undefined */ backend?: T; /** * Options for cache layer - check documentation of plugin * @default undefined */ cache?: object; /** * Options for i18n message format - check documentation of plugin * @default undefined */ i18nFormat?: object; }, CustomPluginOptions >; export type FormatFunction = ( value: any, format?: string, lng?: string, options?: InterpolationOptions & $Dictionary, ) => string; export interface InterpolationOptions { /** * Format function see formatting for details * @default noop */ format?: FormatFunction; /** * Used to separate format from interpolation value * @default ',' */ formatSeparator?: string; /** * Escape function * @default str => str */ escape?(str: string): string; /** * Always format interpolated values. * @default false */ alwaysFormat?: boolean; /** * Escape passed in values to avoid xss injection * @default true */ escapeValue?: boolean; /** * If true, then value passed into escape function is not casted to string, use with custom escape function that does its own type check * @default false */ useRawValueToEscape?: boolean; /** * Prefix for interpolation * @default '{{' */ prefix?: string; /** * Suffix for interpolation * @default '}}' */ suffix?: string; /** * Escaped prefix for interpolation (regexSafe) * @default undefined */ prefixEscaped?: string; /** * Escaped suffix for interpolation (regexSafe) * @default undefined */ suffixEscaped?: string; /** * Suffix to unescaped mode * @default undefined */ unescapeSuffix?: string; /** * Prefix to unescaped mode * @default '-' */ unescapePrefix?: string; /** * Prefix for nesting * @default '$t(' */ nestingPrefix?: string; /** * Suffix for nesting * @default ')' */ nestingSuffix?: string; /** * Escaped prefix for nesting (regexSafe) * @default undefined */ nestingPrefixEscaped?: string; /** * Escaped suffix for nesting (regexSafe) * @default undefined */ nestingSuffixEscaped?: string; /** * Separates options from key * @default ',' */ nestingOptionsSeparator?: string; /** * Global variables to use in interpolation replacements * @default undefined */ defaultVariables?: { [index: string]: any }; /** * After how many interpolation runs to break out before throwing a stack overflow * @default 1000 */ maxReplaces?: number; /** * If true, it will skip to interpolate the variables * @default true */ skipOnVariables?: boolean; } export interface FallbackLngObjList { [language: string]: readonly string[]; } export type FallbackLng = | string | readonly string[] | FallbackLngObjList | ((code: string) => string | readonly string[] | FallbackLngObjList); export interface ReactOptions { /** * Set it to fallback to let passed namespaces to translated hoc act as fallbacks * @default 'default' */ nsMode?: 'default' | 'fallback'; /** * Set it to the default parent element created by the Trans component. * @default 'div' */ defaultTransParent?: string; /** * Set which events trigger a re-render, can be set to false or string of events * @default 'languageChanged' */ bindI18n?: string | false; /** * Set which events on store trigger a re-render, can be set to false or string of events * @default '' */ bindI18nStore?: string | false; /** * Set fallback value for Trans components without children * @default undefined */ transEmptyNodeValue?: string; /** * Set it to false if you do not want to use Suspense * @default true */ useSuspense?: boolean; /** * Function to generate an i18nKey from the defaultValue (or Trans children) * when no key is provided. * By default, the defaultValue (Trans text) itself is used as the key. * If you want to require keys for all translations, supply a function * that always throws an error. * @default undefined */ hashTransKey?(defaultValue: TOptionsBase['defaultValue']): TOptionsBase['defaultValue']; /** * Convert eg.
found in translations to a react component of type br * @default true */ transSupportBasicHtmlNodes?: boolean; /** * Which nodes not to convert in defaultValue generation in the Trans component. * @default ['br', 'strong', 'i', 'p'] */ transKeepBasicHtmlNodesFor?: readonly string[]; /** * Wrap text nodes in a user-specified element. * @default '' */ transWrapTextNodes?: string; /** * Optional keyPrefix that will be automatically applied to returned t function in useTranslation for example. * @default undefined */ keyPrefix?: string; /** * Unescape function * by default it unescapes some basic html entities */ unescape?(str: string): string; } export type ResourceKey = | string | { [key: string]: any; }; export interface ResourceLanguage { [namespace: string]: ResourceKey; } export interface Resource { [language: string]: ResourceLanguage; } export interface InitOptions extends PluginOptions { /** * Logs info level to console output. Helps finding issues with loading not working. * @default false */ debug?: boolean; /** * Resources to initialize with (if not using loading or not appending using addResourceBundle) * @default undefined */ resources?: Resource; /** * Allow initializing with bundled resources while using a backend to load non bundled ones. * @default false */ partialBundledLanguages?: boolean; /** * Language to use (overrides language detection) * @default undefined */ lng?: string; /** * Language to use if translations in user language are not available. * @default 'dev' */ fallbackLng?: false | FallbackLng; /** * Array of allowed languages * @default false */ supportedLngs?: false | readonly string[]; /** * If true will pass eg. en-US if finding en in supportedLngs * @default false */ nonExplicitSupportedLngs?: boolean; /** * Language codes to lookup, given set language is * 'en-US': 'all' --> ['en-US', 'en', 'dev'], * 'currentOnly' --> 'en-US', * 'languageOnly' --> 'en' * @default 'all' */ load?: 'all' | 'currentOnly' | 'languageOnly'; /** * Array of languages to preload. Important on server-side to assert translations are loaded before rendering views. * @default false */ preload?: false | readonly string[]; /** * Language will be lowercased eg. en-US --> en-us * @default false */ lowerCaseLng?: boolean; /** * Language will be lowercased EN --> en while leaving full locales like en-US * @default false */ cleanCode?: boolean; /** * String or array of namespaces to load * @default 'translation' */ ns?: string | readonly string[]; /** * Default namespace used if not passed to translation function * @default 'translation' */ defaultNS?: string | false | readonly string[]; /** * String or array of namespaces to lookup key if not found in given namespace. * @default false */ fallbackNS?: false | string | readonly string[]; /** * Calls save missing key function on backend if key not found. * @default false */ saveMissing?: boolean; /** * Calls save missing key function on backend if key not found also for plural forms. * @default false */ saveMissingPlurals?: boolean; /** * Experimental: enable to update default values using the saveMissing * (Works only if defaultValue different from translated value. * Only useful on initial development or when keeping code as source of truth not changing values outside of code. * Only supported if backend supports it already) * @default false */ updateMissing?: boolean; /** * @default 'fallback' */ saveMissingTo?: 'current' | 'all' | 'fallback'; /** * Used to not fallback to the key as default value, when using saveMissing functionality. * i.e. when using with i18next-http-backend this will result in having a key with an empty string value. * @default false */ missingKeyNoValueFallbackToKey?: boolean; /** * Used for custom missing key handling (needs saveMissing set to true!) * @default false */ missingKeyHandler?: | false | (( lngs: readonly string[], ns: string, key: string, fallbackValue: string, updateMissing: boolean, options: any, ) => void); /** * Receives a key that was not found in `t()` and returns a value, that will be returned by `t()` * @default noop */ parseMissingKeyHandler?(key: string, defaultValue?: string): any; /** * Appends namespace to missing key * @default false */ appendNamespaceToMissingKey?: boolean; /** * Gets called in case a interpolation value is undefined. This method will not be called if the value is empty string or null * @default noop */ missingInterpolationHandler?: (text: string, value: any, options: InitOptions) => any; /** * Will use 'plural' as suffix for languages only having 1 plural form, setting it to false will suffix all with numbers * @default true */ simplifyPluralSuffix?: boolean; /** * String or array of postProcessors to apply per default * @default false */ postProcess?: false | string | readonly string[]; /** * passthrough the resolved object including 'usedNS', 'usedLang' etc into options object of postprocessors as 'i18nResolved' property * @default false */ postProcessPassResolved?: boolean; /** * Allows null values as valid translation * @default false */ returnNull?: boolean; /** * Allows empty string as valid translation * @default true */ returnEmptyString?: boolean; /** * Allows objects as valid translation result * @default false */ returnObjects?: boolean; /** * Returns an object that includes information about the used language, namespace, key and value * @default false */ returnDetails?: boolean; /** * Gets called if object was passed in as key but returnObjects was set to false * @default noop */ returnedObjectHandler?(key: string, value: string, options: any): void; /** * Char, eg. '\n' that arrays will be joined by * @default false */ joinArrays?: false | string; /** * Sets defaultValue * @default args => ({ defaultValue: args[1] }) */ overloadTranslationOptionHandler?(args: string[]): TOptions; /** * @see https://www.i18next.com/translation-function/interpolation */ interpolation?: InterpolationOptions; /** * Options for react - check documentation of plugin * @default undefined */ react?: ReactOptions; /** * Triggers resource loading in init function inside a setTimeout (default async behaviour). * Set it to false if your backend loads resources sync - that way calling i18next.t after * init is possible without relaying on the init callback. * @default true */ initImmediate?: boolean; /** * Char to separate keys * @default '.' */ keySeparator?: false | string; /** * Char to split namespace from key * @default ':' */ nsSeparator?: false | string; /** * Char to split plural from key * @default '_' */ pluralSeparator?: string; /** * Char to split context from key * @default '_' */ contextSeparator?: string; /** * Prefixes the namespace to the returned key when using `cimode` * @default false */ appendNamespaceToCIMode?: boolean; /** * Compatibility JSON version * @default 'v4' */ compatibilityJSON?: 'v1' | 'v2' | 'v3' | 'v4'; /** * Options for https://github.com/locize/locize-lastused * @default undefined */ locizeLastUsed?: { /** * The id of your locize project */ projectId: string; /** * An api key if you want to send missing keys */ apiKey?: string; /** * The reference language of your project * @default 'en' */ referenceLng?: string; /** * Version * @default 'latest' */ version?: string; /** * Debounce interval to send data in milliseconds * @default 90000 */ debounceSubmit?: number; /** * Hostnames that are allowed to send last used data. * Please keep those to your local system, staging, test servers (not production) * @default ['localhost'] */ allowedHosts?: readonly string[]; }; /** * Automatically lookup for a flat key if a nested key is not found an vice-versa * @default true */ ignoreJSONStructure?: boolean; /** * Limit parallelism of calls to backend * This is needed to prevent trying to open thousands of * sockets or file descriptors, which can cause failures * and actually make the entire process take longer. * @default 10 */ maxParallelReads?: number; /** * The maximum number of retries to perform. * Note that retries are only performed when a request has no response * and throws an error. * The default value is used if value is set below 0. * @default 5 */ maxRetries?: number; /** * Set how long to wait, in milliseconds, between retries of failed requests. * This number is compounded by a factor of 2 for subsequent retry. * The default value is used if value is set below 1ms. * @default 350 */ retryTimeout?: number; } export interface TOptionsBase { /** * Default value to return if a translation was not found */ defaultValue?: unknown; /** * Count value used for plurals */ count?: number; /** * Ordinal flag for ordinal plurals */ ordinal?: boolean; /** * Used for contexts (eg. male\female) */ context?: any; /** * Object with vars for interpolation - or put them directly in options */ replace?: any; /** * Override language to use */ lng?: string; /** * Override languages to use */ lngs?: readonly string[]; /** * Override language to lookup key if not found see fallbacks for details */ fallbackLng?: FallbackLng; /** * Override namespaces (string or array) */ ns?: Namespace; /** * Override char to separate keys */ keySeparator?: false | string; /** * Override char to split namespace from key */ nsSeparator?: false | string; /** * Accessing an object not a translation string (can be set globally too) */ returnObjects?: boolean; /** * Returns an object that includes information about the used language, namespace, key and value */ returnDetails?: boolean; /** * Char, eg. '\n' that arrays will be joined by (can be set globally too) */ joinArrays?: string; /** * String or array of postProcessors to apply see interval plurals as a sample */ postProcess?: string | readonly string[]; /** * Override interpolation options */ interpolation?: InterpolationOptions; } export type TOptions = TOptionsBase & TInterpolationMap; export type FlatNamespace = $PreservedValue; export type Namespace = T | readonly T[]; export type DefaultNamespace = TypeOptions['defaultNS']; i18next-23.7.6/typescript/t.d.ts000066400000000000000000000204121452441263500163610ustar00rootroot00000000000000import type { $OmitArrayKeys, $PreservedValue, $Dictionary, $SpecialObject } from './helpers.js'; import type { TypeOptions, Namespace, FlatNamespace, DefaultNamespace, TOptions, } from './options.js'; type $IsResourcesDefined = [keyof _Resources] extends [never] ? false : true; type $ValueIfResourcesDefined = $IsResourcesDefined extends true ? Value : Fallback; type $FirstNamespace = Ns extends readonly any[] ? Ns[0] : Ns; // Type Options type _ReturnObjects = TypeOptions['returnObjects']; type _ReturnNull = TypeOptions['returnNull']; type _KeySeparator = TypeOptions['keySeparator']; type _NsSeparator = TypeOptions['nsSeparator']; type _PluralSeparator = TypeOptions['pluralSeparator']; type _ContextSeparator = TypeOptions['contextSeparator']; type _FallbackNamespace = TypeOptions['fallbackNS']; type _Resources = TypeOptions['resources']; type _JSONFormat = TypeOptions['jsonFormat']; type _InterpolationPrefix = TypeOptions['interpolationPrefix']; type _InterpolationSuffix = TypeOptions['interpolationSuffix']; type Resources = $ValueIfResourcesDefined<_Resources, $Dictionary>; type PluralSuffix = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other'; type WithOrWithoutPlural = _JSONFormat extends 'v4' ? Key extends `${infer KeyWithoutOrdinalPlural}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}` ? KeyWithoutOrdinalPlural | Key : Key extends `${infer KeyWithoutPlural}${_PluralSeparator}${PluralSuffix}` ? KeyWithoutPlural | Key : Key : Key; type JoinKeys = `${K1 & string}${_KeySeparator}${K2 & string}`; type AppendNamespace = `${Ns & string}${_NsSeparator}${Keys & string}`; /****************************************************** * Build all keys and key prefixes based on Resources * ******************************************************/ type KeysBuilderWithReturnObjects = Key extends keyof Res ? Res[Key] extends $Dictionary ? | JoinKeys>> | JoinKeys> : never : never; type KeysBuilderWithoutReturnObjects> = Key extends keyof Res ? Res[Key] extends $Dictionary ? JoinKeys> : Key : never; type KeysBuilder = $IsResourcesDefined extends true ? WithReturnObjects extends true ? keyof Res | KeysBuilderWithReturnObjects : KeysBuilderWithoutReturnObjects : string; type KeysWithReturnObjects = { [Ns in FlatNamespace]: WithOrWithoutPlural>; }; type KeysWithoutReturnObjects = { [Ns in FlatNamespace]: WithOrWithoutPlural>; }; type ResourceKeys = WithReturnObjects extends true ? KeysWithReturnObjects : KeysWithoutReturnObjects; /************************************************************************ * Parse t function keys based on the namespace, options and key prefix * ************************************************************************/ export type KeysByTOptions = TOpt['returnObjects'] extends true ? ResourceKeys : ResourceKeys; export type NsByTOptions = TOpt['ns'] extends Namespace ? TOpt['ns'] : Ns; type ParseKeysByKeyPrefix = KPrefix extends string ? Keys extends `${KPrefix}${_KeySeparator}${infer Key}` ? Key : never : Keys; type ParseKeysByNamespaces = Ns extends readonly (infer UnionNsps)[] ? UnionNsps extends keyof Keys ? AppendNamespace : never : never; type ParseKeysByFallbackNs = _FallbackNamespace extends false ? never : _FallbackNamespace extends (infer UnionFallbackNs extends string)[] ? Keys[UnionFallbackNs] : Keys[_FallbackNamespace & string]; type FilterKeysByContext = TOpt['context'] extends string ? Keys extends `${infer Prefix}${_ContextSeparator}${TOpt['context']}${infer Suffix}` ? `${Prefix}${Suffix}` : never : Keys; export type ParseKeys< Ns extends Namespace = DefaultNamespace, TOpt extends TOptions = {}, KPrefix = undefined, Keys extends $Dictionary = KeysByTOptions, ActualNS extends Namespace = NsByTOptions, > = $IsResourcesDefined extends true ? FilterKeysByContext< | ParseKeysByKeyPrefix], KPrefix> | ParseKeysByNamespaces | ParseKeysByFallbackNs, TOpt > : string; /********************************************************* * Parse t function return type and interpolation values * *********************************************************/ type ParseInterpolationValues = Ret extends `${string}${_InterpolationPrefix}${infer Value}${_InterpolationSuffix}${infer Rest}` ? | (Value extends `${infer ActualValue},${string}` ? ActualValue : Value) | ParseInterpolationValues : never; type InterpolationMap = Record< $PreservedValue, string>, unknown >; type ParseTReturnPlural< Res, Key, KeyWithPlural = `${Key & string}${_PluralSeparator}${PluralSuffix}`, KeyWithOrdinalPlural = `${Key & string}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}`, > = Res[(KeyWithOrdinalPlural | KeyWithPlural | Key) & keyof Res]; type ParseTReturn = Key extends `${infer K1}${_KeySeparator}${infer RestKey}` ? ParseTReturn : ParseTReturnPlural; type TReturnOptionalNull = _ReturnNull extends true ? null : never; type TReturnOptionalObjects = _ReturnObjects extends true ? $SpecialObject | string : TOpt['returnObjects'] extends true ? $SpecialObject : string; type DefaultTReturn = TReturnOptionalObjects | TReturnOptionalNull; export type KeyWithContext = TOpt['context'] extends string ? `${Key & string}${_ContextSeparator}${TOpt['context']}` : Key; export type TFunctionReturn< Ns extends Namespace, Key, TOpt extends TOptions, ActualNS extends Namespace = NsByTOptions, ActualKey = KeyWithContext, > = $IsResourcesDefined extends true ? ActualKey extends `${infer Nsp}${_NsSeparator}${infer RestKey}` ? ParseTReturn : ParseTReturn]> : DefaultTReturn; export type TFunctionDetailedResult = { /** * The plain used key */ usedKey: string; /** * The translation result. */ res: T; /** * The key with context / plural */ exactUsedKey: string; /** * The used language for this translation. */ usedLng: string; /** * The used namespace for this translation. */ usedNS: string; /** * The parameters used for interpolation. */ usedParams: InterpolationMap & { count?: TOpt['count'] }; }; type TFunctionReturnOptionalDetails = TOpt['returnDetails'] extends true ? TFunctionDetailedResult : Ret; type AppendKeyPrefix = KPrefix extends string ? `${KPrefix}${_KeySeparator}${Key & string}` : Key; /************************** * T function declaration * **************************/ export interface TFunction { $TFunctionBrand: $IsResourcesDefined extends true ? `${$FirstNamespace}` : never; < const Key extends ParseKeys | TemplateStringsArray, const TOpt extends TOptions, Ret extends TFunctionReturn, TOpt>, const ActualOptions extends TOpt & InterpolationMap = TOpt & InterpolationMap, >( ...args: | [key: Key | Key[], options?: ActualOptions] | [key: string | string[], options: TOpt & $Dictionary & { defaultValue: string }] | [key: string | string[], defaultValue: string, options?: TOpt & $Dictionary] ): TFunctionReturnOptionalDetails; } export type KeyPrefix = ResourceKeys[$FirstNamespace] | undefined; i18next-23.7.6/typescript/t.v4.d.ts000066400000000000000000000202571452441263500167200ustar00rootroot00000000000000import type { $OmitArrayKeys, $PreservedValue, $Dictionary, $SpecialObject } from './helpers.js'; import type { TypeOptions, Namespace, FlatNamespace, DefaultNamespace, TOptions, } from './options.js'; type $IsResourcesDefined = [keyof _Resources] extends [never] ? false : true; type $ValueIfResourcesDefined = $IsResourcesDefined extends true ? Value : Fallback; type $FirstNamespace = Ns extends readonly any[] ? Ns[0] : Ns; // Type Options type _ReturnObjects = TypeOptions['returnObjects']; type _ReturnNull = TypeOptions['returnNull']; type _KeySeparator = TypeOptions['keySeparator']; type _NsSeparator = TypeOptions['nsSeparator']; type _PluralSeparator = TypeOptions['pluralSeparator']; type _ContextSeparator = TypeOptions['contextSeparator']; type _FallbackNamespace = TypeOptions['fallbackNS']; type _Resources = TypeOptions['resources']; type _JSONFormat = TypeOptions['jsonFormat']; type _InterpolationPrefix = TypeOptions['interpolationPrefix']; type _InterpolationSuffix = TypeOptions['interpolationSuffix']; type Resources = $ValueIfResourcesDefined<_Resources, $Dictionary>; type PluralSuffix = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other'; type WithOrWithoutPlural = _JSONFormat extends 'v4' ? Key extends `${infer KeyWithoutOrdinalPlural}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}` ? KeyWithoutOrdinalPlural | Key : Key extends `${infer KeyWithoutPlural}${_PluralSeparator}${PluralSuffix}` ? KeyWithoutPlural | Key : Key : Key; type JoinKeys = `${K1 & string}${_KeySeparator}${K2 & string}`; type AppendNamespace = `${Ns & string}${_NsSeparator}${Keys & string}`; /****************************************************** * Build all keys and key prefixes based on Resources * ******************************************************/ type KeysBuilderWithReturnObjects = Key extends keyof Res ? Res[Key] extends $Dictionary ? | JoinKeys>> | JoinKeys> : never : never; type KeysBuilderWithoutReturnObjects> = Key extends keyof Res ? Res[Key] extends $Dictionary ? JoinKeys> : Key : never; type KeysBuilder = $IsResourcesDefined extends true ? WithReturnObjects extends true ? keyof Res | KeysBuilderWithReturnObjects : KeysBuilderWithoutReturnObjects : string; type KeysWithReturnObjects = { [Ns in FlatNamespace]: WithOrWithoutPlural>; }; type KeysWithoutReturnObjects = { [Ns in FlatNamespace]: WithOrWithoutPlural>; }; type ResourceKeys = WithReturnObjects extends true ? KeysWithReturnObjects : KeysWithoutReturnObjects; /************************************************************************ * Parse t function keys based on the namespace, options and key prefix * ************************************************************************/ export type KeysByTOptions = TOpt['returnObjects'] extends true ? ResourceKeys : ResourceKeys; export type NsByTOptions = TOpt['ns'] extends Namespace ? TOpt['ns'] : Ns; type ParseKeysByKeyPrefix = KPrefix extends string ? Keys extends `${KPrefix}${_KeySeparator}${infer Key}` ? Key : never : Keys; type ParseKeysByNamespaces = Ns extends readonly (infer UnionNsps)[] ? UnionNsps extends keyof Keys ? AppendNamespace : never : never; type ParseKeysByFallbackNs = _FallbackNamespace extends false ? never : _FallbackNamespace extends (infer UnionFallbackNs extends string)[] ? Keys[UnionFallbackNs] : Keys[_FallbackNamespace & string]; type FilterKeysByContext = TOpt['context'] extends string ? Keys extends `${infer Prefix}${_ContextSeparator}${TOpt['context']}${infer Suffix}` ? `${Prefix}${Suffix}` : never : Keys; export type ParseKeys< Ns extends Namespace = DefaultNamespace, TOpt extends TOptions = {}, KPrefix = undefined, Keys extends $Dictionary = KeysByTOptions, ActualNS extends Namespace = NsByTOptions, > = $IsResourcesDefined extends true ? FilterKeysByContext< | ParseKeysByKeyPrefix], KPrefix> | ParseKeysByNamespaces | ParseKeysByFallbackNs, TOpt > : string; /********************************************************* * Parse t function return type and interpolation values * *********************************************************/ type ParseInterpolationValues = Ret extends `${string}${_InterpolationPrefix}${infer Value}${_InterpolationSuffix}${infer Rest}` ? | (Value extends `${infer ActualValue},${string}` ? ActualValue : Value) | ParseInterpolationValues : never; type InterpolationMap = Record< $PreservedValue, string>, unknown >; type ParseTReturnPlural< Res, Key, KeyWithPlural = `${Key & string}${_PluralSeparator}${PluralSuffix}`, KeyWithOrdinalPlural = `${Key & string}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}`, > = Res[(KeyWithOrdinalPlural | KeyWithPlural | Key) & keyof Res]; type ParseTReturn = Key extends `${infer K1}${_KeySeparator}${infer RestKey}` ? ParseTReturn : ParseTReturnPlural; type TReturnOptionalNull = _ReturnNull extends true ? null : never; type TReturnOptionalObjects = _ReturnObjects extends true ? $SpecialObject | string : TOpt['returnObjects'] extends true ? $SpecialObject : string; type DefaultTReturn = TReturnOptionalObjects | TReturnOptionalNull; export type KeyWithContext = TOpt['context'] extends string ? `${Key & string}${_ContextSeparator}${TOpt['context']}` : Key; export type TFunctionReturn< Ns extends Namespace, Key, TOpt extends TOptions, ActualNS extends Namespace = NsByTOptions, ActualKey = KeyWithContext, > = $IsResourcesDefined extends true ? ActualKey extends `${infer Nsp}${_NsSeparator}${infer RestKey}` ? ParseTReturn : ParseTReturn]> : DefaultTReturn; export type TFunctionDetailedResult = { /** * The plain used key */ usedKey: string; /** * The translation result. */ res: T; /** * The key with context / plural */ exactUsedKey: string; /** * The used language for this translation. */ usedLng: string; /** * The used namespace for this translation. */ usedNS: string; /** * The parameters used for interpolation. */ usedParams: InterpolationMap & { count?: TOpt['count'] }; }; type TFunctionReturnOptionalDetails = TOpt['returnDetails'] extends true ? TFunctionDetailedResult : Ret; type AppendKeyPrefix = KPrefix extends string ? `${KPrefix}${_KeySeparator}${Key & string}` : Key; /************************** * T function declaration * **************************/ export interface TFunction { $TFunctionBrand: $IsResourcesDefined extends true ? `${$FirstNamespace}` : never; < Key extends ParseKeys | TemplateStringsArray, TOpt extends TOptions, Ret extends TFunctionReturn, TOpt>, >( ...args: | [key: Key | Key[], options?: TOpt & InterpolationMap] | [key: string | string[], options: TOpt & $Dictionary & { defaultValue: string }] | [key: string | string[], defaultValue: string, options?: TOpt & $Dictionary] ): TFunctionReturnOptionalDetails; } export type KeyPrefix = ResourceKeys[$FirstNamespace] | undefined;