pax_global_header00006660000000000000000000000064151516574350014526gustar00rootroot0000000000000052 comment=485cbe0edf3ca7bb4b9c4a80ac55ba937a291da0 immutable-js-immutable-js-fa7d047/000077500000000000000000000000001515165743500171245ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/.editorconfig000066400000000000000000000003061515165743500216000ustar00rootroot00000000000000# EditorConfig is awesome: http://EditorConfig.org root = true [*] end_of_line = lf insert_final_newline = true [*.{js,d.ts,json,html,md,sh}] charset = utf-8 indent_style = space indent_size = 2 immutable-js-immutable-js-fa7d047/.eslintignore000066400000000000000000000000701515165743500216240ustar00rootroot00000000000000/pages/out/** /pages/generated/** /dist/** node_modules immutable-js-immutable-js-fa7d047/.eslintrc.json000066400000000000000000000046131515165743500217240ustar00rootroot00000000000000{ "root": true, "parserOptions": { "ecmaVersion": 6, "sourceType": "module" }, "extends": ["airbnb", "prettier"], "plugins": ["react", "prettier"], "rules": { "array-callback-return": "off", "block-scoped-var": "off", "class-methods-use-this": "off", "consistent-return": "off", "constructor-super": "off", "default-case": "off", "func-names": "off", "max-classes-per-file": "off", "no-bitwise": "off", "no-cond-assign": "off", "no-constant-condition": "off", "no-continue": "off", "no-else-return": "error", "no-empty": "error", "no-lonely-if": "error", "no-multi-assign": "off", "no-nested-ternary": "off", "no-param-reassign": "off", "no-plusplus": "off", "no-prototype-builtins": "off", "no-restricted-syntax": "off", "no-return-assign": "off", "no-self-compare": "off", "no-sequences": "off", "no-shadow": "off", "no-this-before-super": "off", "no-underscore-dangle": "off", "no-unused-expressions": "off", "no-unused-vars": "error", "no-use-before-define": "off", "no-useless-concat": "error", "no-var": "error", "object-shorthand": "off", "one-var": "error", "operator-assignment": "error", "prefer-destructuring": "off", "prefer-rest-params": "off", "prefer-spread": "off", "prefer-template": "off", "spaced-comment": "off", "vars-on-top": "off", "react/destructuring-assignment": "off", "react/jsx-boolean-value": "off", "react/jsx-curly-brace-presence": "off", "react/jsx-filename-extension": "off", "react/no-array-index-key": "off", "react/no-danger": "off", "react/no-multi-comp": "off", "react/prefer-es6-class": "off", "react/prefer-stateless-function": "off", "react/prop-types": "off", "react/self-closing-comp": "error", "react/sort-comp": "off", "react/jsx-props-no-spreading": "off", "jsx-a11y/no-static-element-interactions": "off", "import/extensions": [ "error", "always", { "js": "never", "ts": "never", "tsx": "never" } ], "import/newline-after-import": "error", "import/no-cycle": "off", "import/no-extraneous-dependencies": "off", "import/no-mutable-exports": "error", "import/no-unresolved": "error", "import/no-useless-path-segments": "off", "import/prefer-default-export": "off", "prettier/prettier": "error" } } immutable-js-immutable-js-fa7d047/.github/000077500000000000000000000000001515165743500204645ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/.github/CONTRIBUTING.md000066400000000000000000000060531515165743500227210ustar00rootroot00000000000000# Have a question? Please ask questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/immutable.js) instead of opening a Github Issue. There are more people on Stack Overflow who can answer questions, and good answers can be searchable and canonical. # Issues We use GitHub issues to track bugs. Please ensure your bug description is clear and has sufficient instructions to be able to reproduce the issue. The absolute best way to report a bug is to submit a pull request including a new failing test which describes the bug. When the bug is fixed, your pull request can then be merged! The next best way to report a bug is to provide a reduced test case on jsFiddle or jsBin or produce exact code inline in the issue which will reproduce the bug. # Code of Conduct Immutable.js is maintained within the [Contributor Covenant's Code of Conduct](https://www.contributor-covenant.org/version/2/0/code_of_conduct/). # Pull Requests All active development of Immutable JS happens on GitHub. We actively welcome your [pull requests](https://help.github.com/articles/creating-a-pull-request). 1. Fork the repo and create your branch from `master`. 2. Install all dependencies. (`npm install`) 3. If you've added code, add tests. 4. If you've changed APIs, update the documentation. 5. Build generated JS, run tests and ensure your code passes lint. (`npm run test`) 6. If you haven't already, complete the Contributor License Agreement ("CLA"). ## Documentation Documentation for Immutable.js (hosted at http://immutable-js.github.io/immutable-js) is developed in `pages/`. Run `npm start` to get a local copy in your browser while making edits. ## Coding Style - 2 spaces for indentation (no tabs) - 80 character line length strongly preferred. - Prefer `'` over `"` - ES6 Harmony when possible. - Use semicolons; - Trailing commas, - Avd abbr wrds. # Functionality Testing Run the following command to build the library and test functionality: ```bash npm run test ``` ## Performance Regression Testing Performance tests run against master and your feature branch. Make sure to commit your changes in your local feature branch before proceeding. These commands assume you have a remote named `upstream` amd that you do not already have a local `master` branch: ```bash git fetch upstream git checkout -b master upstream/master ``` These commands build `dist` and commit `dist/immutable.js` to `master` so that the regression tests can run. ```bash npm run test git add dist/immutable.js -f git commit -m 'perf test prerequisite.' ``` Switch back to your feature branch, and run the following command to run regression tests: ```bash npm run test npm run perf ``` Sample output: ```bash > immutable@4.0.0-rc.9 perf ~/github.com/immutable-js/immutable-js > node ./resources/bench.js List > builds from array of 2 Old: 678,974 683,071 687,218 ops/sec New: 669,012 673,553 678,157 ops/sec compare: 1 -1 diff: -1.4% rme: 0.64% ``` ## License By contributing to Immutable.js, you agree that your contributions will be licensed under its MIT license. immutable-js-immutable-js-fa7d047/.github/FUNDING.yml000066400000000000000000000000401515165743500222730ustar00rootroot00000000000000github: [jdeniau, Methuselah96] immutable-js-immutable-js-fa7d047/.github/ISSUE_TEMPLATE.md000066400000000000000000000032171515165743500231740ustar00rootroot00000000000000 ### What happened ### How to reproduce immutable-js-immutable-js-fa7d047/.github/workflows/000077500000000000000000000000001515165743500225215ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/.github/workflows/ci.yml000066400000000000000000000070731515165743500236460ustar00rootroot00000000000000name: CI on: push: branches: - main pull_request: branches: - main jobs: lint: name: 'Lint' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '18' - uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.OS }}-node- - run: npm ci - run: npm run lint - run: npm run check-git-clean type-check: name: 'Type Check' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '18' - uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.OS }}-node- - uses: actions/cache@v3 with: path: ~/.dts key: ${{ runner.OS }}-dts-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.OS }}-dts- - run: npm ci - run: npm run type-check - run: npm run check-git-clean unit-test: name: 'Build & Unit Test' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '18' - uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.OS }}-node- - run: npm ci - run: npm run build - run: npm run unit-test - run: npm run check-git-clean website: name: 'Build Website' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - uses: actions/setup-node@v2 with: node-version: '18' - uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.OS }}-node- - run: npm ci - run: NODE_OPTIONS=--openssl-legacy-provider npm run website:build - run: npm run check-git-clean publish: name: 'Publish' needs: [lint, type-check, unit-test, website] if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - uses: actions/setup-node@v2 with: node-version: '18' - uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.OS }}-node- - run: npm ci - run: npm run build - run: NODE_OPTIONS=--openssl-legacy-provider npm run website:build - name: Push NPM Branch if: github.ref == 'refs/heads/main' uses: peaceiris/actions-gh-pages@v3 with: enable_jekyll: true github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./npm publish_branch: npm user_name: 'github-actions[bot]' user_email: 'github-actions[bot]@users.noreply.github.com' - name: Publish Docs if: github.ref == 'refs/heads/main' uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./website/out cname: immutable-js.com user_name: 'github-actions[bot]' user_email: 'github-actions[bot]@users.noreply.github.com' immutable-js-immutable-js-fa7d047/.github/workflows/release.yml000066400000000000000000000012371515165743500246670ustar00rootroot00000000000000name: Release on: workflow_dispatch: ~ release: types: [published] jobs: build: name: 'Build & Publish to NPM' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '18' registry-url: 'https://registry.npmjs.org' - uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.OS }}-node- - run: npm ci - run: npm run build - run: cd npm && npm publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} immutable-js-immutable-js-fa7d047/.gitignore000066400000000000000000000003101515165743500211060ustar00rootroot00000000000000.*.haste_cache.* node_modules npm-debug.log yarn-error.log .DS_Store *~ *.swp .idea *.iml TODO /website/.next /website/out /website/public/sitemap*.xml /website/public/robots.txt /gh-pages /npm /dist immutable-js-immutable-js-fa7d047/.prettierignore000066400000000000000000000001261515165743500221660ustar00rootroot00000000000000dist pages/generated pages/out type-definitions/ts-tests/ type-definitions/flow-tests/immutable-js-immutable-js-fa7d047/.prettierrc.json000066400000000000000000000000321515165743500222530ustar00rootroot00000000000000{ "singleQuote": true } immutable-js-immutable-js-fa7d047/CHANGELOG.md000066400000000000000000000554471515165743500207540ustar00rootroot00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Dates are formatted as YYYY-MM-DD. ## Unreleased ## [4.3.7] - 2024-07-22 - Fix issue with slice negative of filtered sequence [#2006](https://github.com/immutable-js/immutable-js/pull/2006) by [@jdeniau](https://github.com/jdeniau) ## [4.3.6] - 2024-05-13 - Fix `Repeat().equals(undefined)` incorrectly returning true [#1994](https://github.com/immutable-js/immutable-js/pull/1994) by [@butchler](https://github.com/butchler) ## [4.3.5] - 2024-01-16 - Upgrade to TS 5.1 [#1972](https://github.com/immutable-js/immutable-js/pull/1972) by [@jdeniau](https://github.com/jdeniau) - Fix Set.fromKeys types with Map constructor in TS 5.0 [#1971](https://github.com/immutable-js/immutable-js/pull/1971) by [@jdeniau](https://github.com/jdeniau) - Fix Read the Docs link on readme [#1970](https://github.com/immutable-js/immutable-js/pull/1970) by [@joshding](https://github.com/joshding) ## [4.3.4] - 2023-08-25 - Rollback toJS type due to circular reference error [#1958](https://github.com/immutable-js/immutable-js/pull/1958) by [@jdeniau](https://github.com/jdeniau) ## [4.3.3] - 2023-08-23 - [typescript] manage to handle toJS circular reference. [#1932](https://github.com/immutable-js/immutable-js/pull/1932) by [@jdeniau](https://github.com/jdeniau) - [doc] Add install instructions for pnpm and Bun [#1952](https://github.com/immutable-js/immutable-js/pull/1952) by [@colinhacks](https://github.com/colinhacks) and [#1953](https://github.com/immutable-js/immutable-js/pull/1953) by [@menglingyu659](https://github.com/menglingyu659) ## [4.3.2] - 2023-08-01 - [TypeScript] Fix isOrderedSet type [#1948](https://github.com/immutable-js/immutable-js/pull/1948) ## [4.3.1] - 2023-07-11 - Faster and implementation of `some` [#1944](https://github.com/immutable-js/immutable-js/pull/1944) - [internal] remove unused exports [#1928](https://github.com/immutable-js/immutable-js/pull/1928) ## [4.3.0] - 2023-03-10 - Introduce Comparator and PairSorting [#1937](https://github.com/immutable-js/immutable-js/pull/1937) by [@https://github.com/giancosta86](https://github.com/giancosta86) - [TypeScript] Fix fromJS declaration for greater compatibility [#1936](https://github.com/immutable-js/immutable-js/pull/1936) ## [4.2.4] - 2023-02-06 - [TypeScript] Improve type infererence for from JS by [KSXGitHub](https://github.com/KSXGitHub) [#1927](https://github.com/immutable-js/immutable-js/pull/1927) ## [4.2.3] - 2023-02-02 - [TypeScript] `groupBy` return either a `Map` or an `OrderedMap`: make the type more precise than base `Collection` [#1924](https://github.com/immutable-js/immutable-js/pull/1924) ## [4.2.2] - 2023-01-02 - [Flow] Add type for `partition` method [#1920](https://github.com/immutable-js/immutable-js/pull/1920) by [Dagur](https://github.com/Dagur) ## [4.2.1] - 2022-12-23 - [Typescript] rollback some of the change on `toJS` to avoir circular reference ## [4.2.0] - 2022-12-22 - [TypeScript] Better type for toJS [#1917](https://github.com/immutable-js/immutable-js/pull/1917) by [jdeniau](https://github.com/jdeniau) - [TS Minor Break] tests are ran with TS > 4.5 only. It was tested with TS > 2.1 previously, but we want to level up TS types with recent features. TS 4.5 has been released more than one year before this release. If it does break your implementation (it might not), you should probably consider upgrading to the latest TS version. - Added a `partition` method to all containers [#1916](https://github.com/immutable-js/immutable-js/pull/1916) by [johnw42](https://github.com/johnw42) ## [4.1.0] - 2022-05-23 - Accept Symbol as Map key. [#1859](https://github.com/immutable-js/immutable-js/pull/1859) by [jdeniau](https://github.com/jdeniau) - Optimize contructors without arguments [#1887](https://github.com/immutable-js/immutable-js/pull/1887) by [marianoguerra](https://github.com/marianoguerra) - Fix Flow removeIn types [#1902](https://github.com/immutable-js/immutable-js/pull/1902) by [nifgraup](https://github.com/nifgraup) - Fix bug in Record.equals when comparing against Map [#1903](https://github.com/immutable-js/immutable-js/pull/1903) by [jmtoung](https://github.com/jmtoung) ## [4.0.0] - 2021-09-30 This release brings new functionality and many fixes. 1. [Key changes](#key-changes) 1. [Note for users of v4.0.0-rc.12](#note-for-users-of-v400-rc12) 1. [Breaking changes](#breaking) 1. [New](#new) 1. [Fixed](#fixed) ### Key changes - New members have joined the team - The project has been relicensed as MIT - Better TypeScript and Flow type definitions - A brand-new documentation lives at [immutable-js.com](https://immutable-js.com/) and can show multiple versions - Behavior of `merge` and `mergeDeep` has changed - `Iterable` is renamed to [Collection](https://immutable-js.com/docs/latest@main/Collection/) - [Records](https://immutable-js.com/docs/latest@main/Record/) no longer extend from Collections - All collection types now implement the [ES6 iterable protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol) - New methods: - [toJSON()]() - [wasAltered()]() - [Collection.Indexed.zipAll()]() - [Map.deleteAll()]()
   Diff of changed API (click to expand) ```diff + Collection.[Symbol.iterator] + Collection.toJSON + Collection.update + Collection.Indexed.[Symbol.iterator] + Collection.Indexed.toJSON + Collection.Indexed.update + Collection.Indexed.zipAll + Collection.Keyed.[Symbol.iterator] + Collection.Keyed.toJSON + Collection.Keyed.update + Collection.Set.[Symbol.iterator] + Collection.Set.toJSON + Collection.Set.update - Collection.size - Collection.Indexed.size - Collection.Keyed.size - Collection.Set.size + List.[Symbol.iterator] + List.toJSON + List.wasAltered + List.zipAll - List.mergeDeep - List.mergeDeepWith - List.mergeWith + Map.[Symbol.iterator] + Map.deleteAll + Map.toJSON + Map.wasAltered + OrderedMap.[Symbol.iterator] + OrderedMap.deleteAll + OrderedMap.toJSON + OrderedMap.wasAltered + OrderedSet.[Symbol.iterator] + OrderedSet.toJSON + OrderedSet.update + OrderedSet.wasAltered + OrderedSet.zip + OrderedSet.zipAll + OrderedSet.zipWith + Record.[Symbol.iterator] + Record.asImmutable + Record.asMutable + Record.clear + Record.delete + Record.deleteIn + Record.merge + Record.mergeDeep + Record.mergeDeepIn + Record.mergeDeepWith + Record.mergeIn + Record.mergeWith + Record.set + Record.setIn + Record.toJSON + Record.update + Record.updateIn + Record.wasAltered + Record.withMutations + Record.Factory.displayName - Record.butLast - Record.concat - Record.count - Record.countBy - Record.entries - Record.entrySeq - Record.every - Record.filter - Record.filterNot - Record.find - Record.findEntry - Record.findKey - Record.findLast - Record.findLastEntry - Record.findLastKey - Record.first - Record.flatMap - Record.flatten - Record.flip - Record.forEach - Record.groupBy - Record.includes - Record.isEmpty - Record.isSubset - Record.isSuperset - Record.join - Record.keyOf - Record.keySeq - Record.keys - Record.last - Record.lastKeyOf - Record.map - Record.mapEntries - Record.mapKeys - Record.max - Record.maxBy - Record.min - Record.minBy - Record.reduce - Record.reduceRight - Record.rest - Record.reverse - Record.skip - Record.skipLast - Record.skipUntil - Record.skipWhile - Record.slice - Record.some - Record.sort - Record.sortBy - Record.take - Record.takeLast - Record.takeUntil - Record.takeWhile - Record.toArray - Record.toIndexedSeq - Record.toKeyedSeq - Record.toList - Record.toMap - Record.toOrderedMap - Record.toOrderedSet - Record.toSet - Record.toSetSeq - Record.toStack - Record.valueSeq - Record.values + Seq.[Symbol.iterator] + Seq.toJSON + Seq.update + Seq.Indexed.[Symbol.iterator] + Seq.Indexed.toJSON + Seq.Indexed.update + Seq.Indexed.zipAll + Seq.Keyed.[Symbol.iterator] + Seq.Keyed.toJSON + Seq.Keyed.update + Seq.Set.[Symbol.iterator] + Seq.Set.toJSON + Seq.Set.update + Set.[Symbol.iterator] + Set.toJSON + Set.update + Set.wasAltered + Stack.[Symbol.iterator] + Stack.toJSON + Stack.update + Stack.wasAltered + Stack.zipAll + ValueObject.equals + ValueObject.hashCode - Iterable.* - Iterable.Indexed.* - Iterable.Keyed.* - Iterable.Set.* ```
### Note for users of v4.0.0-rc.12 There were mostly bugfixes and improvements since RC 12. Upgrading should be painless for most users. However, there is **one breaking change**: The behavior of `merge` and `mergeDeep` has changed. See below for details. ### BREAKING #### [merge()]() - No longer use value-equality within `merge()` ([#1391](https://github.com/immutable-js/immutable-js/pull/1391)) > This rectifies an inconsistent behavior between `x.merge(y)` and `x.mergeDeep(y)` where merge would > use `===` on leaf values to determine return-self optimizations, while mergeDeep would use `is()`. > This improves consistency across the library and avoids a possible performance pitfall. - No longer deeply coerce argument to merge() ([#1339](https://github.com/immutable-js/immutable-js/pull/1339)) > Previously, the argument provided to `merge()` was deeply converted to Immutable collections via `fromJS()`. > This was the only function in the library which calls `fromJS()` indirectly, > and it was surprising and made it difficult to understand what the result of `merge()` would be. > Now, the value provided to `merge()` is only shallowly converted to an Immutable collection, similar to > related methods in the library. This may change the behavior of your calls to `merge()`. #### [mergeDeep()]() - Replace incompatible collections when merging nested data ([#1840](https://github.com/immutable-js/immutable-js/pull/1840)) > It will no longer merge lists of tuples into maps. For more information see > [#1840](https://github.com/immutable-js/immutable-js/pull/1840) and the updated `mergeDeep()` documentation. - Concat Lists when merging deeply ([#1344](https://github.com/immutable-js/immutable-js/pull/1344)) > Previously, calling `map.mergeDeep()` with a value containing a `List` would replace the values in the > original List. This has always been confusing, and does not properly treat `List` as a monoid. > Now, `List.merge` is simply an alias for `List.concat`, and `map.mergeDeep()` will concatenate deeply-found lists > instead of replacing them. #### [Seq](https://immutable-js.com/docs/latest@main/Seq/) - Remove IteratorSequence. Do not attempt to detect iterators in `Seq()`. ([#1589](https://github.com/immutable-js/immutable-js/pull/1589)) > Iterables can still be provided to `Seq()`, and _most_ Iterators are also > Iterables, so this change should not affect the vast majority of uses. > For more information, see PR #1589 - Remove `Seq.of()` (#1311, #1310) > This method has been removed since it cannot be correctly typed. It's recommended to convert > `Seq.of(1, 2, 3)` to `Seq([1, 2, 3])`. #### [isImmutable()]() - `isImmutable()` now returns true for collections currently within a `withMutations()` call. ([#1374](https://github.com/immutable-js/immutable-js/pull/1374)) > Previously, `isImmutable()` did double-duty of both determining if a value was a Collection or Record > from this library as well as if it was outside a `withMutations()` call. > This latter case caused confusion and was rarely used. #### [toArray()]() - KeyedCollection.toArray() returns array of tuples. ([#1340](https://github.com/immutable-js/immutable-js/pull/1340)) > Previously, calling `toArray()` on a keyed collection (incl `Map` and `OrderedMap`) would > discard keys and return an Array of values. This has always been confusing, and differs from `Array.from()`. > Now, calling `toArray()` on a keyed collection will return an Array of `[key, value]` tuples, matching > the behavior of `Array.from()`. #### [concat()]() - `list.concat()` now has a slightly more efficient implementation and `map.concat()` is an alias for `map.merge()`. ([#1373](https://github.com/immutable-js/immutable-js/pull/1373)) > In rare cases, this may affect use of `map.concat()` which expected slightly different behavior from `map.merge()`. #### [Collection](https://immutable-js.com/docs/latest@main/Collection/), formerly `Iterable` - The `Iterable` class has been renamed to `Collection`, and `isIterable()` has been renamed to `isCollection()`. Aliases with the existing names exist to make transitioning code easier. #### [Record](https://immutable-js.com/docs/latest@main/Record/) - Record is no longer an Immutable Collection type. - Now `isCollection(myRecord)` returns `false` instead of `true`. - The sequence API (such as `map`, `filter`, `forEach`) no longer exist on Records. - `delete()` and `clear()` no longer exist on Records. #### Other breaking changes - **Potentially Breaking:** Improve hash speed and avoid collision for common values ([#1629](https://github.com/immutable-js/immutable-js/pull/1629)) > Causes some hash values to change, which could impact the order of iteration of values in some Maps > (which are already advertised as unordered, but highlighting just to be safe) - Node buffers no longer considered value-equal ([#1437](https://github.com/immutable-js/immutable-js/pull/1437)) - Plain Objects and Arrays are no longer considered opaque values ([#1369](https://github.com/immutable-js/immutable-js/pull/1369)) > This changes the behavior of a few common methods with respect to plain Objects and Arrays where these were > previously considered opaque to `merge()` and `setIn()`, they now are treated as collections and can be merged > into and updated (persistently). This offers an exciting alternative to small Lists and Records. - The "predicate" functions, `isCollection`, `isKeyed`, `isIndexed`, `isAssociative` have been moved from `Iterable.` to the top level exports. - The `toJSON()` method performs a shallow conversion (previously it was an alias for `toJS()`, which remains a deep conversion). - Some minor implementation details have changed, which may require updates to libraries which deeply integrate with Immutable.js's private APIs. - The Cursor API is officially deprecated. Use [immutable-cursor](https://github.com/redbadger/immutable-cursor) instead. - **Potentially Breaking:** [TypeScript] Remove `Iterable` as tuple from Map constructor types ([#1626](https://github.com/immutable-js/immutable-js/pull/1626)) > Typescript allowed constructing a Map with a list of List instances, assuming each was a key, value pair. > While this runtime behavior still works, this type led to more issues than it solved, so it has been removed. > (Note, this may break previous v4 rcs, but is not a change against v3) ### New - Update TypeScript and Flow definitions: - The Flowtype and TypeScript type definitions have been completely rewritten with much higher quality and accuracy, taking advantage of the latest features from both tools. - Simplified TypeScript definition files to support all UMD use cases ([#1854](https://github.com/immutable-js/immutable-js/pull/1854)) - Support Typescript 3 ([#1593](https://github.com/immutable-js/immutable-js/pull/1593)) - Support Typescript strictNullChecks ([#1168](https://github.com/immutable-js/immutable-js/pull/1168)) - Flow types to be compatible with the latest version 0.160.0 - Enable flow strict ([#1580](https://github.com/immutable-js/immutable-js/pull/1580)) - Add "sideEffects: false" to package.json ([#1661](https://github.com/immutable-js/immutable-js/pull/1661)) - Use ES standard for iterator method reuse ([#1867](https://github.com/immutable-js/immutable-js/pull/1867)) - Generalize `fromJS()` and `Seq()` to support Sets ([#1865](https://github.com/immutable-js/immutable-js/pull/1865)) - Top level predicate functions ([#1600](https://github.com/immutable-js/immutable-js/pull/1600)) > New functions are exported from the `immutable` module: > `isSeq()`, `isList()`, `isMap()`, `isOrderedMap()`, `isStack()`, `isSet()`, `isOrderedSet()`, and `isRecord()`. - Improve performance of toJS ([#1581](https://github.com/immutable-js/immutable-js/pull/1581)) > Cursory test is >10% faster than both v3.8.2 and v4.0.0-rc.7, > and corrects the regression since v4.0.0-rc.9. - Added optional `notSetValue` in `first()` and `last()` ([#1556](https://github.com/immutable-js/immutable-js/pull/1556)) - Make `isArrayLike` check more precise to avoid false positives ([#1520](https://github.com/immutable-js/immutable-js/pull/1520)) - `map()` for List, Map, and Set returns itself for no-ops ([#1455](https://github.com/immutable-js/immutable-js/pull/1455)) (5726bd1) - Hash functions as objects, allowing functions as values in collections ([#1485](https://github.com/immutable-js/immutable-js/pull/1485)) - Functional API for `get()`, `set()`, and more which support both Immutable.js collections and plain Objects and Arrays ([#1369](https://github.com/immutable-js/immutable-js/pull/1369)) - Relicensed as MIT ([#1320](https://github.com/immutable-js/immutable-js/pull/1320)) - Support for Transducers! ([ee9c68f1](https://github.com/immutable-js/immutable-js/commit/ee9c68f1d43da426498ee009ecea37aa2ef77cb8)) - Add new method, `zipAll()` ([#1195](https://github.com/immutable-js/immutable-js/pull/1195)) - Bundle and distribute an "es module" so Webpack and Rollup can use tree-shaking for smaller builds ([#1204](https://github.com/immutable-js/immutable-js/pull/1204)) - Warn instead of throw when `getIn()` has a bad path ([668f2236](https://github.com/immutable-js/immutable-js/commit/668f2236642c97bd4e7d8dfbf62311f497a6ac18)) - A new predicate function `isValueObject()` helps to detect objects which implement `equals()` and `hashCode()`, and type definitions now define the interface `ValueObject` which you can implement in your own code to create objects which behave as values and can be keys in Maps or entries in Sets. - Using `fromJS()` with a "reviver" function now provides access to the key path to each translated value. ([#1118](https://github.com/immutable-js/immutable-js/pull/1118)) ### Fixed - Fix issue with IE11 and missing Symbol.iterator ([#1850](https://github.com/immutable-js/immutable-js/pull/1850)) - Fix ordered set with map ([#1663](https://github.com/immutable-js/immutable-js/pull/1663)) - Do not modify iter during List.map and Map.map ([#1649](https://github.com/immutable-js/immutable-js/pull/1649)) - Fix ordered map delete all ([#1777](https://github.com/immutable-js/immutable-js/pull/1777)) - Hash symbols as objects ([#1753](https://github.com/immutable-js/immutable-js/pull/1753)) - Fix returning a Record in merge() when Record is empty ([#1785](https://github.com/immutable-js/immutable-js/pull/1785)) - Fix for RC~12: Records from different factories aren't equal ([#1734](https://github.com/immutable-js/immutable-js/issues/1734)) - "too much recursion" error when creating a Record type from an instance of another Record ([#1690](https://github.com/immutable-js/immutable-js/pull/1690)) - Fix glob for npm format script on Windows ([#18](https://github.com/immutable-js-oss/immutable-js/pull/18)) - Remove deprecated cursor API ([#13](https://github.com/immutable-js-oss/immutable-js/issues/13)) - Add missing es exports ([#1740](https://github.com/immutable-js/immutable-js/pull/1740)) - Support nulls in genTypeDefData.js ([#185](https://github.com/immutable-js/immutable-js/pull/185)) - Support isPlainObj in IE11 and other esoteric parameters [f3a6d5ce](https://github.com/immutable-js/immutable-js/pull/1833/commits/f3a6d5ce75bb9d60b87074240838f5429e896b60) - `Set.map` produces valid underlying map ([#1606](https://github.com/immutable-js/immutable-js/pull/1606)) - Support isPlainObj with `constructor` key ([#1627](https://github.com/immutable-js/immutable-js/pull/1627)) - `groupBy` no longer returns a mutable Map instance ([#1602](https://github.com/immutable-js/immutable-js/pull/1602)) - Fix issue where refs can recursively collide, corrupting `.size` ([#1598](https://github.com/immutable-js/immutable-js/pull/1598)) - Throw error in `mergeWith()` method if missing the required `merger` function ([#1543](https://github.com/immutable-js/immutable-js/pull/1543)) - Update `isPlainObj()` to workaround Safari bug and allow cross-realm values ([#1557](https://github.com/immutable-js/immutable-js/pull/1557)) - Fix missing "& T" to some methods in RecordInstance ([#1464](https://github.com/immutable-js/immutable-js/pull/1464)) - Make notSetValue optional for typed Records ([#1461](https://github.com/immutable-js/immutable-js/pull/1461)) (a1029bb) - Export type of RecordInstance ([#1434](https://github.com/immutable-js/immutable-js/pull/1434)) - Fix Record `size` check in merge() ([#1521](https://github.com/immutable-js/immutable-js/pull/1521)) - Fix Map#concat being not defined ([#1402](https://github.com/immutable-js/immutable-js/pull/1402)) - `getIn()` no longer throws when encountering a missing path ([#1361](https://github.com/immutable-js/immutable-js/pull/1361)) - Do not throw when printing value that cannot be coerced to primitive ([#1334](https://github.com/immutable-js/immutable-js/pull/1334)) - Do not throw from hasIn ([#1319](https://github.com/immutable-js/immutable-js/pull/1319)) - Long hash codes no longer cause an infinite loop ([#1175](https://github.com/immutable-js/immutable-js/pull/1175)) - `slice()` which should return an empty set could return a full set or vice versa (#1245, #1287) - Ensure empty slices do not throw when iterated ([#1220](https://github.com/immutable-js/immutable-js/pull/1220)) - Error during equals check on Record with undefined or null ([#1208](https://github.com/immutable-js/immutable-js/pull/1208)) - Fix size of count() after filtering or flattening ([#1171](https://github.com/immutable-js/immutable-js/pull/1171)) ## [3.8.2] - 2017-10-05 Released in 2017, still the most commonly used release. [unreleased]: https://github.com/immutable-js/immutable-js/compare/v4.0.0-rc.15...HEAD [4.0.0]: https://github.com/immutable-js/immutable-js/compare/v3.8.2...v4.0.0-rc.15 [3.8.2]: https://github.com/immutable-js/immutable-js/compare/3.7.6...v3.8.2 immutable-js-immutable-js-fa7d047/LICENSE000066400000000000000000000021131515165743500201260ustar00rootroot00000000000000MIT License Copyright (c) 2014-present, Lee Byron and other contributors. 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. immutable-js-immutable-js-fa7d047/README.md000066400000000000000000000704011515165743500204050ustar00rootroot00000000000000# Immutable collections for JavaScript [![Build Status](https://github.com/immutable-js/immutable-js/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/immutable-js/immutable-js/actions/workflows/ci.yml?query=branch%3Amain) [Chat on slack](https://immutable-js.slack.com) [Read the docs](https://immutable-js.com/docs/) and eat your vegetables. Docs are automatically generated from [README.md][] and [immutable.d.ts][]. Please contribute! Also, don't miss the [wiki][] which contains articles on additional specific topics. Can't find something? Open an [issue][]. **Table of contents:** - [Introduction](#introduction) - [Getting started](#getting-started) - [The case for Immutability](#the-case-for-immutability) - [JavaScript-first API](#javascript-first-api) - [Nested Structures](#nested-structures) - [Equality treats Collections as Values](#equality-treats-collections-as-values) - [Batching Mutations](#batching-mutations) - [Lazy Seq](#lazy-seq) - [Additional Tools and Resources](#additional-tools-and-resources) - [Contributing](#contributing) ## Introduction [Immutable][] data cannot be changed once created, leading to much simpler application development, no defensive copying, and enabling advanced memoization and change detection techniques with simple logic. [Persistent][] data presents a mutative API which does not update the data in-place, but instead always yields new updated data. Immutable.js provides many Persistent Immutable data structures including: `List`, `Stack`, `Map`, `OrderedMap`, `Set`, `OrderedSet` and `Record`. These data structures are highly efficient on modern JavaScript VMs by using structural sharing via [hash maps tries][] and [vector tries][] as popularized by Clojure and Scala, minimizing the need to copy or cache data. Immutable.js also provides a lazy `Seq`, allowing efficient chaining of collection methods like `map` and `filter` without creating intermediate representations. Create some `Seq` with `Range` and `Repeat`. Want to hear more? Watch the presentation about Immutable.js: [![Immutable Data and React](website/public/Immutable-Data-and-React-YouTube.png)](https://youtu.be/I7IdS-PbEgI) [README.md]: https://github.com/immutable-js/immutable-js/blob/main/README.md [immutable.d.ts]: https://github.com/immutable-js/immutable-js/blob/main/type-definitions/immutable.d.ts [wiki]: https://github.com/immutable-js/immutable-js/wiki [issue]: https://github.com/immutable-js/immutable-js/issues [Persistent]: https://en.wikipedia.org/wiki/Persistent_data_structure [Immutable]: https://en.wikipedia.org/wiki/Immutable_object [hash maps tries]: https://en.wikipedia.org/wiki/Hash_array_mapped_trie [vector tries]: https://hypirion.com/musings/understanding-persistent-vector-pt-1 ## Getting started Install `immutable` using npm. ```shell # using npm npm install immutable # using Yarn yarn add immutable # using pnpm pnpm add immutable # using Bun bun add immutable ``` Then require it into any module. ```js const { Map } = require('immutable'); const map1 = Map({ a: 1, b: 2, c: 3 }); const map2 = map1.set('b', 50); map1.get('b') + ' vs. ' + map2.get('b'); // 2 vs. 50 ``` ### Browser Immutable.js has no dependencies, which makes it predictable to include in a Browser. It's highly recommended to use a module bundler like [webpack](https://webpack.github.io/), [rollup](https://rollupjs.org/), or [browserify](https://browserify.org/). The `immutable` npm module works without any additional consideration. All examples throughout the documentation will assume use of this kind of tool. Alternatively, Immutable.js may be directly included as a script tag. Download or link to a CDN such as [CDNJS](https://cdnjs.com/libraries/immutable) or [jsDelivr](https://www.jsdelivr.com/package/npm/immutable). Use a script tag to directly add `Immutable` to the global scope: ```html ``` Or use an AMD-style loader (such as [RequireJS](https://requirejs.org/)): ```js require(['./immutable.min.js'], function (Immutable) { var map1 = Immutable.Map({ a: 1, b: 2, c: 3 }); var map2 = map1.set('b', 50); map1.get('b'); // 2 map2.get('b'); // 50 }); ``` ### Flow & TypeScript Use these Immutable collections and sequences as you would use native collections in your [Flowtype](https://flowtype.org/) or [TypeScript](https://typescriptlang.org) programs while still taking advantage of type generics, error detection, and auto-complete in your IDE. Installing `immutable` via npm brings with it type definitions for Flow (v0.55.0 or higher) and TypeScript (v2.1.0 or higher), so you shouldn't need to do anything at all! #### Using TypeScript with Immutable.js v4 Immutable.js type definitions embrace ES2015. While Immutable.js itself supports legacy browsers and environments, its type definitions require TypeScript's 2015 lib. Include either `"target": "es2015"` or `"lib": "es2015"` in your `tsconfig.json`, or provide `--target es2015` or `--lib es2015` to the `tsc` command. ```js const { Map } = require('immutable'); const map1 = Map({ a: 1, b: 2, c: 3 }); const map2 = map1.set('b', 50); map1.get('b') + ' vs. ' + map2.get('b'); // 2 vs. 50 ``` #### Using TypeScript with Immutable.js v3 and earlier: Previous versions of Immutable.js include a reference file which you can include via relative path to the type definitions at the top of your file. ```js /// import Immutable from 'immutable'; var map1: Immutable.Map; map1 = Immutable.Map({ a: 1, b: 2, c: 3 }); var map2 = map1.set('b', 50); map1.get('b'); // 2 map2.get('b'); // 50 ``` ## The case for Immutability Much of what makes application development difficult is tracking mutation and maintaining state. Developing with immutable data encourages you to think differently about how data flows through your application. Subscribing to data events throughout your application creates a huge overhead of book-keeping which can hurt performance, sometimes dramatically, and creates opportunities for areas of your application to get out of sync with each other due to easy to make programmer error. Since immutable data never changes, subscribing to changes throughout the model is a dead-end and new data can only ever be passed from above. This model of data flow aligns well with the architecture of [React][] and especially well with an application designed using the ideas of [Flux][]. When data is passed from above rather than being subscribed to, and you're only interested in doing work when something has changed, you can use equality. Immutable collections should be treated as _values_ rather than _objects_. While objects represent some thing which could change over time, a value represents the state of that thing at a particular instance of time. This principle is most important to understanding the appropriate use of immutable data. In order to treat Immutable.js collections as values, it's important to use the `Immutable.is()` function or `.equals()` method to determine _value equality_ instead of the `===` operator which determines object _reference identity_. ```js const { Map } = require('immutable'); const map1 = Map({ a: 1, b: 2, c: 3 }); const map2 = Map({ a: 1, b: 2, c: 3 }); map1.equals(map2); // true map1 === map2; // false ``` Note: As a performance optimization Immutable.js attempts to return the existing collection when an operation would result in an identical collection, allowing for using `===` reference equality to determine if something definitely has not changed. This can be extremely useful when used within a memoization function which would prefer to re-run the function if a deeper equality check could potentially be more costly. The `===` equality check is also used internally by `Immutable.is` and `.equals()` as a performance optimization. ```js const { Map } = require('immutable'); const map1 = Map({ a: 1, b: 2, c: 3 }); const map2 = map1.set('b', 2); // Set to same value map1 === map2; // true ``` If an object is immutable, it can be "copied" simply by making another reference to it instead of copying the entire object. Because a reference is much smaller than the object itself, this results in memory savings and a potential boost in execution speed for programs which rely on copies (such as an undo-stack). ```js const { Map } = require('immutable'); const map = Map({ a: 1, b: 2, c: 3 }); const mapCopy = map; // Look, "copies" are free! ``` [React]: https://reactjs.org/ [Flux]: https://facebook.github.io/flux/docs/in-depth-overview/ ## JavaScript-first API While Immutable.js is inspired by Clojure, Scala, Haskell and other functional programming environments, it's designed to bring these powerful concepts to JavaScript, and therefore has an Object-Oriented API that closely mirrors that of [ES2015][] [Array][], [Map][], and [Set][]. [es2015]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla [array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array [map]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map [set]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set The difference for the immutable collections is that methods which would mutate the collection, like `push`, `set`, `unshift` or `splice`, instead return a new immutable collection. Methods which return new arrays, like `slice` or `concat`, instead return new immutable collections. ```js const { List } = require('immutable'); const list1 = List([1, 2]); const list2 = list1.push(3, 4, 5); const list3 = list2.unshift(0); const list4 = list1.concat(list2, list3); assert.equal(list1.size, 2); assert.equal(list2.size, 5); assert.equal(list3.size, 6); assert.equal(list4.size, 13); assert.equal(list4.get(0), 1); ``` Almost all of the methods on [Array][] will be found in similar form on `Immutable.List`, those of [Map][] found on `Immutable.Map`, and those of [Set][] found on `Immutable.Set`, including collection operations like `forEach()` and `map()`. ```js const { Map } = require('immutable'); const alpha = Map({ a: 1, b: 2, c: 3, d: 4 }); alpha.map((v, k) => k.toUpperCase()).join(); // 'A,B,C,D' ``` ### Convert from raw JavaScript objects and arrays. Designed to inter-operate with your existing JavaScript, Immutable.js accepts plain JavaScript Arrays and Objects anywhere a method expects a `Collection`. ```js const { Map, List } = require('immutable'); const map1 = Map({ a: 1, b: 2, c: 3, d: 4 }); const map2 = Map({ c: 10, a: 20, t: 30 }); const obj = { d: 100, o: 200, g: 300 }; const map3 = map1.merge(map2, obj); // Map { a: 20, b: 2, c: 10, d: 100, t: 30, o: 200, g: 300 } const list1 = List([1, 2, 3]); const list2 = List([4, 5, 6]); const array = [7, 8, 9]; const list3 = list1.concat(list2, array); // List [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] ``` This is possible because Immutable.js can treat any JavaScript Array or Object as a Collection. You can take advantage of this in order to get sophisticated collection methods on JavaScript Objects, which otherwise have a very sparse native API. Because Seq evaluates lazily and does not cache intermediate results, these operations can be extremely efficient. ```js const { Seq } = require('immutable'); const myObject = { a: 1, b: 2, c: 3 }; Seq(myObject) .map(x => x * x) .toObject(); // { a: 1, b: 4, c: 9 } ``` Keep in mind, when using JS objects to construct Immutable Maps, that JavaScript Object properties are always strings, even if written in a quote-less shorthand, while Immutable Maps accept keys of any type. ```js const { fromJS } = require('immutable'); const obj = { 1: 'one' }; console.log(Object.keys(obj)); // [ "1" ] console.log(obj['1'], obj[1]); // "one", "one" const map = fromJS(obj); console.log(map.get('1'), map.get(1)); // "one", undefined ``` Property access for JavaScript Objects first converts the key to a string, but since Immutable Map keys can be of any type the argument to `get()` is not altered. ### Converts back to raw JavaScript objects. All Immutable.js Collections can be converted to plain JavaScript Arrays and Objects shallowly with `toArray()` and `toObject()` or deeply with `toJS()`. All Immutable Collections also implement `toJSON()` allowing them to be passed to `JSON.stringify` directly. They also respect the custom `toJSON()` methods of nested objects. ```js const { Map, List } = require('immutable'); const deep = Map({ a: 1, b: 2, c: List([3, 4, 5]) }); console.log(deep.toObject()); // { a: 1, b: 2, c: List [ 3, 4, 5 ] } console.log(deep.toArray()); // [ 1, 2, List [ 3, 4, 5 ] ] console.log(deep.toJS()); // { a: 1, b: 2, c: [ 3, 4, 5 ] } JSON.stringify(deep); // '{"a":1,"b":2,"c":[3,4,5]}' ``` ### Embraces ES2015 Immutable.js supports all JavaScript environments, including legacy browsers (even IE11). However it also takes advantage of features added to JavaScript in [ES2015][], the latest standard version of JavaScript, including [Iterators][], [Arrow Functions][], [Classes][], and [Modules][]. It's inspired by the native [Map][] and [Set][] collections added to ES2015. All examples in the Documentation are presented in ES2015. To run in all browsers, they need to be translated to ES5. ```js // ES2015 const mapped = foo.map(x => x * x); // ES5 var mapped = foo.map(function (x) { return x * x; }); ``` All Immutable.js collections are [Iterable][iterators], which allows them to be used anywhere an Iterable is expected, such as when spreading into an Array. ```js const { List } = require('immutable'); const aList = List([1, 2, 3]); const anArray = [0, ...aList, 4, 5]; // [ 0, 1, 2, 3, 4, 5 ] ``` Note: A Collection is always iterated in the same order, however that order may not always be well defined, as is the case for the `Map` and `Set`. [Iterators]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol [Arrow Functions]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions [Classes]: https://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes [Modules]: https://www.2ality.com/2014/09/es6-modules-final.html ## Nested Structures The collections in Immutable.js are intended to be nested, allowing for deep trees of data, similar to JSON. ```js const { fromJS } = require('immutable'); const nested = fromJS({ a: { b: { c: [3, 4, 5] } } }); // Map { a: Map { b: Map { c: List [ 3, 4, 5 ] } } } ``` A few power-tools allow for reading and operating on nested data. The most useful are `mergeDeep`, `getIn`, `setIn`, and `updateIn`, found on `List`, `Map` and `OrderedMap`. ```js const { fromJS } = require('immutable'); const nested = fromJS({ a: { b: { c: [3, 4, 5] } } }); const nested2 = nested.mergeDeep({ a: { b: { d: 6 } } }); // Map { a: Map { b: Map { c: List [ 3, 4, 5 ], d: 6 } } } console.log(nested2.getIn(['a', 'b', 'd'])); // 6 const nested3 = nested2.updateIn(['a', 'b', 'd'], value => value + 1); console.log(nested3); // Map { a: Map { b: Map { c: List [ 3, 4, 5 ], d: 7 } } } const nested4 = nested3.updateIn(['a', 'b', 'c'], list => list.push(6)); // Map { a: Map { b: Map { c: List [ 3, 4, 5, 6 ], d: 7 } } } ``` ## Equality treats Collections as Values Immutable.js collections are treated as pure data _values_. Two immutable collections are considered _value equal_ (via `.equals()` or `is()`) if they represent the same collection of values. This differs from JavaScript's typical _reference equal_ (via `===` or `==`) for Objects and Arrays which only determines if two variables represent references to the same object instance. Consider the example below where two identical `Map` instances are not _reference equal_ but are _value equal_. ```js // First consider: const obj1 = { a: 1, b: 2, c: 3 }; const obj2 = { a: 1, b: 2, c: 3 }; obj1 !== obj2; // two different instances are always not equal with === const { Map, is } = require('immutable'); const map1 = Map({ a: 1, b: 2, c: 3 }); const map2 = Map({ a: 1, b: 2, c: 3 }); map1 !== map2; // two different instances are not reference-equal map1.equals(map2); // but are value-equal if they have the same values is(map1, map2); // alternatively can use the is() function ``` Value equality allows Immutable.js collections to be used as keys in Maps or values in Sets, and retrieved with different but equivalent collections: ```js const { Map, Set } = require('immutable'); const map1 = Map({ a: 1, b: 2, c: 3 }); const map2 = Map({ a: 1, b: 2, c: 3 }); const set = Set().add(map1); set.has(map2); // true because these are value-equal ``` Note: `is()` uses the same measure of equality as [Object.is][] for scalar strings and numbers, but uses value equality for Immutable collections, determining if both are immutable and all keys and values are equal using the same measure of equality. [object.is]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is #### Performance tradeoffs While value equality is useful in many circumstances, it has different performance characteristics than reference equality. Understanding these tradeoffs may help you decide which to use in each case, especially when used to memoize some operation. When comparing two collections, value equality may require considering every item in each collection, on an `O(N)` time complexity. For large collections of values, this could become a costly operation. Though if the two are not equal and hardly similar, the inequality is determined very quickly. In contrast, when comparing two collections with reference equality, only the initial references to memory need to be compared which is not based on the size of the collections, which has an `O(1)` time complexity. Checking reference equality is always very fast, however just because two collections are not reference-equal does not rule out the possibility that they may be value-equal. #### Return self on no-op optimization When possible, Immutable.js avoids creating new objects for updates where no change in _value_ occurred, to allow for efficient _reference equality_ checking to quickly determine if no change occurred. ```js const { Map } = require('immutable'); const originalMap = Map({ a: 1, b: 2, c: 3 }); const updatedMap = originalMap.set('b', 2); updatedMap === originalMap; // No-op .set() returned the original reference. ``` However updates which do result in a change will return a new reference. Each of these operations occur independently, so two similar updates will not return the same reference: ```js const { Map } = require('immutable'); const originalMap = Map({ a: 1, b: 2, c: 3 }); const updatedMap = originalMap.set('b', 1000); // New instance, leaving the original immutable. updatedMap !== originalMap; const anotherUpdatedMap = originalMap.set('b', 1000); // Despite both the results of the same operation, each created a new reference. anotherUpdatedMap !== updatedMap; // However the two are value equal. anotherUpdatedMap.equals(updatedMap); ``` ## Batching Mutations > If a tree falls in the woods, does it make a sound? > > If a pure function mutates some local data in order to produce an immutable > return value, is that ok? > > — Rich Hickey, Clojure Applying a mutation to create a new immutable object results in some overhead, which can add up to a minor performance penalty. If you need to apply a series of mutations locally before returning, Immutable.js gives you the ability to create a temporary mutable (transient) copy of a collection and apply a batch of mutations in a performant manner by using `withMutations`. In fact, this is exactly how Immutable.js applies complex mutations itself. As an example, building `list2` results in the creation of 1, not 3, new immutable Lists. ```js const { List } = require('immutable'); const list1 = List([1, 2, 3]); const list2 = list1.withMutations(function (list) { list.push(4).push(5).push(6); }); assert.equal(list1.size, 3); assert.equal(list2.size, 6); ``` Note: Immutable.js also provides `asMutable` and `asImmutable`, but only encourages their use when `withMutations` will not suffice. Use caution to not return a mutable copy, which could result in undesired behavior. _Important!_: Only a select few methods can be used in `withMutations` including `set`, `push` and `pop`. These methods can be applied directly against a persistent data-structure where other methods like `map`, `filter`, `sort`, and `splice` will always return new immutable data-structures and never mutate a mutable collection. ## Lazy Seq `Seq` describes a lazy operation, allowing them to efficiently chain use of all the higher-order collection methods (such as `map` and `filter`) by not creating intermediate collections. **Seq is immutable** — Once a Seq is created, it cannot be changed, appended to, rearranged or otherwise modified. Instead, any mutative method called on a `Seq` will return a new `Seq`. **Seq is lazy** — `Seq` does as little work as necessary to respond to any method call. Values are often created during iteration, including implicit iteration when reducing or converting to a concrete data structure such as a `List` or JavaScript `Array`. For example, the following performs no work, because the resulting `Seq`'s values are never iterated: ```js const { Seq } = require('immutable'); const oddSquares = Seq([1, 2, 3, 4, 5, 6, 7, 8]) .filter(x => x % 2 !== 0) .map(x => x * x); ``` Once the `Seq` is used, it performs only the work necessary. In this example, no intermediate arrays are ever created, filter is called three times, and map is only called once: ```js oddSquares.get(1); // 9 ``` Any collection can be converted to a lazy Seq with `Seq()`. ```js const { Map, Seq } = require('immutable'); const map = Map({ a: 1, b: 2, c: 3 }); const lazySeq = Seq(map); ``` `Seq` allows for the efficient chaining of operations, allowing for the expression of logic that can otherwise be very tedious: ```js lazySeq .flip() .map(key => key.toUpperCase()) .flip(); // Seq { A: 1, B: 2, C: 3 } ``` As well as expressing logic that would otherwise seem memory or time limited, for example `Range` is a special kind of Lazy sequence. ```js const { Range } = require('immutable'); Range(1, Infinity) .skip(1000) .map(n => -n) .filter(n => n % 2 === 0) .take(2) .reduce((r, n) => r * n, 1); // 1006008 ``` ## Comparison of filter(), groupBy(), and partition() The `filter()`, `groupBy()`, and `partition()` methods are similar in that they all divide a collection into parts based on applying a function to each element. All three call the predicate or grouping function once for each item in the input collection. All three return zero or more collections of the same type as their input. The returned collections are always distinct from the input (according to `===`), even if the contents are identical. Of these methods, `filter()` is the only one that is lazy and the only one which discards items from the input collection. It is the simplest to use, and the fact that it returns exactly one collection makes it easy to combine with other methods to form a pipeline of operations. The `partition()` method is similar to an eager version of `filter()`, but it returns two collections; the first contains the items that would have been discarded by `filter()`, and the second contains the items that would have been kept. It always returns an array of exactly two collections, which can make it easier to use than `groupBy()`. Compared to making two separate calls to `filter()`, `partition()` makes half as many calls it the predicate passed to it. The `groupBy()` method is a more generalized version of `partition()` that can group by an arbitrary function rather than just a predicate. It returns a map with zero or more entries, where the keys are the values returned by the grouping function, and the values are nonempty collections of the corresponding arguments. Although `groupBy()` is more powerful than `partition()`, it can be harder to use because it is not always possible predict in advance how many entries the returned map will have and what their keys will be. | Summary | `filter` | `partition` | `groupBy` | |:------------------------------|:---------|:------------|:---------------| | ease of use | easiest | moderate | hardest | | generality | least | moderate | most | | laziness | lazy | eager | eager | | # of returned sub-collections | 1 | 2 | 0 or more | | sub-collections may be empty | yes | yes | no | | can discard items | yes | no | no | | wrapping container | none | array | Map/OrderedMap | ## Additional Tools and Resources - [Atom-store](https://github.com/jameshopkins/atom-store/) - A Clojure-inspired atom implementation in Javascript with configurability for external persistance. - [Chai Immutable](https://github.com/astorije/chai-immutable) - If you are using the [Chai Assertion Library](https://chaijs.com/), this provides a set of assertions to use against Immutable.js collections. - [Fantasy-land](https://github.com/fantasyland/fantasy-land) - Specification for interoperability of common algebraic structures in JavaScript. - [Immutagen](https://github.com/pelotom/immutagen) - A library for simulating immutable generators in JavaScript. - [Immutable-cursor](https://github.com/redbadger/immutable-cursor) - Immutable cursors incorporating the Immutable.js interface over Clojure-inspired atom. - [Immutable-ext](https://github.com/DrBoolean/immutable-ext) - Fantasyland extensions for immutablejs - [Immutable-js-tools](https://github.com/madeinfree/immutable-js-tools) - Util tools for immutable.js - [Immutable-Redux](https://github.com/gajus/redux-immutable) - redux-immutable is used to create an equivalent function of Redux combineReducers that works with Immutable.js state. - [Immutable-Treeutils](https://github.com/lukasbuenger/immutable-treeutils) - Functional tree traversal helpers for ImmutableJS data structures. - [Irecord](https://github.com/ericelliott/irecord) - An immutable store that exposes an RxJS observable. Great for React. - [Mudash](https://github.com/brianneisler/mudash) - Lodash wrapper providing Immutable.JS support. - [React-Immutable-PropTypes](https://github.com/HurricaneJames/react-immutable-proptypes) - PropType validators that work with Immutable.js. - [Redux-Immutablejs](https://github.com/indexiatech/redux-immutablejs) - Redux Immutable facilities. - [Rxstate](https://github.com/yamalight/rxstate) - Simple opinionated state management library based on RxJS and Immutable.js. - [Transit-Immutable-js](https://github.com/glenjamin/transit-immutable-js) - Transit serialisation for Immutable.js. - See also: [Transit-js](https://github.com/cognitect/transit-js) Have an additional tool designed to work with Immutable.js? Submit a PR to add it to this list in alphabetical order. ## Contributing Use [Github issues](https://github.com/immutable-js/immutable-js/issues) for requests. We actively welcome pull requests, learn how to [contribute](https://github.com/immutable-js/immutable-js/blob/main/.github/CONTRIBUTING.md). Immutable.js is maintained within the [Contributor Covenant's Code of Conduct](https://www.contributor-covenant.org/version/2/0/code_of_conduct/). ### Changelog Changes are tracked as [Github releases](https://github.com/immutable-js/immutable-js/releases). ### License Immutable.js is [MIT-licensed](./LICENSE). ### Thanks [Phil Bagwell](https://www.youtube.com/watch?v=K2NYwP90bNs), for his inspiration and research in persistent data structures. [Hugh Jackson](https://github.com/hughfdjackson/), for providing the npm package name. If you're looking for his unsupported package, see [this repository](https://github.com/hughfdjackson/immutable). immutable-js-immutable-js-fa7d047/__tests__/000077500000000000000000000000001515165743500210625ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/__tests__/.eslintrc.json000066400000000000000000000001231515165743500236520ustar00rootroot00000000000000{ "env": { "jest": true }, "parserOptions": { "ecmaVersion": 6 } } immutable-js-immutable-js-fa7d047/__tests__/ArraySeq.ts000066400000000000000000000056551515165743500231740ustar00rootroot00000000000000import { Seq } from 'immutable'; describe('ArraySequence', () => { it('every is true when predicate is true for all entries', () => { expect(Seq([]).every(() => false)).toBe(true); expect(Seq([1, 2, 3]).every(v => v > 0)).toBe(true); expect(Seq([1, 2, 3]).every(v => v < 3)).toBe(false); }); it('some is true when predicate is true for any entry', () => { expect(Seq([]).some(() => true)).toBe(false); expect(Seq([1, 2, 3]).some(v => v > 0)).toBe(true); expect(Seq([1, 2, 3]).some(v => v < 3)).toBe(true); expect(Seq([1, 2, 3]).some(v => v > 1)).toBe(true); expect(Seq([1, 2, 3]).some(v => v < 0)).toBe(false); }); it('maps', () => { const i = Seq([1, 2, 3]); const m = i.map(x => x + x).toArray(); expect(m).toEqual([2, 4, 6]); }); it('reduces', () => { const i = Seq([1, 2, 3]); const r = i.reduce((acc, x) => acc + x); expect(r).toEqual(6); }); it('efficiently chains iteration methods', () => { const i = Seq('abcdefghijklmnopqrstuvwxyz'.split('')); function studly(letter, index) { return index % 2 === 0 ? letter : letter.toUpperCase(); } const result = i .reverse() .take(10) .reverse() .take(5) .map(studly) .toArray() .join(''); expect(result).toBe('qRsTu'); }); it('counts from the end of the sequence on negative index', () => { const i = Seq([1, 2, 3, 4, 5, 6, 7]); expect(i.get(-1)).toBe(7); expect(i.get(-5)).toBe(3); expect(i.get(-9)).toBe(undefined); expect(i.get(-999, 1000)).toBe(1000); }); it('handles trailing holes', () => { const a = [1, 2, 3]; a.length = 10; const seq = Seq(a); expect(seq.size).toBe(10); expect(seq.toArray().length).toBe(10); expect(seq.map(x => x * x).size).toBe(10); expect(seq.map(x => x * x).toArray().length).toBe(10); expect(seq.skip(2).toArray().length).toBe(8); expect(seq.take(2).toArray().length).toBe(2); expect(seq.take(5).toArray().length).toBe(5); expect(seq.filter(x => x % 2 === 1).toArray().length).toBe(2); expect(seq.toKeyedSeq().flip().size).toBe(10); expect(seq.toKeyedSeq().flip().flip().size).toBe(10); expect(seq.toKeyedSeq().flip().flip().toArray().length).toBe(10); }); it('can be iterated', () => { const a = [1, 2, 3]; const seq = Seq(a); const entries = seq.entries(); expect(entries.next()).toEqual({ value: [0, 1], done: false }); expect(entries.next()).toEqual({ value: [1, 2], done: false }); expect(entries.next()).toEqual({ value: [2, 3], done: false }); expect(entries.next()).toEqual({ value: undefined, done: true }); }); it('cannot be mutated after calling toArray', () => { const seq = Seq(['A', 'B', 'C']); const firstReverse = Seq(seq.toArray().reverse()); const secondReverse = Seq(seq.toArray().reverse()); expect(firstReverse.get(0)).toEqual('C'); expect(secondReverse.get(0)).toEqual('C'); }); }); immutable-js-immutable-js-fa7d047/__tests__/Comparator.ts000066400000000000000000000040411515165743500235400ustar00rootroot00000000000000import { List, OrderedSet, Seq, Comparator, PairSorting } from 'immutable'; const sourceNumbers: readonly number[] = [3, 4, 5, 6, 7, 9, 10, 12, 90, 92, 95]; const expectedSortedNumbers: readonly number[] = [ 7, 95, 90, 92, 3, 5, 9, 4, 6, 10, 12, ]; const testComparator: Comparator = (left, right) => { //The number 7 always goes first... if (left == 7) { return PairSorting.LeftThenRight; } else if (right == 7) { return PairSorting.RightThenLeft; } //...followed by numbers >= 90, then by all the others. if (left >= 90 && right < 90) { return PairSorting.LeftThenRight; } else if (left < 90 && right >= 90) { return PairSorting.RightThenLeft; } //Within each group, even numbers go first... if (left % 2 && !(right % 2)) { return PairSorting.LeftThenRight; } else if (!(left % 2) && right % 2) { return PairSorting.RightThenLeft; } //...and, finally, sort the numbers of each subgroup in ascending order. return left - right; }; describe.each([ ['List', List], ['OrderedSet', OrderedSet], ['Seq.Indexed', Seq.Indexed], ])('Comparator applied to %s', (_collectionName, testCollectionConstructor) => { const sourceCollection = testCollectionConstructor(sourceNumbers); const expectedSortedCollection = testCollectionConstructor( expectedSortedNumbers ); describe('when sorting', () => { it('should support the enum as well as numeric return values', () => { const actualCollection = sourceCollection.sort(testComparator); expect(actualCollection).toEqual(expectedSortedCollection); }); }); describe('when retrieving the max value', () => { it('should support the enum as well as numeric return values', () => { const actualMax = sourceCollection.max(testComparator); expect(actualMax).toBe(12); }); }); describe('when retrieving the min value', () => { it('should support the enum as well as numeric return values', () => { const actualMin = sourceCollection.min(testComparator); expect(actualMin).toBe(7); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/Conversion.ts000066400000000000000000000125251515165743500235640ustar00rootroot00000000000000import { fromJS, is, List, Map, OrderedMap, Record } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); // Symbols declare function Symbol(name: string): any; describe('Conversion', () => { // Note: order of keys based on Map's hashing order const js = { deepList: [ { position: 'first', }, { position: 'second', }, { position: 'third', }, ], deepMap: { a: 'A', b: 'B', }, emptyMap: Object.create(null), point: { x: 10, y: 20 }, string: 'Hello', list: [1, 2, 3], }; const Point = Record({ x: 0, y: 0 }, 'Point'); const immutableData = Map({ deepList: List.of( Map({ position: 'first', }), Map({ position: 'second', }), Map({ position: 'third', }) ), deepMap: Map({ a: 'A', b: 'B', }), emptyMap: Map(), point: Map({ x: 10, y: 20 }), string: 'Hello', list: List.of(1, 2, 3), }); const immutableOrderedData = OrderedMap({ deepList: List.of( OrderedMap({ position: 'first', }), OrderedMap({ position: 'second', }), OrderedMap({ position: 'third', }) ), deepMap: OrderedMap({ a: 'A', b: 'B', }), emptyMap: OrderedMap(), point: new Point({ x: 10, y: 20 }), string: 'Hello', list: List.of(1, 2, 3), }); const immutableOrderedDataString = 'OrderedMap { ' + '"deepList": List [ ' + 'OrderedMap { ' + '"position": "first"' + ' }, ' + 'OrderedMap { ' + '"position": "second"' + ' }, ' + 'OrderedMap { ' + '"position": "third"' + ' }' + ' ], ' + '"deepMap": OrderedMap { ' + '"a": "A", ' + '"b": "B"' + ' }, ' + '"emptyMap": OrderedMap {}, ' + '"point": Point { x: 10, y: 20 }, ' + '"string": "Hello", ' + '"list": List [ 1, 2, 3 ]' + ' }'; const nonStringKeyMap = OrderedMap().set(1, true).set(false, 'foo'); const nonStringKeyMapString = 'OrderedMap { 1: true, false: "foo" }'; it('Converts deep JS to deep immutable sequences', () => { expect(fromJS(js)).toEqual(immutableData); }); it('Throws when provided circular reference', () => { const o = { a: { b: { c: null as any } } }; o.a.b.c = o; expect(() => fromJS(o)).toThrow( 'Cannot convert circular structure to Immutable' ); }); it('Converts deep JSON with custom conversion', () => { const seq = fromJS(js, function (key, sequence) { if (key === 'point') { return new Point(sequence as any); } return Array.isArray(this[key]) ? sequence.toList() : sequence.toOrderedMap(); }); expect(seq).toEqual(immutableOrderedData); expect(seq.toString()).toEqual(immutableOrderedDataString); }); it('Converts deep JSON with custom conversion including keypath if requested', () => { const paths: Array = []; const seq1 = fromJS(js, function (key, sequence, keypath) { expect(arguments.length).toBe(3); paths.push(keypath); return Array.isArray(this[key]) ? sequence.toList() : sequence.toOrderedMap(); }); expect(paths).toEqual([ [], ['deepList'], ['deepList', 0], ['deepList', 1], ['deepList', 2], ['deepMap'], ['emptyMap'], ['point'], ['list'], ]); const seq2 = fromJS(js, function (key, sequence) { expect(arguments[2]).toBe(undefined); }); }); it('Prints keys as JS values', () => { expect(nonStringKeyMap.toString()).toEqual(nonStringKeyMapString); }); it('Converts deep sequences to JS', () => { const js2 = immutableData.toJS(); expect(is(js2, js)).toBe(false); // raw JS is not immutable. expect(js2).toEqual(js); // but should be deep equal. }); it('Converts shallowly to JS', () => { const js2 = immutableData.toJSON(); expect(js2).not.toEqual(js); expect(js2.deepList).toBe(immutableData.get('deepList')); }); it('JSON.stringify() works equivalently on immutable sequences', () => { expect(JSON.stringify(js)).toBe(JSON.stringify(immutableData)); }); it('JSON.stringify() respects toJSON methods on values', () => { const Model = Record({}); Model.prototype.toJSON = function () { return 'model'; }; expect(Map({ a: new Model() }).toJS()).toEqual({ a: {} }); expect(JSON.stringify(Map({ a: new Model() }))).toEqual('{"a":"model"}'); }); it('is conservative with array-likes, only accepting true Arrays.', () => { expect(fromJS({ 1: 2, length: 3 })).toEqual( Map().set('1', 2).set('length', 3) ); expect(fromJS('string')).toEqual('string'); }); check.it('toJS isomorphic value', { maxSize: 30 }, [gen.JSONValue], v => { const imm = fromJS(v); expect(imm && imm.toJS ? imm.toJS() : imm).toEqual(v); }); it('Explicitly convert values to string using String constructor', () => { expect(() => fromJS({ foo: Symbol('bar') }) + '').not.toThrow(); expect(() => Map().set('foo', Symbol('bar')) + '').not.toThrow(); expect(() => Map().set(Symbol('bar'), 'foo') + '').not.toThrow(); }); it('Converts an immutable value of an entry correctly', () => { const arr = [{ key: 'a' }]; const result = fromJS(arr).entrySeq().toJS(); expect(result).toEqual([[0, { key: 'a' }]]); }); }); immutable-js-immutable-js-fa7d047/__tests__/Equality.ts000066400000000000000000000074221515165743500232340ustar00rootroot00000000000000import { is, List, Map, Seq, Set } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('Equality', () => { function expectIs(left, right) { const comparison = is(left, right); expect(comparison).toBe(true); const commutative = is(right, left); expect(commutative).toBe(true); } function expectIsNot(left, right) { const comparison = is(left, right); expect(comparison).toBe(false); const commutative = is(right, left); expect(commutative).toBe(false); } it('uses Object.is semantics', () => { expectIs(null, null); expectIs(undefined, undefined); expectIsNot(undefined, null); expectIs(true, true); expectIs(false, false); expectIsNot(true, false); expectIs(123, 123); expectIsNot(123, -123); expectIs(NaN, NaN); expectIs(0, 0); expectIs(-0, -0); // Note: Unlike Object.is, is assumes 0 and -0 are the same value, // matching the behavior of ES6 Map key equality. expectIs(0, -0); expectIs(NaN, 0 / 0); const str = 'hello'; expectIs(str, str); expectIs(str, 'hello'); expectIsNot('hello', 'HELLO'); expectIsNot('hello', 'goodbye'); const array = [1, 2, 3]; expectIs(array, array); expectIsNot(array, [1, 2, 3]); const object = { key: 'value' }; expectIs(object, object); expectIsNot(object, { key: 'value' }); }); it('dereferences things', () => { const ptrA = { foo: 1 }, ptrB = { foo: 2 }; expectIsNot(ptrA, ptrB); ptrA.valueOf = ptrB.valueOf = function () { return 5; }; expectIs(ptrA, ptrB); const object = { key: 'value' }; ptrA.valueOf = ptrB.valueOf = function () { return object; }; expectIs(ptrA, ptrB); ptrA.valueOf = ptrB.valueOf = function () { return null as any; }; expectIs(ptrA, ptrB); ptrA.valueOf = ptrB.valueOf = function () { return void 0 as any; }; expectIs(ptrA, ptrB); ptrA.valueOf = function () { return 4; }; ptrB.valueOf = function () { return 5; }; expectIsNot(ptrA, ptrB); }); it('compares sequences', () => { const arraySeq = Seq([1, 2, 3]); const arraySeq2 = Seq([1, 2, 3]); expectIs(arraySeq, arraySeq); expectIs(arraySeq, Seq([1, 2, 3])); expectIs(arraySeq2, arraySeq2); expectIs(arraySeq2, Seq([1, 2, 3])); expectIsNot(arraySeq, [1, 2, 3]); expectIsNot(arraySeq2, [1, 2, 3]); expectIs(arraySeq, arraySeq2); expectIs( arraySeq, arraySeq.map(x => x) ); expectIs( arraySeq2, arraySeq2.map(x => x) ); }); it('compares lists', () => { const list = List([1, 2, 3]); expectIs(list, list); expectIsNot(list, [1, 2, 3]); expectIs(list, Seq([1, 2, 3])); expectIs(list, List([1, 2, 3])); const listLonger = list.push(4); expectIsNot(list, listLonger); const listShorter = listLonger.pop(); expect(list === listShorter).toBe(false); expectIs(list, listShorter); }); const genSimpleVal = gen.oneOf(['A', 1]); const genVal = gen.oneOf([ gen.array(genSimpleVal, { minSize: 0, maxSize: 4 }).then(List), gen.array(genSimpleVal, { minSize: 0, maxSize: 4 }).then(Set), gen .array(gen.array(genSimpleVal, { size: 2 }), { minSize: 0, maxSize: 4, }) .then(Map), ]); check.it( 'has symmetric equality', { times: 1000 }, [genVal, genVal], (a, b) => { expect(is(a, b)).toBe(is(b, a)); } ); check.it('has hash equality', { times: 1000 }, [genVal, genVal], (a, b) => { if (is(a, b)) { expect(a.hashCode()).toBe(b.hashCode()); } }); describe('hash', () => { it('differentiates decimals', () => { expect(Seq([1.5]).hashCode()).not.toBe(Seq([1.6]).hashCode()); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/IndexedSeq.ts000066400000000000000000000025751515165743500234740ustar00rootroot00000000000000import { Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('IndexedSequence', () => { it('maintains skipped offset', () => { const seq = Seq(['A', 'B', 'C', 'D', 'E']); // This is what we expect for IndexedSequences const operated = seq.skip(1); expect(operated.entrySeq().toArray()).toEqual([ [0, 'B'], [1, 'C'], [2, 'D'], [3, 'E'], ]); expect(operated.first()).toEqual('B'); }); it('reverses correctly', () => { const seq = Seq(['A', 'B', 'C', 'D', 'E']); // This is what we expect for IndexedSequences const operated = seq.reverse(); expect(operated.get(0)).toEqual('E'); expect(operated.get(1)).toEqual('D'); expect(operated.get(4)).toEqual('A'); expect(operated.first()).toEqual('E'); expect(operated.last()).toEqual('A'); }); it('negative indexes correctly', () => { const seq = Seq(['A', 'B', 'C', 'D', 'E']); expect(seq.first()).toEqual('A'); expect(seq.last()).toEqual('E'); expect(seq.get(-0)).toEqual('A'); expect(seq.get(2)).toEqual('C'); expect(seq.get(-2)).toEqual('D'); const indexes = seq.keySeq(); expect(indexes.first()).toEqual(0); expect(indexes.last()).toEqual(4); expect(indexes.get(-0)).toEqual(0); expect(indexes.get(2)).toEqual(2); expect(indexes.get(-2)).toEqual(3); }); }); immutable-js-immutable-js-fa7d047/__tests__/KeyedSeq.ts000066400000000000000000000056471515165743500231600ustar00rootroot00000000000000import { Range, Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('KeyedSeq', () => { check.it('it iterates equivalently', [gen.array(gen.int)], ints => { const seq = Seq(ints); const keyed = seq.toKeyedSeq(); const seqEntries = seq.entries(); const keyedEntries = keyed.entries(); let seqStep, keyedStep; do { seqStep = seqEntries.next(); keyedStep = keyedEntries.next(); expect(keyedStep).toEqual(seqStep); } while (!seqStep.done); }); it('maintains keys', () => { const isEven = x => x % 2 === 0; const seq = Range(0, 100); // This is what we expect for IndexedSequences const operated = seq.filter(isEven).skip(10).take(5); expect(operated.entrySeq().toArray()).toEqual([ [0, 20], [1, 22], [2, 24], [3, 26], [4, 28], ]); const [indexed0, indexed1] = seq .partition(isEven) .map(part => part.skip(10).take(5)); expect(indexed0.entrySeq().toArray()).toEqual([ [0, 21], [1, 23], [2, 25], [3, 27], [4, 29], ]); expect(indexed1.entrySeq().toArray()).toEqual([ [0, 20], [1, 22], [2, 24], [3, 26], [4, 28], ]); // Where Keyed Sequences maintain keys. const keyed = seq.toKeyedSeq(); const keyedOperated = keyed.filter(isEven).skip(10).take(5); expect(keyedOperated.entrySeq().toArray()).toEqual([ [20, 20], [22, 22], [24, 24], [26, 26], [28, 28], ]); const [keyed0, keyed1] = keyed .partition(isEven) .map(part => part.skip(10).take(5)); expect(keyed0.entrySeq().toArray()).toEqual([ [21, 21], [23, 23], [25, 25], [27, 27], [29, 29], ]); expect(keyed1.entrySeq().toArray()).toEqual([ [20, 20], [22, 22], [24, 24], [26, 26], [28, 28], ]); }); it('works with reverse', () => { const seq = Range(0, 100); // This is what we expect for IndexedSequences expect(seq.reverse().take(5).entrySeq().toArray()).toEqual([ [0, 99], [1, 98], [2, 97], [3, 96], [4, 95], ]); // Where Keyed Sequences maintain keys. expect(seq.toKeyedSeq().reverse().take(5).entrySeq().toArray()).toEqual([ [99, 99], [98, 98], [97, 97], [96, 96], [95, 95], ]); }); it('works with double reverse', () => { const seq = Range(0, 100); // This is what we expect for IndexedSequences expect( seq.reverse().skip(10).take(5).reverse().entrySeq().toArray() ).toEqual([ [0, 85], [1, 86], [2, 87], [3, 88], [4, 89], ]); // Where Keyed Sequences maintain keys. expect( seq.reverse().toKeyedSeq().skip(10).take(5).reverse().entrySeq().toArray() ).toEqual([ [14, 85], [13, 86], [12, 87], [11, 88], [10, 89], ]); }); }); immutable-js-immutable-js-fa7d047/__tests__/List.ts000066400000000000000000000673701515165743500223620ustar00rootroot00000000000000import { fromJS, List, Map, Range, Seq, Set } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); function arrayOfSize(s: number) { const a = new Array(s); for (let ii = 0; ii < s; ii++) { a[ii] = ii; } return a; } describe('List', () => { it('determines assignment of unspecified value types', () => { interface Test { list: List; } const t: Test = { list: List(), }; expect(t.list.size).toBe(0); }); it('of provides initial values', () => { const v = List.of('a', 'b', 'c'); expect(v.get(0)).toBe('a'); expect(v.get(1)).toBe('b'); expect(v.get(2)).toBe('c'); }); it('toArray provides a JS array', () => { const v = List.of('a', 'b', 'c'); expect(v.toArray()).toEqual(['a', 'b', 'c']); }); it('does not accept a scalar', () => { expect(() => { // @ts-expect-error List(3); }).toThrow('Expected Array or collection object of values: 3'); }); it('accepts an array', () => { const v = List(['a', 'b', 'c']); expect(v.get(1)).toBe('b'); expect(v.toArray()).toEqual(['a', 'b', 'c']); }); it('accepts an array-like', () => { const v = List({ length: 3, 2: 'c' }); expect(v.get(2)).toBe('c'); expect(v.toArray()).toEqual([undefined, undefined, 'c']); }); it('accepts any array-like collection, including strings', () => { const v = List('abc'); expect(v.get(1)).toBe('b'); expect(v.toArray()).toEqual(['a', 'b', 'c']); }); it('accepts an indexed Seq', () => { const seq = Seq(['a', 'b', 'c']); const v = List(seq); expect(v.toArray()).toEqual(['a', 'b', 'c']); }); it('accepts a keyed Seq as a list of entries', () => { const seq = Seq({ a: null, b: null, c: null }).flip(); const v = List(seq); expect(v.toArray()).toEqual([ [null, 'a'], [null, 'b'], [null, 'c'], ]); // Explicitly getting the values sequence const v2 = List(seq.valueSeq()); expect(v2.toArray()).toEqual(['a', 'b', 'c']); // toList() does this for you. const v3 = seq.toList(); expect(v3.toArray()).toEqual(['a', 'b', 'c']); }); it('can set and get a value', () => { let v = List(); expect(v.get(0)).toBe(undefined); v = v.set(0, 'value'); expect(v.get(0)).toBe('value'); }); it('can setIn and getIn a deep value', () => { let v = List([ Map({ aKey: List(['bad', 'good']), }), ]); expect(v.getIn([0, 'aKey', 1])).toBe('good'); v = v.setIn([0, 'aKey', 1], 'great'); expect(v.getIn([0, 'aKey', 1])).toBe('great'); }); it('can setIn on an inexistant index', () => { const myMap = Map({ a: [], b: [] }); const out = myMap.setIn(['a', 0], 'v').setIn(['c', 0], 'v'); expect(out.getIn(['a', 0])).toEqual('v'); expect(out.getIn(['c', 0])).toEqual('v'); expect(out.get('a')).toBeInstanceOf(Array); expect(out.get('b')).toBeInstanceOf(Array); expect(out.get('c')).toBeInstanceOf(Map); expect(out.get('c').keySeq().first()).toBe(0); }); it('throw when calling setIn on a non data structure', () => { const avengers = [ 'ironMan', // index [0] [ 'captainAmerica', // index [1][0] [ 'blackWidow', // index [1][1][0] ['theHulk'], // index [1][1][1][0] ], ], ]; const avengersList = fromJS(avengers) as List; // change theHulk to scarletWitch const out1 = avengersList.setIn([1, 1, 1, 0], 'scarletWitch'); expect(out1.getIn([1, 1, 1, 0])).toEqual('scarletWitch'); const out2 = avengersList.setIn([1, 1, 1, 3], 'scarletWitch'); expect(out2.getIn([1, 1, 1, 3])).toEqual('scarletWitch'); expect(() => { avengersList.setIn([0, 1], 'scarletWitch'); }).toThrow( 'Cannot update within non-data-structure value in path [0]: ironMan' ); }); it('can update a value', () => { const l = List.of(5); // @ts-ignore (Type definition limitation) expect(l.update(0, v => v * v).toArray()).toEqual([25]); }); it('can updateIn a deep value', () => { let l = List([ Map({ aKey: List(['bad', 'good']), }), ]); // @ts-ignore (Type definition limitation) l = l.updateIn([0, 'aKey', 1], v => v + v); expect(l.toJS()).toEqual([ { aKey: ['bad', 'goodgood'], }, ]); }); it('returns undefined when getting a null value', () => { const v = List([1, 2, 3]); expect(v.get(null as any)).toBe(undefined); const o = List([{ a: 1 }, { b: 2 }, { c: 3 }]); expect(o.get(null as any)).toBe(undefined); }); it('counts from the end of the list on negative index', () => { const i = List.of(1, 2, 3, 4, 5, 6, 7); expect(i.get(-1)).toBe(7); expect(i.get(-5)).toBe(3); expect(i.get(-9)).toBe(undefined); expect(i.get(-999, 1000)).toBe(1000); }); it('coerces numeric-string keys', () => { // Of course, TypeScript protects us from this, so cast to "any" to test. const i: any = List.of(1, 2, 3, 4, 5, 6); expect(i.get('1')).toBe(2); expect(i.set('3', 10).get('3')).toBe(10); // Like array, string negative numbers do not qualify expect(i.get('-1')).toBe(undefined); // Like array, string floating point numbers do not qualify expect(i.get('1.0')).toBe(undefined); }); it('uses not set value for string index', () => { const list: any = List(); expect(list.get('stringKey', 'NOT-SET')).toBe('NOT-SET'); }); it('uses not set value for index {}', () => { const list: any = List.of(1, 2, 3, 4, 5); expect(list.get({}, 'NOT-SET')).toBe('NOT-SET'); }); it('uses not set value for index void 0', () => { const list: any = List.of(1, 2, 3, 4, 5); expect(list.get(void 0, 'NOT-SET')).toBe('NOT-SET'); }); it('uses not set value for index undefined', () => { const list: any = List.of(1, 2, 3, 4, 5); expect(list.get(undefined, 'NOT-SET')).toBe('NOT-SET'); }); it('doesnt coerce empty strings to index 0', () => { const list: any = List.of(1, 2, 3); expect(list.has('')).toBe(false); }); it('doesnt contain elements at non-empty string keys', () => { const list: any = List.of(1, 2, 3, 4, 5); expect(list.has('str')).toBe(false); }); it('hasIn doesnt contain elements at non-empty string keys', () => { const list: any = List.of(1, 2, 3, 4, 5); expect(list.hasIn(['str'])).toBe(false); }); it('hasIn doesnt throw for bad key-path', () => { const list = List.of(1, 2, 3, 4, 5); expect(list.hasIn([1, 2, 3])).toBe(false); const list2 = List([{}]); expect(list2.hasIn([0, 'bad'])).toBe(false); }); it('setting creates a new instance', () => { const v0 = List.of('a'); const v1 = v0.set(0, 'A'); expect(v0.get(0)).toBe('a'); expect(v1.get(0)).toBe('A'); }); it('size includes the highest index', () => { const v0 = List(); const v1 = v0.set(0, 'a'); const v2 = v1.set(1, 'b'); const v3 = v2.set(2, 'c'); expect(v0.size).toBe(0); expect(v1.size).toBe(1); expect(v2.size).toBe(2); expect(v3.size).toBe(3); }); it('get helpers make for easier to read code', () => { const v = List.of('a', 'b', 'c'); expect(v.first()).toBe('a'); expect(v.get(1)).toBe('b'); expect(v.last()).toBe('c'); }); it('slice helpers make for easier to read code', () => { const v0 = List.of('a', 'b', 'c'); const v1 = List.of('a', 'b'); const v2 = List.of('a'); const v3 = List(); expect(v0.rest().toArray()).toEqual(['b', 'c']); expect(v0.butLast().toArray()).toEqual(['a', 'b']); expect(v1.rest().toArray()).toEqual(['b']); expect(v1.butLast().toArray()).toEqual(['a']); expect(v2.rest().toArray()).toEqual([]); expect(v2.butLast().toArray()).toEqual([]); expect(v3.rest().toArray()).toEqual([]); expect(v3.butLast().toArray()).toEqual([]); }); it('can set at arbitrary indices', () => { const v0 = List.of('a', 'b', 'c'); const v1 = v0.set(1, 'B'); // within existing tail const v2 = v1.set(3, 'd'); // at last position const v3 = v2.set(31, 'e'); // (testing internal guts) const v4 = v3.set(32, 'f'); // (testing internal guts) const v5 = v4.set(1023, 'g'); // (testing internal guts) const v6 = v5.set(1024, 'h'); // (testing internal guts) const v7 = v6.set(32, 'F'); // set within existing tree expect(v7.size).toBe(1025); const expectedArray = ['a', 'B', 'c', 'd']; expectedArray[31] = 'e'; expectedArray[32] = 'F'; expectedArray[1023] = 'g'; expectedArray[1024] = 'h'; expect(v7.toArray()).toEqual(expectedArray); }); it('can contain a large number of indices', () => { const r = Range(0, 20000).toList(); let iterations = 0; r.forEach(v => { expect(v).toBe(iterations); iterations++; }); }); it('describes a dense list', () => { const v = List.of('a', 'b', 'c') .push('d') .set(14, 'o') .set(6, undefined) .remove(1); expect(v.size).toBe(14); expect(v.toJS()).toEqual(['a', 'c', 'd', , , , , , , , , , , 'o']); }); it('iterates a dense list', () => { const v = List() .setSize(11) .set(1, 1) .set(3, 3) .set(5, 5) .set(7, 7) .set(9, 9); expect(v.size).toBe(11); const forEachResults: Array = []; v.forEach((val, i) => forEachResults.push([i, val])); expect(forEachResults).toEqual([ [0, undefined], [1, 1], [2, undefined], [3, 3], [4, undefined], [5, 5], [6, undefined], [7, 7], [8, undefined], [9, 9], [10, undefined], ]); const arrayResults = v.toArray(); expect(arrayResults).toEqual([ undefined, 1, undefined, 3, undefined, 5, undefined, 7, undefined, 9, undefined, ]); const iteratorResults: Array = []; const iterator = v.entries(); let step; while (!(step = iterator.next()).done) { iteratorResults.push(step.value); } expect(iteratorResults).toEqual([ [0, undefined], [1, 1], [2, undefined], [3, 3], [4, undefined], [5, 5], [6, undefined], [7, 7], [8, undefined], [9, 9], [10, undefined], ]); }); it('has the same iterator function for values', () => { const l = List(['a', 'b', 'c']); expect(l[Symbol.iterator]).toBe(l.values); }); it('push inserts at highest index', () => { const v0 = List.of('a', 'b', 'c'); const v1 = v0.push('d', 'e', 'f'); expect(v0.size).toBe(3); expect(v1.size).toBe(6); expect(v1.toArray()).toEqual(['a', 'b', 'c', 'd', 'e', 'f']); }); check.it( 'pushes multiple values to the end', { maxSize: 2000 }, [gen.posInt, gen.posInt], (s1, s2) => { const a1 = arrayOfSize(s1); const a2 = arrayOfSize(s2); const v1 = List(a1); const v3 = v1.push.apply(v1, a2); const a3 = a1.slice(); a3.push.apply(a3, a2); expect(v3.size).toEqual(a3.length); expect(v3.toArray()).toEqual(a3); } ); it('pop removes the highest index, decrementing size', () => { let v = List.of('a', 'b', 'c').pop(); expect(v.last()).toBe('b'); expect(v.toArray()).toEqual(['a', 'b']); v = v.set(1230, 'x'); expect(v.size).toBe(1231); expect(v.last()).toBe('x'); v = v.pop(); expect(v.size).toBe(1230); expect(v.last()).toBe(undefined); v = v.push('X'); expect(v.size).toBe(1231); expect(v.last()).toBe('X'); }); check.it( 'pop removes the highest index, just like array', { maxSize: 2000 }, [gen.posInt], len => { const a = arrayOfSize(len); let v = List(a); while (a.length) { expect(v.size).toBe(a.length); expect(v.toArray()).toEqual(a); v = v.pop(); a.pop(); } expect(v.size).toBe(a.length); expect(v.toArray()).toEqual(a); } ); check.it( 'push adds the next highest index, just like array', { maxSize: 2000 }, [gen.posInt], len => { const a: Array = []; let v = List(); for (let ii = 0; ii < len; ii++) { expect(v.size).toBe(a.length); expect(v.toArray()).toEqual(a); v = v.push(ii); a.push(ii); } expect(v.size).toBe(a.length); expect(v.toArray()).toEqual(a); } ); it('allows popping an empty list', () => { let v = List.of('a').pop(); expect(v.size).toBe(0); expect(v.toArray()).toEqual([]); v = v.pop().pop().pop().pop().pop(); expect(v.size).toBe(0); expect(v.toArray()).toEqual([]); }); it.each(['remove', 'delete'])('remove removes any index', fn => { let v = List.of('a', 'b', 'c')[fn](2)[fn](0); expect(v.size).toBe(1); expect(v.get(0)).toBe('b'); expect(v.get(1)).toBe(undefined); expect(v.get(2)).toBe(undefined); expect(v.toArray()).toEqual(['b']); v = v.push('d'); expect(v.size).toBe(2); expect(v.get(1)).toBe('d'); expect(v.toArray()).toEqual(['b', 'd']); }); it('shifts values from the front', () => { const v = List.of('a', 'b', 'c').shift(); expect(v.first()).toBe('b'); expect(v.size).toBe(2); }); it('unshifts values to the front', () => { const v = List.of('a', 'b', 'c').unshift('x', 'y', 'z'); expect(v.first()).toBe('x'); expect(v.size).toBe(6); expect(v.toArray()).toEqual(['x', 'y', 'z', 'a', 'b', 'c']); }); check.it( 'unshifts multiple values to the front', { maxSize: 2000 }, [gen.posInt, gen.posInt], (s1, s2) => { const a1 = arrayOfSize(s1); const a2 = arrayOfSize(s2); const v1 = List(a1); const v3 = v1.unshift.apply(v1, a2); const a3 = a1.slice(); a3.unshift.apply(a3, a2); expect(v3.size).toEqual(a3.length); expect(v3.toArray()).toEqual(a3); } ); it('finds values using indexOf', () => { const v = List.of('a', 'b', 'c', 'b', 'a'); expect(v.indexOf('b')).toBe(1); expect(v.indexOf('c')).toBe(2); expect(v.indexOf('d')).toBe(-1); }); it('finds values using lastIndexOf', () => { const v = List.of('a', 'b', 'c', 'b', 'a'); expect(v.lastIndexOf('b')).toBe(3); expect(v.lastIndexOf('c')).toBe(2); expect(v.lastIndexOf('d')).toBe(-1); }); it('finds values using findIndex', () => { const v = List.of('a', 'b', 'c', 'B', 'a'); expect(v.findIndex(value => value.toUpperCase() === value)).toBe(3); expect(v.findIndex(value => value.length > 1)).toBe(-1); }); it('finds values using findEntry', () => { const v = List.of('a', 'b', 'c', 'B', 'a'); expect(v.findEntry(value => value.toUpperCase() === value)).toEqual([ 3, 'B', ]); expect(v.findEntry(value => value.length > 1)).toBe(undefined); }); it('maps values', () => { const v = List.of('a', 'b', 'c'); const r = v.map(value => value.toUpperCase()); expect(r.toArray()).toEqual(['A', 'B', 'C']); }); it('map no-ops return the same reference', () => { const v = List.of('a', 'b', 'c'); const r = v.map(value => value); expect(r).toBe(v); }); it('ensures iter is unmodified', () => { const v = List.of(1, 2, 3); const r = v.map((value, index, iter) => { return iter.get(index - 1); }); expect(r.toArray()).toEqual([3, 1, 2]); }); it('filters values', () => { const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); const r = v.filter((value, index) => index % 2 === 1); expect(r.toArray()).toEqual(['b', 'd', 'f']); }); it('partitions values', () => { const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); const r = v .partition((value, index) => index % 2 === 1) .map(part => part.toArray()); expect(r).toEqual([ ['a', 'c', 'e'], ['b', 'd', 'f'], ]); }); it('filters values based on type', () => { class A {} class B extends A { b(): void { return; } } class C extends A { c(): void { return; } } const l1 = List([new B(), new C(), new B(), new C()]); // tslint:disable-next-line:arrow-parens const l2: List = l1.filter((v): v is C => v instanceof C); expect(l2.size).toEqual(2); expect(l2.every(v => v instanceof C)).toBe(true); }); it('partitions values based on type', () => { class A {} class B extends A { b(): void { return; } } class C extends A { c(): void { return; } } const l1 = List([new B(), new C(), new B(), new C()]); // tslint:disable-next-line:arrow-parens const [la, lc]: [List, List] = l1.partition( (v): v is C => v instanceof C ); expect(la.size).toEqual(2); expect(la.some(v => v instanceof C)).toBe(false); expect(lc.size).toEqual(2); expect(lc.every(v => v instanceof C)).toBe(true); }); it('reduces values', () => { const v = List.of(1, 10, 100); const r = v.reduce((reduction, value) => reduction + value); expect(r).toEqual(111); const r2 = v.reduce((reduction, value) => reduction + value, 1000); expect(r2).toEqual(1111); }); it('reduces from the right', () => { const v = List.of('a', 'b', 'c'); const r = v.reduceRight((reduction, value) => reduction + value); expect(r).toEqual('cba'); const r2 = v.reduceRight((reduction, value) => reduction + value, 'x'); expect(r2).toEqual('xcba'); }); it('takes maximum number', () => { const v = List.of('a', 'b', 'c'); const r = v.take(Number.MAX_SAFE_INTEGER); expect(r).toBe(v); }); it('takes and skips values', () => { const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); const r = v.skip(2).take(2); expect(r.toArray()).toEqual(['c', 'd']); }); it('takes and skips no-ops return same reference', () => { const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); const r = v.skip(0).take(6); expect(r).toBe(v); }); it('takeLast and skipLast values', () => { const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); const r = v.skipLast(1).takeLast(2); expect(r.toArray()).toEqual(['d', 'e']); }); it('takeLast and skipLast no-ops return same reference', () => { const v = List.of('a', 'b', 'c', 'd', 'e', 'f'); const r = v.skipLast(0).takeLast(6); expect(r).toBe(v); }); it('efficiently chains array methods', () => { const v = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14); const r = v .filter(x => x % 2 === 0) .skip(2) .map(x => x * x) .take(3) .reduce((a: number, b: number) => a + b, 0); expect(r).toEqual(200); }); it('can convert to a map', () => { const v = List.of('a', 'b', 'c'); const m = v.toMap(); expect(m.size).toBe(3); expect(m.get(1)).toBe('b'); }); it('reverses', () => { const v = List.of('a', 'b', 'c'); expect(v.reverse().toArray()).toEqual(['c', 'b', 'a']); }); it('ensures equality', () => { // Make a sufficiently long list. const a = Array(100).join('abcdefghijklmnopqrstuvwxyz').split(''); const v1 = List(a); const v2 = List(a); // tslint:disable-next-line: triple-equals expect(v1 == v2).not.toBe(true); expect(v1 === v2).not.toBe(true); expect(v1.equals(v2)).toBe(true); }); it('works with insert', () => { const v = List.of('a', 'b', 'c'); const m = v.insert(1, 'd'); expect(m.size).toBe(4); expect(m.get(1)).toBe('d'); // Works when index is greater than size of array. const n = v.insert(10, 'e'); expect(n.size).toBe(4); expect(n.get(3)).toBe('e'); // Works when index is negative. const o = v.insert(-4, 'f'); expect(o.size).toBe(4); expect(o.get(0)).toBe('f'); }); // TODO: assert that findIndex only calls the function as much as it needs to. it('forEach iterates in the correct order', () => { let n = 0; const a: Array = []; const v = List.of(0, 1, 2, 3, 4); v.forEach(x => { a.push(x); n++; }); expect(n).toBe(5); expect(a.length).toBe(5); expect(a).toEqual([0, 1, 2, 3, 4]); }); it('forEach iteration terminates when callback returns false', () => { const a: Array = []; function count(x) { if (x > 2) { return false; } a.push(x); } const v = List.of(0, 1, 2, 3, 4); v.forEach(count); expect(a).toEqual([0, 1, 2]); }); it('concat works like Array.prototype.concat', () => { const v1 = List([1, 2, 3]); const v2 = v1.concat( 4, List([5, 6]), [7, 8], Seq([9, 10]), Set.of(11, 12), null as any ); expect(v1.toArray()).toEqual([1, 2, 3]); expect(v2.toArray()).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, null]); }); it('concat works like Array.prototype.concat even for IE11', () => { const v1 = List([1, 2, 3]); const a = [4]; // remove Symbol.iterator as IE11 does not handle it. // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator#browser_compatibility // @ts-expect-error -- simulate IE11 a[Symbol.iterator] = undefined; const v2 = v1.concat(a); expect(v1.toArray()).toEqual([1, 2, 3]); expect(v2.toArray()).toEqual([1, 2, 3, 4]); }); it('concat returns self when no changes', () => { const v1 = List([1, 2, 3]); expect(v1.concat([])).toBe(v1); }); it('concat returns arg when concat to empty', () => { const v1 = List([1, 2, 3]); expect(List().concat(v1)).toBe(v1); }); it('concats a single value', () => { const v1 = List([1, 2, 3]); expect(v1.concat(4)).toEqual(List([1, 2, 3, 4])); }); it('concat returns List-coerced arg when concat to empty', () => { expect(List().concat([1, 2, 3])).toEqual(List([1, 2, 3])); }); it('concat does not spread in string characters', () => { const v1 = List([1, 2, 3]); expect(v1.concat('abcdef')).toEqual(List([1, 2, 3, 'abcdef'])); }); it('allows chained mutations', () => { const v1 = List(); const v2 = v1.push(1); const v3 = v2.withMutations(v => v.push(2).push(3).push(4)); const v4 = v3.push(5); expect(v1.toArray()).toEqual([]); expect(v2.toArray()).toEqual([1]); expect(v3.toArray()).toEqual([1, 2, 3, 4]); expect(v4.toArray()).toEqual([1, 2, 3, 4, 5]); }); it('allows chained mutations using alternative API', () => { const v1 = List(); const v2 = v1.push(1); const v3 = v2.asMutable().push(2).push(3).push(4).asImmutable(); const v4 = v3.push(5); expect(v1.toArray()).toEqual([]); expect(v2.toArray()).toEqual([1]); expect(v3.toArray()).toEqual([1, 2, 3, 4]); expect(v4.toArray()).toEqual([1, 2, 3, 4, 5]); }); it('chained mutations does not result in new empty list instance', () => { const v1 = List(['x']); const v2 = v1.withMutations(v => v.push('y').pop().pop()); expect(v2).toBe(List()); }); it('calling `clear` and `setSize` should set all items to undefined', () => { const l = List(['a', 'b']); const l2 = l.clear().setSize(3); expect(l2.get(0)).toBeUndefined(); expect(l2.get(1)).toBeUndefined(); expect(l2.get(2)).toBeUndefined(); }); it('calling `clear` and `setSize` while mutating should set all items to undefined', () => { const l = List(['a', 'b']); const l2 = l.withMutations(innerList => { innerList.clear().setSize(3); }); expect(l2.get(0)).toBeUndefined(); expect(l2.get(1)).toBeUndefined(); expect(l2.get(2)).toBeUndefined(); }); it('allows size to be set', () => { const v1 = Range(0, 2000).toList(); const v2 = v1.setSize(1000); const v3 = v2.setSize(1500); expect(v1.size).toBe(2000); expect(v2.size).toBe(1000); expect(v3.size).toBe(1500); expect(v1.get(900)).toBe(900); expect(v1.get(1300)).toBe(1300); expect(v1.get(1800)).toBe(1800); expect(v2.get(900)).toBe(900); expect(v2.get(1300)).toBe(undefined); expect(v2.get(1800)).toBe(undefined); expect(v3.get(900)).toBe(900); expect(v3.get(1300)).toBe(undefined); expect(v3.get(1800)).toBe(undefined); }); it('discards truncated elements when using slice', () => { const list = [1, 2, 3, 4, 5, 6]; const v1 = fromJS(list) as List; const v2 = v1.slice(0, 3); const v3 = v2.setSize(6); expect(v2.toArray()).toEqual(list.slice(0, 3)); expect(v3.toArray()).toEqual( list.slice(0, 3).concat([undefined, undefined, undefined] as any) ); }); it('discards truncated elements when using setSize', () => { const list = [1, 2, 3, 4, 5, 6]; const v1 = fromJS(list) as List; const v2 = v1.setSize(3); const v3 = v2.setSize(6); expect(v2.toArray()).toEqual(list.slice(0, 3)); expect(v3.toArray()).toEqual( list.slice(0, 3).concat([undefined, undefined, undefined] as any) ); }); it('can be efficiently sliced', () => { const v1 = Range(0, 2000).toList(); const v2 = v1.slice(100, -100).toList(); const v3 = v2.slice(0, Infinity); expect(v1.size).toBe(2000); expect(v2.size).toBe(1800); expect(v3.size).toBe(1800); expect(v2.first()).toBe(100); expect(v2.rest().size).toBe(1799); expect(v2.last()).toBe(1899); expect(v2.butLast().size).toBe(1799); }); [NaN, Infinity, -Infinity].forEach(zeroishValue => { it(`treats ${zeroishValue} like zero when setting size`, () => { const v1 = List.of('a', 'b', 'c'); const v2 = v1.setSize(zeroishValue); expect(v2.size).toBe(0); }); }); it('Does not infinite loop when sliced with NaN #459', () => { const list = List([1, 2, 3, 4, 5]); const newList = list.slice(0, NaN); expect(newList.toJS()).toEqual([]); }); it('Accepts NaN for slice and concat #602', () => { const list = List().slice(0, NaN).concat(NaN); // toEqual([ NaN ]) expect(list.size).toBe(1); expect(isNaNValue(list.get(0))).toBe(true); }); // Note: NaN is the only value not equal to itself. The isNaN() built-in // function returns true for any non-numeric value, not just the NaN value. function isNaNValue(value) { return value !== value; } describe('when slicing', () => { [NaN, -Infinity].forEach(zeroishValue => { it(`considers a ${zeroishValue} begin argument to be zero`, () => { const v1 = List.of('a', 'b', 'c'); const v2 = v1.slice(zeroishValue, 3); expect(v2.size).toBe(3); }); it(`considers a ${zeroishValue} end argument to be zero`, () => { const v1 = List.of('a', 'b', 'c'); const v2 = v1.slice(0, zeroishValue); expect(v2.size).toBe(0); }); it(`considers ${zeroishValue} begin and end arguments to be zero`, () => { const v1 = List.of('a', 'b', 'c'); const v2 = v1.slice(zeroishValue, zeroishValue); expect(v2.size).toBe(0); }); }); }); describe('Iterator', () => { const pInt = gen.posInt; check.it('iterates through List', [pInt, pInt], (start, len) => { const l1 = Range(0, start + len).toList(); const l2: List = l1.slice(start, start + len); expect(l2.size).toBe(len); const valueIter = l2.values(); const keyIter = l2.keys(); const entryIter = l2.entries(); for (let ii = 0; ii < len; ii++) { expect(valueIter.next().value).toBe(start + ii); expect(keyIter.next().value).toBe(ii); expect(entryIter.next().value).toEqual([ii, start + ii]); } }); check.it('iterates through List in reverse', [pInt, pInt], (start, len) => { const l1 = Range(0, start + len).toList(); const l2: List = l1.slice(start, start + len); const s = l2.toSeq().reverse(); // impl calls List.__iterator(REVERSE) expect(s.size).toBe(len); const valueIter = s.values(); const keyIter = s.keys(); const entryIter = s.entries(); for (let ii = 0; ii < len; ii++) { expect(valueIter.next().value).toBe(start + len - 1 - ii); expect(keyIter.next().value).toBe(ii); expect(entryIter.next().value).toEqual([ii, start + len - 1 - ii]); } }); }); }); immutable-js-immutable-js-fa7d047/__tests__/ListJS.js000066400000000000000000000031131515165743500225660ustar00rootroot00000000000000// eslint-disable-next-line import/no-unresolved -- immutable is resolve by jest resolver import { List } from 'immutable'; const NON_NUMBERS = { array: ['not', 'a', 'number'], NaN: NaN, object: { not: 'a number' }, string: 'not a number', }; describe('List', () => { describe('setSize()', () => { Object.keys(NON_NUMBERS).forEach(type => { const nonNumber = NON_NUMBERS[type]; it(`considers a size argument of type '${type}' to be zero`, () => { const v1 = List.of(1, 2, 3); const v2 = v1.setSize(nonNumber); expect(v2.size).toBe(0); }); }); }); describe('slice()', () => { // Mimic the behavior of Array::slice() // http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.slice Object.keys(NON_NUMBERS).forEach(type => { const nonNumber = NON_NUMBERS[type]; it(`considers a begin argument of type '${type}' to be zero`, () => { const v1 = List.of('a', 'b', 'c'); const v2 = v1.slice(nonNumber, 2); expect(v2.size).toBe(2); expect(v2.first()).toBe('a'); expect(v2.rest().size).toBe(1); expect(v2.last()).toBe('b'); expect(v2.butLast().size).toBe(1); }); it(`considers an end argument of type '${type}' to be zero`, () => { const v1 = List.of('a', 'b', 'c'); const v2 = v1.slice(0, nonNumber); expect(v2.size).toBe(0); expect(v2.first()).toBe(undefined); expect(v2.rest().size).toBe(0); expect(v2.last()).toBe(undefined); expect(v2.butLast().size).toBe(0); }); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/Map.ts000066400000000000000000000375151515165743500221620ustar00rootroot00000000000000import { fromJS, is, List, Map, Range, Record, Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('Map', () => { it('converts from object', () => { const m = Map({ a: 'A', b: 'B', c: 'C' }); expect(m.size).toBe(3); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); }); it('converts from JS (global) Map', () => { const m = Map( new global.Map([ ['a', 'A'], ['b', 'B'], ['c', 'C'], ]) ); expect(Map.isMap(m)).toBe(true); expect(m.size).toBe(3); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); }); it('constructor provides initial values', () => { const m = Map({ a: 'A', b: 'B', c: 'C' }); expect(m.size).toBe(3); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); }); it('constructor provides initial values as array of entries', () => { const m = Map([ ['a', 'A'], ['b', 'B'], ['c', 'C'], ]); expect(m.size).toBe(3); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); }); it('constructor provides initial values as sequence', () => { const s = Seq({ a: 'A', b: 'B', c: 'C' }); const m = Map(s); expect(m.size).toBe(3); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); }); it('constructor provides initial values as list of lists', () => { const l = List([List(['a', 'A']), List(['b', 'B']), List(['c', 'C'])]); const m = Map(l); expect(m.size).toBe(3); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); }); it('constructor is identity when provided map', () => { const m1 = Map({ a: 'A', b: 'B', c: 'C' }); const m2 = Map(m1); expect(m2).toBe(m1); }); it('does not accept a scalar', () => { expect(() => { // TODO: should expect error Map(3); }).toThrow( 'Expected Array or collection object of [k, v] entries, or keyed object: 3' ); }); it('does not accept strings (collection, but scalar)', () => { expect(() => { // @ts-expect-error -- constructor does not accept strings, this is expected to throw Map('abc'); }).toThrow(); }); it('does not accept non-entries array', () => { expect(() => { // @ts-expect-error -- not an array of entries, this is expected to throw Map([1, 2, 3]); }).toThrow('Expected [K, V] tuple: 1'); }); it('accepts non-collection array-like objects as keyed collections', () => { const m = Map({ length: 3, 1: 'one' }); expect(m.get('length')).toBe(3); expect(m.get('1')).toBe('one'); expect(m.toJS()).toEqual({ length: 3, 1: 'one' }); }); it('accepts flattened pairs via of()', () => { const m: Map = Map.of(1, 'a', 2, 'b', 3, 'c'); expect(m.size).toBe(3); expect(m.get(1)).toBe('a'); expect(m.get(2)).toBe('b'); expect(m.get(3)).toBe('c'); }); it('does not accept mismatched flattened pairs via of()', () => { expect(() => { Map.of(1, 2, 3); }).toThrow('Missing value for key: 3'); }); it('converts back to JS object', () => { const m = Map({ a: 'A', b: 'B', c: 'C' }); expect(m.toObject()).toEqual({ a: 'A', b: 'B', c: 'C' }); }); it('iterates values', () => { const m = Map({ a: 'A', b: 'B', c: 'C' }); const iterator = jest.fn(); m.forEach(iterator); expect(iterator.mock.calls).toEqual([ ['A', 'a', m], ['B', 'b', m], ['C', 'c', m], ]); }); it('has the same iterator function for entries', () => { const m = Map({ a: 'A', b: 'B', c: 'C' }); expect(m[Symbol.iterator]).toBe(m.entries); }); it('merges two maps', () => { const m1 = Map({ a: 'A', b: 'B', c: 'C' }); const m2 = Map({ wow: 'OO', d: 'DD', b: 'BB' }); expect(m2.toObject()).toEqual({ wow: 'OO', d: 'DD', b: 'BB' }); const m3 = m1.merge(m2); expect(m3.toObject()).toEqual({ a: 'A', b: 'BB', c: 'C', wow: 'OO', d: 'DD', }); }); it('concatenates two maps (alias for merge)', () => { const m1 = Map({ a: 'A', b: 'B', c: 'C' }); const m2 = Map({ wow: 'OO', d: 'DD', b: 'BB' }); expect(m2.toObject()).toEqual({ wow: 'OO', d: 'DD', b: 'BB' }); const m3 = m1.concat(m2); expect(m3.toObject()).toEqual({ a: 'A', b: 'BB', c: 'C', wow: 'OO', d: 'DD', }); }); it('accepts null as a key', () => { const m1 = Map(); const m2 = m1.set(null, 'null'); const m3 = m2.remove(null); expect(m1.size).toBe(0); expect(m2.size).toBe(1); expect(m3.size).toBe(0); expect(m2.get(null)).toBe('null'); }); it('is persistent to sets', () => { const m1 = Map(); const m2 = m1.set('a', 'Aardvark'); const m3 = m2.set('b', 'Baboon'); const m4 = m3.set('c', 'Canary'); const m5 = m4.set('b', 'Bonobo'); expect(m1.size).toBe(0); expect(m2.size).toBe(1); expect(m3.size).toBe(2); expect(m4.size).toBe(3); expect(m5.size).toBe(3); expect(m3.get('b')).toBe('Baboon'); expect(m5.get('b')).toBe('Bonobo'); }); it('is persistent to deletes', () => { const m1 = Map(); const m2 = m1.set('a', 'Aardvark'); const m3 = m2.set('b', 'Baboon'); const m4 = m3.set('c', 'Canary'); const m5 = m4.remove('b'); expect(m1.size).toBe(0); expect(m2.size).toBe(1); expect(m3.size).toBe(2); expect(m4.size).toBe(3); expect(m5.size).toBe(2); expect(m3.has('b')).toBe(true); expect(m3.get('b')).toBe('Baboon'); expect(m5.has('b')).toBe(false); expect(m5.get('b')).toBe(undefined); expect(m5.get('c')).toBe('Canary'); }); check.it('deletes down to empty map', [gen.posInt], size => { let m = Range(0, size).toMap(); expect(m.size).toBe(size); for (let ii = size - 1; ii >= 0; ii--) { m = m.remove(ii); expect(m.size).toBe(ii); } expect(m).toBe(Map()); }); it('can map many items', () => { let m = Map(); for (let ii = 0; ii < 2000; ii++) { m = m.set('thing:' + ii, ii); } expect(m.size).toBe(2000); expect(m.get('thing:1234')).toBe(1234); }); it('can use weird keys', () => { const symbol = Symbol('A'); const m: Map = Map() .set(NaN, 1) .set(Infinity, 2) .set(symbol, 'A') .set(-Infinity, 3); expect(m.get(symbol)).toBe('A'); expect(m.get(NaN)).toBe(1); expect(m.get(Infinity)).toBe(2); expect(m.get(-Infinity)).toBe(3); }); it('can map items known to hash collide', () => { // make a big map, so it hashmaps let m: Map = Range(0, 32).toMap(); m = m.set('AAA', 'letters').set(64545, 'numbers'); expect(m.size).toBe(34); expect(m.get('AAA')).toEqual('letters'); expect(m.get(64545)).toEqual('numbers'); }); it('can progressively add items known to collide', () => { // make a big map, so it hashmaps let map: Map = Range(0, 32).toMap(); map = map.set('@', '@'); map = map.set(64, 64); map = map.set(96, 96); expect(map.size).toBe(35); expect(map.get('@')).toBe('@'); expect(map.get(64)).toBe(64); expect(map.get(96)).toBe(96); }); it('maps values', () => { const m = Map({ a: 'a', b: 'b', c: 'c' }); const r = m.map(value => value.toUpperCase()); expect(r.toObject()).toEqual({ a: 'A', b: 'B', c: 'C' }); }); it('maps keys', () => { const m = Map({ a: 'a', b: 'b', c: 'c' }); const r = m.mapKeys(key => key.toUpperCase()); expect(r.toObject()).toEqual({ A: 'a', B: 'b', C: 'c' }); }); it('maps no-ops return the same reference', () => { const m = Map({ a: 'a', b: 'b', c: 'c' }); const r = m.map(value => value); expect(r).toBe(m); }); it('provides unmodified original collection as 3rd iter argument', () => { const m = Map({ a: 1, b: 1 }); const r = m.map((value, key, iter) => { expect(iter).toEqual(m); return 2 * (iter.get(key) as number); }); expect(r.toObject()).toEqual({ a: 2, b: 2 }); }); it('filters values', () => { const m = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); const r = m.filter(value => value % 2 === 1); expect(r.toObject()).toEqual({ a: 1, c: 3, e: 5 }); }); it('filterNots values', () => { const m = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); const r = m.filterNot(value => value % 2 === 1); expect(r.toObject()).toEqual({ b: 2, d: 4, f: 6 }); }); it('partitions values', () => { const m = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); const r = m .partition(value => value % 2 === 1) .map(part => part.toObject()); expect(r).toEqual([ { b: 2, d: 4, f: 6 }, { a: 1, c: 3, e: 5 }, ]); }); it('derives keys', () => { const v = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); expect(v.keySeq().toArray()).toEqual(['a', 'b', 'c', 'd', 'e', 'f']); }); it('flips keys and values', () => { const v = Map({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }); expect(v.flip().toObject()).toEqual({ 1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', }); }); it('can convert to a list', () => { const m = Map({ a: 1, b: 2, c: 3 }); const v = m.toList(); const k = m.keySeq().toList(); expect(v.size).toBe(3); expect(k.size).toBe(3); // Note: Map has undefined ordering, this List may not be the same // order as the order you set into the Map. expect(v.get(1)).toBe(2); expect(k.get(1)).toBe('b'); }); check.it( 'works like an object', { maxSize: 50 }, [gen.object(gen.JSONPrimitive)], obj => { let map = Map(obj); Object.keys(obj).forEach(key => { expect(map.get(key)).toBe(obj[key]); expect(map.has(key)).toBe(true); }); Object.keys(obj).forEach(key => { expect(map.get(key)).toBe(obj[key]); expect(map.has(key)).toBe(true); map = map.remove(key); expect(map.get(key)).toBe(undefined); expect(map.has(key)).toBe(false); }); } ); check.it('sets', { maxSize: 5000 }, [gen.posInt], len => { let map = Map(); for (let ii = 0; ii < len; ii++) { expect(map.size).toBe(ii); map = map.set('' + ii, ii); } expect(map.size).toBe(len); expect(is(map.toSet(), Range(0, len).toSet())).toBe(true); }); check.it('has and get', { maxSize: 5000 }, [gen.posInt], len => { const map = Range(0, len) .toKeyedSeq() .mapKeys(x => '' + x) .toMap(); for (let ii = 0; ii < len; ii++) { expect(map.get('' + ii)).toBe(ii); expect(map.has('' + ii)).toBe(true); } }); check.it('deletes', { maxSize: 5000 }, [gen.posInt], len => { let map = Range(0, len).toMap(); for (let ii = 0; ii < len; ii++) { expect(map.size).toBe(len - ii); map = map.remove(ii); } expect(map.size).toBe(0); expect(map.toObject()).toEqual({}); }); check.it('deletes from transient', { maxSize: 5000 }, [gen.posInt], len => { const map = Range(0, len).toMap().asMutable(); for (let ii = 0; ii < len; ii++) { expect(map.size).toBe(len - ii); map.remove(ii); } expect(map.size).toBe(0); expect(map.toObject()).toEqual({}); }); check.it('iterates through all entries', [gen.posInt], len => { const v = Range(0, len).toMap(); const a = v.toArray(); const iter = v.entries(); for (let ii = 0; ii < len; ii++) { delete a[iter.next().value[0]]; } expect(a).toEqual(new Array(len)); }); it('allows chained mutations', () => { const m1 = Map(); const m2 = m1.set('a', 1); const m3 = m2.withMutations(m => m.set('b', 2).set('c', 3)); const m4 = m3.set('d', 4); expect(m1.toObject()).toEqual({}); expect(m2.toObject()).toEqual({ a: 1 }); expect(m3.toObject()).toEqual({ a: 1, b: 2, c: 3 }); expect(m4.toObject()).toEqual({ a: 1, b: 2, c: 3, d: 4 }); }); it('chained mutations does not result in new empty map instance', () => { const v1 = Map({ x: 1 }); const v2 = v1.withMutations(v => v.set('y', 2).delete('x').delete('y')); expect(v2).toBe(Map()); }); it('expresses value equality with unordered sequences', () => { const m1 = Map({ A: 1, B: 2, C: 3 }); const m2 = Map({ C: 3, B: 2, A: 1 }); expect(is(m1, m2)).toBe(true); }); it('does not equal Record with same values', () => { const m1 = Map({ A: 1, B: 2, C: 3 }); const m2 = Record({ A: 1, B: 2, C: 3 }); expect(is(m1, m2)).toBe(false); }); it('deletes all the provided keys', () => { const NOT_SET = undefined; const m1 = Map({ A: 1, B: 2, C: 3 }); const m2 = m1.deleteAll(['A', 'B']); expect(m2.get('A')).toBe(NOT_SET); expect(m2.get('B')).toBe(NOT_SET); expect(m2.get('C')).toBe(3); expect(m2.size).toBe(1); }); it('remains unchanged when no keys are provided', () => { const m1 = Map({ A: 1, B: 2, C: 3 }); const m2 = m1.deleteAll([]); expect(m1).toBe(m2); }); it('uses toString on keys and values', () => { class A extends Record({ x: null as number | null }) { toString() { return this.x; } } const r = new A({ x: 2 }); const map = Map([[r, r]]); expect(map.toString()).toEqual('Map { 2: 2 }'); }); it('supports Symbols as tuple keys', () => { const a = Symbol('a'); const b = Symbol('b'); const c = Symbol('c'); const m = Map([ [a, 'a'], [b, 'b'], [c, 'c'], ]); expect(m.size).toBe(3); expect(m.get(a)).toBe('a'); expect(m.get(b)).toBe('b'); expect(m.get(c)).toBe('c'); }); it('supports Symbols as object constructor keys', () => { const a = Symbol.for('a'); const b = Symbol('b'); const c = Symbol('c'); const m = Map({ [a]: 'a', [b]: 'b', [c]: 'c', }); expect(m.size).toBe(3); expect(m.get(a)).toBe('a'); expect(m.get(b)).toBe('b'); expect(m.get(c)).toBe('c'); const m2 = fromJS({ [a]: 'a' }) as Map; expect(m2.size).toBe(1); expect(m2.get(a)).toBe('a'); }); it('Symbol keys are unique', () => { const a = Symbol('FooBar'); const b = Symbol('FooBar'); const m = Map([ [a, 'FizBuz'], [b, 'FooBar'], ]); expect(m.size).toBe(2); expect(m.get(a)).toBe('FizBuz'); expect(m.get(b)).toBe('FooBar'); }); it('mergeDeep with tuple Symbol keys', () => { const a = Symbol('a'); const b = Symbol('b'); const c = Symbol('c'); const d = Symbol('d'); const e = Symbol('e'); const f = Symbol('f'); const g = Symbol('g'); // Note the use of nested Map constructors, Map() does not do a // deep conversion! const m1 = Map([ [ a, Map([ [ b, Map([ [c, 1], [d, 2], ]), ], ]), ], ]); const m2 = Map([ [ a, Map([ [ b, Map([ [c, 10], [e, 20], [f, 30], [g, 40], ]), ], ]), ], ]); const merged = m1.mergeDeep(m2); expect(merged).toEqual( Map([ [ a, Map([ [ b, Map([ [c, 10], [d, 2], [e, 20], [f, 30], [g, 40], ]), ], ]), ], ]) ); }); it('toJS / toObject are not sensible to prototype pollution', () => { type User = { user: string; admin?: boolean }; // @ts-expect-error -- intentionally setting __proto__ to test prototype pollution const m = Map({ user: 'alice' }).set('__proto__', { admin: true }); expect(m.toObject().admin).toBeUndefined(); expect(m.toJS().admin).toBeUndefined(); }); }); immutable-js-immutable-js-fa7d047/__tests__/MultiRequire.js000066400000000000000000000047111515165743500240520ustar00rootroot00000000000000const Immutable1 = require('../src/Immutable'); jest.resetModules(); const Immutable2 = require('../src/Immutable'); describe('MultiRequire', () => { it.skip('might require two different instances of Immutable', () => { expect(Immutable1).not.toBe(Immutable2); expect(Immutable1.Map({ a: 1 }).toJS()).toEqual({ a: 1 }); expect(Immutable2.Map({ a: 1 }).toJS()).toEqual({ a: 1 }); }); it('detects sequences', () => { const x = Immutable1.Map({ a: 1 }); const y = Immutable2.Map({ a: 1 }); expect(Immutable1.isCollection(y)).toBe(true); expect(Immutable2.isCollection(x)).toBe(true); }); it('detects records', () => { const R1 = Immutable1.Record({ a: 1 }); const R2 = Immutable2.Record({ a: 1 }); expect(Immutable1.Record.isRecord(R2())).toBe(true); expect(Immutable2.Record.isRecord(R1())).toBe(true); }); it('converts to JS when inter-nested', () => { const deep = Immutable1.Map({ a: 1, b: 2, c: Immutable2.Map({ x: 3, y: 4, z: Immutable1.Map(), }), }); expect(deep.toJS()).toEqual({ a: 1, b: 2, c: { x: 3, y: 4, z: {}, }, }); }); it('compares for equality', () => { const x = Immutable1.Map({ a: 1 }); const y = Immutable2.Map({ a: 1 }); expect(Immutable1.is(x, y)).toBe(true); expect(Immutable2.is(x, y)).toBe(true); }); it('flattens nested values', () => { const nested = Immutable1.List( Immutable2.List(Immutable1.List(Immutable2.List.of(1, 2))) ); expect(nested.flatten().toJS()).toEqual([1, 2]); }); it('detects types', () => { let c1 = Immutable1.Map(); let c2 = Immutable2.Map(); expect(Immutable1.Map.isMap(c2)).toBe(true); expect(Immutable2.Map.isMap(c1)).toBe(true); c1 = Immutable1.OrderedMap(); c2 = Immutable2.OrderedMap(); expect(Immutable1.OrderedMap.isOrderedMap(c2)).toBe(true); expect(Immutable2.OrderedMap.isOrderedMap(c1)).toBe(true); c1 = Immutable1.List(); c2 = Immutable2.List(); expect(Immutable1.List.isList(c2)).toBe(true); expect(Immutable2.List.isList(c1)).toBe(true); c1 = Immutable1.Stack(); c2 = Immutable2.Stack(); expect(Immutable1.Stack.isStack(c2)).toBe(true); expect(Immutable2.Stack.isStack(c1)).toBe(true); c1 = Immutable1.Set(); c2 = Immutable2.Set(); expect(Immutable1.Set.isSet(c2)).toBe(true); expect(Immutable2.Set.isSet(c1)).toBe(true); }); }); immutable-js-immutable-js-fa7d047/__tests__/ObjectSeq.ts000066400000000000000000000032171515165743500233140ustar00rootroot00000000000000import { Seq } from 'immutable'; describe('ObjectSequence', () => { it('maps', () => { const i = Seq({ a: 'A', b: 'B', c: 'C' }); const m = i.map(x => x + x).toObject(); expect(m).toEqual({ a: 'AA', b: 'BB', c: 'CC' }); }); it('reduces', () => { const i = Seq({ a: 'A', b: 'B', c: 'C' }); const r = i.reduce((acc, x) => acc + x, ''); expect(r).toEqual('ABC'); }); it('extracts keys', () => { const i = Seq({ a: 'A', b: 'B', c: 'C' }); const k = i.keySeq().toArray(); expect(k).toEqual(['a', 'b', 'c']); }); it('is reversable', () => { const i = Seq({ a: 'A', b: 'B', c: 'C' }); const k = i.reverse().toArray(); expect(k).toEqual([ ['c', 'C'], ['b', 'B'], ['a', 'A'], ]); }); it('is double reversable', () => { const i = Seq({ a: 'A', b: 'B', c: 'C' }); const k = i.reverse().reverse().toArray(); expect(k).toEqual([ ['a', 'A'], ['b', 'B'], ['c', 'C'], ]); }); it('can be iterated', () => { const obj = { a: 1, b: 2, c: 3 }; const seq = Seq(obj); const entries = seq.entries(); expect(entries.next()).toEqual({ value: ['a', 1], done: false }); expect(entries.next()).toEqual({ value: ['b', 2], done: false }); expect(entries.next()).toEqual({ value: ['c', 3], done: false }); expect(entries.next()).toEqual({ value: undefined, done: true }); }); it('cannot be mutated after calling toObject', () => { const seq = Seq({ a: 1, b: 2, c: 3 }); const obj = seq.toObject(); obj.c = 10; const seq2 = Seq(obj); expect(seq.get('c')).toEqual(3); expect(seq2.get('c')).toEqual(10); }); }); immutable-js-immutable-js-fa7d047/__tests__/OrderedMap.ts000066400000000000000000000072261515165743500234630ustar00rootroot00000000000000import { OrderedMap, Range, Seq } from 'immutable'; describe('OrderedMap', () => { it('converts from object', () => { const m = OrderedMap({ c: 'C', b: 'B', a: 'A' }); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); expect(m.toArray()).toEqual([ ['c', 'C'], ['b', 'B'], ['a', 'A'], ]); }); it('constructor provides initial values', () => { const m = OrderedMap({ a: 'A', b: 'B', c: 'C' }); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); expect(m.size).toBe(3); expect(m.toArray()).toEqual([ ['a', 'A'], ['b', 'B'], ['c', 'C'], ]); }); it('provides initial values in a mixed order', () => { const m = OrderedMap({ c: 'C', b: 'B', a: 'A' }); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); expect(m.size).toBe(3); expect(m.toArray()).toEqual([ ['c', 'C'], ['b', 'B'], ['a', 'A'], ]); }); it('constructor accepts sequences', () => { const s = Seq({ c: 'C', b: 'B', a: 'A' }); const m = OrderedMap(s); expect(m.get('a')).toBe('A'); expect(m.get('b')).toBe('B'); expect(m.get('c')).toBe('C'); expect(m.size).toBe(3); expect(m.toArray()).toEqual([ ['c', 'C'], ['b', 'B'], ['a', 'A'], ]); }); it('maintains order when new keys are set', () => { const m = OrderedMap() .set('A', 'aardvark') .set('Z', 'zebra') .set('A', 'antelope'); expect(m.size).toBe(2); expect(m.toArray()).toEqual([ ['A', 'antelope'], ['Z', 'zebra'], ]); }); it('resets order when a keys is deleted', () => { const m = OrderedMap() .set('A', 'aardvark') .set('Z', 'zebra') .remove('A') .set('A', 'antelope'); expect(m.size).toBe(2); expect(m.toArray()).toEqual([ ['Z', 'zebra'], ['A', 'antelope'], ]); }); it('removes correctly', () => { const m = OrderedMap({ A: 'aardvark', Z: 'zebra', }).remove('A'); expect(m.size).toBe(1); expect(m.get('A')).toBe(undefined); expect(m.get('Z')).toBe('zebra'); }); it('respects order for equality', () => { const m1 = OrderedMap().set('A', 'aardvark').set('Z', 'zebra'); const m2 = OrderedMap().set('Z', 'zebra').set('A', 'aardvark'); expect(m1.equals(m2)).toBe(false); expect(m1.equals(m2.reverse())).toBe(true); }); it('respects order when merging', () => { const m1 = OrderedMap({ A: 'apple', B: 'banana', C: 'coconut' }); const m2 = OrderedMap({ C: 'chocolate', B: 'butter', D: 'donut' }); expect(m1.merge(m2).entrySeq().toArray()).toEqual([ ['A', 'apple'], ['B', 'butter'], ['C', 'chocolate'], ['D', 'donut'], ]); expect(m2.merge(m1).entrySeq().toArray()).toEqual([ ['C', 'coconut'], ['B', 'banana'], ['D', 'donut'], ['A', 'apple'], ]); }); it('performs deleteAll correctly after resizing internal list', () => { // See condition for resizing internal list here: // https://github.com/immutable-js/immutable-js/blob/91c7c1e82ec616804768f968cc585565e855c8fd/src/OrderedMap.js#L138 // Create OrderedMap greater than or equal to SIZE (currently 32) const SIZE = 32; let map = OrderedMap(Range(0, SIZE).map(key => [key, 0])); // Delete half of the keys so that internal list is twice the size of internal map const keysToDelete = Range(0, SIZE / 2); map = map.deleteAll(keysToDelete); // Delete one more key to trigger resizing map = map.deleteAll([SIZE / 2]); expect(map.size).toBe(SIZE / 2 - 1); }); }); immutable-js-immutable-js-fa7d047/__tests__/OrderedSet.ts000066400000000000000000000077111515165743500235000ustar00rootroot00000000000000import { OrderedSet, Map } from 'immutable'; describe('OrderedSet', () => { it('provides initial values in a mixed order', () => { const s = OrderedSet.of('C', 'B', 'A'); expect(s.has('A')).toBe(true); expect(s.has('B')).toBe(true); expect(s.has('C')).toBe(true); expect(s.size).toBe(3); expect(s.toArray()).toEqual(['C', 'B', 'A']); }); it('maintains order when new values are added', () => { const s = OrderedSet().add('A').add('Z').add('A'); expect(s.size).toBe(2); expect(s.toArray()).toEqual(['A', 'Z']); }); it('resets order when a value is deleted', () => { const s = OrderedSet().add('A').add('Z').remove('A').add('A'); expect(s.size).toBe(2); expect(s.toArray()).toEqual(['Z', 'A']); }); it('removes correctly', () => { const s = OrderedSet(['A', 'Z']).remove('A'); expect(s.size).toBe(1); expect(s.has('A')).toBe(false); expect(s.has('Z')).toBe(true); }); it('respects order for equality', () => { const s1 = OrderedSet.of('A', 'Z'); const s2 = OrderedSet.of('Z', 'A'); expect(s1.equals(s2)).toBe(false); expect(s1.equals(s2.reverse())).toBe(true); }); it('respects order when unioning', () => { const s1 = OrderedSet.of('A', 'B', 'C'); const s2 = OrderedSet.of('C', 'B', 'D'); expect(s1.union(s2).toArray()).toEqual(['A', 'B', 'C', 'D']); expect(s2.union(s1).toArray()).toEqual(['C', 'B', 'D', 'A']); }); it('can be zipped', () => { const s1 = OrderedSet.of('A', 'B', 'C'); const s2 = OrderedSet.of('C', 'B', 'D'); expect(s1.zip(s2).toArray()).toEqual([ ['A', 'C'], ['B', 'B'], ['C', 'D'], ]); expect(s1.zipWith((c1, c2) => c1 + c2, s2).toArray()).toEqual([ 'AC', 'BB', 'CD', ]); }); /** * @see https://github.com/immutable-js/immutable-js/issues/1716 */ it('handles `subtract` when Set contains >=32 elements', () => { const fillArray = nb => Array(nb) .fill(1) .map((el, i) => i + 1); const capacity = 32; // items from keys 0 to 31 and values 1 to 32 const defaultItems = fillArray(capacity); const allItems = OrderedSet(defaultItems); const partialCapacity = Math.ceil(capacity / 2) + 1; const someOfThem = fillArray(partialCapacity); expect(someOfThem.length).toBe(17); const existingItems = OrderedSet(someOfThem).intersect(allItems); expect(allItems.subtract(existingItems).size).toBe(15); expect(allItems.subtract(existingItems).size + someOfThem.length).toBe(32); }); /** * @see https://github.com/immutable-js/immutable-js/issues/1603 */ it('handles consecutive `subtract` invocations', () => { let a = OrderedSet(); let b = OrderedSet(); let c; let d; // Set a to 0-45 for (let i = 0; i < 46; i++) { a = a.add(i); } // Set b to 0-24 for (let i = 0; i < 25; i++) { b = b.add(i); } // Set c to 0-23 c = b.butLast(); // Set d to 0-22 d = c.butLast(); // Internal list resizing happens on the final `subtract` when subtracting d from a const aNotB = a.subtract(b); const aNotC = a.subtract(c); const aNotD = a.subtract(d); expect(aNotB.size).toBe(21); expect(aNotC.size).toBe(22); expect(aNotD.size).toBe(23); }); it('keeps the Set ordered when updating a value with .map()', () => { const first = Map({ id: 1, valid: true }); const second = Map({ id: 2, valid: true }); const third = Map({ id: 3, valid: true }); const initial = OrderedSet([first, second, third]); const out = initial.map(t => { if (2 === t.get('id')) { return t.set('valid', false); } return t; }); const expected = OrderedSet([ Map({ id: 1, valid: true }), Map({ id: 2, valid: false }), Map({ id: 3, valid: true }), ]); expect(out).toEqual(expected); expect(out.has(first)).toBe(true); expect(out.has(second)).toBe(false); expect(out.has(third)).toBe(true); }); }); immutable-js-immutable-js-fa7d047/__tests__/Predicates.ts000066400000000000000000000030071515165743500235150ustar00rootroot00000000000000import { is, isImmutable, isValueObject, List, Map, Set, Stack, } from 'immutable'; describe('isImmutable', () => { it('behaves as advertised', () => { expect(isImmutable([])).toBe(false); expect(isImmutable({})).toBe(false); expect(isImmutable(Map())).toBe(true); expect(isImmutable(List())).toBe(true); expect(isImmutable(Set())).toBe(true); expect(isImmutable(Stack())).toBe(true); expect(isImmutable(Map().asMutable())).toBe(true); }); }); describe('isValueObject', () => { it('behaves as advertised', () => { expect(isValueObject(null)).toBe(false); expect(isValueObject(123)).toBe(false); expect(isValueObject('abc')).toBe(false); expect(isValueObject([])).toBe(false); expect(isValueObject({})).toBe(false); expect(isValueObject(Map())).toBe(true); expect(isValueObject(List())).toBe(true); expect(isValueObject(Set())).toBe(true); expect(isValueObject(Stack())).toBe(true); expect(isValueObject(Map().asMutable())).toBe(true); }); it('works on custom types', () => { class MyValueType { v: any; constructor(val) { this.v = val; } equals(other) { return Boolean(other && this.v === other.v); } hashCode() { return this.v; } } expect(isValueObject(new MyValueType(123))).toBe(true); expect(is(new MyValueType(123), new MyValueType(123))).toBe(true); expect(Set().add(new MyValueType(123)).add(new MyValueType(123)).size).toBe( 1 ); }); }); immutable-js-immutable-js-fa7d047/__tests__/Range.ts000066400000000000000000000125111515165743500224660ustar00rootroot00000000000000import { Range } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('Range', () => { it('fixed range', () => { const v = Range(0, 3); expect(v.size).toBe(3); expect(v.first()).toBe(0); expect(v.rest().toArray()).toEqual([1, 2]); expect(v.last()).toBe(2); expect(v.butLast().toArray()).toEqual([0, 1]); expect(v.toArray()).toEqual([0, 1, 2]); }); it('stepped range', () => { const v = Range(1, 10, 3); expect(v.size).toBe(3); expect(v.first()).toBe(1); expect(v.rest().toArray()).toEqual([4, 7]); expect(v.last()).toBe(7); expect(v.butLast().toArray()).toEqual([1, 4]); expect(v.toArray()).toEqual([1, 4, 7]); }); it('open range', () => { const v = Range(10); expect(v.size).toBe(Infinity); expect(v.first()).toBe(10); expect(v.rest().first()).toBe(11); expect(v.last()).toBe(Infinity); expect(v.butLast().first()).toBe(10); expect(v.butLast().last()).toBe(Infinity); expect(() => v.rest().toArray()).toThrow( 'Cannot perform this action with an infinite size.' ); expect(() => v.butLast().toArray()).toThrow( 'Cannot perform this action with an infinite size.' ); expect(() => v.toArray()).toThrow( 'Cannot perform this action with an infinite size.' ); }); it('backwards range', () => { const v = Range(10, 1, 3); expect(v.size).toBe(3); expect(v.first()).toBe(10); expect(v.last()).toBe(4); expect(v.toArray()).toEqual([10, 7, 4]); }); it('empty range', () => { const v = Range(10, 10); expect(v.size).toBe(0); expect(v.first()).toBe(undefined); expect(v.rest().toArray()).toEqual([]); expect(v.last()).toBe(undefined); expect(v.butLast().toArray()).toEqual([]); expect(v.toArray()).toEqual([]); }); check.it('includes first, excludes last', [gen.int, gen.int], (from, to) => { const isIncreasing = to >= from; const size = isIncreasing ? to - from : from - to; const r = Range(from, to); const a = r.toArray(); expect(r.size).toBe(size); expect(a.length).toBe(size); expect(r.get(0)).toBe(size ? from : undefined); expect(a[0]).toBe(size ? from : undefined); const last = to + (isIncreasing ? -1 : 1); expect(r.last()).toBe(size ? last : undefined); if (size) { expect(a[a.length - 1]).toBe(last); } }); const shrinkInt = gen.int.alwaysShrink(); check.it( 'slices the same as array slices', [shrinkInt, shrinkInt, shrinkInt, shrinkInt], (from, to, begin, end) => { const r = Range(from, to); const a = r.toArray(); expect(r.slice(begin, end).toArray()).toEqual(a.slice(begin, end)); } ); it('slices range', () => { const v = Range(1, 11, 2); const s = v.slice(1, -2); expect(s.size).toBe(2); expect(s.toArray()).toEqual([3, 5]); }); it('empty slice of range', () => { const v = Range(1, 11, 2); const s = v.slice(100, 200); expect(s.size).toBe(0); expect(s.toArray()).toEqual([]); }); it('slices empty range', () => { const v = Range(10, 10); const s = v.slice(1, -2); expect(s.size).toBe(0); expect(s.toArray()).toEqual([]); }); it('stepped range does not land on end', () => { const v = Range(0, 7, 2); expect(v.size).toBe(4); expect(v.toArray()).toEqual([0, 2, 4, 6]); }); it('can be float', () => { const v = Range(0.5, 2.5, 0.5); expect(v.size).toBe(4); expect(v.toArray()).toEqual([0.5, 1, 1.5, 2]); }); it('can be negative', () => { const v = Range(10, -10, 5); expect(v.size).toBe(4); expect(v.toArray()).toEqual([10, 5, 0, -5]); }); it('can get from any index in O(1)', () => { const v = Range(0, Infinity, 8); expect(v.get(111)).toBe(888); }); it('can find an index in O(1)', () => { const v = Range(0, Infinity, 8); expect(v.indexOf(888)).toBe(111); }); it('maps values', () => { const r = Range(0, 4).map(v => v * v); expect(r.toArray()).toEqual([0, 1, 4, 9]); }); it('filters values', () => { const r = Range(0, 10).filter(v => v % 2 === 0); expect(r.toArray()).toEqual([0, 2, 4, 6, 8]); }); it('partitions values', () => { const r = Range(0, 10) .partition(v => v % 2 === 0) .map(part => part.toArray()); expect(r).toEqual([ [1, 3, 5, 7, 9], [0, 2, 4, 6, 8], ]); }); it('reduces values', () => { const v = Range(0, 10, 2); const r = v.reduce((a, b) => a + b, 0); expect(r).toEqual(20); }); it('takes and skips values', () => { const v = Range(0, 100, 3); const r = v.skip(2).take(2); expect(r.toArray()).toEqual([6, 9]); }); it('can describe lazy operations', () => { expect( Range(1, Infinity) .map(n => -n) .take(5) .toArray() ).toEqual([-1, -2, -3, -4, -5]); }); it('efficiently chains array methods', () => { const v = Range(1, Infinity); const r = v .filter(x => x % 2 === 0) .skip(2) .map(x => x * x) .take(3) .reduce((a, b) => a + b, 0); expect(r).toEqual(200); }); it('sliced sequence works even on filtered sequence', () => { expect(Range(0, 3).slice(-2).toArray()).toEqual([1, 2]); expect( Range(0, 3) .filter($ => true) .slice(-2) .toArray() ).toEqual([1, 2]); }); }); immutable-js-immutable-js-fa7d047/__tests__/Record.ts000066400000000000000000000213401515165743500226500ustar00rootroot00000000000000import { isKeyed, List, Map, Record, Seq } from 'immutable'; describe('Record', () => { it('defines a constructor', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); const t1 = MyType(); const t2 = t1.set('a', 10); expect(t1 instanceof Record).toBe(true); expect(t1 instanceof MyType).toBe(true); expect(t2 instanceof Record).toBe(true); expect(t2 instanceof MyType).toBe(true); expect(t1.get('a')).toBe(1); expect(t2.get('a')).toBe(10); }); it('allows for a descriptive name', () => { const Person = Record({ name: null as string | null }, 'Person'); const me = Person({ name: 'My Name' }); expect(me.toString()).toEqual('Person { name: "My Name" }'); expect(Record.getDescriptiveName(me)).toEqual('Person'); expect(Person.displayName).toBe('Person'); }); it('passes through records of the same type', () => { const P2 = Record({ x: 0, y: 0 }); const P3 = Record({ x: 0, y: 0, z: 0 }); const p2 = P2(); const p3 = P3(); expect(P3(p2) instanceof P3).toBe(true); expect(P2(p3) instanceof P2).toBe(true); expect(P2(p2)).toBe(p2); expect(P3(p3)).toBe(p3); }); it('setting an unknown key is a no-op', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); const t1 = MyType({ a: 10, b: 20 }); // @ts-expect-error const t2 = t1.set('d', 4); expect(t2).toBe(t1); }); it('falls back to default values when deleted or cleared', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); const t1 = MyType({ a: 10, b: 20 }); const t2 = MyType({ b: 20 }); const t3 = t1.delete('a'); const t4 = t3.clear(); expect(t1.get('a')).toBe(10); expect(t2.get('a')).toBe(1); expect(t3.get('a')).toBe(1); expect(t4.get('b')).toBe(2); expect(t2.equals(t3)).toBe(true); expect(t2.equals(t4)).toBe(false); expect(t4.equals(MyType())).toBe(true); }); it('allows deletion of values deep within a tree', () => { const AType = Record({ a: 1 }); const BType = Record({ b: AType({ a: 2 }) }); const t1 = BType(); const t2 = t1.deleteIn(['b', 'a']); expect(t1.get('b').get('a')).toBe(2); expect(t2.get('b').get('a')).toBe(1); }); it('is a value type and equals other similar Records', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); const t1 = MyType({ a: 10 }); const t2 = MyType({ a: 10, b: 2 }); expect(t1.equals(t2)); }); it('if compared against undefined or null should return false', () => { const MyType = Record({ a: 1, b: 2 }); const t1 = MyType(); expect(t1.equals(undefined)).toBeFalsy(); expect(t1.equals(null)).toBeFalsy(); }); it('if compared against Map should return false', () => { const MyType = Record({ a: 1, b: 2 }); const t1 = MyType(); expect(t1.equals(Map({ a: 1, b: 2 }))).toBeFalsy(); }); it('merges in Objects and other Records', () => { const Point2 = Record({ x: 0, y: 0 }); const Point3 = Record({ x: 0, y: 0, z: 0 }); const p2 = Point2({ x: 20, y: 20 }); const p3 = Point3({ x: 10, y: 10, z: 10 }); expect(p3.merge(p2).toObject()).toEqual({ x: 20, y: 20, z: 10 }); expect(p2.merge({ y: 30 }).toObject()).toEqual({ x: 20, y: 30 }); expect(p3.merge({ y: 30, z: 30 }).toObject()).toEqual({ x: 10, y: 30, z: 30, }); }); it('converts sequences to records', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); const seq = Seq({ a: 10, b: 20 }); const t = MyType(seq); expect(t.toObject()).toEqual({ a: 10, b: 20, c: 3 }); }); it('allows for functional construction', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); const seq = Seq({ a: 10, b: 20 }); const t = MyType(seq); expect(t.toObject()).toEqual({ a: 10, b: 20, c: 3 }); }); it('skips unknown keys', () => { const MyType = Record({ a: 1, b: 2 }); const seq = Seq({ b: 20, c: 30 }); const t = MyType(seq); expect(t.get('a')).toEqual(1); expect(t.get('b')).toEqual(20); // @ts-expect-error expect(t.get('c')).toBeUndefined(); }); it('returns itself when setting identical values', () => { const MyType = Record({ a: 1, b: 2 }); const t1 = MyType(); const t2 = MyType({ a: 1 }); const t3 = t1.set('a', 1); const t4 = t2.set('a', 1); expect(t3).toBe(t1); expect(t4).toBe(t2); }); it('returns record when setting values', () => { const MyType = Record({ a: 1, b: 2 }); const t1 = MyType(); const t2 = MyType({ a: 1 }); const t3 = t1.set('a', 3); const t4 = t2.set('a', 3); expect(t3).not.toBe(t1); expect(t4).not.toBe(t2); }); it('allows for readonly property access', () => { const MyType = Record({ a: 1, b: 'foo' }); const t1 = MyType(); const a: number = t1.a; const b: string = t1.b; expect(a).toEqual(1); expect(b).toEqual('foo'); // @ts-expect-error expect(() => (t1.a = 2)).toThrow('Cannot set on an immutable record.'); }); it('allows for class extension', () => { class ABClass extends Record({ a: 1, b: 2 }) { setA(aVal: number) { return this.set('a', aVal); } setB(bVal: number) { return this.set('b', bVal); } } // Note: `new` is only used because of `class` const t1 = new ABClass({ a: 1 }); const t2 = t1.setA(3); const t3 = t2.setB(10); const a: number = t3.a; expect(a).toEqual(3); expect(t3.toObject()).toEqual({ a: 3, b: 10 }); }); it('does not allow overwriting property names', () => { // tslint:disable:no-console const realWarn = console.warn; try { const warnings: Array = []; console.warn = w => warnings.push(w); // size is a safe key to use const MyType1 = Record({ size: 123 }); const t1 = MyType1(); expect(warnings.length).toBe(0); expect(t1.size).toBe(123); // get() is not safe to use const MyType2 = Record({ get: 0 }); const t2 = MyType2(); expect(warnings.length).toBe(1); expect(warnings[0]).toBe( 'Cannot define Record with property "get" since that property name is part of the Record API.' ); } finally { console.warn = realWarn; } }); it('can be converted to a keyed sequence', () => { const MyType = Record({ a: 0, b: 0 }); const t1 = MyType({ a: 10, b: 20 }); const seq1 = t1.toSeq(); expect(isKeyed(seq1)).toBe(true); expect(seq1.toJS()).toEqual({ a: 10, b: 20 }); const seq2 = Seq(t1); expect(isKeyed(seq2)).toBe(true); expect(seq2.toJS()).toEqual({ a: 10, b: 20 }); const seq3 = Seq.Keyed(t1); expect(isKeyed(seq3)).toBe(true); expect(seq3.toJS()).toEqual({ a: 10, b: 20 }); const seq4 = Seq.Indexed(t1); expect(isKeyed(seq4)).toBe(false); expect(seq4.toJS()).toEqual([ ['a', 10], ['b', 20], ]); }); it('can be iterated over', () => { const MyType = Record({ a: 0, b: 0 }); const t1 = MyType({ a: 10, b: 20 }); const entries: Array = []; for (const entry of t1) { entries.push(entry); } expect(entries).toEqual([ ['a', 10], ['b', 20], ]); }); it('calling `equals` between two instance of factories with same properties and same value should return true', () => { const factoryA = Record({ id: '' }); const factoryB = Record({ id: '' }); expect(factoryA().equals(factoryA())).toBe(true); expect(factoryA().equals(factoryB())).toBe(true); }); /** * @see https://github.com/immutable-js/immutable-js/issues/1565 */ it('check that reset does reset the record.', () => { type UserType = { name: string; roles: List | Array; }; const User = Record({ name: 'default name', roles: List(), }); const user0 = new User({ name: 'John', roles: ['superuser', 'admin'], }); const user1 = user0.clear(); expect(user1.name).toBe('default name'); expect(user1.roles).toEqual(List()); const user2 = user0.withMutations((mutable: Record) => { mutable.clear(); }); expect(user2.name).toBe('default name'); expect(user2.roles).toEqual(List()); }); it('does not accept a Record as constructor', () => { const Foo = Record({ foo: 'bar' }); const fooInstance = Foo(); expect(() => { Record(fooInstance); }).toThrowErrorMatchingSnapshot(); }); it('does not accept a non object as constructor', () => { const defaultValues = null; expect(() => { // @ts-expect-error Record(defaultValues); }).toThrowErrorMatchingSnapshot(); }); it('does not accept an immutable object that is not a Record as constructor', () => { const defaultValues = Map({ foo: 'bar' }); expect(() => { Record(defaultValues); }).toThrowErrorMatchingSnapshot(); }); }); immutable-js-immutable-js-fa7d047/__tests__/RecordJS.js000066400000000000000000000033711515165743500230770ustar00rootroot00000000000000// eslint-disable-next-line import/no-unresolved -- immutable is resolve by jest resolver import { Record } from 'immutable'; describe('Record', () => { it('defines a record factory', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); const t = MyType(); const t2 = t.set('a', 10); expect(t.a).toBe(1); expect(t2.a).toBe(10); }); it('can have mutations apply', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); const t = MyType(); expect(() => { t.a = 10; }).toThrow(); const t2 = t.withMutations(mt => { mt.a = 10; mt.b = 20; mt.c = 30; }); expect(t.a).toBe(1); expect(t2.a).toBe(10); }); it('can be subclassed', () => { class Alphabet extends Record({ a: 1, b: 2, c: 3 }) { soup() { return this.a + this.b + this.c; } } // Note: `new` is only used because of `class` const t = new Alphabet(); const t2 = t.set('b', 200); expect(t instanceof Record); expect(t instanceof Alphabet); expect(t.soup()).toBe(6); expect(t2.soup()).toBe(204); // Uses class name as descriptive name expect(Record.getDescriptiveName(t)).toBe('Alphabet'); // Uses display name over class name class NotADisplayName extends Record({ x: 1 }, 'DisplayName') {} const t3 = new NotADisplayName(); expect(Record.getDescriptiveName(t3)).toBe('DisplayName'); }); it('can be cleared', () => { const MyType = Record({ a: 1, b: 2, c: 3 }); let t = MyType({ c: 'cats' }); expect(t.c).toBe('cats'); t = t.clear(); expect(t.c).toBe(3); const MyType2 = Record({ d: 4, e: 5, f: 6 }); let t2 = MyType2({ d: 'dogs' }); expect(t2.d).toBe('dogs'); t2 = t2.clear(); expect(t2.d).toBe(4); }); }); immutable-js-immutable-js-fa7d047/__tests__/Repeat.ts000066400000000000000000000010671515165743500226560ustar00rootroot00000000000000import { Repeat } from 'immutable'; describe('Repeat', () => { it('fixed repeat', () => { const v = Repeat('wtf', 3); expect(v.size).toBe(3); expect(v.first()).toBe('wtf'); expect(v.rest().toArray()).toEqual(['wtf', 'wtf']); expect(v.last()).toBe('wtf'); expect(v.butLast().toArray()).toEqual(['wtf', 'wtf']); expect(v.toArray()).toEqual(['wtf', 'wtf', 'wtf']); expect(v.join()).toEqual('wtf,wtf,wtf'); }); it('does not claim to be equal to undefined', () => { expect(Repeat(1).equals(undefined)).toEqual(false); }); }); immutable-js-immutable-js-fa7d047/__tests__/Seq.ts000066400000000000000000000074121515165743500221660ustar00rootroot00000000000000import { isCollection, isIndexed, isKeyed, Seq } from 'immutable'; describe('Seq', () => { it('returns undefined if empty and first is called without default argument', () => { expect(Seq().first()).toBeUndefined(); }); it('returns undefined if empty and last is called without default argument', () => { expect(Seq().last()).toBeUndefined(); }); it('returns default value if empty and first is called with default argument', () => { expect(Seq().first({})).toEqual({}); }); it('returns default value if empty and last is called with default argument', () => { expect(Seq().last({})).toEqual({}); }); it('can be empty', () => { expect(Seq().size).toBe(0); }); it('accepts an array', () => { expect(Seq([1, 2, 3]).size).toBe(3); }); it('accepts an object', () => { expect(Seq({ a: 1, b: 2, c: 3 }).size).toBe(3); }); it('accepts an object with a next property', () => { expect(Seq({ a: 1, b: 2, next: _ => _ }).size).toBe(3); }); it('accepts a collection string', () => { expect(Seq('foo').size).toBe(3); }); it('accepts arbitrary objects', () => { function Foo() { this.bar = 'bar'; this.baz = 'baz'; } expect(Seq(new Foo()).size).toBe(2); }); it('accepts another sequence', () => { const seq = Seq([1, 2, 3]); expect(Seq(seq).size).toBe(3); }); it('accepts a string', () => { const seq = Seq('abc'); expect(seq.size).toBe(3); expect(seq.get(1)).toBe('b'); expect(seq.join('')).toBe('abc'); }); it('accepts an array-like', () => { const seq = Seq({ length: 2, 0: 'a', 1: 'b' }); expect(isIndexed(seq)).toBe(true); expect(seq.size).toBe(2); expect(seq.get(1)).toBe('b'); const map = Seq({ length: 1, foo: 'bar' }); expect(isIndexed(map)).toBe(false); expect(map.size).toBe(2); expect(map.get('foo')).toBe('bar'); const empty = Seq({ length: 0 }); expect(isIndexed(empty)).toBe(true); expect(empty.size).toEqual(0); }); it('accepts a JS (global) Map', () => { const seq = Seq( new global.Map([ ['a', 'A'], ['b', 'B'], ['c', 'C'], ]) ); expect(isKeyed(seq)).toBe(true); expect(seq.size).toBe(3); }); it('accepts a JS (global) Set', () => { const seq = Seq(new global.Set(['a', 'b', 'c'])); expect(isIndexed(seq)).toBe(false); expect(isKeyed(seq)).toBe(false); expect(seq.size).toBe(3); }); it('does not accept a scalar', () => { expect(() => { // @ts-expect-error Seq(3); }).toThrow( 'Expected Array or collection object of values, or keyed object: 3' ); }); it('detects sequences', () => { const seq = Seq([1, 2, 3]); expect(Seq.isSeq(seq)).toBe(true); expect(isCollection(seq)).toBe(true); }); it('Does not infinite loop when sliced with NaN', () => { const list = Seq([1, 2, 3, 4, 5]); expect(list.slice(0, NaN).toJS()).toEqual([]); expect(list.slice(NaN).toJS()).toEqual([1, 2, 3, 4, 5]); }); it('Does not infinite loop when spliced with negative number #559', () => { const dog = Seq(['d', 'o', 'g']); const dg = dog.filter(c => c !== 'o'); const dig = dg.splice(-1, 0, 'i'); expect(dig.toJS()).toEqual(['d', 'i', 'g']); }); it('Does not infinite loop when an undefined number is passed to take', () => { const list = Seq([1, 2, 3, 4, 5]); expect(list.take(NaN).toJS()).toEqual([]); }); it('Converts deeply toJS after converting to entries', () => { const list = Seq([Seq([1, 2]), Seq({ a: 'z' })]); expect(list.entrySeq().toJS()).toEqual([ [0, [1, 2]], [1, { a: 'z' }], ]); const map = Seq({ x: Seq([1, 2]), y: Seq({ a: 'z' }) }); expect(map.entrySeq().toJS()).toEqual([ ['x', [1, 2]], ['y', { a: 'z' }], ]); }); }); immutable-js-immutable-js-fa7d047/__tests__/Set.ts000066400000000000000000000252471515165743500221770ustar00rootroot00000000000000import { fromJS, is, List, Map, OrderedSet, Seq, Set } from 'immutable'; describe('Set', () => { it('accepts array of values', () => { const s = Set([1, 2, 3]); expect(s.has(1)).toBe(true); expect(s.has(2)).toBe(true); expect(s.has(3)).toBe(true); expect(s.has(4)).toBe(false); }); it('accepts array-like of values', () => { const s = Set({ length: 3, 2: 3 }); expect(s.size).toBe(2); expect(s.has(undefined)).toBe(true); expect(s.has(3)).toBe(true); expect(s.has(2)).toBe(false); }); it('accepts a JS (global) Set', () => { const s = Set(new global.Set([1, 2, 3])); expect(Set.isSet(s)).toBe(true); expect(s.size).toBe(3); expect(s.has(1)).toBe(true); expect(s.has(2)).toBe(true); expect(s.has(3)).toBe(true); expect(s.has(4)).toBe(false); }); it('accepts string, an array-like collection', () => { const s = Set('abc'); expect(s.size).toBe(3); expect(s.has('a')).toBe(true); expect(s.has('b')).toBe(true); expect(s.has('c')).toBe(true); expect(s.has('abc')).toBe(false); }); it('accepts sequence of values', () => { const seq = Seq([1, 2, 3]); const s = Set(seq); expect(s.has(1)).toBe(true); expect(s.has(2)).toBe(true); expect(s.has(3)).toBe(true); expect(s.has(4)).toBe(false); }); it('accepts a keyed Seq as a set of entries', () => { const seq = Seq({ a: null, b: null, c: null }).flip(); const s = Set(seq); expect(s.toArray()).toEqual([ [null, 'a'], [null, 'b'], [null, 'c'], ]); // Explicitly getting the values sequence const s2 = Set(seq.valueSeq()); expect(s2.toArray()).toEqual(['a', 'b', 'c']); // toSet() does this for you. const v3 = seq.toSet(); expect(v3.toArray()).toEqual(['a', 'b', 'c']); }); it('accepts object keys', () => { const s = Set.fromKeys({ a: null, b: null, c: null }); expect(s.has('a')).toBe(true); expect(s.has('b')).toBe(true); expect(s.has('c')).toBe(true); expect(s.has('d')).toBe(false); }); it('accepts sequence keys', () => { const seq = Seq({ a: null, b: null, c: null }); const s = Set.fromKeys(seq); expect(s.has('a')).toBe(true); expect(s.has('b')).toBe(true); expect(s.has('c')).toBe(true); expect(s.has('d')).toBe(false); }); it('accepts explicit values', () => { const s = Set([1, 2, 3]); expect(s.has(1)).toBe(true); expect(s.has(2)).toBe(true); expect(s.has(3)).toBe(true); expect(s.has(4)).toBe(false); }); it('converts back to JS array', () => { const s = Set([1, 2, 3]); expect(s.toArray()).toEqual([1, 2, 3]); }); it('converts back to JS object', () => { const s = Set.of('a', 'b', 'c'); expect(s.toObject()).toEqual({ a: 'a', b: 'b', c: 'c' }); }); it('maps no-ops return the same reference', () => { const s = Set([1, 2, 3]); const r = s.map(value => value); expect(r).toBe(s); }); it('maps should produce new set if values changed', () => { const s = Set([1, 2, 3]); expect(s.has(4)).toBe(false); expect(s.size).toBe(3); const m = s.map(v => v + 1); expect(m.has(1)).toBe(false); expect(m.has(2)).toBe(true); expect(m.has(3)).toBe(true); expect(m.has(4)).toBe(true); expect(m.size).toBe(3); }); it('unions an unknown collection of Sets', () => { const abc = Set(['a', 'b', 'c']); const cat = Set(['c', 'a', 't']); expect(Set.union([abc, cat]).toArray()).toEqual(['c', 'a', 't', 'b']); expect(Set.union([abc])).toBe(abc); expect(Set.union([])).toBe(Set()); }); it('intersects an unknown collection of Sets', () => { const abc = Set(['a', 'b', 'c']); const cat = Set(['c', 'a', 't']); expect(Set.intersect([abc, cat]).toArray()).toEqual(['c', 'a']); expect(Set.intersect([abc])).toBe(abc); expect(Set.intersect([])).toBe(Set()); }); it('concatenates strings using union', () => { const s = Set(['one', 'two']); expect(s.union('three').toArray()).toEqual(['one', 'two', 'three']); }); it('iterates values', () => { const s = Set([1, 2, 3]); const iterator = jest.fn(); s.forEach(iterator); expect(iterator.mock.calls).toEqual([ [1, 1, s], [2, 2, s], [3, 3, s], ]); }); it('has the same iterator function for keys and values', () => { const s = Set([1, 2, 3]); expect(s[Symbol.iterator]).toBe(s.keys); expect(s[Symbol.iterator]).toBe(s.values); }); it('unions two sets', () => { const s1 = Set.of('a', 'b', 'c'); const s2 = Set.of('d', 'b', 'wow'); const s3 = s1.union(s2); expect(s3.toArray()).toEqual(['a', 'b', 'c', 'd', 'wow']); }); it('returns self when union results in no-op', () => { const s1 = Set.of('a', 'b', 'c'); const s2 = Set.of('c', 'a'); const s3 = s1.union(s2); expect(s3).toBe(s1); }); it('returns arg when union results in no-op', () => { const s1 = Set(); const s2 = Set.of('a', 'b', 'c'); const s3 = s1.union(s2); expect(s3).toBe(s2); }); it('unions a set and another collection and returns a set', () => { const s1 = Set([1, 2, 3]); const emptySet = Set(); const l = List([1, 2, 3]); const s2 = s1.union(l); const s3 = emptySet.union(l); const o = OrderedSet([1, 2, 3]); const s4 = s1.union(o); const s5 = emptySet.union(o); expect(Set.isSet(s2)).toBe(true); expect(Set.isSet(s3)).toBe(true); expect(Set.isSet(s4) && !OrderedSet.isOrderedSet(s4)).toBe(true); expect(Set.isSet(s5) && !OrderedSet.isOrderedSet(s5)).toBe(true); }); it('is persistent to adds', () => { const s1 = Set(); const s2 = s1.add('a'); const s3 = s2.add('b'); const s4 = s3.add('c'); const s5 = s4.add('b'); expect(s1.size).toBe(0); expect(s2.size).toBe(1); expect(s3.size).toBe(2); expect(s4.size).toBe(3); expect(s5.size).toBe(3); }); it('is persistent to deletes', () => { const s1 = Set(); const s2 = s1.add('a'); const s3 = s2.add('b'); const s4 = s3.add('c'); const s5 = s4.remove('b'); expect(s1.size).toBe(0); expect(s2.size).toBe(1); expect(s3.size).toBe(2); expect(s4.size).toBe(3); expect(s5.size).toBe(2); expect(s3.has('b')).toBe(true); expect(s5.has('b')).toBe(false); }); it('deletes down to empty set', () => { const s = Set.of('A').remove('A'); expect(s).toBe(Set()); }); it('unions multiple sets', () => { const s = Set.of('A', 'B', 'C').union( Set.of('C', 'D', 'E'), Set.of('D', 'B', 'F') ); expect(s).toEqual(Set.of('A', 'B', 'C', 'D', 'E', 'F')); }); it('intersects multiple sets', () => { const s = Set.of('A', 'B', 'C').intersect( Set.of('B', 'C', 'D'), Set.of('A', 'C', 'E') ); expect(s).toEqual(Set.of('C')); }); it('diffs multiple sets', () => { const s = Set.of('A', 'B', 'C').subtract( Set.of('C', 'D', 'E'), Set.of('D', 'B', 'F') ); expect(s).toEqual(Set.of('A')); }); it('expresses value equality with set sequences', () => { const s1 = Set.of('A', 'B', 'C'); expect(s1.equals(null)).toBe(false); const s2 = Set.of('C', 'B', 'A'); expect(s1 === s2).toBe(false); expect(is(s1, s2)).toBe(true); expect(s1.equals(s2)).toBe(true); // Map and Set are not the same (keyed vs unkeyed) const v1 = Map({ A: 'A', C: 'C', B: 'B' }); expect(is(s1, v1)).toBe(false); }); it('can use union in a withMutation', () => { const js = Set() .withMutations(set => { set.union(['a']); set.add('b'); }) .toJS(); expect(js).toEqual(['a', 'b']); }); it('can determine if an array is a subset', () => { const s = Set.of('A', 'B', 'C'); expect(s.isSuperset(['B', 'C'])).toBe(true); expect(s.isSuperset(['B', 'C', 'D'])).toBe(false); }); describe('accepts Symbol as entry #579', () => { it('operates on small number of symbols, preserving set uniqueness', () => { const a = Symbol(); const b = Symbol(); const c = Symbol(); const symbolSet = Set([a, b, c, a, b, c, a, b, c, a, b, c]); expect(symbolSet.size).toBe(3); expect(symbolSet.has(b)).toBe(true); expect(symbolSet.get(c)).toEqual(c); }); it('operates on a large number of symbols, maintaining obj uniqueness', () => { const manySymbols = [ Symbol('a'), Symbol('b'), Symbol('c'), Symbol('a'), Symbol('b'), Symbol('c'), Symbol('a'), Symbol('b'), Symbol('c'), Symbol('a'), Symbol('b'), Symbol('c'), ]; const symbolSet = Set(manySymbols); expect(symbolSet.size).toBe(12); expect(symbolSet.has(manySymbols[10])).toBe(true); expect(symbolSet.get(manySymbols[10])).toEqual(manySymbols[10]); }); }); it('can use intersect after add or union in a withMutation', () => { const set = Set(['a', 'd']).withMutations(s => { s.add('b'); s.union(['c']); s.intersect(['b', 'c', 'd']); }); expect(set.toArray()).toEqual(['c', 'd', 'b']); }); it('can count entries that satisfy a predicate', () => { const set = Set([1, 2, 3, 4, 5]); expect(set.size).toEqual(5); expect(set.count()).toEqual(5); expect(set.count(x => x % 2 === 0)).toEqual(2); expect(set.count(() => true)).toEqual(5); }); describe('"size" should correctly reflect the number of elements in a Set', () => { describe('deduplicating custom classes that invoke fromJS() as part of equality check', () => { class Entity { entityId: string; entityKey: string; constructor(entityId: string, entityKey: string) { this.entityId = entityId; this.entityKey = entityKey; } asImmutable() { return fromJS({ entityId: this.entityId, entityKey: this.entityKey, }); } valueOf() { return this.asImmutable().toString(); } } it('with mutations', () => { const testSet = Set().withMutations(mutableSet => { mutableSet.add(new Entity('hello', 'world')); mutableSet.add(new Entity('testing', 'immutable')); mutableSet.add(new Entity('hello', 'world')); }); expect(testSet.size).toEqual(2); }); it('without mutations', () => { const testSet0 = Set(); const testSet1 = testSet0.add(new Entity('hello', 'world')); const testSet2 = testSet1.add(new Entity('testing', 'immutable')); const testSet3 = testSet2.add(new Entity('hello', 'world')); expect(testSet0.size).toEqual(0); expect(testSet1.size).toEqual(1); expect(testSet2.size).toEqual(2); expect(testSet3.size).toEqual(2); }); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/Stack.ts000066400000000000000000000136341515165743500225060ustar00rootroot00000000000000import { Seq, Stack } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); function arrayOfSize(s) { const a = new Array(s); for (let ii = 0; ii < s; ii++) { a[ii] = ii; } return a; } describe('Stack', () => { it('constructor provides initial values', () => { const s = Stack.of('a', 'b', 'c'); expect(s.get(0)).toBe('a'); expect(s.get(1)).toBe('b'); expect(s.get(2)).toBe('c'); }); it('toArray provides a JS array', () => { const s = Stack.of('a', 'b', 'c'); expect(s.toArray()).toEqual(['a', 'b', 'c']); }); it('accepts a JS array', () => { const s = Stack(['a', 'b', 'c']); expect(s.toArray()).toEqual(['a', 'b', 'c']); }); it('accepts a Seq', () => { const seq = Seq(['a', 'b', 'c']); const s = Stack(seq); expect(s.toArray()).toEqual(['a', 'b', 'c']); }); it('accepts a keyed Seq', () => { const seq = Seq({ a: null, b: null, c: null }).flip(); const s = Stack(seq); expect(s.toArray()).toEqual([ [null, 'a'], [null, 'b'], [null, 'c'], ]); // Explicit values const s2 = Stack(seq.valueSeq()); expect(s2.toArray()).toEqual(['a', 'b', 'c']); // toStack() does this for you. const s3 = seq.toStack(); expect(s3.toArray()).toEqual(['a', 'b', 'c']); }); it('pushing creates a new instance', () => { const s0 = Stack.of('a'); const s1 = s0.push('A'); expect(s0.get(0)).toBe('a'); expect(s1.get(0)).toBe('A'); }); it('get helpers make for easier to read code', () => { const s = Stack.of('a', 'b', 'c'); expect(s.first()).toBe('a'); expect(s.last()).toBe('c'); expect(s.peek()).toBe('a'); }); it('slice helpers make for easier to read code', () => { const s = Stack.of('a', 'b', 'c'); expect(s.rest().toArray()).toEqual(['b', 'c']); }); it('iterable in reverse order', () => { const s = Stack.of('a', 'b', 'c'); expect(s.size).toBe(3); const forEachResults: Array = []; s.forEach((val, i) => forEachResults.push([i, val, s.get(i)])); expect(forEachResults).toEqual([ [0, 'a', 'a'], [1, 'b', 'b'], [2, 'c', 'c'], ]); // map will cause reverse iterate expect(s.map(val => val + val).toArray()).toEqual(['aa', 'bb', 'cc']); let iteratorResults: Array = []; let iterator = s.entries(); let step; while (!(step = iterator.next()).done) { iteratorResults.push(step.value); } expect(iteratorResults).toEqual([ [0, 'a'], [1, 'b'], [2, 'c'], ]); iteratorResults = []; iterator = s.toSeq().reverse().entries(); while (!(step = iterator.next()).done) { iteratorResults.push(step.value); } expect(iteratorResults).toEqual([ [0, 'c'], [1, 'b'], [2, 'a'], ]); }); it('map is called in reverse order but with correct indices', () => { const s = Stack(['a', 'b', 'c']); const s2 = s.map((v, i, c) => v + i + c.get(i)); expect(s2.toArray()).toEqual(['a0a', 'b1b', 'c2c']); const mappedSeq = s.toSeq().map((v, i, c) => v + i + c.get(i)); const s3 = Stack(mappedSeq); expect(s3.toArray()).toEqual(['a0a', 'b1b', 'c2c']); }); it('push inserts at lowest index', () => { const s0 = Stack.of('a', 'b', 'c'); const s1 = s0.push('d', 'e', 'f'); expect(s0.size).toBe(3); expect(s1.size).toBe(6); expect(s1.toArray()).toEqual(['d', 'e', 'f', 'a', 'b', 'c']); }); it('pop removes the lowest index, decrementing size', () => { const s = Stack.of('a', 'b', 'c').pop(); expect(s.peek()).toBe('b'); expect(s.toArray()).toEqual(['b', 'c']); }); check.it( 'shift removes the lowest index, just like array', { maxSize: 2000 }, [gen.posInt], len => { const a = arrayOfSize(len); let s = Stack(a); while (a.length) { expect(s.size).toBe(a.length); expect(s.toArray()).toEqual(a); s = s.shift(); a.shift(); } expect(s.size).toBe(a.length); expect(s.toArray()).toEqual(a); } ); check.it( 'unshift adds the next lowest index, just like array', { maxSize: 2000 }, [gen.posInt], len => { const a: Array = []; let s = Stack(); for (let ii = 0; ii < len; ii++) { expect(s.size).toBe(a.length); expect(s.toArray()).toEqual(a); s = s.unshift(ii); a.unshift(ii); } expect(s.size).toBe(a.length); expect(s.toArray()).toEqual(a); } ); check.it( 'unshifts multiple values to the front', { maxSize: 2000 }, [gen.posInt, gen.posInt], (size1: number, size2: number) => { const a1 = arrayOfSize(size1); const a2 = arrayOfSize(size2); const s1 = Stack(a1); const s3 = s1.unshift.apply(s1, a2); const a3 = a1.slice(); a3.unshift.apply(a3, a2); expect(s3.size).toEqual(a3.length); expect(s3.toArray()).toEqual(a3); } ); it('finds values using indexOf', () => { const s = Stack.of('a', 'b', 'c', 'b', 'a'); expect(s.indexOf('b')).toBe(1); expect(s.indexOf('c')).toBe(2); expect(s.indexOf('d')).toBe(-1); }); it('pushes on all items in an iter', () => { const abc = Stack(['a', 'b', 'c']); const xyz = Stack(['x', 'y', 'z']); const xyzSeq = Seq(['x', 'y', 'z']); // Push all to the front of the Stack so first item ends up first. expect(abc.pushAll(xyz).toArray()).toEqual(['x', 'y', 'z', 'a', 'b', 'c']); expect(abc.pushAll(xyzSeq).toArray()).toEqual([ 'x', 'y', 'z', 'a', 'b', 'c', ]); // Pushes Seq contents into Stack expect(Stack().pushAll(xyzSeq)).not.toBe(xyzSeq); expect(Stack().pushAll(xyzSeq).toArray()).toEqual(['x', 'y', 'z']); // Pushing a Stack onto an empty Stack returns === Stack expect(Stack().pushAll(xyz)).toBe(xyz); // Pushing an empty Stack onto a Stack return === Stack expect(abc.pushAll(Stack())).toBe(abc); }); }); immutable-js-immutable-js-fa7d047/__tests__/__snapshots__/000077500000000000000000000000001515165743500237005ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/__tests__/__snapshots__/Record.ts.snap000066400000000000000000000011311515165743500264220ustar00rootroot00000000000000// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Record does not accept a Record as constructor 1`] = `"Can not call \`Record\` with an immutable Record as default values. Use a plain javascript object instead."`; exports[`Record does not accept a non object as constructor 1`] = `"Can not call \`Record\` with a non-object as default values. Use a plain javascript object instead."`; exports[`Record does not accept an immutable object that is not a Record as constructor 1`] = `"Can not call \`Record\` with an immutable Collection as default values. Use a plain javascript object instead."`; immutable-js-immutable-js-fa7d047/__tests__/concat.ts000066400000000000000000000113631515165743500227050ustar00rootroot00000000000000import { is, List, Seq, Set } from 'immutable'; describe('concat', () => { it('concats two sequences', () => { const a = Seq([1, 2, 3]); const b = Seq([4, 5, 6]); expect(is(a.concat(b), Seq([1, 2, 3, 4, 5, 6]))).toBe(true); expect(a.concat(b).size).toBe(6); expect(a.concat(b).toArray()).toEqual([1, 2, 3, 4, 5, 6]); }); it('concats two object sequences', () => { const a = Seq({ a: 1, b: 2, c: 3 }); const b = Seq({ d: 4, e: 5, f: 6 }); expect(a.size).toBe(3); expect(a.concat(b).size).toBe(6); expect(a.concat(b).toObject()).toEqual({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, }); }); it('concats objects to keyed seq', () => { const a = Seq({ a: 1, b: 2, c: 3 }); const b = { d: 4, e: 5, f: 6 }; expect(a.concat(b).toObject()).toEqual({ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, }); }); it('doesnt concat raw arrays to keyed seq', () => { const a = Seq({ a: 1, b: 2, c: 3 }); const b = [4, 5, 6]; expect(() => { // @ts-expect-error a.concat(b).toJS(); }).toThrow('Expected [K, V] tuple: 4'); }); it('concats arrays to indexed seq', () => { const a = Seq([1, 2, 3]); const b = [4, 5, 6]; expect(a.concat(b).size).toBe(6); expect(a.concat(b).toArray()).toEqual([1, 2, 3, 4, 5, 6]); }); it('concats values', () => { const a = Seq([1, 2, 3]); expect(a.concat(4, 5, 6).size).toBe(6); expect(a.concat(4, 5, 6).toArray()).toEqual([1, 2, 3, 4, 5, 6]); }); it('doesnt concat objects to indexed seq', () => { const a = Seq([0, 1, 2, 3]); const b = { 4: 4 }; const i = a.concat(b); expect(i.size).toBe(5); expect(i.get(4)).toBe(b); expect(i.toArray()).toEqual([0, 1, 2, 3, { 4: 4 }]); }); it('concats multiple arguments', () => { const a = Seq([1, 2, 3]); const b = [4, 5, 6]; const c = [7, 8, 9]; expect(a.concat(b, c).size).toBe(9); expect(a.concat(b, c).toArray()).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9]); }); it('can concat itself!', () => { const a = Seq([1, 2, 3]); expect(a.concat(a, a).size).toBe(9); expect(a.concat(a, a).toArray()).toEqual([1, 2, 3, 1, 2, 3, 1, 2, 3]); }); it('returns itself when concat does nothing', () => { const a = Seq([1, 2, 3]); const b = Seq(); expect(a.concat()).toBe(a); expect(a.concat(b)).toBe(a); expect(b.concat(b)).toBe(b); }); it('returns non-empty item when concat does nothing', () => { const a = Seq([1, 2, 3]); const b = Seq(); expect(a.concat(b)).toBe(a); expect(b.concat(a)).toBe(a); expect(b.concat(b, b, b, a, b, b)).toBe(a); }); it('always returns the same type', () => { const a = Set([1, 2, 3]); const b = List(); expect(b.concat(a)).not.toBe(a); expect(List.isList(b.concat(a))).toBe(true); expect(b.concat(a)).toEqual(List([1, 2, 3])); }); it('iterates repeated keys', () => { const a = Seq({ a: 1, b: 2, c: 3 }); expect(a.concat(a, a).toObject()).toEqual({ a: 1, b: 2, c: 3 }); expect(a.concat(a, a).valueSeq().toArray()).toEqual([ 1, 2, 3, 1, 2, 3, 1, 2, 3, ]); expect(a.concat(a, a).keySeq().toArray()).toEqual([ 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', ]); expect(a.concat(a, a).toArray()).toEqual([ ['a', 1], ['b', 2], ['c', 3], ['a', 1], ['b', 2], ['c', 3], ['a', 1], ['b', 2], ['c', 3], ]); }); it('lazily reverses un-indexed sequences', () => { const a = Seq({ a: 1, b: 2, c: 3 }); const b = Seq({ d: 4, e: 5, f: 6 }); expect(a.concat(b).reverse().keySeq().toArray()).toEqual([ 'f', 'e', 'd', 'c', 'b', 'a', ]); }); it('lazily reverses indexed sequences', () => { const a = Seq([1, 2, 3]); expect(a.concat(a, a).reverse().size).toBe(9); expect(a.concat(a, a).reverse().toArray()).toEqual([ 3, 2, 1, 3, 2, 1, 3, 2, 1, ]); }); it('lazily reverses indexed sequences with unknown size, maintaining indicies', () => { const a = Seq([1, 2, 3]).filter(x => true); expect(a.size).toBe(undefined); // Note: lazy filter does not know what size in O(1). expect(a.concat(a, a).toKeyedSeq().reverse().size).toBe(undefined); expect(a.concat(a, a).toKeyedSeq().reverse().toArray()).toEqual([ [8, 3], [7, 2], [6, 1], [5, 3], [4, 2], [3, 1], [2, 3], [1, 2], [0, 1], ]); }); it('counts from the end of the indexed sequence on negative index', () => { const i = List.of(9, 5, 3, 1).map(x => -x); expect(i.get(0)).toBe(-9); expect(i.get(-1)).toBe(-1); expect(i.get(-4)).toBe(-9); expect(i.get(-5, 888)).toBe(888); }); }); immutable-js-immutable-js-fa7d047/__tests__/count.ts000066400000000000000000000046261515165743500225720ustar00rootroot00000000000000import { Range, Seq } from 'immutable'; describe('count', () => { it('counts sequences with known lengths', () => { expect(Seq([1, 2, 3, 4, 5]).size).toBe(5); expect(Seq([1, 2, 3, 4, 5]).count()).toBe(5); }); it('counts sequences with unknown lengths, resulting in a cached size', () => { const seq = Seq([1, 2, 3, 4, 5, 6]).filter(x => x % 2 === 0); expect(seq.size).toBe(undefined); expect(seq.count()).toBe(3); expect(seq.size).toBe(3); }); it('counts sequences with a specific predicate', () => { const seq = Seq([1, 2, 3, 4, 5, 6]); expect(seq.size).toBe(6); expect(seq.count(x => x > 3)).toBe(3); }); describe('countBy', () => { it('counts by keyed sequence', () => { const grouped = Seq({ a: 1, b: 2, c: 3, d: 4 }).countBy(x => x % 2); expect(grouped.toJS()).toEqual({ 1: 2, 0: 2 }); expect(grouped.get(1)).toEqual(2); }); it('counts by indexed sequence', () => { expect( Seq([1, 2, 3, 4, 5, 6]) .countBy(x => x % 2) .toJS() ).toEqual({ 1: 3, 0: 3 }); }); it('counts by specific keys', () => { expect( Seq([1, 2, 3, 4, 5, 6]) .countBy(x => (x % 2 ? 'odd' : 'even')) .toJS() ).toEqual({ odd: 3, even: 3 }); }); }); describe('isEmpty', () => { it('is O(1) on sequences with known lengths', () => { expect(Seq([1, 2, 3, 4, 5]).size).toBe(5); expect(Seq([1, 2, 3, 4, 5]).isEmpty()).toBe(false); expect(Seq().size).toBe(0); expect(Seq().isEmpty()).toBe(true); }); it('lazily evaluates Seq with unknown length', () => { let seq = Seq([1, 2, 3, 4, 5, 6]).filter(x => x % 2 === 0); expect(seq.size).toBe(undefined); expect(seq.isEmpty()).toBe(false); expect(seq.size).toBe(undefined); seq = Seq([1, 2, 3, 4, 5, 6]).filter(x => x > 10); expect(seq.size).toBe(undefined); expect(seq.isEmpty()).toBe(true); expect(seq.size).toBe(undefined); }); it('with infinitely long sequences of known length', () => { const seq = Range(); expect(seq.size).toBe(Infinity); expect(seq.isEmpty()).toBe(false); }); it('with infinitely long sequences of unknown length', () => { const seq = Range().filter(x => x % 2 === 0); expect(seq.size).toBe(undefined); expect(seq.isEmpty()).toBe(false); expect(seq.size).toBe(undefined); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/find.ts000066400000000000000000000015131515165743500223520ustar00rootroot00000000000000import { Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('find', () => { it('find returns notSetValue when match is not found', () => { expect( Seq([1, 2, 3, 4, 5, 6]).find( function () { return false; }, null, 9 ) ).toEqual(9); }); it('findEntry returns notSetValue when match is not found', () => { expect( Seq([1, 2, 3, 4, 5, 6]).findEntry( function () { return false; }, null, 9 ) ).toEqual(9); }); it('findLastEntry returns notSetValue when match is not found', () => { expect( Seq([1, 2, 3, 4, 5, 6]).findLastEntry( function () { return false; }, null, 9 ) ).toEqual(9); }); }); immutable-js-immutable-js-fa7d047/__tests__/flatten.ts000066400000000000000000000064341515165743500230760ustar00rootroot00000000000000import { Collection, fromJS, List, Range, Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('flatten', () => { it('flattens sequences one level deep', () => { const nested = fromJS([ [1, 2], [3, 4], [5, 6], ]); const flat = nested.flatten(); expect(flat.toJS()).toEqual([1, 2, 3, 4, 5, 6]); }); it('flattening a List returns a List', () => { const nested = fromJS([[1], 2, 3, [4, 5, 6]]); const flat = nested.flatten(); expect(flat.toString()).toEqual('List [ 1, 2, 3, 4, 5, 6 ]'); }); it('gives the correct iteration count', () => { const nested = fromJS([ [1, 2, 3], [4, 5, 6], ]); const flat = nested.flatten(); expect(flat.forEach((x: any) => x < 4)).toEqual(4); }); type SeqType = number | Array | Collection; it('flattens only Sequences (not sequenceables)', () => { const nested = Seq([Range(1, 3), [3, 4], List([5, 6, 7]), 8]); const flat = nested.flatten(); expect(flat.toJS()).toEqual([1, 2, [3, 4], 5, 6, 7, 8]); }); it('can be reversed', () => { const nested = Seq([Range(1, 3), [3, 4], List([5, 6, 7]), 8]); const flat = nested.flatten(); const reversed = flat.reverse(); expect(reversed.toJS()).toEqual([8, 7, 6, 5, [3, 4], 2, 1]); }); it('can flatten at various levels of depth', () => { const deeplyNested = fromJS([ [ [ ['A', 'B'], ['A', 'B'], ], [ ['A', 'B'], ['A', 'B'], ], ], [ [ ['A', 'B'], ['A', 'B'], ], [ ['A', 'B'], ['A', 'B'], ], ], ]); // deeply flatten expect(deeplyNested.flatten().toJS()).toEqual([ 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', ]); // shallow flatten expect(deeplyNested.flatten(true).toJS()).toEqual([ [ ['A', 'B'], ['A', 'B'], ], [ ['A', 'B'], ['A', 'B'], ], [ ['A', 'B'], ['A', 'B'], ], [ ['A', 'B'], ['A', 'B'], ], ]); // flatten two levels expect(deeplyNested.flatten(2).toJS()).toEqual([ ['A', 'B'], ['A', 'B'], ['A', 'B'], ['A', 'B'], ['A', 'B'], ['A', 'B'], ['A', 'B'], ['A', 'B'], ]); }); describe('flatMap', () => { it('first maps, then shallow flattens', () => { const numbers = Range(97, 100); const letters = numbers.flatMap(v => fromJS([String.fromCharCode(v), String.fromCharCode(v).toUpperCase()]) ); expect(letters.toJS()).toEqual(['a', 'A', 'b', 'B', 'c', 'C']); }); it('maps to sequenceables, not only Sequences.', () => { const numbers = Range(97, 100); // the map function returns an Array, rather than a Collection. // Array is iterable, so this works just fine. const letters = numbers.flatMap(v => [ String.fromCharCode(v), String.fromCharCode(v).toUpperCase(), ]); expect(letters.toJS()).toEqual(['a', 'A', 'b', 'B', 'c', 'C']); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/fromJS.ts000066400000000000000000000036631515165743500226420ustar00rootroot00000000000000import { runInNewContext } from 'vm'; import { List, Map, Set, isCollection, fromJS } from 'immutable'; describe('fromJS', () => { it('convert Array to Immutable.List', () => { const list = fromJS([1, 2, 3]); expect(List.isList(list)).toBe(true); expect(list.count()).toBe(3); }); it('convert plain Object to Immutable.Map', () => { const map = fromJS({ a: 'A', b: 'B', c: 'C' }); expect(Map.isMap(map)).toBe(true); expect(map.count()).toBe(3); }); it('convert JS (global) Set to Immutable.Set', () => { const set = fromJS(new global.Set([1, 2, 3])); expect(Set.isSet(set)).toBe(true); expect(set.count()).toBe(3); }); it('convert JS (global) Map to Immutable.Map', () => { const map = fromJS( new global.Map([ ['a', 'A'], ['b', 'B'], ['c', 'C'], ]) ); expect(Map.isMap(map)).toBe(true); expect(map.count()).toBe(3); }); it('convert iterable to Immutable collection', () => { function* values() { yield 1; yield 2; yield 3; } const result = fromJS(values()); expect(List.isList(result)).toBe(true); expect(result.count()).toBe(3); }); it('does not convert existing Immutable collections', () => { const orderedSet = Set(['a', 'b', 'c']); expect(fromJS(orderedSet)).toBe(orderedSet); }); it('does not convert strings', () => { expect(fromJS('abc')).toBe('abc'); }); it('does not convert non-plain Objects', () => { class Test {} const result = fromJS(new Test()); expect(isCollection(result)).toBe(false); expect(result instanceof Test).toBe(true); }); it('is iterable outside of a vm', () => { expect(isCollection(fromJS({}))).toBe(true); }); it('is iterable inside of a vm', () => { runInNewContext( ` expect(isCollection(fromJS({}))).toBe(true); `, { expect, isCollection, fromJS, }, {} ); }); }); immutable-js-immutable-js-fa7d047/__tests__/functional/000077500000000000000000000000001515165743500232245ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/__tests__/functional/set.ts000066400000000000000000000047001515165743500243700ustar00rootroot00000000000000import { describe, expect, it } from '@jest/globals'; import { set } from 'immutable'; describe('set', () => { it('for immutable structure', () => { const originalArray = ['dog', 'frog', 'cat']; expect(set(originalArray, 1, 'cow')).toEqual(['dog', 'cow', 'cat']); expect(set(originalArray, 4, 'cow')).toEqual([ 'dog', 'frog', 'cat', undefined, 'cow', ]); expect(originalArray).toEqual(['dog', 'frog', 'cat']); const originalObject = { x: 123, y: 456 }; expect(set(originalObject, 'x', 789)).toEqual({ x: 789, y: 456 }); expect(set(originalObject, 'z', 789)).toEqual({ x: 123, y: 456, z: 789 }); expect(originalObject).toEqual({ x: 123, y: 456 }); }); it('for Array', () => { const originalArray = ['dog', 'frog', 'cat']; expect(set(originalArray, 1, 'cow')).toEqual(['dog', 'cow', 'cat']); expect(set(originalArray, 4, 'cow')).toEqual([ 'dog', 'frog', 'cat', undefined, 'cow', ]); expect(originalArray).toEqual(['dog', 'frog', 'cat']); }); it('for plain objects', () => { const originalObject = { x: 123, y: 456 }; expect(set(originalObject, 'x', 789)).toEqual({ x: 789, y: 456 }); expect(set(originalObject, 'z', 789)).toEqual({ x: 123, y: 456, z: 789 }); expect(originalObject).toEqual({ x: 123, y: 456 }); }); it('is not sensible to prototype pollution via set on plain object', () => { type User = { user: string; admin?: boolean }; const obj: User = { user: 'Alice' }; // Setting __proto__ key should not change the returned object's prototype chain // @ts-expect-error -- intentionally setting __proto__ to test prototype pollution const result = set(obj, '__proto__', { admin: true }); // The returned copy should NOT have 'admin' accessible via prototype // @ts-expect-error -- testing prototype pollution expect(result.admin).toBeUndefined(); }); it('is not sensible to prototype pollution via set with JSON.parse source', () => { type User = { user: string; admin?: boolean }; // JSON.parse creates __proto__ as an own property const malicious = JSON.parse( '{"user":"Eve","__proto__":{"admin":true}}' ) as User; // set on an object that already carries __proto__ from JSON.parse const result = set(malicious, 'user', 'Alice'); // The returned copy should NOT have 'admin' accessible via prototype pollution expect(result.admin).toBeUndefined(); }); }); immutable-js-immutable-js-fa7d047/__tests__/functional/update.ts000066400000000000000000000040341515165743500250570ustar00rootroot00000000000000import { describe, expect, it } from '@jest/globals'; import { update } from 'immutable'; describe('update', () => { it('for immutable structure', () => { const originalArray = ['dog', 'frog', 'cat']; expect(update(originalArray, 1, val => val?.toUpperCase())).toEqual([ 'dog', 'FROG', 'cat', ]); expect(originalArray).toEqual(['dog', 'frog', 'cat']); const originalObject = { x: 123, y: 456 }; expect(update(originalObject, 'x', val => val * 6)).toEqual({ x: 738, y: 456, }); expect(originalObject).toEqual({ x: 123, y: 456 }); }); it('for Array', () => { const originalArray = ['dog', 'frog', 'cat']; expect(update(originalArray, 1, val => val?.toUpperCase())).toEqual([ 'dog', 'FROG', 'cat', ]); expect(originalArray).toEqual(['dog', 'frog', 'cat']); }); it('for plain objects', () => { const originalObject = { x: 123, y: 456 }; expect(update(originalObject, 'x', val => val * 6)).toEqual({ x: 738, y: 456, }); expect(originalObject).toEqual({ x: 123, y: 456 }); }); it('is not sensible to prototype pollution via update on plain object', () => { type User = { user: string; admin?: boolean }; const obj: User = { user: 'Alice' }; // @ts-expect-error -- intentionally setting __proto__ to test prototype pollution const result = update(obj, '__proto__', () => ({ admin: true, })) as unknown as User; // The returned copy should NOT have 'admin' accessible via prototype expect(result.admin).toBeUndefined(); }); it('is not sensible to prototype pollution via update with JSON.parse source', () => { type User = { user: string; admin?: boolean }; // JSON.parse creates __proto__ as an own property const malicious = JSON.parse('{"user":"Eve","__proto__":{"admin":true}}'); const result = update(malicious, 'user', () => 'Alice') as User; // The returned copy (via shallowCopy) should NOT have 'admin' via prototype expect(result.admin).toBeUndefined(); }); }); immutable-js-immutable-js-fa7d047/__tests__/get.ts000066400000000000000000000022531515165743500222130ustar00rootroot00000000000000import { Range } from 'immutable'; describe('get', () => { it('gets any index', () => { const seq = Range(0, 100); expect(seq.get(20)).toBe(20); }); it('gets first', () => { const seq = Range(0, 100); expect(seq.first()).toBe(0); }); it('gets last', () => { const seq = Range(0, 100); expect(seq.last()).toBe(99); }); it('gets any index after reversing', () => { const seq = Range(0, 100).reverse(); expect(seq.get(20)).toBe(79); }); it('gets first after reversing', () => { const seq = Range(0, 100).reverse(); expect(seq.first()).toBe(99); }); it('gets last after reversing', () => { const seq = Range(0, 100).reverse(); expect(seq.last()).toBe(0); }); it('gets any index when size is unknown', () => { const seq = Range(0, 100).filter(x => x % 2 === 1); expect(seq.get(20)).toBe(41); }); it('gets first when size is unknown', () => { const seq = Range(0, 100).filter(x => x % 2 === 1); expect(seq.first()).toBe(1); }); it('gets last when size is unknown', () => { const seq = Range(0, 100).filter(x => x % 2 === 1); expect(seq.last()).toBe(99); // Note: this is O(N) }); }); immutable-js-immutable-js-fa7d047/__tests__/getIn.ts000066400000000000000000000076461515165743500225150ustar00rootroot00000000000000import { fromJS, getIn, List, Map } from 'immutable'; describe('getIn', () => { it('deep get', () => { const m = fromJS({ a: { b: { c: 10 } } }); expect(m.getIn(['a', 'b', 'c'])).toEqual(10); expect(getIn(m, ['a', 'b', 'c'])).toEqual(10); }); it('deep get with list as keyPath', () => { const m = fromJS({ a: { b: { c: 10 } } }); expect(m.getIn(fromJS(['a', 'b', 'c']))).toEqual(10); expect(getIn(m, fromJS(['a', 'b', 'c']))).toEqual(10); }); it('deep get throws without list or array-like', () => { // @ts-expect-error expect(() => Map().getIn(undefined)).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: undefined' ); // @ts-expect-error expect(() => Map().getIn({ a: 1, b: 2 })).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: [object Object]' ); // TODO: should expect error expect(() => Map().getIn('abc')).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: abc' ); // TODO: should expect error expect(() => getIn(Map(), 'abc')).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: abc' ); }); it('deep get returns not found if path does not match', () => { const m = fromJS({ a: { b: { c: 10 } } }); expect(m.getIn(['a', 'b', 'z'])).toEqual(undefined); expect(m.getIn(['a', 'b', 'z'], 123)).toEqual(123); expect(m.getIn(['a', 'y', 'z'])).toEqual(undefined); expect(m.getIn(['a', 'y', 'z'], 123)).toEqual(123); expect(getIn(m, ['a', 'y', 'z'])).toEqual(undefined); expect(getIn(m, ['a', 'y', 'z'], 123)).toEqual(123); }); it('does not use notSetValue when path does exist but value is nullable', () => { const m = fromJS({ a: { b: { c: null, d: undefined } } }); expect(m.getIn(['a', 'b', 'c'])).toEqual(null); expect(m.getIn(['a', 'b', 'd'])).toEqual(undefined); expect(m.getIn(['a', 'b', 'c'], 123)).toEqual(null); expect(m.getIn(['a', 'b', 'd'], 123)).toEqual(undefined); expect(getIn(m, ['a', 'b', 'c'], 123)).toEqual(null); expect(getIn(m, ['a', 'b', 'd'], 123)).toEqual(undefined); }); it('deep get returns not found if path encounters non-data-structure', () => { const m = fromJS({ a: { b: { c: null, d: undefined } } }); expect(m.getIn(['a', 'b', 'c', 'x'])).toEqual(undefined); expect(m.getIn(['a', 'b', 'c', 'x'], 123)).toEqual(123); expect(m.getIn(['a', 'b', 'd', 'x'])).toEqual(undefined); expect(m.getIn(['a', 'b', 'd', 'x'], 123)).toEqual(123); expect(getIn(m, ['a', 'b', 'd', 'x'])).toEqual(undefined); expect(getIn(m, ['a', 'b', 'd', 'x'], 123)).toEqual(123); expect(getIn('a', ['length'])).toEqual(undefined); expect(getIn(new Date(), ['getDate'])).toEqual(undefined); }); it('gets in nested plain Objects and Arrays', () => { const m = List([{ key: ['item'] }]); expect(m.getIn([0, 'key', 0])).toEqual('item'); }); it('deep get returns not found if non-existing path in nested plain Object', () => { const deep = Map({ key: { regular: 'jsobj' }, list: List([Map({ num: 10 })]), }); expect(deep.getIn(['key', 'foo', 'item'])).toBe(undefined); expect(deep.getIn(['key', 'foo', 'item'], 'notSet')).toBe('notSet'); expect(deep.getIn(['list', 0, 'num', 'badKey'])).toBe(undefined); expect(deep.getIn(['list', 0, 'num', 'badKey'], 'notSet')).toBe('notSet'); }); it('gets in plain Objects and Arrays', () => { const m = [{ key: ['item'] }]; expect(getIn(m, [0, 'key', 0])).toEqual('item'); }); it('deep get returns not found if non-existing path in plain Object', () => { const deep = { key: { regular: 'jsobj' }, list: [{ num: 10 }] }; expect(getIn(deep, ['key', 'foo', 'item'])).toBe(undefined); expect(getIn(deep, ['key', 'foo', 'item'], 'notSet')).toBe('notSet'); expect(getIn(deep, ['list', 0, 'num', 'badKey'])).toBe(undefined); expect(getIn(deep, ['list', 0, 'num', 'badKey'], 'notSet')).toBe('notSet'); }); }); immutable-js-immutable-js-fa7d047/__tests__/groupBy.ts000066400000000000000000000056401515165743500230660ustar00rootroot00000000000000import { Collection, Map, Seq, isOrdered, OrderedMap, List, OrderedSet, Set, Stack, Record, } from 'immutable'; describe('groupBy', () => { it.each` constructor | constructorIsOrdered | isObject ${Collection} | ${true} | ${false} ${List} | ${true} | ${false} ${Seq} | ${true} | ${false} ${Set} | ${false} | ${false} ${Stack} | ${true} | ${false} ${OrderedSet} | ${true} | ${false} ${Map} | ${false} | ${true} ${OrderedMap} | ${true} | ${true} `( 'groupBy returns ordered or unordered of the base type is ordered or not: $constructor.name', ({ constructor, constructorIsOrdered, isObject }) => { const iterableConstructor = ['a', 'b', 'a', 'c']; const objectConstructor = { a: 1, b: 2, c: 3, d: 1 }; const col = constructor( isObject ? objectConstructor : iterableConstructor ); const grouped = col.groupBy(v => v); // all groupBy should be instance of Map expect(grouped).toBeInstanceOf(Map); // ordered objects should be instance of OrderedMap expect(isOrdered(col)).toBe(constructorIsOrdered); expect(isOrdered(grouped)).toBe(constructorIsOrdered); if (constructorIsOrdered) { expect(grouped).toBeInstanceOf(OrderedMap); } else { expect(grouped).not.toBeInstanceOf(OrderedMap); } } ); it('groups keyed sequence', () => { const grouped = Seq({ a: 1, b: 2, c: 3, d: 4 }).groupBy(x => x % 2); expect(grouped.toJS()).toEqual({ 1: { a: 1, c: 3 }, 0: { b: 2, d: 4 } }); // Each group should be a keyed sequence, not an indexed sequence const firstGroup = grouped.get(1); expect(firstGroup && firstGroup.toArray()).toEqual([ ['a', 1], ['c', 3], ]); }); it('groups indexed sequence', () => { const group = Seq([1, 2, 3, 4, 5, 6]).groupBy(x => x % 2); expect(group.toJS()).toEqual({ 1: [1, 3, 5], 0: [2, 4, 6] }); }); it('groups to keys', () => { const group = Seq([1, 2, 3, 4, 5, 6]).groupBy(x => x % 2 ? 'odd' : 'even' ); expect(group.toJS()).toEqual({ odd: [1, 3, 5], even: [2, 4, 6] }); }); it('groups indexed sequences, maintaining indicies when keyed sequences', () => { const group = Seq([1, 2, 3, 4, 5, 6]).groupBy(x => x % 2); expect(group.toJS()).toEqual({ 1: [1, 3, 5], 0: [2, 4, 6] }); const keyedGroup = Seq([1, 2, 3, 4, 5, 6]) .toKeyedSeq() .groupBy(x => x % 2); expect(keyedGroup.toJS()).toEqual({ 1: { 0: 1, 2: 3, 4: 5 }, 0: { 1: 2, 3: 4, 5: 6 }, }); }); it('has groups that can be mapped', () => { const mappedGroup = Seq([1, 2, 3, 4, 5, 6]) .groupBy(x => x % 2) .map(group => group.map(value => value * 10)); expect(mappedGroup.toJS()).toEqual({ 1: [10, 30, 50], 0: [20, 40, 60] }); }); }); immutable-js-immutable-js-fa7d047/__tests__/hasIn.ts000066400000000000000000000046451515165743500225050ustar00rootroot00000000000000import { fromJS, hasIn, List, Map } from 'immutable'; describe('hasIn', () => { it('deep has', () => { const m = fromJS({ a: { b: { c: 10, d: undefined } } }); expect(m.hasIn(['a', 'b', 'c'])).toEqual(true); expect(m.hasIn(['a', 'b', 'd'])).toEqual(true); expect(m.hasIn(['a', 'b', 'z'])).toEqual(false); expect(m.hasIn(['a', 'y', 'z'])).toEqual(false); expect(hasIn(m, ['a', 'b', 'c'])).toEqual(true); expect(hasIn(m, ['a', 'b', 'z'])).toEqual(false); }); it('deep has with list as keyPath', () => { const m = fromJS({ a: { b: { c: 10 } } }); expect(m.hasIn(fromJS(['a', 'b', 'c']))).toEqual(true); expect(m.hasIn(fromJS(['a', 'b', 'z']))).toEqual(false); expect(m.hasIn(fromJS(['a', 'y', 'z']))).toEqual(false); expect(hasIn(m, fromJS(['a', 'b', 'c']))).toEqual(true); expect(hasIn(m, fromJS(['a', 'y', 'z']))).toEqual(false); }); it('deep has throws without list or array-like', () => { // @ts-expect-error expect(() => Map().hasIn(undefined)).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: undefined' ); // @ts-expect-error expect(() => Map().hasIn({ a: 1, b: 2 })).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: [object Object]' ); // TODO: should expect error expect(() => Map().hasIn('abc')).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: abc' ); // TODO: should expect error expect(() => hasIn(Map(), 'abc')).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: abc' ); }); it('deep has does not throw if non-readable path', () => { const deep = Map({ key: { regular: 'jsobj' }, list: List([Map({ num: 10 })]), }); expect(deep.hasIn(['key', 'foo', 'item'])).toBe(false); expect(deep.hasIn(['list', 0, 'num', 'badKey'])).toBe(false); expect(hasIn(deep, ['key', 'foo', 'item'])).toBe(false); expect(hasIn(deep, ['list', 0, 'num', 'badKey'])).toBe(false); }); it('deep has in plain Object and Array', () => { const m = { a: { b: { c: [10, undefined], d: undefined } } }; expect(hasIn(m, ['a', 'b', 'c', 0])).toEqual(true); expect(hasIn(m, ['a', 'b', 'c', 1])).toEqual(true); expect(hasIn(m, ['a', 'b', 'c', 2])).toEqual(false); expect(hasIn(m, ['a', 'b', 'd'])).toEqual(true); expect(hasIn(m, ['a', 'b', 'z'])).toEqual(false); expect(hasIn(m, ['a', 'b', 'z'])).toEqual(false); }); }); immutable-js-immutable-js-fa7d047/__tests__/hash.ts000066400000000000000000000031571515165743500223630ustar00rootroot00000000000000import { hash } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('hash', () => { it('stable hash of well known values', () => { expect(hash(true)).toBe(0x42108421); expect(hash(false)).toBe(0x42108420); expect(hash(0)).toBe(0); expect(hash(null)).toBe(0x42108422); expect(hash(undefined)).toBe(0x42108423); expect(hash('a')).toBe(97); expect(hash('immutable-js')).toBe(510203252); expect(hash(123)).toBe(123); }); it('generates different hashes for decimal values', () => { expect(hash(123.456)).toBe(884763256); expect(hash(123.4567)).toBe(887769707); }); it('generates different hashes for different objects', () => { const objA = {}; const objB = {}; expect(hash(objA)).toBe(hash(objA)); expect(hash(objA)).not.toBe(hash(objB)); }); it('generates different hashes for different symbols', () => { const symA = Symbol(); const symB = Symbol(); expect(hash(symA)).toBe(hash(symA)); expect(hash(symA)).not.toBe(hash(symB)); }); it('generates different hashes for different functions', () => { const funA = () => { return; }; const funB = () => { return; }; expect(hash(funA)).toBe(hash(funA)); expect(hash(funA)).not.toBe(hash(funB)); }); const genValue = gen.oneOf([gen.string, gen.int]); check.it('generates unsigned 31-bit integers', [genValue], value => { const hashVal = hash(value); expect(Number.isInteger(hashVal)).toBe(true); expect(hashVal).toBeGreaterThan(-Math.pow(2, 31)); expect(hashVal).toBeLessThan(Math.pow(2, 31)); }); }); immutable-js-immutable-js-fa7d047/__tests__/interpose.ts000066400000000000000000000020361515165743500234430ustar00rootroot00000000000000import { Range } from 'immutable'; describe('interpose', () => { it('separates with a value', () => { const range = Range(10, 15); const interposed = range.interpose(0); expect(interposed.toArray()).toEqual([10, 0, 11, 0, 12, 0, 13, 0, 14]); }); it('can be iterated', () => { const range = Range(10, 15); const interposed = range.interpose(0); const values = interposed.values(); expect(values.next()).toEqual({ value: 10, done: false }); expect(values.next()).toEqual({ value: 0, done: false }); expect(values.next()).toEqual({ value: 11, done: false }); expect(values.next()).toEqual({ value: 0, done: false }); expect(values.next()).toEqual({ value: 12, done: false }); expect(values.next()).toEqual({ value: 0, done: false }); expect(values.next()).toEqual({ value: 13, done: false }); expect(values.next()).toEqual({ value: 0, done: false }); expect(values.next()).toEqual({ value: 14, done: false }); expect(values.next()).toEqual({ value: undefined, done: true }); }); }); immutable-js-immutable-js-fa7d047/__tests__/issues.ts000066400000000000000000000106221515165743500227460ustar00rootroot00000000000000import { fromJS, List, Map, OrderedMap, OrderedSet, Record, Seq, Set, } from 'immutable'; describe('Issue #1175', () => { it('invalid hashCode() response should not infinitly recurse', () => { class BadHash { equals() { return false; } hashCode() { return 2 ** 32; } } const set = Set([new BadHash()]); expect(set.size).toEqual(1); }); }); describe('Issue #1188', () => { it('Removing items from OrderedSet should return OrderedSet', () => { const orderedSet = OrderedSet(['one', 'two', 'three']); const emptyOrderedSet = orderedSet.subtract(['two', 'three', 'one']); expect(OrderedSet.isOrderedSet(emptyOrderedSet)).toBe(true); }); }); describe('Issue #1220 : Seq.rest() throws an exception when invoked on a single item sequence ', () => { it('should be iterable', () => { // Helper for this test const ITERATOR_SYMBOL = (typeof Symbol === 'function' && Symbol.iterator) || '@@iterator'; const r = Seq([1]).rest(); const i = r[ITERATOR_SYMBOL](); expect(i.next()).toEqual({ value: undefined, done: true }); }); }); describe('Issue #1245', () => { it('should return empty collection after takeLast(0)', () => { const size = List(['a', 'b', 'c']).takeLast(0).size; expect(size).toEqual(0); }); }); describe('Issue #1262', () => { it('Set.subtract should accept an array', () => { const MyType = Record({ val: 1 }); const set1 = Set([ MyType({ val: 1 }), MyType({ val: 2 }), MyType({ val: 3 }), ]); const set2 = set1.subtract([MyType({ val: 2 })]); const set3 = set1.subtract(List([MyType({ val: 2 })])); expect(set2).toEqual(set3); }); }); describe('Issue #1287', () => { it('should skip all items in OrderedMap when skipping Infinity', () => { const size = OrderedMap([['a', 1]]).skip(Infinity).size; expect(size).toEqual(0); }); }); describe('Issue #1247', () => { it('Records should not be considered altered after creation', () => { const R = Record({ a: 1 }); const r = new R(); expect(r.wasAltered()).toBe(false); }); }); describe('Issue #1252', () => { it('should be toString-able even if it contains a value which is not', () => { const prototypelessObj = Object.create(null); const list = List([prototypelessObj]); expect(list.toString()).toBe('List [ {} ]'); }); }); describe('Issue #1293', () => { it('merge() should not deeply coerce values', () => { const State = Record({ foo: 'bar' as any, biz: 'baz' }); const deepObject = { qux: 'quux' }; const firstState = State({ foo: deepObject }); const secondState = State().merge({ foo: deepObject }); expect(secondState).toEqual(firstState); }); }); describe('Issue #1643', () => { [ ['a string', 'test'], ['a number', 5], ['null', null], ['undefined', undefined], ['a boolean', true], ['an object', {}], ['an array', []], ['a function', () => null], ].forEach(([label, value]) => { class MyClass { valueOf() { return value; } } it(`Collection#hashCode() should handle objects that return ${label} for valueOf`, () => { const set = Set().add(new MyClass()); set.hashCode(); }); }); }); describe('Issue #1785', () => { const emptyRecord = Record({})(); expect(emptyRecord.merge({ id: 1 })).toBe(emptyRecord); }); describe('Issue #1475', () => { it('complex case should return first value on mergeDeep when types are incompatible', () => { const a = fromJS({ ch: [ { code: 8, }, ], }) as Map; const b = fromJS({ ch: { code: 8, }, }); expect(a.mergeDeep(b).equals(b)).toBe(true); }); it('simple case should return first value on mergeDeep when types are incompatible', () => { const a = fromJS({ ch: [], }) as Map; const b = fromJS({ ch: { code: 8 }, }); expect(a.merge(b).equals(b)).toBe(true); }); }); describe('Issue #1719', () => { it('mergeDeep() should overwrite when types conflict', () => { const objWithObj = fromJS({ items: { '1': { id: '1', }, }, }) as Map; const objWithArray = fromJS({ items: [ { id: '1', }, ], }); expect(objWithObj.mergeDeep(objWithArray).equals(objWithArray)).toBe(true); }); }); immutable-js-immutable-js-fa7d047/__tests__/join.ts000066400000000000000000000017351515165743500223770ustar00rootroot00000000000000import { Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('join', () => { it('string-joins sequences with commas by default', () => { expect(Seq([1, 2, 3, 4, 5]).join()).toBe('1,2,3,4,5'); }); it('string-joins sequences with any string', () => { expect(Seq([1, 2, 3, 4, 5]).join('foo')).toBe('1foo2foo3foo4foo5'); }); it('string-joins sequences with empty string', () => { expect(Seq([1, 2, 3, 4, 5]).join('')).toBe('12345'); }); it('joins sparse-sequences like Array.join', () => { const a = [ 1, undefined, 2, undefined, 3, undefined, 4, undefined, 5, undefined, undefined, ]; expect(Seq(a).join()).toBe(a.join()); }); check.it( 'behaves the same as Array.join', [gen.array(gen.primitive), gen.primitive], (array, joiner) => { expect(Seq(array).join(joiner)).toBe(array.join(joiner)); } ); }); immutable-js-immutable-js-fa7d047/__tests__/merge.ts000066400000000000000000000271471515165743500225440ustar00rootroot00000000000000import { fromJS, List, Map, merge, mergeDeep, mergeDeepWith, Record, Set, } from 'immutable'; describe('merge', () => { it('merges two maps', () => { const m1 = Map({ a: 1, b: 2, c: 3 }); const m2 = Map({ d: 10, b: 20, e: 30 }); expect(m1.merge(m2)).toEqual(Map({ a: 1, b: 20, c: 3, d: 10, e: 30 })); }); it('can merge in an explicitly undefined value', () => { const m1 = Map({ a: 1, b: 2 }); const m2 = Map({ a: undefined as any }); expect(m1.merge(m2)).toEqual(Map({ a: undefined, b: 2 })); }); it('merges two maps with a merge function', () => { const m1 = Map({ a: 1, b: 2, c: 3 }); const m2 = Map({ d: 10, b: 20, e: 30 }); expect(m1.mergeWith((a: any, b: any) => a + b, m2)).toEqual( Map({ a: 1, b: 22, c: 3, d: 10, e: 30 }) ); }); it('throws typeError without merge function', () => { const m1 = Map({ a: 1, b: 2, c: 3 }); const m2 = Map({ d: 10, b: 20, e: 30 }); // @ts-expect-error expect(() => m1.mergeWith(1, m2)).toThrowError(TypeError); }); it('provides key as the third argument of merge function', () => { const m1 = Map({ id: 'temp', b: 2, c: 3 }); const m2 = Map({ id: 10, b: 20, e: 30 }); const add = (a: any, b: any) => a + b; expect( m1.mergeWith((a, b, key) => (key !== 'id' ? add(a, b) : b), m2) ).toEqual(Map({ id: 10, b: 22, c: 3, e: 30 })); }); it('deep merges two maps', () => { const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }) as Map; const m2 = fromJS({ a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }); expect(m1.mergeDeep(m2)).toEqual( fromJS({ a: { b: { c: 10, d: 2, e: 20 }, f: 30 }, g: 40 }) ); }); it('merge uses === for return-self optimization', () => { const date1 = new Date(1234567890000); // Value equal, but different reference. const date2 = new Date(1234567890000); const m = Map().set('a', date1); expect(m.merge({ a: date2 })).not.toBe(m); expect(m.merge({ a: date1 })).toBe(m); }); it('deep merge uses === for return-self optimization', () => { const date1 = new Date(1234567890000); // Value equal, but different reference. const date2 = new Date(1234567890000); const m = Map().setIn(['a', 'b', 'c'], date1); expect(m.mergeDeep({ a: { b: { c: date2 } } })).not.toBe(m); expect(m.mergeDeep({ a: { b: { c: date1 } } })).toBe(m); }); it('deep merges raw JS', () => { const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }) as Map; const js = { a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }; expect(m1.mergeDeep(js)).toEqual( fromJS({ a: { b: { c: 10, d: 2, e: 20 }, f: 30 }, g: 40 }) ); }); it('deep merges raw JS with a merge function', () => { const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }) as Map; const js = { a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }; expect(m1.mergeDeepWith((a: any, b: any) => a + b, js)).toEqual( fromJS({ a: { b: { c: 11, d: 2, e: 20 }, f: 30 }, g: 40 }) ); }); it('deep merges raw JS into raw JS with a merge function', () => { const js1 = { a: { b: { c: 1, d: 2 } } }; const js2 = { a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }; expect(mergeDeepWith((a: any, b: any) => a + b, js1, js2)).toEqual({ a: { b: { c: 11, d: 2, e: 20 }, f: 30 }, g: 40, }); }); it('deep merges collections into raw JS with a merge function', () => { const js = { a: { b: { c: 1, d: 2 } } }; const m = fromJS({ a: { b: { c: 10, e: 20 }, f: 30 }, g: 40 }); expect(mergeDeepWith((a: any, b: any) => a + b, js, m)).toEqual({ a: { b: { c: 11, d: 2, e: 20 }, f: 30 }, g: 40, }); }); it('returns self when a deep merges is a no-op', () => { const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }) as Map; expect(m1.mergeDeep({ a: { b: { c: 1 } } })).toBe(m1); }); it('returns arg when a deep merges is a no-op', () => { const m1 = fromJS({ a: { b: { c: 1, d: 2 } } }); expect(Map().mergeDeep(m1)).toBe(m1); }); it('returns self when a deep merges is a no-op on raw JS', () => { const m1 = { a: { b: { c: 1, d: 2 } } }; expect(mergeDeep(m1, { a: { b: { c: 1 } } })).toBe(m1); }); it('can overwrite existing maps', () => { expect( ( fromJS({ a: { x: 1, y: 1 }, b: { x: 2, y: 2 } }) as Map ).merge({ a: null, b: Map({ x: 10 }), }) ).toEqual(fromJS({ a: null, b: { x: 10 } })); expect( ( fromJS({ a: { x: 1, y: 1 }, b: { x: 2, y: 2 } }) as Map ).mergeDeep({ a: null, b: { x: 10 }, }) ).toEqual(fromJS({ a: null, b: { x: 10, y: 2 } })); }); it('can overwrite existing maps with objects', () => { const m1 = fromJS({ a: { x: 1, y: 1 } }) as Map; // deep conversion. const m2 = Map({ a: { z: 10 } }); // shallow conversion to Map. // Raw object simply replaces map. expect(m1.merge(m2).get('a')).toEqual({ z: 10 }); // raw object. // However, mergeDeep will merge that value into the inner Map. expect(m1.mergeDeep(m2).get('a')).toEqual(Map({ x: 1, y: 1, z: 10 })); }); it('merges map entries with List and Set values', () => { const initial = Map({ a: Map({ x: 10, y: 20 }), b: List([1, 2, 3]), c: Set([1, 2, 3]), }); const additions = Map({ a: Map({ y: 50, z: 100 }), b: List([4, 5, 6]), c: Set([4, 5, 6]), }); expect(initial.mergeDeep(additions)).toEqual( Map({ a: Map({ x: 10, y: 50, z: 100 }), b: List([1, 2, 3, 4, 5, 6]), c: Set([1, 2, 3, 4, 5, 6]), }) ); }); it('merges map entries with new values', () => { const initial = Map({ a: List([1]) }); // Note: merge and mergeDeep do not deeply coerce values, they only merge // with what's there prior. expect(initial.merge({ b: [2] } as any)).toEqual( Map({ a: List([1]), b: [2] }) ); expect(initial.mergeDeep({ b: [2] } as any)).toEqual( fromJS(Map({ a: List([1]), b: [2] })) ); }); it('maintains JS values inside immutable collections', () => { const m1 = fromJS({ a: { b: { imm: 'map' } } }) as Map; const m2 = m1.mergeDeep(Map({ a: Map({ b: { plain: 'obj' } }) })); expect(m1.getIn(['a', 'b'])).toEqual(Map([['imm', 'map']])); // However mergeDeep will merge that value into the inner Map expect(m2.getIn(['a', 'b'])).toEqual(Map({ imm: 'map', plain: 'obj' })); }); it('merges plain Objects', () => { expect(merge({ x: 1, y: 1 }, { y: 2, z: 2 }, Map({ z: 3, q: 3 }))).toEqual({ x: 1, y: 2, z: 3, q: 3, }); }); it('merges plain Arrays', () => { expect(merge([1, 2], [3, 4], List([5, 6]))).toEqual([1, 2, 3, 4, 5, 6]); }); it('merging plain Array returns self after no-op', () => { const a = [1, 2, 3]; expect(merge(a, [], [])).toBe(a); }); it('merges records with a size property set to 0', () => { const Sizable = Record({ size: 0 }); expect(Sizable().merge({ size: 123 }).size).toBe(123); }); it('mergeDeep merges partial conflicts', () => { const a = fromJS({ ch: [ { code: 8, }, ], banana: 'good', }) as Map; const b = fromJS({ ch: { code: 8, }, apple: 'anti-doctor', }); expect( a.mergeDeep(b).equals( fromJS({ ch: { code: 8, }, apple: 'anti-doctor', banana: 'good', }) ) ).toBe(true); }); const map = { type: 'Map', value: Map({ b: 5, c: 9 }) }; const object = { type: 'object', value: { b: 7, d: 12 } }; const RecordFactory = Record({ a: 1, b: 2 }); const record = { type: 'Record', value: RecordFactory({ b: 3 }) }; const list = { type: 'List', value: List(['5']) }; const array = { type: 'array', value: ['9'] }; const set = { type: 'Set', value: Set('3') }; const incompatibleTypes = [ [map, list], [map, array], [map, set], [object, list], [object, array], [object, set], [record, list], [record, array], [record, set], [list, set], ]; for (const [ { type: type1, value: value1 }, { type: type2, value: value2 }, ] of incompatibleTypes) { it(`mergeDeep and Map#mergeDeep replaces ${type1} and ${type2} with each other`, () => { const aObject = { a: value1 }; const bObject = { a: value2 }; expect(mergeDeep(aObject, bObject)).toEqual(bObject); expect(mergeDeep(bObject, aObject)).toEqual(aObject); const aMap = Map({ a: value1 }) as Map; const bMap = Map({ a: value2 }) as Map; expect(aMap.mergeDeep(bMap).equals(bMap)).toBe(true); expect(bMap.mergeDeep(aMap).equals(aMap)).toBe(true); }); } const compatibleTypesAndResult = [ [map, object, Map({ b: 7, c: 9, d: 12 })], [map, record, Map({ a: 1, b: 3, c: 9 })], [object, map, { b: 5, c: 9, d: 12 }], [object, record, { a: 1, b: 3, d: 12 }], [record, map, RecordFactory({ b: 5 })], [record, object, RecordFactory({ b: 7 })], [list, array, List(['5', '9'])], [array, list, ['9', '5']], [map, { type: 'Map', value: Map({ b: 7 }) }, Map({ b: 7, c: 9 })], [object, { type: 'object', value: { d: 3 } }, { b: 7, d: 3 }], [ record, { type: 'Record', value: RecordFactory({ a: 3 }) }, RecordFactory({ a: 3, b: 2 }), ], [list, { type: 'List', value: List(['12']) }, List(['5', '12'])], [array, { type: 'array', value: ['3'] }, ['9', '3']], [set, { type: 'Set', value: Set(['3', '5']) }, Set(['3', '5'])], ] as const; for (const [ { type: type1, value: value1 }, { type: type2, value: value2 }, result, ] of compatibleTypesAndResult) { it(`mergeDeep and Map#mergeDeep merges ${type1} and ${type2}`, () => { const aObject = { a: value1 }; const bObject = { a: value2 }; expect(mergeDeep(aObject, bObject)).toEqual({ a: result }); const aMap = Map({ a: value1 }) as Map; const bMap = Map({ a: value2 }); expect(aMap.mergeDeep(bMap)).toEqual(Map({ a: result })); }); } it('Map#mergeDeep replaces nested List with Map and Map with List', () => { const a = Map({ a: List([Map({ x: 1 })]) }) as Map; const b = Map({ a: Map([[0, Map({ y: 2 })]]) }) as Map; expect(a.mergeDeep(b).equals(b)).toBe(true); expect(b.mergeDeep(a).equals(a)).toBe(true); }); it('functional mergeDeep replaces nested array with Map', () => { const a = { a: [{ x: 1 }] }; const b = Map({ a: Map([[0, Map({ y: 2 })]]) }); expect(mergeDeep(a, b)).toEqual({ a: Map([[0, Map({ y: 2 })]]) }); }); it('is not sensible to prototype pollution', () => { type User = { user: string; admin?: boolean }; // Simulates: app merges HTTP request body (JSON) into user profile const userProfile: User = { user: 'Alice' }; const requestBody = JSON.parse('{"user":"Eve","__proto__":{"admin":true}}'); const r1 = mergeDeep(userProfile, requestBody); expect(r1.user).toBe('Eve'); // Eve (updated correctly) expect(r1.admin).toBeUndefined(); const r2 = mergeDeepWith((a, b) => b, userProfile, requestBody); expect(r2.admin).toBeUndefined(); const r3 = merge(userProfile, requestBody); expect(r3.admin).toBeUndefined(); const nested = JSON.parse('{"profile":{"__proto__":{"admin":true}}}'); const r6 = mergeDeep<{ profile: { bio: string; admin?: boolean } }>( { profile: { bio: 'Hello' } }, nested ); expect(r6.profile.admin).toBeUndefined(); // @ts-expect-error -- testing prototype pollution expect({}.admin).toBeUndefined(); // Confirm NOT global too }); }); immutable-js-immutable-js-fa7d047/__tests__/minmax.ts000066400000000000000000000060301515165743500227220ustar00rootroot00000000000000import { is, Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); const genHeterogeneousishArray = gen.oneOf([ gen.array(gen.oneOf([gen.string, gen.undefined])), gen.array(gen.oneOf([gen.int, gen.NaN])), ]); describe('max', () => { it('returns max in a sequence', () => { expect(Seq([1, 9, 2, 8, 3, 7, 4, 6, 5]).max()).toBe(9); }); it('accepts a comparator', () => { expect(Seq([1, 9, 2, 8, 3, 7, 4, 6, 5]).max((a, b) => b - a)).toBe(1); }); it('by a mapper', () => { const family = Seq([ { name: 'Oakley', age: 7 }, { name: 'Dakota', age: 7 }, { name: 'Casey', age: 34 }, { name: 'Avery', age: 34 }, ]); expect(family.maxBy(p => p.age)).toBe(family.get(2)); }); it('by a mapper and a comparator', () => { const family = Seq([ { name: 'Oakley', age: 7 }, { name: 'Dakota', age: 7 }, { name: 'Casey', age: 34 }, { name: 'Avery', age: 34 }, ]); expect( family.maxBy( p => p.age, (a, b) => b - a ) ).toBe(family.get(0)); }); it('surfaces NaN, null, and undefined', () => { expect(is(NaN, Seq([1, 2, 3, 4, 5, NaN]).max())).toBe(true); expect(is(NaN, Seq([NaN, 1, 2, 3, 4, 5]).max())).toBe(true); expect(is(null, Seq(['A', 'B', 'C', 'D', null]).max())).toBe(true); expect(is(null, Seq([null, 'A', 'B', 'C', 'D']).max())).toBe(true); }); it('null treated as 0 in default iterator', () => { expect(is(2, Seq([-1, -2, null, 1, 2]).max())).toBe(true); }); check.it('is not dependent on order', [genHeterogeneousishArray], vals => { expect(is(Seq(shuffle(vals.slice())).max(), Seq(vals).max())).toEqual(true); }); }); describe('min', () => { it('returns min in a sequence', () => { expect(Seq([1, 9, 2, 8, 3, 7, 4, 6, 5]).min()).toBe(1); }); it('accepts a comparator', () => { expect(Seq([1, 9, 2, 8, 3, 7, 4, 6, 5]).min((a, b) => b - a)).toBe(9); }); it('by a mapper', () => { const family = Seq([ { name: 'Oakley', age: 7 }, { name: 'Dakota', age: 7 }, { name: 'Casey', age: 34 }, { name: 'Avery', age: 34 }, ]); expect(family.minBy(p => p.age)).toBe(family.get(0)); }); it('by a mapper and a comparator', () => { const family = Seq([ { name: 'Oakley', age: 7 }, { name: 'Dakota', age: 7 }, { name: 'Casey', age: 34 }, { name: 'Avery', age: 34 }, ]); expect( family.minBy( p => p.age, (a, b) => b - a ) ).toBe(family.get(2)); }); check.it('is not dependent on order', [genHeterogeneousishArray], vals => { expect(is(Seq(shuffle(vals.slice())).min(), Seq(vals).min())).toEqual(true); }); }); function shuffle(array) { let m = array.length; let t; let i; // While there remain elements to shuffle… while (m) { // Pick a remaining element… i = Math.floor(Math.random() * m--); // And swap it with the current element. t = array[m]; array[m] = array[i]; array[i] = t; } return array; } immutable-js-immutable-js-fa7d047/__tests__/partition.ts000066400000000000000000000053051515165743500234460ustar00rootroot00000000000000import { Collection, isAssociative, isIndexed, isKeyed, isList, isMap, isSeq, isSet, List, Map as IMap, Seq, Set as ISet, } from 'immutable'; describe('partition', () => { let isOdd: jest.Mock; beforeEach(() => { isOdd = jest.fn(x => x % 2); }); it('partitions keyed sequence', () => { const parts = Seq({ a: 1, b: 2, c: 3, d: 4 }).partition(isOdd); expect(isKeyed(parts[0])).toBe(true); expect(isSeq(parts[0])).toBe(true); expect(parts.map(part => part.toJS())).toEqual([ { b: 2, d: 4 }, { a: 1, c: 3 }, ]); expect(isOdd.mock.calls.length).toBe(4); // Each group should be a keyed sequence, not an indexed sequence const trueGroup = parts[1]; expect(trueGroup && trueGroup.toArray()).toEqual([ ['a', 1], ['c', 3], ]); }); it('partitions indexed sequence', () => { const parts = Seq([1, 2, 3, 4, 5, 6]).partition(isOdd); expect(isIndexed(parts[0])).toBe(true); expect(isSeq(parts[0])).toBe(true); expect(parts.map(part => part.toJS())).toEqual([ [2, 4, 6], [1, 3, 5], ]); expect(isOdd.mock.calls.length).toBe(6); }); it('partitions set sequence', () => { const parts = Seq.Set([1, 2, 3, 4, 5, 6]).partition(isOdd); expect(isAssociative(parts[0])).toBe(false); expect(isSeq(parts[0])).toBe(true); expect(parts.map(part => part.toJS())).toEqual([ [2, 4, 6], [1, 3, 5], ]); expect(isOdd.mock.calls.length).toBe(6); }); it('partitions keyed collection', () => { const parts = IMap({ a: 1, b: 2, c: 3, d: 4 }).partition(isOdd); expect(isMap(parts[0])).toBe(true); expect(isSeq(parts[0])).toBe(false); expect(parts.map(part => part.toJS())).toEqual([ { b: 2, d: 4 }, { a: 1, c: 3 }, ]); expect(isOdd.mock.calls.length).toBe(4); // Each group should be a keyed collection, not an indexed collection const trueGroup = parts[1]; expect(trueGroup && trueGroup.toArray()).toEqual([ ['a', 1], ['c', 3], ]); }); it('partitions indexed collection', () => { const parts = List([1, 2, 3, 4, 5, 6]).partition(isOdd); expect(isList(parts[0])).toBe(true); expect(isSeq(parts[0])).toBe(false); expect(parts.map(part => part.toJS())).toEqual([ [2, 4, 6], [1, 3, 5], ]); expect(isOdd.mock.calls.length).toBe(6); }); it('partitions set collection', () => { const parts = ISet([1, 2, 3, 4, 5, 6]).partition(isOdd); expect(isSet(parts[0])).toBe(true); expect(isSeq(parts[0])).toBe(false); expect(parts.map(part => part.toJS().sort())).toEqual([ [2, 4, 6], [1, 3, 5], ]); expect(isOdd.mock.calls.length).toBe(6); }); }); immutable-js-immutable-js-fa7d047/__tests__/slice.ts000066400000000000000000000205531515165743500225360ustar00rootroot00000000000000import { List, Range, Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('slice', () => { it('slices a sequence', () => { expect(Seq([1, 2, 3, 4, 5, 6]).slice(2).toArray()).toEqual([3, 4, 5, 6]); expect(Seq([1, 2, 3, 4, 5, 6]).slice(2, 4).toArray()).toEqual([3, 4]); expect(Seq([1, 2, 3, 4, 5, 6]).slice(-3, -1).toArray()).toEqual([4, 5]); expect(Seq([1, 2, 3, 4, 5, 6]).slice(-1).toArray()).toEqual([6]); expect(Seq([1, 2, 3, 4, 5, 6]).slice(0, -1).toArray()).toEqual([ 1, 2, 3, 4, 5, ]); }); it('creates an immutable stable sequence', () => { const seq = Seq([1, 2, 3, 4, 5, 6]); const sliced = seq.slice(2, -2); expect(sliced.toArray()).toEqual([3, 4]); expect(sliced.toArray()).toEqual([3, 4]); expect(sliced.toArray()).toEqual([3, 4]); }); it('slices a sparse indexed sequence', () => { expect( Seq([ 1, undefined, 2, undefined, 3, undefined, 4, undefined, 5, undefined, 6, ]) .slice(1) .toArray() ).toEqual([ undefined, 2, undefined, 3, undefined, 4, undefined, 5, undefined, 6, ]); expect( Seq([ 1, undefined, 2, undefined, 3, undefined, 4, undefined, 5, undefined, 6, ]) .slice(2) .toArray() ).toEqual([2, undefined, 3, undefined, 4, undefined, 5, undefined, 6]); expect( Seq([ 1, undefined, 2, undefined, 3, undefined, 4, undefined, 5, undefined, 6, ]) .slice(3, -3) .toArray() ).toEqual([undefined, 3, undefined, 4, undefined]); // one trailing hole. }); it('can maintain indices for an keyed indexed sequence', () => { expect( Seq([1, 2, 3, 4, 5, 6]).toKeyedSeq().slice(2).entrySeq().toArray() ).toEqual([ [2, 3], [3, 4], [4, 5], [5, 6], ]); expect( Seq([1, 2, 3, 4, 5, 6]).toKeyedSeq().slice(2, 4).entrySeq().toArray() ).toEqual([ [2, 3], [3, 4], ]); }); it('slices an unindexed sequence', () => { expect(Seq({ a: 1, b: 2, c: 3 }).slice(1).toObject()).toEqual({ b: 2, c: 3, }); expect(Seq({ a: 1, b: 2, c: 3 }).slice(1, 2).toObject()).toEqual({ b: 2 }); expect(Seq({ a: 1, b: 2, c: 3 }).slice(0, 2).toObject()).toEqual({ a: 1, b: 2, }); expect(Seq({ a: 1, b: 2, c: 3 }).slice(-1).toObject()).toEqual({ c: 3 }); expect(Seq({ a: 1, b: 2, c: 3 }).slice(1, -1).toObject()).toEqual({ b: 2 }); }); it('is reversable', () => { expect(Seq([1, 2, 3, 4, 5, 6]).slice(2).reverse().toArray()).toEqual([ 6, 5, 4, 3, ]); expect(Seq([1, 2, 3, 4, 5, 6]).slice(2, 4).reverse().toArray()).toEqual([ 4, 3, ]); expect( Seq([1, 2, 3, 4, 5, 6]) .toKeyedSeq() .slice(2) .reverse() .entrySeq() .toArray() ).toEqual([ [5, 6], [4, 5], [3, 4], [2, 3], ]); expect( Seq([1, 2, 3, 4, 5, 6]) .toKeyedSeq() .slice(2, 4) .reverse() .entrySeq() .toArray() ).toEqual([ [3, 4], [2, 3], ]); }); it('slices a list', () => { expect(List([1, 2, 3, 4, 5, 6]).slice(2).toArray()).toEqual([3, 4, 5, 6]); expect(List([1, 2, 3, 4, 5, 6]).slice(2, 4).toArray()).toEqual([3, 4]); }); it('returns self for whole slices', () => { const s = Seq([1, 2, 3]); expect(s.slice(0)).toBe(s); expect(s.slice(0, 3)).toBe(s); expect(s.slice(-4, 4)).toBe(s); const v = List([1, 2, 3]); expect(v.slice(-4, 4)).toBe(v); expect(v.slice(-3)).toBe(v); expect(v.slice(-4, 4).toList()).toBe(v); }); it('creates a sliced list in O(log32(n))', () => { expect(List([1, 2, 3, 4, 5]).slice(-3, -1).toList().toArray()).toEqual([ 3, 4, ]); }); it('has the same behavior as array slice in known edge cases', () => { const a = Range(0, 33).toArray(); const v = List(a); expect(v.slice(31).toList().toArray()).toEqual(a.slice(31)); }); it('does not slice by floating-point numbers', () => { const seq = Seq([0, 1, 2, 3, 4, 5]); const sliced = seq.slice(0, 2.6); expect(sliced.size).toEqual(2); expect(sliced.toArray()).toEqual([0, 1]); }); it('can create an iterator', () => { const seq = Seq([0, 1, 2, 3, 4, 5]); const iterFront = seq.slice(0, 2).values(); expect(iterFront.next()).toEqual({ value: 0, done: false }); expect(iterFront.next()).toEqual({ value: 1, done: false }); expect(iterFront.next()).toEqual({ value: undefined, done: true }); const iterMiddle = seq.slice(2, 4).values(); expect(iterMiddle.next()).toEqual({ value: 2, done: false }); expect(iterMiddle.next()).toEqual({ value: 3, done: false }); expect(iterMiddle.next()).toEqual({ value: undefined, done: true }); const iterTail = seq.slice(4, 123456).values(); expect(iterTail.next()).toEqual({ value: 4, done: false }); expect(iterTail.next()).toEqual({ value: 5, done: false }); expect(iterTail.next()).toEqual({ value: undefined, done: true }); }); it('stops the entries iterator when the sequence has an undefined end', () => { let seq = Seq([0, 1, 2, 3, 4, 5]); // flatMap is lazy and thus the resulting sequence has no size. seq = seq.flatMap(a => [a]); expect(seq.size).toEqual(undefined); const iterFront = seq.slice(0, 2).entries(); expect(iterFront.next()).toEqual({ value: [0, 0], done: false }); expect(iterFront.next()).toEqual({ value: [1, 1], done: false }); expect(iterFront.next()).toEqual({ value: undefined, done: true }); const iterMiddle = seq.slice(2, 4).entries(); expect(iterMiddle.next()).toEqual({ value: [0, 2], done: false }); expect(iterMiddle.next()).toEqual({ value: [1, 3], done: false }); expect(iterMiddle.next()).toEqual({ value: undefined, done: true }); const iterTail = seq.slice(4, 123456).entries(); expect(iterTail.next()).toEqual({ value: [0, 4], done: false }); expect(iterTail.next()).toEqual({ value: [1, 5], done: false }); expect(iterTail.next()).toEqual({ value: undefined, done: true }); }); check.it( 'works like Array.prototype.slice', [ gen.int, gen.array(gen.oneOf([gen.int, gen.undefined]), { minSize: 0, maxSize: 3, }), ], (valuesLen, args) => { const a = Range(0, valuesLen).toArray(); const v = List(a); const slicedV = v.slice.apply(v, args); const slicedA = a.slice.apply(a, args); expect(slicedV.toArray()).toEqual(slicedA); } ); check.it( 'works like Array.prototype.slice on sparse array input', [ gen.array(gen.array([gen.posInt, gen.int])), gen.array(gen.oneOf([gen.int, gen.undefined]), { minSize: 0, maxSize: 3, }), ], (entries, args) => { const a: Array = []; entries.forEach(entry => (a[entry[0]] = entry[1])); const s = Seq(a); const slicedS = s.slice.apply(s, args); const slicedA = a.slice.apply(a, args); expect(slicedS.toArray()).toEqual(slicedA); } ); describe('take', () => { check.it( 'takes the first n from a list', [gen.int, gen.posInt], (len, num) => { const a = Range(0, len).toArray(); const v = List(a); expect(v.take(num).toArray()).toEqual(a.slice(0, num)); } ); it('creates an immutable stable sequence', () => { const seq = Seq([1, 2, 3, 4, 5, 6]); const sliced = seq.take(3); expect(sliced.toArray()).toEqual([1, 2, 3]); expect(sliced.toArray()).toEqual([1, 2, 3]); expect(sliced.toArray()).toEqual([1, 2, 3]); }); it('converts to array with correct length', () => { const seq = Seq([1, 2, 3, 4, 5, 6]); const s1 = seq.take(3); const s2 = seq.take(10); const sn = seq.take(Infinity); const s3 = seq.filter(v => v < 4).take(10); const s4 = seq.filter(v => v < 4).take(2); expect(s1.toArray().length).toEqual(3); expect(s2.toArray().length).toEqual(6); expect(sn.toArray().length).toEqual(6); expect(s3.toArray().length).toEqual(3); expect(s4.toArray().length).toEqual(2); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/sort.ts000066400000000000000000000032221515165743500224200ustar00rootroot00000000000000import { List, OrderedMap, Range, Seq } from 'immutable'; describe('sort', () => { it('sorts a sequence', () => { expect(Seq([4, 5, 6, 3, 2, 1]).sort().toArray()).toEqual([ 1, 2, 3, 4, 5, 6, ]); }); it('sorts a list', () => { expect(List([4, 5, 6, 3, 2, 1]).sort().toArray()).toEqual([ 1, 2, 3, 4, 5, 6, ]); }); it('sorts undefined values last', () => { expect( List([4, undefined, 5, 6, 3, undefined, 2, 1]).sort().toArray() ).toEqual([1, 2, 3, 4, 5, 6, undefined, undefined]); }); it('sorts a keyed sequence', () => { expect( Seq({ z: 1, y: 2, x: 3, c: 3, b: 2, a: 1 }).sort().entrySeq().toArray() ).toEqual([ ['z', 1], ['a', 1], ['y', 2], ['b', 2], ['x', 3], ['c', 3], ]); }); it('sorts an OrderedMap', () => { expect( OrderedMap({ z: 1, y: 2, x: 3, c: 3, b: 2, a: 1 }) .sort() .entrySeq() .toArray() ).toEqual([ ['z', 1], ['a', 1], ['y', 2], ['b', 2], ['x', 3], ['c', 3], ]); }); it('accepts a sort function', () => { expect( Seq([4, 5, 6, 3, 2, 1]) .sort((a, b) => b - a) .toArray() ).toEqual([6, 5, 4, 3, 2, 1]); }); it('sorts by using a mapper', () => { expect( Range(1, 10) .sortBy(v => v % 3) .toArray() ).toEqual([3, 6, 9, 1, 4, 7, 2, 5, 8]); }); it('sorts by using a mapper and a sort function', () => { expect( Range(1, 10) .sortBy( v => v % 3, (a: number, b: number) => b - a ) .toArray() ).toEqual([2, 5, 8, 1, 4, 7, 3, 6, 9]); }); }); immutable-js-immutable-js-fa7d047/__tests__/splice.ts000066400000000000000000000037221515165743500227150ustar00rootroot00000000000000import { List, Range, Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('splice', () => { it('splices a sequence only removing elements', () => { expect(Seq([1, 2, 3]).splice(0, 1).toArray()).toEqual([2, 3]); expect(Seq([1, 2, 3]).splice(1, 1).toArray()).toEqual([1, 3]); expect(Seq([1, 2, 3]).splice(2, 1).toArray()).toEqual([1, 2]); expect(Seq([1, 2, 3]).splice(3, 1).toArray()).toEqual([1, 2, 3]); }); it('splices a list only removing elements', () => { expect(List([1, 2, 3]).splice(0, 1).toArray()).toEqual([2, 3]); expect(List([1, 2, 3]).splice(1, 1).toArray()).toEqual([1, 3]); expect(List([1, 2, 3]).splice(2, 1).toArray()).toEqual([1, 2]); expect(List([1, 2, 3]).splice(3, 1).toArray()).toEqual([1, 2, 3]); }); it('splicing by infinity', () => { const l = List(['a', 'b', 'c', 'd']); expect(l.splice(2, Infinity, 'x').toArray()).toEqual(['a', 'b', 'x']); expect(l.splice(Infinity, 2, 'x').toArray()).toEqual([ 'a', 'b', 'c', 'd', 'x', ]); const s = List(['a', 'b', 'c', 'd']); expect(s.splice(2, Infinity, 'x').toArray()).toEqual(['a', 'b', 'x']); expect(s.splice(Infinity, 2, 'x').toArray()).toEqual([ 'a', 'b', 'c', 'd', 'x', ]); }); it('has the same behavior as array splice in known edge cases', () => { // arbitrary numbers that sum to 31 const a = Range(0, 49).toArray(); const v = List(a); a.splice(-18, 0, 0); expect(v.splice(-18, 0, 0).toList().toArray()).toEqual(a); }); check.it( 'has the same behavior as array splice', [gen.array(gen.int), gen.array(gen.oneOf([gen.int, gen.undefined]))], (values, args) => { const v = List(values); const a = values.slice(); // clone const splicedV = v.splice.apply(v, args); // persistent a.splice.apply(a, args); // mutative expect(splicedV.toArray()).toEqual(a); } ); }); immutable-js-immutable-js-fa7d047/__tests__/transformerProtocol.ts000066400000000000000000000063041515165743500255210ustar00rootroot00000000000000import * as t from 'transducers-js'; import { List, Map, Set, Stack } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('Transformer Protocol', () => { it('transduces Stack without initial values', () => { const s = Stack.of(1, 2, 3, 4); const xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1) ); const s2 = t.transduce(xform, Stack(), s); expect(s.toArray()).toEqual([1, 2, 3, 4]); expect(s2.toArray()).toEqual([5, 3]); }); it('transduces Stack with initial values', () => { const v1 = Stack.of(1, 2, 3); const v2 = Stack.of(4, 5, 6, 7); const xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1) ); const r = t.transduce(xform, Stack(), v1, v2); expect(v1.toArray()).toEqual([1, 2, 3]); expect(v2.toArray()).toEqual([4, 5, 6, 7]); expect(r.toArray()).toEqual([7, 5, 1, 2, 3]); }); it('transduces List without initial values', () => { const v = List.of(1, 2, 3, 4); const xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1) ); const r = t.transduce(xform, List(), v); expect(v.toArray()).toEqual([1, 2, 3, 4]); expect(r.toArray()).toEqual([3, 5]); }); it('transduces List with initial values', () => { const v1 = List.of(1, 2, 3); const v2 = List.of(4, 5, 6, 7); const xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1) ); const r = t.transduce(xform, List(), v1, v2); expect(v1.toArray()).toEqual([1, 2, 3]); expect(v2.toArray()).toEqual([4, 5, 6, 7]); expect(r.toArray()).toEqual([1, 2, 3, 5, 7]); }); it('transduces Map without initial values', () => { const m1 = Map({ a: 1, b: 2, c: 3, d: 4 }); const xform = t.comp( t.filter(([k, v]) => v % 2 === 0), t.map(([k, v]) => [k, v * 2]) ); const m2 = t.transduce(xform, Map(), m1); expect(m1.toObject()).toEqual({ a: 1, b: 2, c: 3, d: 4 }); expect(m2.toObject()).toEqual({ b: 4, d: 8 }); }); it('transduces Map with initial values', () => { const m1 = Map({ a: 1, b: 2, c: 3 }); const m2 = Map({ a: 4, b: 5 }); const xform = t.comp( t.filter(([k, v]) => v % 2 === 0), t.map(([k, v]) => [k, v * 2]) ); const m3 = t.transduce(xform, Map(), m1, m2); expect(m1.toObject()).toEqual({ a: 1, b: 2, c: 3 }); expect(m2.toObject()).toEqual({ a: 4, b: 5 }); expect(m3.toObject()).toEqual({ a: 8, b: 2, c: 3 }); }); it('transduces Set without initial values', () => { const s1 = Set.of(1, 2, 3, 4); const xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1) ); const s2 = t.transduce(xform, Set(), s1); expect(s1.toArray()).toEqual([1, 2, 3, 4]); expect(s2.toArray()).toEqual([3, 5]); }); it('transduces Set with initial values', () => { const s1 = Set.of(1, 2, 3, 4); const s2 = Set.of(2, 3, 4, 5, 6); const xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1) ); const s3 = t.transduce(xform, Set(), s1, s2); expect(s1.toArray()).toEqual([1, 2, 3, 4]); expect(s2.toArray()).toEqual([2, 3, 4, 5, 6]); expect(s3.toArray()).toEqual([1, 2, 3, 4, 5, 7]); }); }); immutable-js-immutable-js-fa7d047/__tests__/tsconfig.json000066400000000000000000000005341515165743500235730ustar00rootroot00000000000000{ "compilerOptions": { "noEmit": true, // TODO: add additional strictness "strictNullChecks": true, "strictFunctionTypes": true, "target": "esnext", "moduleResolution": "node", "paths": { "immutable": ["../type-definitions/immutable.d.ts"], "jasmine-check": ["../resources/jasmine-check.d.ts"] } } } immutable-js-immutable-js-fa7d047/__tests__/updateIn.ts000066400000000000000000000312761515165743500232140ustar00rootroot00000000000000import { fromJS, List, Map, removeIn, Seq, Set, setIn, updateIn, } from 'immutable'; describe('updateIn', () => { it('deep edit', () => { const m = fromJS({ a: { b: { c: 10 } } }) as Map; expect( m.updateIn(['a', 'b', 'c'], (value: any) => value * 2).toJS() ).toEqual({ a: { b: { c: 20 } }, }); }); it('deep edit with list as keyPath', () => { const m = fromJS({ a: { b: { c: 10 } } }) as Map; expect( m.updateIn(fromJS(['a', 'b', 'c']), (value: any) => value * 2).toJS() ).toEqual({ a: { b: { c: 20 } } }); }); it('deep edit in raw JS', () => { const m = { a: { b: { c: [10] } } }; expect(updateIn(m, ['a', 'b', 'c', 0], (value: any) => value * 2)).toEqual({ a: { b: { c: [20] } }, }); }); it('deep edit throws without list or array-like', () => { // @ts-expect-error expect(() => Map().updateIn(undefined, x => x)).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: undefined' ); // @ts-expect-error expect(() => Map().updateIn({ a: 1, b: 2 }, x => x)).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: [object Object]' ); expect(() => Map().updateIn('abc', x => x)).toThrow( 'Invalid keyPath: expected Ordered Collection or Array: abc' ); }); it('deep edit throws if non-editable path', () => { const deep = Map({ key: Set([List(['item'])]) }); expect(() => deep.updateIn(['key', 'foo', 'item'], () => 'newval')).toThrow( 'Cannot update immutable value without .set() method: Set { List [ "item" ] }' ); const deepSeq = Map({ key: Seq([List(['item'])]) }); expect(() => deepSeq.updateIn(['key', 'foo', 'item'], () => 'newval') ).toThrow( 'Cannot update immutable value without .set() method: Seq [ List [ "item" ] ]' ); const nonObj = Map({ key: 123 }); expect(() => nonObj.updateIn(['key', 'foo'], () => 'newval')).toThrow( 'Cannot update within non-data-structure value in path ["key"]: 123' ); }); it('identity with notSetValue is still identity', () => { const m = Map({ a: { b: { c: 10 } } }); expect(m.updateIn(['x'], 100, id => id)).toEqual(m); }); it('shallow remove', () => { const m = Map({ a: 123 }); expect(m.updateIn([], map => undefined)).toEqual(undefined); }); it('deep remove', () => { const m = fromJS({ a: { b: { c: 10 } } }) as Map; expect( m.updateIn(['a', 'b'], (map: any) => map.remove('c')).toJS() ).toEqual({ a: { b: {} }, }); }); it('deep set', () => { const m = fromJS({ a: { b: { c: 10 } } }) as Map; expect( m.updateIn(['a', 'b'], (map: any) => map.set('d', 20)).toJS() ).toEqual({ a: { b: { c: 10, d: 20 } }, }); }); it('deep push', () => { const m = fromJS({ a: { b: [1, 2, 3] } }) as Map; expect(m.updateIn(['a', 'b'], (list: any) => list.push(4)).toJS()).toEqual({ a: { b: [1, 2, 3, 4] }, }); }); it('deep map', () => { const m = fromJS({ a: { b: [1, 2, 3] } }) as Map; expect( m .updateIn(['a', 'b'], (list: any) => list.map(value => value * 10)) .toJS() ).toEqual({ a: { b: [10, 20, 30] } }); }); it('creates new maps if path contains gaps', () => { const m = fromJS({ a: { b: { c: 10 } } }) as Map; expect( m.updateIn(['a', 'q', 'z'], Map(), (map: any) => map.set('d', 20)).toJS() ).toEqual({ a: { b: { c: 10 }, q: { z: { d: 20 } } } }); }); it('creates new objects if path contains gaps within raw JS', () => { const m = { a: { b: { c: 10 } } }; expect( updateIn(m, ['a', 'b', 'z'], Map(), (map: any) => map.set('d', 20)) ).toEqual({ a: { b: { c: 10, z: Map({ d: 20 }) } } }); }); it('throws if path cannot be set', () => { const m = fromJS({ a: { b: { c: 10 } } }) as Map; expect(() => { m.updateIn(['a', 'b', 'c', 'd'], v => 20).toJS(); }).toThrow(); }); it('update with notSetValue when non-existing key', () => { const m = Map({ a: { b: { c: 10 } } }); expect(m.updateIn(['x'], 100, (map: any) => map + 1).toJS()).toEqual({ a: { b: { c: 10 } }, x: 101, }); }); it('update with notSetValue when non-existing key in raw JS', () => { const m = { a: { b: { c: 10 } } }; expect(updateIn(m, ['x'], 100, (map: any) => map + 1)).toEqual({ a: { b: { c: 10 } }, x: 101, }); }); it('updates self for empty path', () => { const m = fromJS({ a: 1, b: 2, c: 3 }) as Map; expect(m.updateIn([], (map: any) => map.set('b', 20)).toJS()).toEqual({ a: 1, b: 20, c: 3, }); }); it('does not perform edit when new value is the same as old value', () => { const m = fromJS({ a: { b: { c: 10 } } }) as Map; const m2 = m.updateIn(['a', 'b', 'c'], id => id); expect(m2).toBe(m); }); it('does not perform edit when new value is the same as old value in raw JS', () => { const m = { a: { b: { c: 10 } } }; const m2 = updateIn(m, ['a', 'b', 'c'], id => id); expect(m2).toBe(m); }); it('does not perform edit when notSetValue is what you return from updater', () => { const m = Map(); let spiedOnID; const m2 = m.updateIn(['a', 'b', 'c'], Set(), id => (spiedOnID = id)); expect(m2).toBe(m); expect(spiedOnID).toBe(Set()); }); it('provides default notSetValue of undefined', () => { const m = Map(); let spiedOnID; const m2 = m.updateIn(['a', 'b', 'c'], id => (spiedOnID = id)); expect(m2).toBe(m); expect(spiedOnID).toBe(undefined); }); describe('setIn', () => { it('provides shorthand for updateIn to set a single value', () => { const m = Map().setIn(['a', 'b', 'c'], 'X'); expect(m).toEqual(fromJS({ a: { b: { c: 'X' } } })); }); it('accepts a list as a keyPath', () => { const m = Map().setIn(fromJS(['a', 'b', 'c']), 'X'); expect(m).toEqual(fromJS({ a: { b: { c: 'X' } } })); }); it('returns value when setting empty path', () => { const m = Map(); expect(m.setIn([], 'X')).toBe('X'); }); it('can setIn undefined', () => { const m = Map().setIn(['a', 'b', 'c'], undefined); expect(m).toEqual(Map({ a: Map({ b: Map({ c: undefined }) }) })); }); it('returns self for a no-op', () => { const m = fromJS({ a: { b: { c: 123 } } }) as Map; expect(m.setIn(['a', 'b', 'c'], 123)).toBe(m); }); it('provides shorthand for updateIn to set a single value in raw JS', () => { const m = setIn({}, ['a', 'b', 'c'], 'X'); expect(m).toEqual({ a: { b: { c: 'X' } } }); }); it('accepts a list as a keyPath in raw JS', () => { const m = setIn({}, fromJS(['a', 'b', 'c']), 'X'); expect(m).toEqual({ a: { b: { c: 'X' } } }); }); it('returns value when setting empty path in raw JS', () => { expect(setIn({}, [], 'X')).toBe('X'); }); it('can setIn undefined in raw JS', () => { const m = setIn({}, ['a', 'b', 'c'], undefined); expect(m).toEqual({ a: { b: { c: undefined } } }); }); it('returns self for a no-op in raw JS', () => { const m = { a: { b: { c: 123 } } }; expect(setIn(m, ['a', 'b', 'c'], 123)).toBe(m); }); }); describe('removeIn', () => { it('provides shorthand for updateIn to remove a single value', () => { const m = fromJS({ a: { b: { c: 'X', d: 'Y' } } }) as Map< string, unknown >; expect(m.removeIn(['a', 'b', 'c']).toJS()).toEqual({ a: { b: { d: 'Y' } }, }); }); it('accepts a list as a keyPath', () => { const m = fromJS({ a: { b: { c: 'X', d: 'Y' } } }) as Map< string, unknown >; expect(m.removeIn(fromJS(['a', 'b', 'c'])).toJS()).toEqual({ a: { b: { d: 'Y' } }, }); }); it('does not create empty maps for an unset path', () => { const m = Map(); expect(m.removeIn(['a', 'b', 'c']).toJS()).toEqual({}); }); it('removes itself when removing empty path', () => { const m = Map(); expect(m.removeIn([])).toBe(undefined); }); it('removes values from a Set', () => { const m = Map({ set: Set([1, 2, 3]) }); const m2 = m.removeIn(['set', 2]); expect(m2.toJS()).toEqual({ set: [1, 3] }); }); it('returns undefined when removing an empty path in raw JS', () => { expect(removeIn({}, [])).toBe(undefined); }); it('can removeIn in raw JS', () => { const m = removeIn({ a: { b: { c: 123 } } }, ['a', 'b', 'c']); expect(m).toEqual({ a: { b: { c: undefined } } }); }); it('returns self for a no-op in raw JS', () => { const m = { a: { b: { c: 123 } } }; expect(removeIn(m, ['a', 'b', 'd'])).toBe(m); }); }); describe('mergeIn', () => { it('provides shorthand for updateIn to merge a nested value', () => { const m1 = fromJS({ x: { a: 1, b: 2, c: 3 } }) as Map; const m2 = fromJS({ d: 10, b: 20, e: 30 }) as Map; expect(m1.mergeIn(['x'], m2).toJS()).toEqual({ x: { a: 1, b: 20, c: 3, d: 10, e: 30 }, }); }); it('accepts a list as a keyPath', () => { const m1 = fromJS({ x: { a: 1, b: 2, c: 3 } }) as Map; const m2 = fromJS({ d: 10, b: 20, e: 30 }); expect(m1.mergeIn(fromJS(['x']), m2).toJS()).toEqual({ x: { a: 1, b: 20, c: 3, d: 10, e: 30 }, }); }); it('does not create empty maps for a no-op merge', () => { const m = Map(); expect(m.mergeIn(['a', 'b', 'c'], Map()).toJS()).toEqual({}); }); it('merges into itself for empty path', () => { const m = Map({ a: 1, b: 2, c: 3 }); expect(m.mergeIn([], Map({ d: 10, b: 20, e: 30 })).toJS()).toEqual({ a: 1, b: 20, c: 3, d: 10, e: 30, }); }); it('merges into plain JS Object and Array', () => { const m = Map({ a: { x: [1, 2, 3] } }); expect(m.mergeIn(['a', 'x'], [4, 5, 6])).toEqual( Map({ a: { x: [1, 2, 3, 4, 5, 6] } }) ); }); }); describe('mergeDeepIn', () => { it('provides shorthand for updateIn to merge a nested value', () => { const m1 = fromJS({ x: { a: 1, b: 2, c: 3 } }) as Map; const m2 = fromJS({ d: 10, b: 20, e: 30 }); expect(m1.mergeDeepIn(['x'], m2).toJS()).toEqual({ x: { a: 1, b: 20, c: 3, d: 10, e: 30 }, }); }); it('accepts a list as a keyPath', () => { const m1 = fromJS({ x: { a: 1, b: 2, c: 3 } }) as Map; const m2 = fromJS({ d: 10, b: 20, e: 30 }); expect(m1.mergeDeepIn(fromJS(['x']), m2).toJS()).toEqual({ x: { a: 1, b: 20, c: 3, d: 10, e: 30 }, }); }); it('does not create empty maps for a no-op merge', () => { const m = Map(); expect(m.mergeDeepIn(['a', 'b', 'c'], Map()).toJS()).toEqual({}); }); it('merges into itself for empty path', () => { const m = Map({ a: 1, b: 2, c: 3 }); expect(m.mergeDeepIn([], Map({ d: 10, b: 20, e: 30 })).toJS()).toEqual({ a: 1, b: 20, c: 3, d: 10, e: 30, }); }); it('merges deep into plain JS Object and Array', () => { const m = Map({ a: { x: [1, 2, 3] } }); expect(m.mergeDeepIn(['a'], { x: [4, 5, 6] })).toEqual( Map({ a: { x: [1, 2, 3, 4, 5, 6] } }) ); }); }); describe('prototype pollution', () => { it('setIn on plain object with __proto__ key should not pollute returned object', () => { type User = { profile: { bio: string }; admin?: boolean }; const obj: User = { profile: { bio: 'Hello' } }; const result = setIn(obj, ['__proto__', 'admin'], true); // The returned object should NOT have 'admin' accessible via prototype expect(result.admin).toBeUndefined(); }); it('setIn on plain object with nested __proto__ key should not pollute returned object', () => { type User = { profile: { bio: string; admin?: boolean } }; const obj: User = { profile: { bio: 'Hello' } }; const result = setIn(obj, ['profile', '__proto__', 'admin'], true); // The nested object should NOT have 'admin' accessible via prototype expect(result.profile.admin).toBeUndefined(); }); it('updateIn on plain object with __proto__ key should not pollute returned object', () => { type User = { profile: { bio: string }; admin?: boolean }; const obj: User = { profile: { bio: 'Hello' } }; const result = updateIn(obj, ['__proto__', 'admin'], () => true); // The returned object should NOT have 'admin' accessible via prototype expect(result.admin).toBeUndefined(); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/utils.js000066400000000000000000000034771515165743500225730ustar00rootroot00000000000000/** * @jest-environment jsdom */ /* global document */ // eslint-disable-next-line import/no-unresolved -- immutable is resolve by jest resolver import { List, isPlainObject } from 'immutable'; describe('Utils', () => { describe('isPlainObj()', function testFunc() { const nonPlainCases = [ ['Host object', document.createElement('div')], ['bool primitive false', false], ['bool primitive true', true], ['falsy undefined', undefined], ['falsy null', null], ['Simple function', function () {}], [ 'Instance of other object', (function () { function Foo() {} return new Foo(); })(), ], ['Number primitive ', 5], ['String primitive ', 'P'], ['Number Object', Number(6)], ['Immutable.List', new List()], ['simple array', ['one']], ['Error', Error], ['Internal namespaces', Math], ['Arguments', arguments], ]; const plainCases = [ ['literal Object', {}], ['new Object', new Object()], // eslint-disable-line no-new-object ['Object.create(null)', Object.create(null)], ['nested object', { one: { prop: 'two' } }], ['constructor prop', { constructor: 'prop' }], // shadows an object's constructor ['constructor.name', { constructor: { name: 'two' } }], // shadows an object's constructor.name [ 'Fake toString', { toString: function () { return '[object Object]'; }, }, ], ]; nonPlainCases.forEach(([name, value]) => { it(`${name} returns false`, () => { expect(isPlainObject(value)).toBe(false); }); }); plainCases.forEach(([name, value]) => { it(`${name} returns true`, () => { expect(isPlainObject(value)).toBe(true); }); }); }); }); immutable-js-immutable-js-fa7d047/__tests__/utils/000077500000000000000000000000001515165743500222225ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/__tests__/utils/shallowCopy.ts000066400000000000000000000033111515165743500250740ustar00rootroot00000000000000import { describe, it, expect } from '@jest/globals'; import shallowCopy from '../../src/utils/shallowCopy'; describe('shallowCopy', () => { it('copies a plain object', () => { const obj = { a: 1, b: 2 }; const copy = shallowCopy(obj); expect(copy).toEqual({ a: 1, b: 2 }); expect(copy).not.toBe(obj); }); it('copies an array', () => { const arr = [1, 2, 3]; const copy = shallowCopy(arr); expect(copy).toEqual([1, 2, 3]); expect(copy).not.toBe(arr); }); it('should not propagate __proto__ key from source object', () => { type User = { user: string; admin?: boolean }; // @ts-expect-error -- testing prototype pollution delete Object.prototype.admin; // JSON.parse creates an own property named "__proto__" (not the actual prototype) const malicious = JSON.parse('{"user":"Eve","__proto__":{"admin":true}}'); const copy = shallowCopy(malicious); // The copy should NOT have admin on its prototype chain expect((copy as User).admin).toBeUndefined(); // Global Object prototype should NOT be polluted expect(({} as User).admin).toBeUndefined(); // @ts-expect-error -- cleanup delete Object.prototype.admin; }); it('should not propagate constructor key from source object', () => { type User = { user: string; admin?: boolean }; const malicious: User = { user: 'Eve', // @ts-expect-error -- intentionally setting constructor to test pollution constructor: { prototype: { admin: true } }, }; const copy = shallowCopy(malicious); expect((copy as User).admin).toBeUndefined(); // The constructor of a plain new object should still be Object expect({}.constructor).toBe(Object); }); }); immutable-js-immutable-js-fa7d047/__tests__/zip.ts000066400000000000000000000070601515165743500222370ustar00rootroot00000000000000import { List, Range, Seq } from 'immutable'; import * as jasmineCheck from 'jasmine-check'; jasmineCheck.install(); describe('zip', () => { it('zips lists into a list of tuples', () => { expect( Seq([1, 2, 3]) .zip(Seq([4, 5, 6])) .toArray() ).toEqual([ [1, 4], [2, 5], [3, 6], ]); }); it('zip results can be converted to JS', () => { const l1 = List([List([1]), List([2]), List([3])]); const l2 = List([List([4]), List([5]), List([6])]); const zipped = l1.zip(l2); expect(zipped).toEqual( List([ [List([1]), List([4])], [List([2]), List([5])], [List([3]), List([6])], ]) ); expect(zipped.toJS()).toEqual([ [[1], [4]], [[2], [5]], [[3], [6]], ]); }); it('zips with infinite lists', () => { expect( Range() .zip(Seq(['A', 'B', 'C'])) .toArray() ).toEqual([ [0, 'A'], [1, 'B'], [2, 'C'], ]); }); it('has unknown size when zipped with unknown size', () => { const seq = Range(0, 10); const zipped = seq.zip(seq.filter(n => n % 2 === 0)); expect(zipped.size).toBe(undefined); expect(zipped.count()).toBe(5); }); check.it( 'is always the size of the smaller sequence', [gen.array(gen.posInt).notEmpty()], lengths => { const ranges = lengths.map(l => Range(0, l)); const first = ranges.shift(); const zipped = first.zip.apply(first, ranges); const shortestLength = Math.min.apply(Math, lengths); expect(zipped.size).toBe(shortestLength); } ); describe('zipWith', () => { it('zips with a custom function', () => { expect( Seq([1, 2, 3]) .zipWith((a, b) => a + b, Seq([4, 5, 6])) .toArray() ).toEqual([5, 7, 9]); }); it('can zip to create immutable collections', () => { expect( Seq([1, 2, 3]) .zipWith( function () { return List(arguments); }, Seq([4, 5, 6]), Seq([7, 8, 9]) ) .toJS() ).toEqual([ [1, 4, 7], [2, 5, 8], [3, 6, 9], ]); }); }); describe('zipAll', () => { it('fills in the empty zipped values with undefined', () => { expect( Seq([1, 2, 3]) .zipAll(Seq([4])) .toArray() ).toEqual([ [1, 4], [2, undefined], [3, undefined], ]); }); check.it( 'is always the size of the longest sequence', [gen.array(gen.posInt).notEmpty()], lengths => { const ranges = lengths.map(l => Range(0, l)); const first = ranges.shift(); const zipped = first.zipAll.apply(first, ranges); const longestLength = Math.max.apply(Math, lengths); expect(zipped.size).toBe(longestLength); } ); }); describe('interleave', () => { it('interleaves multiple collections', () => { expect( Seq([1, 2, 3]) .interleave(Seq([4, 5, 6]), Seq([7, 8, 9])) .toArray() ).toEqual([1, 4, 7, 2, 5, 8, 3, 6, 9]); }); it('stops at the shortest collection', () => { const i = Seq([1, 2, 3]).interleave(Seq([4, 5]), Seq([7, 8, 9])); expect(i.size).toBe(6); expect(i.toArray()).toEqual([1, 4, 7, 2, 5, 8]); }); it('with infinite lists', () => { const r: Seq.Indexed = Range(); const i = r.interleave(Seq(['A', 'B', 'C'])); expect(i.size).toBe(6); expect(i.toArray()).toEqual([0, 'A', 1, 'B', 2, 'C']); }); }); }); immutable-js-immutable-js-fa7d047/jest.config.js000066400000000000000000000006751515165743500217030ustar00rootroot00000000000000module.exports = { testRunner: 'jest-jasmine2', // See https://jestjs.io/blog/2021/05/25/jest-27#flipping-defaults as `jasmine-check` uses jasmine and not `jest-circus` moduleFileExtensions: ['js', 'ts'], resolver: '/resources/jestResolver.js', transform: { '^.+\\.(js|ts)$': '/resources/jestPreprocessor.js', }, testRegex: '/__tests__/.*\\.(ts|js)$', unmockedModulePathPatterns: ['./node_modules/react'], }; immutable-js-immutable-js-fa7d047/package-lock.json000066400000000000000000031753571515165743500223650ustar00rootroot00000000000000{ "name": "immutable", "version": "4.3.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "immutable", "version": "4.3.8", "license": "MIT", "devDependencies": { "@types/jest": "27.0.1", "@types/react": "17.0.11", "benchmark": "2.1.4", "colors": "1.4.0", "cpy-cli": "3.1.1", "dtslint": "^4.2.1", "eslint": "^8.56.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-next": "^14.1.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "flow-bin": "0.160.0", "jasmine-check": "1.0.0-rc.0", "jest": "27.2.0", "make-synchronous": "0.1.1", "marked": "2.1.2", "microtime": "3.0.0", "next": "^14.1.0", "next-sitemap": "4.2.3", "npm-run-all": "4.1.5", "prettier": "2.3.2", "react": "^18.2.0", "react-dom": "^18.2.0", "rimraf": "2.7.1", "rollup": "2.52.3", "rollup-plugin-buble": "0.19.8", "rollup-plugin-commonjs": "9.1.3", "rollup-plugin-json": "3.0.0", "rollup-plugin-strip-banner": "2.0.0", "transducers-js": "0.4.174", "tslint": "6.1.3", "tslint-config-prettier": "1.18.0", "typescript": "5.1", "uglify-js": "3.11.1", "uglify-save-license": "0.4.1" }, "engines": { "npm": ">=7.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/@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "dependencies": { "@babel/highlight": "^7.10.4" } }, "node_modules/@babel/compat-data": { "version": "7.15.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.15.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-module-transforms": "^7.15.4", "@babel/helpers": "^7.15.4", "@babel/parser": "^7.15.5", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/@babel/core/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/@babel/core/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@babel/generator": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "dependencies": { "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@babel/helper-compilation-targets": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.15.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "dependencies": { "@babel/helper-get-function-arity": "^7.15.4", "@babel/template": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", "@babel/helper-simple-access": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/helper-validator-identifier": "^7.14.9", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": { "version": "7.14.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.15.4", "@babel/helper-optimise-call-expression": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "dependencies": { "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/@babel/highlight/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/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/@babel/parser": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.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-bigint": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "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-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-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-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-typescript": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "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/runtime": { "version": "7.23.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime/node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", "@babel/helper-function-name": "^7.15.4", "@babel/helper-hoist-variables": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/@babel/traverse/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/@babel/traverse/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/@babel/types": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types/node_modules/@babel/helper-validator-identifier": { "version": "7.14.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, "node_modules/@corex/deepmerge": { "version": "4.0.43", "resolved": "https://registry.npmjs.org/@corex/deepmerge/-/deepmerge-4.0.43.tgz", "integrity": "sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==", "dev": true }, "node_modules/@definitelytyped/header-parser": { "version": "0.0.141", "resolved": "https://registry.npmjs.org/@definitelytyped/header-parser/-/header-parser-0.0.141.tgz", "integrity": "sha512-u7f/NnXJJMML86BBGwLaQwhxfvuEogJdRTUA8g2vOZ9UhGzAyLSX3njTp7lni7C7PGYp2/vV2B+YLBwujQzJ8Q==", "dev": true, "dependencies": { "@definitelytyped/typescript-versions": "^0.0.141", "@types/parsimmon": "^1.10.1", "parsimmon": "^1.13.0" } }, "node_modules/@definitelytyped/typescript-versions": { "version": "0.0.141", "resolved": "https://registry.npmjs.org/@definitelytyped/typescript-versions/-/typescript-versions-0.0.141.tgz", "integrity": "sha512-RHONSp0eGUccKcoiDJF25DVAUk6pNS79ie0/1T0fn/cDTrzhX14eo6Zcz7O9emqAI496pvsS7IhYctoFrZ/xzw==", "dev": true }, "node_modules/@definitelytyped/utils": { "version": "0.0.141", "resolved": "https://registry.npmjs.org/@definitelytyped/utils/-/utils-0.0.141.tgz", "integrity": "sha512-4DneI5xY0KDSF0vNWiSwmDpxVR9E32oQPWFjv0PdEgGaZT1VS8E/LxSHVjwn2+MK3uuk4XK41S/R9IFvddu9Gw==", "dev": true, "dependencies": { "@definitelytyped/typescript-versions": "^0.0.141", "@qiwi/npm-registry-client": "^8.9.1", "@types/node": "^14.14.35", "charm": "^1.0.2", "fs-extra": "^8.1.0", "fstream": "^1.0.12", "tar": "^6.1.11", "tar-stream": "^2.1.4" } }, "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.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "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/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/@eslint/eslintrc/node_modules/ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" } }, "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/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/@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/js": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, "node_modules/@humanwhocodes/config-array/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/@humanwhocodes/config-array/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/@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.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "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/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/@jest/console": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz", "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "jest-message-util": "^27.2.0", "jest-util": "^27.2.0", "slash": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/core": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz", "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==", "dev": true, "dependencies": { "@jest/console": "^27.2.0", "@jest/reporters": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^27.1.1", "jest-config": "^27.2.0", "jest-haste-map": "^27.2.0", "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6", "jest-resolve": "^27.2.0", "jest-resolve-dependencies": "^27.2.0", "jest-runner": "^27.2.0", "jest-runtime": "^27.2.0", "jest-snapshot": "^27.2.0", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "jest-watcher": "^27.2.0", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/@jest/core/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/@jest/environment": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz", "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==", "dev": true, "dependencies": { "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/fake-timers": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz", "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", "jest-message-util": "^27.2.0", "jest-mock": "^27.1.1", "jest-util": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/globals": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz", "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==", "dev": true, "dependencies": { "@jest/environment": "^27.2.0", "@jest/types": "^27.1.1", "expect": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/reporters": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz", "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", "graceful-fs": "^4.2.4", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^4.0.3", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", "jest-haste-map": "^27.2.0", "jest-resolve": "^27.2.0", "jest-util": "^27.2.0", "jest-worker": "^27.2.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", "v8-to-istanbul": "^8.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/@jest/source-map": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "dev": true, "dependencies": { "callsites": "^3.0.0", "graceful-fs": "^4.2.4", "source-map": "^0.6.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/test-result": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz", "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==", "dev": true, "dependencies": { "@jest/console": "^27.2.0", "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/test-sequencer": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz", "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==", "dev": true, "dependencies": { "@jest/test-result": "^27.2.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.2.0", "jest-runtime": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/transform": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz", "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", "@jest/types": "^27.1.1", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.2.0", "jest-regex-util": "^27.0.6", "jest-util": "^27.2.0", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@jest/types": { "version": "27.1.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.1.tgz", "integrity": "sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^16.0.0", "chalk": "^4.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, "dependencies": { "call-me-maybe": "^1.0.1", "glob-to-regexp": "^0.3.0" }, "engines": { "node": ">=4" } }, "node_modules/@mrmlnc/readdir-enhanced/node_modules/glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, "node_modules/@next/env": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==", "dev": true }, "node_modules/@next/eslint-plugin-next": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.0.tgz", "integrity": "sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==", "dev": true, "dependencies": { "glob": "10.3.10" } }, "node_modules/@next/eslint-plugin-next/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/@next/eslint-plugin-next/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/@next/eslint-plugin-next/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/@next/eslint-plugin-next/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/@next/swc-darwin-arm64": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "darwin" ], "engines": { "node": ">= 10" } }, "node_modules/@next/swc-darwin-x64": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "darwin" ], "engines": { "node": ">= 10" } }, "node_modules/@next/swc-linux-arm64-gnu": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@next/swc-linux-arm64-musl": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@next/swc-linux-x64-gnu": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@next/swc-linux-x64-musl": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@next/swc-win32-arm64-msvc": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">= 10" } }, "node_modules/@next/swc-win32-ia32-msvc": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", "cpu": [ "ia32" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">= 10" } }, "node_modules/@next/swc-win32-x64-msvc": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">= 10" } }, "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/@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/@qiwi/npm-registry-client": { "version": "8.9.1", "resolved": "https://registry.npmjs.org/@qiwi/npm-registry-client/-/npm-registry-client-8.9.1.tgz", "integrity": "sha512-rZF+mG+NfijR0SHphhTLHRr4aM4gtfdwoAMY6we2VGQam8vkN1cxGG1Lg/Llrj8Dd0Mu6VjdFQRyMMRZxtZR2A==", "dev": true, "dependencies": { "concat-stream": "^2.0.0", "graceful-fs": "^4.2.4", "normalize-package-data": "~1.0.1 || ^2.0.0 || ^3.0.0", "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^8.0.0", "once": "^1.4.0", "request": "^2.88.2", "retry": "^0.12.0", "safe-buffer": "^5.2.1", "semver": "2 >=2.2.1 || 3.x || 4 || 5 || 7", "slide": "^1.1.6", "ssri": "^8.0.0" }, "optionalDependencies": { "npmlog": "2 || ^3.1.0 || ^4.0.0" } }, "node_modules/@qiwi/npm-registry-client/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@rushstack/eslint-patch": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", "dev": true }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/@swc/helpers": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", "dev": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@swc/helpers/node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/@types/babel__core": { "version": "7.1.16", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "node_modules/@types/babel__generator": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" } }, "node_modules/@types/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", "dev": true, "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { "version": "27.0.1", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", "dev": true, "dependencies": { "jest-diff": "^27.0.0", "pretty-format": "^27.0.0" } }, "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/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "node_modules/@types/node": { "version": "14.17.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.3.tgz", "integrity": "sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==", "dev": true }, "node_modules/@types/normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "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/prettier": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", "dev": true }, "node_modules/@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", "dev": true }, "node_modules/@types/react": { "version": "17.0.11", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/scheduler": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", "dev": true }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "node_modules/@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "20.2.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/parser/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/@typescript-eslint/parser/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/@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/typescript-estree/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/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "engines": { "node": ">= 6" }, "peerDependencies": { "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "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/abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, "node_modules/acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-dynamic-import": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true, "peerDependencies": { "acorn": "^6.0.0" } }, "node_modules/acorn-globals": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "dependencies": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" } }, "node_modules/acorn-globals/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-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-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/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { "debug": "4" }, "engines": { "node": ">= 6.0.0" } }, "node_modules/agent-base/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/agent-base/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/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/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-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/ansi-escapes/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/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "node_modules/are-we-there-yet": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "dev": true, "optional": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, "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/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, "engines": { "node": ">=0.10.0" } }, "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-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, "engines": { "node": ">=0.10.0" } }, "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.2", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", "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" } }, "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": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, "engines": { "node": ">=0.8" } }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, "engines": { "node": ">=0.10.0" } }, "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/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": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, "bin": { "atob": "bin/atob.js" }, "engines": { "node": ">= 4.5.0" } }, "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": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "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": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "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": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "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": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "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": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "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/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.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": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "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": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "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": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/babel-jest": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz", "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==", "dev": true, "dependencies": { "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", "babel-preset-jest": "^27.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, "node_modules/babel-plugin-istanbul": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^4.0.0", "test-exclude": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/babel-plugin-jest-hoist": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.0.0", "@types/babel__traverse": "^7.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.8.3", "@babel/plugin-syntax-import-meta": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-top-level-await": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/babel-preset-jest": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", "dev": true, "dependencies": { "babel-plugin-jest-hoist": "^27.2.0", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "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/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", "define-property": "^1.0.0", "isobject": "^3.0.1", "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/base/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/base/node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "dependencies": { "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/base/node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, "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/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "dependencies": { "lodash": "^4.17.4", "platform": "^1.3.3" } }, "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/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/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "node_modules/browserslist": { "version": "4.16.6", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "dependencies": { "caniuse-lite": "^1.0.30001219", "colorette": "^1.2.2", "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buble": { "version": "0.19.8", "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.8.tgz", "integrity": "sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==", "dev": true, "dependencies": { "acorn": "^6.1.1", "acorn-dynamic-import": "^4.0.0", "acorn-jsx": "^5.0.1", "chalk": "^2.4.2", "magic-string": "^0.25.3", "minimist": "^1.2.0", "os-homedir": "^2.0.0", "regexpu-core": "^4.5.4" }, "bin": { "buble": "bin/buble" } }, "node_modules/buble/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/buble/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/buble/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/buble/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/buble/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/buble/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/buble/node_modules/os-homedir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-2.0.0.tgz", "integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==", "deprecated": "This is not needed anymore. Use `require('os').homedir()` instead.", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/buble/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/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/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/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, "dependencies": { "streamsearch": "^1.1.0" }, "engines": { "node": ">=10.16.0" } }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", "has-value": "^1.0.0", "isobject": "^3.0.1", "set-value": "^2.0.0", "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "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/call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, "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": "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/camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/caniuse-lite": { "version": "1.0.30001580", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz", "integrity": "sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==", "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": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "node_modules/chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "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/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/charm": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", "dev": true, "dependencies": { "inherits": "^2.0.1" } }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/ci-info": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/class-utils/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "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/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "dev": true }, "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/cliui/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/cliui/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/cliui/node_modules/string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "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": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, "node_modules/collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "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/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/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ "node >= 6.0" ], "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "node_modules/concat-stream/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/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/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/convert-source-map/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/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true, "engines": { "node": ">=0.10.0" } }, "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": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "node_modules/cp-file": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", "nested-error-stacks": "^2.0.0", "p-event": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/cpy": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", "dev": true, "dependencies": { "arrify": "^2.0.1", "cp-file": "^7.0.0", "globby": "^9.2.0", "has-glob": "^1.0.0", "junk": "^3.1.0", "nested-error-stacks": "^2.1.0", "p-all": "^2.1.0", "p-filter": "^2.1.0", "p-map": "^3.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cpy-cli": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-3.1.1.tgz", "integrity": "sha512-HCpNdBkQy3rw+uARLuIf0YurqsMXYzBa9ihhSAuxYJcNIrqrSq3BstPfr0cQN38AdMrQiO9Dp4hYy7GtGJsLPg==", "dev": true, "dependencies": { "cpy": "^8.0.0", "meow": "^6.1.1" }, "bin": { "cpy": "cli.js" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cpy/node_modules/@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/cpy/node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "dependencies": { "array-uniq": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", "fill-range": "^4.0.0", "isobject": "^3.0.1", "repeat-element": "^1.1.2", "snapdragon": "^0.8.1", "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/dir-glob": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "dependencies": { "path-type": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/cpy/node_modules/fast-glob": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "dependencies": { "@mrmlnc/readdir-enhanced": "^2.2.1", "@nodelib/fs.stat": "^1.1.2", "glob-parent": "^3.1.0", "is-glob": "^4.0.0", "merge2": "^1.2.3", "micromatch": "^3.1.10" }, "engines": { "node": ">=4.0.0" } }, "node_modules/cpy/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" } }, "node_modules/cpy/node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "dependencies": { "is-extglob": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/globby": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dev": true, "dependencies": { "@types/glob": "^7.1.1", "array-union": "^1.0.2", "dir-glob": "^2.2.2", "fast-glob": "^2.2.6", "glob": "^7.1.3", "ignore": "^4.0.3", "pify": "^4.0.1", "slash": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/cpy/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "dependencies": { "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "braces": "^2.3.1", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "extglob": "^2.0.4", "fragment-cache": "^0.2.1", "kind-of": "^6.0.2", "nanomatch": "^1.2.9", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/cpy/node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { "pify": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/cpy/node_modules/path-type/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/cpy/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/cpy/node_modules/slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/cpy/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" }, "engines": { "node": ">=0.10.0" } }, "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/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/cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, "node_modules/cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { "cssom": "~0.3.6" }, "engines": { "node": ">=8" } }, "node_modules/cssstyle/node_modules/cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, "node_modules/csstype": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", "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/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "dependencies": { "assert-plus": "^1.0.0" }, "engines": { "node": ">=0.10" } }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "dependencies": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.0.0" }, "engines": { "node": ">=10" } }, "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/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, "engines": { "node": ">=0.10" } }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "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/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/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/define-property/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/define-property/node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "dependencies": { "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/define-property/node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "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/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "engines": { "node": ">=8" } }, "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/diff-sequences": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "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": "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/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "dependencies": { "webidl-conversions": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/domexception/node_modules/webidl-conversions": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/dts-critic": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/dts-critic/-/dts-critic-3.3.10.tgz", "integrity": "sha512-XvemZCSc05VIlYrd3SjIO/6OyA3SCXK2RIHEVIbAZjxD6/ptmQfwnrq7pWFxJ6raiD3Edh8PzCSy84QUuAzOTg==", "dev": true, "dependencies": { "@definitelytyped/header-parser": "latest", "command-exists": "^1.2.8", "rimraf": "^3.0.2", "semver": "^6.2.0", "tmp": "^0.2.1", "yargs": "^15.3.1" }, "engines": { "node": ">=10.17.0" }, "peerDependencies": { "typescript": "*" } }, "node_modules/dts-critic/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/dtslint": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/dtslint/-/dtslint-4.2.1.tgz", "integrity": "sha512-57mWY9osUEfS6k62ATS9RSgug1dZcuN4O31hO76u+iEexa6VUEbKoPGaA2mNtc0FQDcdTl0zEUtti79UQKSQyQ==", "dev": true, "dependencies": { "@definitelytyped/header-parser": "latest", "@definitelytyped/typescript-versions": "latest", "@definitelytyped/utils": "latest", "dts-critic": "latest", "fs-extra": "^6.0.1", "json-stable-stringify": "^1.0.1", "strip-json-comments": "^2.0.1", "tslint": "5.14.0", "tsutils": "^2.29.0", "yargs": "^15.1.0" }, "bin": { "dtslint": "bin/index.js" }, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "typescript": ">= 3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev || >= 3.8.0-dev || >= 3.9.0-dev || >= 4.0.0-dev" } }, "node_modules/dtslint/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/dtslint/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/dtslint/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/dtslint/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/dtslint/node_modules/diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/dtslint/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/dtslint/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/dtslint/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/dtslint/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/dtslint/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/dtslint/node_modules/tslint": { "version": "5.14.0", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", "dev": true, "dependencies": { "babel-code-frame": "^6.22.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^3.2.0", "glob": "^7.1.1", "js-yaml": "^3.7.0", "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.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 || >= 3.2.0-dev" } }, "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": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "node_modules/electron-to-chromium": { "version": "1.3.752", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, "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/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/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, "engines": { "node": ">=10.13.0" } }, "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.2", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { "hasown": "^2.0.0" } }, "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/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, "node_modules/escodegen/node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/escodegen/node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/escodegen/node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "dependencies": { "prelude-ls": "~1.1.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/eslint": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.56.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-next": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.0.tgz", "integrity": "sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==", "dev": true, "dependencies": { "@next/eslint-plugin-next": "14.1.0", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.28.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0", "typescript": ">=3.3.1" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/eslint-config-prettier": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "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-import-resolver-node/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/eslint-import-resolver-typescript": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", "eslint-module-utils": "^2.7.4", "fast-glob": "^3.3.1", "get-tsconfig": "^4.5.0", "is-core-module": "^2.11.0", "is-glob": "^4.0.3" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, "node_modules/eslint-import-resolver-typescript/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/eslint-import-resolver-typescript/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/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-module-utils/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/eslint-plugin-import": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "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.15.0" }, "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-import/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/eslint-plugin-import/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/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-prettier": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" }, "engines": { "node": ">=12.0.0" }, "peerDependencies": { "eslint": ">=7.28.0", "prettier": ">=2.0.0" }, "peerDependenciesMeta": { "eslint-config-prettier": { "optional": true } } }, "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, "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/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/eslint-plugin-react/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/eslint-plugin-react/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/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "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/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/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/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/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/ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" } }, "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/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/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/espree/node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "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": "0.5.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", "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/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", "posix-character-classes": "^0.1.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/expand-brackets/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/expect": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz", "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", "jest-matcher-utils": "^27.2.0", "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/expect/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "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/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extend-shallow/node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "dependencies": { "is-plain-object": "^2.0.4" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", "expand-brackets": "^2.1.4", "extend-shallow": "^2.0.1", "fragment-cache": "^0.2.1", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extglob/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extglob/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extglob/node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "dependencies": { "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extglob/node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extract-banner": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/extract-banner/-/extract-banner-0.1.2.tgz", "integrity": "sha1-YdHtXM46za2zX0MjkQtCA2QkGn8=", "dev": true, "dependencies": { "strip-bom-string": "^0.1.2", "strip-use-strict": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/extract-banner/node_modules/strip-bom-string": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-0.1.2.tgz", "integrity": "sha1-nG5yCjE7qYNliVGEBcz7iKX0G5w=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "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-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "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": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "node_modules/fastq": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "dependencies": { "bser": "2.1.1" } }, "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/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-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.1.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "node_modules/flow-bin": { "version": "0.160.0", "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.160.0.tgz", "integrity": "sha512-hqb/1z7U9Jv+2hDdslAgdab6D4AUDrYIcF2zH/CKx9YgQtCeHfnzCcypzCNU7xmBm2+Mi9+1hqeB4OQX2adh0A==", "dev": true, "bin": { "flow": "cli.js" }, "engines": { "node": ">=0.10.0" } }, "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/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "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/foreground-child/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/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "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/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "dependencies": { "map-cache": "^0.2.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "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/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">= 8" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "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/fstream": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" }, "engines": { "node": ">=0.6" } }, "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": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.0", "object-assign": "^4.1.0", "signal-exit": "^3.0.0", "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" } }, "node_modules/gauge/node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/gauge/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, "dependencies": { "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "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-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-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": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/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/get-tsconfig": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" }, "funding": { "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "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": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby/node_modules/ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" } }, "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/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/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": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "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/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "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": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "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": "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/has-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", "dev": true, "dependencies": { "is-glob": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/has-glob/node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "dependencies": { "is-extglob": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/has-property-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "dependencies": { "get-intrinsic": "^1.2.2" }, "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": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "dependencies": { "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, "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/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "dependencies": { "whatwg-encoding": "^1.0.5" }, "engines": { "node": ">=10" } }, "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/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" }, "engines": { "node": ">= 6" } }, "node_modules/http-proxy-agent/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/http-proxy-agent/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/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "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-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "dependencies": { "agent-base": "6", "debug": "4" }, "engines": { "node": ">= 6" } }, "node_modules/https-proxy-agent/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/https-proxy-agent/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/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { "node": ">=10.17.0" } }, "node_modules/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": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "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-local": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" }, "engines": { "node": ">=8" } }, "node_modules/import-local/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/import-local/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/import-local/node_modules/p-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/import-local/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, "node_modules/import-local/node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "engines": { "node": ">=0.8.19" } }, "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/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "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/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/is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "dependencies": { "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, "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": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "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-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-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": "3.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", "dev": true, "dependencies": { "ci-info": "^3.1.1" }, "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-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "dependencies": { "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, "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-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-descriptor/node_modules/kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "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-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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, "dependencies": { "number-is-nan": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "engines": { "node": ">=6" } }, "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-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-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-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-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, "engines": { "node": ">=0.10.0" } }, "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-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "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-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": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "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/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true, "engines": { "node": ">=8" } }, "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/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-source-maps": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-source-maps/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "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/jasmine-check": { "version": "1.0.0-rc.0", "resolved": "https://registry.npmjs.org/jasmine-check/-/jasmine-check-1.0.0-rc.0.tgz", "integrity": "sha1-EXcowVAHjs8hGYbF8WQnW3HpN6Q=", "dev": true, "dependencies": { "testcheck": "^1.0.0-rc" } }, "node_modules/jest": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz", "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==", "dev": true, "dependencies": { "@jest/core": "^27.2.0", "import-local": "^3.0.2", "jest-cli": "^27.2.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/jest-changed-files": { "version": "27.1.1", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.1.tgz", "integrity": "sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "execa": "^5.0.0", "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-circus": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz", "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==", "dev": true, "dependencies": { "@jest/environment": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "expect": "^27.2.0", "is-generator-fn": "^2.0.0", "jest-each": "^27.2.0", "jest-matcher-utils": "^27.2.0", "jest-message-util": "^27.2.0", "jest-runtime": "^27.2.0", "jest-snapshot": "^27.2.0", "jest-util": "^27.2.0", "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-config": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz", "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==", "dev": true, "dependencies": { "@babel/core": "^7.1.0", "@jest/test-sequencer": "^27.2.0", "@jest/types": "^27.1.1", "babel-jest": "^27.2.0", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", "jest-circus": "^27.2.0", "jest-environment-jsdom": "^27.2.0", "jest-environment-node": "^27.2.0", "jest-get-type": "^27.0.6", "jest-jasmine2": "^27.2.0", "jest-regex-util": "^27.0.6", "jest-resolve": "^27.2.0", "jest-runner": "^27.2.0", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "micromatch": "^4.0.4", "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { "ts-node": { "optional": true } } }, "node_modules/jest-diff": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz", "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-docblock": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-each": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz", "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "jest-util": "^27.2.0", "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz", "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==", "dev": true, "dependencies": { "@jest/environment": "^27.2.0", "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", "jest-util": "^27.2.0", "jsdom": "^16.6.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-node": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz", "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==", "dev": true, "dependencies": { "@jest/environment": "^27.2.0", "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", "jest-util": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-get-type": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-haste-map": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz", "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", "jest-util": "^27.2.0", "jest-worker": "^27.2.0", "micromatch": "^4.0.4", "walker": "^1.0.7" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/jest-jasmine2": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz", "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==", "dev": true, "dependencies": { "@babel/traverse": "^7.1.0", "@jest/environment": "^27.2.0", "@jest/source-map": "^27.0.6", "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "expect": "^27.2.0", "is-generator-fn": "^2.0.0", "jest-each": "^27.2.0", "jest-matcher-utils": "^27.2.0", "jest-message-util": "^27.2.0", "jest-runtime": "^27.2.0", "jest-snapshot": "^27.2.0", "jest-util": "^27.2.0", "pretty-format": "^27.2.0", "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-leak-detector": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz", "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==", "dev": true, "dependencies": { "jest-get-type": "^27.0.6", "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-matcher-utils": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz", "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz", "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util/node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/jest-mock": { "version": "27.1.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.1.tgz", "integrity": "sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@types/node": "*" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true, "engines": { "node": ">=6" }, "peerDependencies": { "jest-resolve": "*" }, "peerDependenciesMeta": { "jest-resolve": { "optional": true } } }, "node_modules/jest-regex-util": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz", "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.2.0", "jest-pnp-resolver": "^1.2.2", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "resolve": "^1.20.0", "slash": "^3.0.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve-dependencies": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz", "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", "jest-snapshot": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runner": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz", "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==", "dev": true, "dependencies": { "@jest/console": "^27.2.0", "@jest/environment": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", "jest-environment-jsdom": "^27.2.0", "jest-environment-node": "^27.2.0", "jest-haste-map": "^27.2.0", "jest-leak-detector": "^27.2.0", "jest-message-util": "^27.2.0", "jest-resolve": "^27.2.0", "jest-runtime": "^27.2.0", "jest-util": "^27.2.0", "jest-worker": "^27.2.0", "source-map-support": "^0.5.6", "throat": "^6.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runtime": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz", "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==", "dev": true, "dependencies": { "@jest/console": "^27.2.0", "@jest/environment": "^27.2.0", "@jest/fake-timers": "^27.2.0", "@jest/globals": "^27.2.0", "@jest/source-map": "^27.0.6", "@jest/test-result": "^27.2.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.2.0", "jest-message-util": "^27.2.0", "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", "jest-resolve": "^27.2.0", "jest-snapshot": "^27.2.0", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/node_modules/string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-serializer": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", "dev": true, "dependencies": { "@types/node": "*", "graceful-fs": "^4.2.4" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz", "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==", "dev": true, "dependencies": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", "expect": "^27.2.0", "graceful-fs": "^4.2.4", "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", "jest-haste-map": "^27.2.0", "jest-matcher-utils": "^27.2.0", "jest-message-util": "^27.2.0", "jest-resolve": "^27.2.0", "jest-util": "^27.2.0", "natural-compare": "^1.4.0", "pretty-format": "^27.2.0", "semver": "^7.3.2" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/jest-util": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz", "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", "picomatch": "^2.2.3" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-validate": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz", "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", "pretty-format": "^27.2.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-watcher": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz", "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==", "dev": true, "dependencies": { "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "jest-util": "^27.2.0", "string-length": "^4.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-worker": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz", "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==", "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { "node": ">= 10.13.0" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/jest/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/jest/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/jest/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/jest/node_modules/jest-cli": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz", "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==", "dev": true, "dependencies": { "@jest/core": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", "jest-config": "^27.2.0", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "prompts": "^2.0.1", "yargs": "^16.0.3" }, "bin": { "jest": "bin/jest.js" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/jest/node_modules/string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest/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/jest/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/jest/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/jest/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/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": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "dependencies": { "abab": "^2.0.5", "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", "cssstyle": "^2.3.0", "data-urls": "^2.0.0", "decimal.js": "^10.2.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", "parse5": "6.0.1", "saxes": "^5.0.1", "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "node_modules/jsdom/node_modules/acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/jsdom/node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, "node_modules/jsdom/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/jsdom/node_modules/tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.1.2" }, "engines": { "node": ">=6" } }, "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-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "node_modules/json-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.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "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": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "dependencies": { "jsonify": "~0.0.0" } }, "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "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": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "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": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true, "engines": { "node": "*" } }, "node_modules/jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "engines": [ "node >=0.6.0" ], "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.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": "3.1.0", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", "dev": true, "engines": { "node": ">=8" } }, "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/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, "engines": { "node": ">=6" } }, "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/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "engines": { "node": ">=6" } }, "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/lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/load-json-file/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "engines": { "node": ">=4" } }, "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.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/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/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/magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "dependencies": { "sourcemap-codec": "^1.4.4" } }, "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/make-synchronous": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/make-synchronous/-/make-synchronous-0.1.1.tgz", "integrity": "sha512-Y4SxxqhaoyMDokJQ0AZz0E+bLhRkOSR7Z/IQoTKPdS6HYi3aobal2kMHoHHoqBadPWjf07P4K1FQLXOx3wf9Yw==", "dev": true, "dependencies": { "subsume": "^3.0.0", "type-fest": "^0.16.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-synchronous/node_modules/type-fest": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "dependencies": { "tmpl": "1.0.x" } }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/map-obj": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "dependencies": { "object-visit": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/marked": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.2.tgz", "integrity": "sha512-ueJhIvklJJw04qxQbGIAu63EXwwOCYc7yKMBjgagTM4rjC5QtWyqSNgW7jCosV1/Km/1TUfs5qEpAqcGG0Mo5g==", "dev": true, "bin": { "marked": "bin/marked" }, "engines": { "node": ">= 10" } }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true, "engines": { "node": ">= 0.10.0" } }, "node_modules/meow": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", "dev": true, "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "^4.0.2", "normalize-package-data": "^2.5.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.13.1", "yargs-parser": "^18.1.3" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/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/meow/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/meow/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/meow/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/meow/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/meow/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/read-pkg-up/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/meow/node_modules/read-pkg/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/meow/node_modules/type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, "engines": { "node": ">=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.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" }, "engines": { "node": ">=8.6" } }, "node_modules/microtime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.0.0.tgz", "integrity": "sha512-SirJr7ZL4ow2iWcb54bekS4aWyBQNVcEDBiwAz9D/sTgY59A+uE8UJU15cp5wyZmPBwg/3zf8lyCJ5NUe1nVlQ==", "dev": true, "hasInstallScript": true, "dependencies": { "node-addon-api": "^1.2.0", "node-gyp-build": "^3.8.0" }, "engines": { "node": ">= 4.0.0" } }, "node_modules/mime-db": { "version": "1.49.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.32", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "dev": true, "dependencies": { "mime-db": "1.49.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/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "engines": { "node": ">=4" } }, "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.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" }, "engines": { "node": ">= 6" } }, "node_modules/minimist-options/node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/minipass": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" }, "engines": { "node": ">= 8" } }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/mixin-deep/node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "dependencies": { "is-plain-object": "^2.0.4" }, "engines": { "node": ">=0.10.0" } }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "node_modules/nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "node_modules/next": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz", "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==", "dev": true, "dependencies": { "@next/env": "14.1.0", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "graceful-fs": "^4.2.11", "postcss": "8.4.31", "styled-jsx": "5.1.1" }, "bin": { "next": "dist/bin/next" }, "engines": { "node": ">=18.17.0" }, "optionalDependencies": { "@next/swc-darwin-arm64": "14.1.0", "@next/swc-darwin-x64": "14.1.0", "@next/swc-linux-arm64-gnu": "14.1.0", "@next/swc-linux-arm64-musl": "14.1.0", "@next/swc-linux-x64-gnu": "14.1.0", "@next/swc-linux-x64-musl": "14.1.0", "@next/swc-win32-arm64-msvc": "14.1.0", "@next/swc-win32-ia32-msvc": "14.1.0", "@next/swc-win32-x64-msvc": "14.1.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { "@opentelemetry/api": { "optional": true }, "sass": { "optional": true } } }, "node_modules/next-sitemap": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/next-sitemap/-/next-sitemap-4.2.3.tgz", "integrity": "sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==", "dev": true, "funding": [ { "url": "https://github.com/iamvishnusankar/next-sitemap.git" } ], "dependencies": { "@corex/deepmerge": "^4.0.43", "@next/env": "^13.4.3", "fast-glob": "^3.2.12", "minimist": "^1.2.8" }, "bin": { "next-sitemap": "bin/next-sitemap.mjs", "next-sitemap-cjs": "bin/next-sitemap.cjs" }, "engines": { "node": ">=14.18" }, "peerDependencies": { "next": "*" } }, "node_modules/next-sitemap/node_modules/@next/env": { "version": "13.5.6", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==", "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/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", "dev": true }, "node_modules/node-gyp-build": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==", "dev": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, "node_modules/node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/node-releases": { "version": "1.1.73", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "node_modules/normalize-package-data/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/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/npm-package-arg": { "version": "8.1.5", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", "validate-npm-package-name": "^3.0.0" }, "engines": { "node": ">=10" } }, "node_modules/npm-package-arg/node_modules/hosted-git-info": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/npm-package-arg/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", "cross-spawn": "^6.0.5", "memorystream": "^0.3.1", "minimatch": "^3.0.4", "pidtree": "^0.3.0", "read-pkg": "^3.0.0", "shell-quote": "^1.6.1", "string.prototype.padend": "^3.0.0" }, "bin": { "npm-run-all": "bin/npm-run-all/index.js", "run-p": "bin/run-p/index.js", "run-s": "bin/run-s/index.js" }, "engines": { "node": ">= 4" } }, "node_modules/npm-run-all/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/npm-run-all/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/npm-run-all/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/npm-run-all/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/npm-run-all/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/npm-run-all/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/npm-run-all/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/npm-run-all/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/npm-run-all/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-all/node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-all/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/npm-run-all/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/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", "gauge": "~2.7.3", "set-blocking": "~2.0.0" } }, "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": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, "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": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", "kind-of": "^3.0.3" }, "engines": { "node": ">=0.10.0" } }, "node_modules/object-copy/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, "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-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "dependencies": { "isobject": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/object.assign": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", "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.3", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, "dependencies": { "define-properties": "^1.2.0", "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "dependencies": { "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "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/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "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/p-all": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", "dev": true, "dependencies": { "p-map": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/p-all/node_modules/p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-event": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "dev": true, "dependencies": { "p-timeout": "^3.1.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "dependencies": { "p-map": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/p-filter/node_modules/p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, "engines": { "node": ">=4" } }, "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": "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/p-timeout": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "dependencies": { "p-finally": "^1.0.0" }, "engines": { "node": ">=8" } }, "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/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/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" }, "engines": { "node": ">=4" } }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "node_modules/parsimmon": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.18.0.tgz", "integrity": "sha512-EtVsGuQfDgwGgXzsSDe+5egRPwbcgKRd/omQ1L3Oj2pHy0gYqd+Q7zrBIQ7P/BN6DWUP9vV45HIgZHCmssdzMg==", "dev": true }, "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "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-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.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, "engines": { "node": "14 || >=16.14" } }, "node_modules/path-scurry/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/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/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "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.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pidtree": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, "bin": { "pidtree": "bin/pidtree.js" }, "engines": { "node": ">=0.10" } }, "node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "dependencies": { "node-modules-regexp": "^1.0.0" }, "engines": { "node": ">= 6" } }, "node_modules/platform": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "dev": true }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, "engines": { "node": "^10 || ^12 || >=14" } }, "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/prettier": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" } }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "dependencies": { "fast-diff": "^1.1.2" }, "engines": { "node": ">=6.0.0" } }, "node_modules/pretty-format": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz", "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==", "dev": true, "dependencies": { "@jest/types": "^27.1.1", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "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, "optional": true }, "node_modules/prompts": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dev": true, "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" }, "engines": { "node": ">= 6" } }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "node_modules/qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true, "engines": { "node": ">=0.6" } }, "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/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dev": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" }, "peerDependencies": { "react": "^18.2.0" } }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { "pify": "^3.0.0" }, "engines": { "node": ">=4" } }, "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, "optional": 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, "optional": 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, "optional": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" }, "engines": { "node": ">=8" } }, "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": "8.2.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "dependencies": { "regenerate": "^1.4.0" }, "engines": { "node": ">=4" } }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "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": "4.7.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "dependencies": { "regenerate": "^1.4.0", "regenerate-unicode-properties": "^8.2.0", "regjsgen": "^0.5.1", "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", "unicode-match-property-value-ecmascript": "^1.2.0" }, "engines": { "node": ">=4" } }, "node_modules/regjsgen": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "node_modules/regjsparser": { "version": "0.6.9", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "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": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true, "bin": { "jsesc": "bin/jsesc" } }, "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "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/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, "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/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-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/resolve-cwd/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/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-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, "engines": { "node": ">=0.12" } }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true, "engines": { "node": ">= 4" } }, "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/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "node_modules/rollup": { "version": "2.52.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.3.tgz", "integrity": "sha512-QF3Sju8Kl2z0osI4unyOLyUudyhOMK6G0AeqJWgfiyigqLAlnNrfBcDWDx+f1cqn+JU2iIYVkDrgQ6/KtwEfrg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { "node": ">=10.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-buble": { "version": "0.19.8", "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz", "integrity": "sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw==", "deprecated": "This module has been deprecated and is no longer maintained. Please use @rollup/plugin-buble.", "dev": true, "dependencies": { "buble": "^0.19.8", "rollup-pluginutils": "^2.3.3" } }, "node_modules/rollup-plugin-commonjs": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.3.tgz", "integrity": "sha512-g91ZZKZwTW7F7vL6jMee38I8coj/Q9GBdTmXXeFL7ldgC1Ky5WJvHgbKlAiXXTh762qvohhExwUgeQGFh9suGg==", "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", "dev": true, "dependencies": { "estree-walker": "^0.5.1", "magic-string": "^0.22.4", "resolve": "^1.5.0", "rollup-pluginutils": "^2.0.1" }, "peerDependencies": { "rollup": ">=0.56.0" } }, "node_modules/rollup-plugin-commonjs/node_modules/magic-string": { "version": "0.22.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, "dependencies": { "vlq": "^0.2.2" } }, "node_modules/rollup-plugin-json": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.0.0.tgz", "integrity": "sha512-WUAV9/I/uFWvHhyRTqFb+3SIapjISFJS7R1xN/cXxWESrfYo9I8ncHI7AxJHflKRXhBVSv7revBVJh2wvhWh5w==", "deprecated": "This module has been deprecated and is no longer maintained. Please use @rollup/plugin-json.", "dev": true, "dependencies": { "rollup-pluginutils": "^2.2.0" } }, "node_modules/rollup-plugin-strip-banner": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/rollup-plugin-strip-banner/-/rollup-plugin-strip-banner-2.0.0.tgz", "integrity": "sha512-9ipg2Wzl+6AZ+8PW65DrvuLzVrf9PjXZW39GeG9R0j0vm6DgxYli14wDpovRuKc+xEjKIE5DLAGwUem4Yvo+IA==", "dev": true, "dependencies": { "extract-banner": "0.1.2", "magic-string": "0.25.7", "rollup-pluginutils": "2.8.2" }, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "rollup": "^1.0.0 || ^2.0.0" } }, "node_modules/rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, "dependencies": { "estree-walker": "^0.6.1" } }, "node_modules/rollup-pluginutils/node_modules/estree-walker": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true }, "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/safe-array-concat": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", "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": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "dependencies": { "ret": "~0.1.10" } }, "node_modules/safe-regex-test": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", "dev": true, "dependencies": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" }, "engines": { "node": ">= 0.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/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { "node": ">=10" } }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dev": true, "dependencies": { "loose-envify": "^1.1.0" } }, "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/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "node_modules/set-function-length": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "dev": true, "dependencies": { "define-data-property": "^1.1.1", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.1" }, "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/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/set-value/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, "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.4", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==", "dev": true }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true, "engines": { "node": "*" } }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", "map-cache": "^0.2.2", "source-map": "^0.5.6", "source-map-resolve": "^0.5.0", "use": "^3.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", "snapdragon-util": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon-node/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon-node/node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "dependencies": { "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon-node/node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "dependencies": { "kind-of": "^3.2.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon-util/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", "urix": "^0.1.0" } }, "node_modules/source-map-support": { "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "dependencies": { "extend-shallow": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "node_modules/sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "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/ssri": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "dependencies": { "minipass": "^3.1.1" }, "engines": { "node": ">= 8" } }, "node_modules/stack-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.4.tgz", "integrity": "sha512-ERg+H//lSSYlZhBIUu+wJnqg30AbyBbpZlIhcshpn7BNzpoRODZgfyr9J+8ERf3ooC6af3u7Lcl01nleau7MrA==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0", "source-map-support": "^0.5.20" }, "engines": { "node": ">=10" } }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/static-extend/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "dev": true, "engines": { "node": ">=10.0.0" } }, "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-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": 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/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/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/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/string-width/node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/string-width/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, "dependencies": { "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/string.prototype.matchall": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "regexp.prototype.flags": "^1.5.0", "set-function-name": "^2.0.0", "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.padend": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.2" }, "engines": { "node": ">= 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": "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": { "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-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-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { "min-indent": "^1.0.0" }, "engines": { "node": ">=8" } }, "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": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/strip-use-strict": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/strip-use-strict/-/strip-use-strict-0.1.0.tgz", "integrity": "sha1-4w6P0iBoNOQeXrPz3B6npOQlj18=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/styled-jsx": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", "dev": true, "dependencies": { "client-only": "0.0.1" }, "engines": { "node": ">= 12.0.0" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, "babel-plugin-macros": { "optional": true } } }, "node_modules/subsume": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/subsume/-/subsume-3.0.0.tgz", "integrity": "sha512-6n/UfV8UWKwJNO8OAOiKntwEMihuBeeoJfzpL542C+OuvT4iWG9SwjrXkOmsxjb4SteHUsos9SvrdqZ9+ICwTQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0", "unique-string": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/subsume/node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { "node": ">=8" } }, "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/supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/tar": { "version": "6.1.13", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^4.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" }, "engines": { "node": ">=6" } }, "node_modules/tar-stream/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/tar/node_modules/minipass": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "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/testcheck": { "version": "1.0.0-rc.2", "resolved": "https://registry.npmjs.org/testcheck/-/testcheck-1.0.0-rc.2.tgz", "integrity": "sha1-ETVqJbhFde/gsIV0UehbX6dO5OQ=", "dev": true }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "node_modules/throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, "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/tmp/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/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "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": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "dependencies": { "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/to-object-path/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, "node_modules/to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/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": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { "punycode": "^2.1.1" }, "engines": { "node": ">=8" } }, "node_modules/tr46/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/transducers-js": { "version": "0.4.174", "resolved": "https://registry.npmjs.org/transducers-js/-/transducers-js-0.4.174.tgz", "integrity": "sha1-1YYsEO/0vj0zIqv2u3QuMPG7b8Q=", "dev": true, "engines": { "node": ">= 0.10.0" } }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "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": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "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-config-prettier": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", "dev": true, "bin": { "tslint-config-prettier-check": "bin/check.js" }, "engines": { "node": ">=4.0.0" } }, "node_modules/tslint/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/tslint/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/tslint/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/tslint/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/tslint/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/tslint/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "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/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/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/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "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": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "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.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/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": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "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.6", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=14.17" } }, "node_modules/uglify-js": { "version": "3.11.1", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.1.tgz", "integrity": "sha512-OApPSuJcxcnewwjSGGfWOjx3oix5XpmrK9Z2j0fTRlHGoZ49IU6kExfZTM0++fCArOOCet+vIfWwFHbvWqwp6g==", "dev": true, "bin": { "uglifyjs": "bin/uglifyjs" }, "engines": { "node": ">=0.8.0" } }, "node_modules/uglify-save-license": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", "dev": true }, "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/unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^1.0.4", "unicode-property-aliases-ecmascript": "^1.0.4" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" }, "engines": { "node": ">=0.10.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/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/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/unset-value/node_modules/has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", "isobject": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "dependencies": { "isarray": "1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/unset-value/node_modules/has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true, "engines": { "node": ">=0.10.0" } }, "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/urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "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/v8-to-istanbul": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" }, "engines": { "node": ">=10.12.0" } }, "node_modules/v8-to-istanbul/node_modules/source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "dependencies": { "builtins": "^1.0.3" } }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "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/vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "dependencies": { "browser-process-hrtime": "^1.0.0" } }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "dependencies": { "xml-name-validator": "^3.0.0" }, "engines": { "node": ">=10" } }, "node_modules/walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "dependencies": { "makeerror": "1.0.x" } }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, "engines": { "node": ">=10.4" } }, "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "dependencies": { "iconv-lite": "0.4.24" } }, "node_modules/whatwg-encoding/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/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "node_modules/whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "dependencies": { "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" }, "engines": { "node": ">=10" } }, "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/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": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "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.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "optional": true, "dependencies": { "string-width": "^1.0.2 || 2" } }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "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/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/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/node_modules/string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "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/ws": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "dev": true, "engines": { "node": ">=8.3.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, "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": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "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/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/yargs/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/yargs/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/yargs/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/yargs/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/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": "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/yargs/node_modules/string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "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 }, "@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, "@babel/compat-data": { "version": "7.15.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", "dev": true }, "@babel/core": { "version": "7.15.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-module-transforms": "^7.15.4", "@babel/helpers": "^7.15.4", "@babel/parser": "^7.15.5", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { "@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" } }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "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 }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/generator": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "requires": { "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/helper-compilation-targets": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "requires": { "@babel/compat-data": "^7.15.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" } }, "@babel/helper-function-name": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.15.4", "@babel/template": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/helper-get-function-arity": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-hoist-variables": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-member-expression-to-functions": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-module-imports": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-module-transforms": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", "@babel/helper-simple-access": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/helper-validator-identifier": "^7.14.9", "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" }, "dependencies": { "@babel/helper-validator-identifier": { "version": "7.14.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true } } }, "@babel/helper-optimise-call-expression": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-plugin-utils": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true }, "@babel/helper-replace-supers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.15.4", "@babel/helper-optimise-call-expression": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/helper-simple-access": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "dev": true }, "@babel/helper-validator-option": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helpers": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "requires": { "@babel/template": "^7.15.4", "@babel/traverse": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "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" } } } }, "@babel/parser": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", "dev": true }, "@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-bigint": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "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-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-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-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-typescript": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/runtime": { "version": "7.23.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dev": true, "requires": { "regenerator-runtime": "^0.14.0" }, "dependencies": { "regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true } } }, "@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4" }, "dependencies": { "@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" } } } }, "@babel/traverse": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", "@babel/helper-function-name": "^7.15.4", "@babel/helper-hoist-variables": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" } }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "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 }, "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 } } }, "@babel/types": { "version": "7.15.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" }, "dependencies": { "@babel/helper-validator-identifier": { "version": "7.14.9", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true } } }, "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, "@corex/deepmerge": { "version": "4.0.43", "resolved": "https://registry.npmjs.org/@corex/deepmerge/-/deepmerge-4.0.43.tgz", "integrity": "sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==", "dev": true }, "@definitelytyped/header-parser": { "version": "0.0.141", "resolved": "https://registry.npmjs.org/@definitelytyped/header-parser/-/header-parser-0.0.141.tgz", "integrity": "sha512-u7f/NnXJJMML86BBGwLaQwhxfvuEogJdRTUA8g2vOZ9UhGzAyLSX3njTp7lni7C7PGYp2/vV2B+YLBwujQzJ8Q==", "dev": true, "requires": { "@definitelytyped/typescript-versions": "^0.0.141", "@types/parsimmon": "^1.10.1", "parsimmon": "^1.13.0" } }, "@definitelytyped/typescript-versions": { "version": "0.0.141", "resolved": "https://registry.npmjs.org/@definitelytyped/typescript-versions/-/typescript-versions-0.0.141.tgz", "integrity": "sha512-RHONSp0eGUccKcoiDJF25DVAUk6pNS79ie0/1T0fn/cDTrzhX14eo6Zcz7O9emqAI496pvsS7IhYctoFrZ/xzw==", "dev": true }, "@definitelytyped/utils": { "version": "0.0.141", "resolved": "https://registry.npmjs.org/@definitelytyped/utils/-/utils-0.0.141.tgz", "integrity": "sha512-4DneI5xY0KDSF0vNWiSwmDpxVR9E32oQPWFjv0PdEgGaZT1VS8E/LxSHVjwn2+MK3uuk4XK41S/R9IFvddu9Gw==", "dev": true, "requires": { "@definitelytyped/typescript-versions": "^0.0.141", "@qiwi/npm-registry-client": "^8.9.1", "@types/node": "^14.14.35", "charm": "^1.0.2", "fs-extra": "^8.1.0", "fstream": "^1.0.12", "tar": "^6.1.11", "tar-stream": "^2.1.4" } }, "@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.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "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 }, "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" } }, "ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "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" } }, "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 }, "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 } } }, "@eslint/js": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true }, "@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" }, "dependencies": { "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" } }, "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 } } }, "@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.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "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": { "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 }, "@jest/console": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz", "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "jest-message-util": "^27.2.0", "jest-util": "^27.2.0", "slash": "^3.0.0" } }, "@jest/core": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz", "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==", "dev": true, "requires": { "@jest/console": "^27.2.0", "@jest/reporters": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^27.1.1", "jest-config": "^27.2.0", "jest-haste-map": "^27.2.0", "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6", "jest-resolve": "^27.2.0", "jest-resolve-dependencies": "^27.2.0", "jest-runner": "^27.2.0", "jest-runtime": "^27.2.0", "jest-snapshot": "^27.2.0", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "jest-watcher": "^27.2.0", "micromatch": "^4.0.4", "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "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" } } } }, "@jest/environment": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz", "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==", "dev": true, "requires": { "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1" } }, "@jest/fake-timers": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz", "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@sinonjs/fake-timers": "^7.0.2", "@types/node": "*", "jest-message-util": "^27.2.0", "jest-mock": "^27.1.1", "jest-util": "^27.2.0" } }, "@jest/globals": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz", "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==", "dev": true, "requires": { "@jest/environment": "^27.2.0", "@jest/types": "^27.1.1", "expect": "^27.2.0" } }, "@jest/reporters": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz", "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", "graceful-fs": "^4.2.4", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^4.0.3", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", "jest-haste-map": "^27.2.0", "jest-resolve": "^27.2.0", "jest-util": "^27.2.0", "jest-worker": "^27.2.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", "v8-to-istanbul": "^8.0.0" } }, "@jest/source-map": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "dev": true, "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.2.4", "source-map": "^0.6.0" } }, "@jest/test-result": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz", "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==", "dev": true, "requires": { "@jest/console": "^27.2.0", "@jest/types": "^27.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz", "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==", "dev": true, "requires": { "@jest/test-result": "^27.2.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.2.0", "jest-runtime": "^27.2.0" } }, "@jest/transform": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz", "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==", "dev": true, "requires": { "@babel/core": "^7.1.0", "@jest/types": "^27.1.1", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.2.0", "jest-regex-util": "^27.0.6", "jest-util": "^27.2.0", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" } }, "@jest/types": { "version": "27.1.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.1.1.tgz", "integrity": "sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, "requires": { "call-me-maybe": "^1.0.1", "glob-to-regexp": "^0.3.0" }, "dependencies": { "glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true } } }, "@next/env": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==", "dev": true }, "@next/eslint-plugin-next": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.0.tgz", "integrity": "sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==", "dev": true, "requires": { "glob": "10.3.10" }, "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": "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" } }, "minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true } } }, "@next/swc-darwin-arm64": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", "dev": true, "optional": true }, "@next/swc-darwin-x64": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", "dev": true, "optional": true }, "@next/swc-linux-arm64-gnu": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", "dev": true, "optional": true }, "@next/swc-linux-arm64-musl": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", "dev": true, "optional": true }, "@next/swc-linux-x64-gnu": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", "dev": true, "optional": true }, "@next/swc-linux-x64-musl": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", "dev": true, "optional": true }, "@next/swc-win32-arm64-msvc": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", "dev": true, "optional": true }, "@next/swc-win32-ia32-msvc": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", "dev": true, "optional": true }, "@next/swc-win32-x64-msvc": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", "dev": true, "optional": 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" } }, "@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 }, "@qiwi/npm-registry-client": { "version": "8.9.1", "resolved": "https://registry.npmjs.org/@qiwi/npm-registry-client/-/npm-registry-client-8.9.1.tgz", "integrity": "sha512-rZF+mG+NfijR0SHphhTLHRr4aM4gtfdwoAMY6we2VGQam8vkN1cxGG1Lg/Llrj8Dd0Mu6VjdFQRyMMRZxtZR2A==", "dev": true, "requires": { "concat-stream": "^2.0.0", "graceful-fs": "^4.2.4", "normalize-package-data": "~1.0.1 || ^2.0.0 || ^3.0.0", "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^8.0.0", "npmlog": "2 || ^3.1.0 || ^4.0.0", "once": "^1.4.0", "request": "^2.88.2", "retry": "^0.12.0", "safe-buffer": "^5.2.1", "semver": "2 >=2.2.1 || 3.x || 4 || 5 || 7", "slide": "^1.1.6", "ssri": "^8.0.0" }, "dependencies": { "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" } } } }, "@rushstack/eslint-patch": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", "dev": true }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } }, "@swc/helpers": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", "dev": true, "requires": { "tslib": "^2.4.0" }, "dependencies": { "tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true } } }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@types/babel__core": { "version": "7.1.16", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "@types/babel__generator": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "@types/babel__traverse": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", "dev": true, "requires": { "@types/minimatch": "*", "@types/node": "*" } }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "requires": { "@types/node": "*" } }, "@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/jest": { "version": "27.0.1", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", "dev": true, "requires": { "jest-diff": "^27.0.0", "pretty-format": "^27.0.0" } }, "@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/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "@types/node": { "version": "14.17.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.3.tgz", "integrity": "sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==", "dev": true }, "@types/normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "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/prettier": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", "dev": true }, "@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", "dev": true }, "@types/react": { "version": "17.0.11", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz", "integrity": "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==", "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "@types/scheduler": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", "dev": true }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { "version": "20.2.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "@typescript-eslint/parser": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "dependencies": { "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" } }, "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 } } }, "@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "requires": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" } }, "@typescript-eslint/types": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "requires": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { "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" } }, "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 }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, "tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" } } } }, "@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "requires": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" } }, "@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 }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, "acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "acorn-dynamic-import": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true, "requires": {} }, "acorn-globals": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" }, "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-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-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 }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "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 } } }, "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" } }, "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-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" }, "dependencies": { "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 } } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "dev": true, "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, "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" } }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "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-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "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.2", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", "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" } }, "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": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { "safer-buffer": "~2.1.0" } }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "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 }, "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": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "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": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "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": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "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": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "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" } }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "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": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } }, "babel-jest": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz", "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==", "dev": true, "requires": { "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", "babel-preset-jest": "^27.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" } }, "babel-plugin-istanbul": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^4.0.0", "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.0.0", "@types/babel__traverse": "^7.0.6" } }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.8.3", "@babel/plugin-syntax-import-meta": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, "babel-preset-jest": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", "dev": true, "requires": { "babel-plugin-jest-hoist": "^27.2.0", "babel-preset-current-node-syntax": "^1.0.0" } }, "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 }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", "define-property": "^1.0.0", "isobject": "^3.0.1", "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { "kind-of": "^6.0.0" } }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { "kind-of": "^6.0.0" } }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } } } }, "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 }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, "benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "requires": { "lodash": "^4.17.4", "platform": "^1.3.3" } }, "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": { "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" } } } }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "browserslist": { "version": "4.16.6", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001219", "colorette": "^1.2.2", "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" } }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { "node-int64": "^0.4.0" } }, "buble": { "version": "0.19.8", "resolved": "https://registry.npmjs.org/buble/-/buble-0.19.8.tgz", "integrity": "sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==", "dev": true, "requires": { "acorn": "^6.1.1", "acorn-dynamic-import": "^4.0.0", "acorn-jsx": "^5.0.1", "chalk": "^2.4.2", "magic-string": "^0.25.3", "minimist": "^1.2.0", "os-homedir": "^2.0.0", "regexpu-core": "^4.5.4" }, "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "os-homedir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-2.0.0.tgz", "integrity": "sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==", "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" } } } }, "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" } }, "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 }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, "busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, "requires": { "streamsearch": "^1.1.0" } }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", "has-value": "^1.0.0", "isobject": "^3.0.1", "set-value": "^2.0.0", "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.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" } }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, "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": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" } }, "caniuse-lite": { "version": "1.0.30001580", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001580.tgz", "integrity": "sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==", "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, "charm": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", "dev": true, "requires": { "inherits": "^2.0.1" } }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, "ci-info": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", "dev": true }, "cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.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 }, "client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "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" }, "dependencies": { "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 }, "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 }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" } } } }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "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 }, "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" } }, "command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" }, "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" } } } }, "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 }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.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 } } }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "cp-file": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", "nested-error-stacks": "^2.0.0", "p-event": "^4.1.0" } }, "cpy": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", "dev": true, "requires": { "arrify": "^2.0.1", "cp-file": "^7.0.0", "globby": "^9.2.0", "has-glob": "^1.0.0", "junk": "^3.1.0", "nested-error-stacks": "^2.1.0", "p-all": "^2.1.0", "p-filter": "^2.1.0", "p-map": "^3.0.0" }, "dependencies": { "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { "array-uniq": "^1.0.1" } }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", "fill-range": "^4.0.0", "isobject": "^3.0.1", "repeat-element": "^1.1.2", "snapdragon": "^0.8.1", "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, "dir-glob": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { "path-type": "^3.0.0" } }, "fast-glob": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", "@nodelib/fs.stat": "^1.1.2", "glob-parent": "^3.1.0", "is-glob": "^4.0.0", "merge2": "^1.2.3", "micromatch": "^3.1.10" } }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { "is-extglob": "^2.1.0" } } } }, "globby": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dev": true, "requires": { "@types/glob": "^7.1.1", "array-union": "^1.0.2", "dir-glob": "^2.2.2", "fast-glob": "^2.2.6", "glob": "^7.1.3", "ignore": "^4.0.3", "pify": "^4.0.1", "slash": "^2.0.0" } }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "braces": "^2.3.1", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "extglob": "^2.0.4", "fragment-cache": "^0.2.1", "kind-of": "^6.0.2", "nanomatch": "^1.2.9", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "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 }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" } } } }, "cpy-cli": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-3.1.1.tgz", "integrity": "sha512-HCpNdBkQy3rw+uARLuIf0YurqsMXYzBa9ihhSAuxYJcNIrqrSq3BstPfr0cQN38AdMrQiO9Dp4hYy7GtGJsLPg==", "dev": true, "requires": { "cpy": "^8.0.0", "meow": "^6.1.1" } }, "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" } }, "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 }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, "cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "requires": { "cssom": "~0.3.6" }, "dependencies": { "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true } } }, "csstype": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", "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 }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "requires": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.0.0" } }, "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" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "decamelize-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, "dependencies": { "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true } } }, "decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "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 }, "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" } }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { "kind-of": "^6.0.0" } }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { "kind-of": "^6.0.0" } }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } } } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "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 }, "diff-sequences": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", "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": "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" } }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "requires": { "webidl-conversions": "^5.0.0" }, "dependencies": { "webidl-conversions": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true } } }, "dts-critic": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/dts-critic/-/dts-critic-3.3.10.tgz", "integrity": "sha512-XvemZCSc05VIlYrd3SjIO/6OyA3SCXK2RIHEVIbAZjxD6/ptmQfwnrq7pWFxJ6raiD3Edh8PzCSy84QUuAzOTg==", "dev": true, "requires": { "@definitelytyped/header-parser": "latest", "command-exists": "^1.2.8", "rimraf": "^3.0.2", "semver": "^6.2.0", "tmp": "^0.2.1", "yargs": "^15.3.1" }, "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" } } } }, "dtslint": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/dtslint/-/dtslint-4.2.1.tgz", "integrity": "sha512-57mWY9osUEfS6k62ATS9RSgug1dZcuN4O31hO76u+iEexa6VUEbKoPGaA2mNtc0FQDcdTl0zEUtti79UQKSQyQ==", "dev": true, "requires": { "@definitelytyped/header-parser": "latest", "@definitelytyped/typescript-versions": "latest", "@definitelytyped/utils": "latest", "dts-critic": "latest", "fs-extra": "^6.0.1", "json-stable-stringify": "^1.0.1", "strip-json-comments": "^2.0.1", "tslint": "5.14.0", "tsutils": "^2.29.0", "yargs": "^15.1.0" }, "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "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" } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "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" } }, "tslint": { "version": "5.14.0", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^3.2.0", "glob": "^7.1.1", "js-yaml": "^3.7.0", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" } } } }, "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": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "electron-to-chromium": { "version": "1.3.752", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "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 }, "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" } }, "enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "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.2", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "requires": { "hasown": "^2.0.0" } }, "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" } }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" } }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" } }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { "prelude-ls": "~1.1.2" } } } }, "eslint": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.56.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": { "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 }, "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" } }, "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" } }, "ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "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" } }, "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 } } }, "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-next": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.0.tgz", "integrity": "sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==", "dev": true, "requires": { "@next/eslint-plugin-next": "14.1.0", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.28.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" } }, "eslint-config-prettier": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "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" } }, "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 } } }, "eslint-import-resolver-typescript": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "requires": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", "eslint-module-utils": "^2.7.4", "fast-glob": "^3.3.1", "get-tsconfig": "^4.5.0", "is-core-module": "^2.11.0", "is-glob": "^4.0.3" }, "dependencies": { "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" } }, "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 } } }, "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" } }, "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 } } }, "eslint-plugin-import": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "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.15.0" }, "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" } }, "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" } }, "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 } } }, "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-prettier": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "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": { "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" } }, "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" } }, "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 }, "resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "requires": { "is-core-module": "^2.13.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, "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" }, "dependencies": { "acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true } } }, "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": "0.5.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", "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 }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", "posix-character-classes": "^0.1.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" } }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, "expect": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz", "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==", "dev": true, "requires": { "@jest/types": "^27.1.1", "ansi-styles": "^5.0.0", "jest-get-type": "^27.0.6", "jest-matcher-utils": "^27.2.0", "jest-message-util": "^27.2.0", "jest-regex-util": "^27.0.6" }, "dependencies": { "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "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 }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { "is-plain-object": "^2.0.4" } } } }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", "expand-brackets": "^2.1.4", "extend-shallow": "^2.0.1", "fragment-cache": "^0.2.1", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { "is-descriptor": "^1.0.0" } }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { "kind-of": "^6.0.0" } }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { "kind-of": "^6.0.0" } }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } } } }, "extract-banner": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/extract-banner/-/extract-banner-0.1.2.tgz", "integrity": "sha1-YdHtXM46za2zX0MjkQtCA2QkGn8=", "dev": true, "requires": { "strip-bom-string": "^0.1.2", "strip-use-strict": "^0.1.0" }, "dependencies": { "strip-bom-string": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-0.1.2.tgz", "integrity": "sha1-nG5yCjE7qYNliVGEBcz7iKX0G5w=", "dev": true } } }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "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-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "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": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "fastq": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "requires": { "bser": "2.1.1" } }, "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" } }, "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-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.1.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "flow-bin": { "version": "0.160.0", "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.160.0.tgz", "integrity": "sha512-hqb/1z7U9Jv+2hDdslAgdab6D4AUDrYIcF2zH/CKx9YgQtCeHfnzCcypzCNU7xmBm2+Mi9+1hqeB4OQX2adh0A==", "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" } }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, "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" }, "dependencies": { "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 } } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "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" } }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { "map-cache": "^0.2.2" } }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "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" } }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { "minipass": "^3.0.0" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "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 }, "fstream": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" } }, "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": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.0", "object-assign": "^4.1.0", "signal-exit": "^3.0.0", "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, "requires": { "ansi-regex": "^2.0.0" } } } }, "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-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-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": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "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" } }, "get-tsconfig": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "requires": { "resolve-pkg-maps": "^1.0.0" } }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "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" } }, "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" } }, "globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "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": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" }, "dependencies": { "ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true } } }, "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" } }, "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "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": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "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" } }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "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": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "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": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", "dev": true, "requires": { "is-glob": "^3.0.0" }, "dependencies": { "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { "is-extglob": "^2.1.0" } } } }, "has-property-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "requires": { "get-intrinsic": "^1.2.2" } }, "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": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" } }, "has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, "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" } }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "requires": { "whatwg-encoding": "^1.0.5" } }, "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 }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "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 } } }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { "agent-base": "6", "debug": "4" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "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 } } }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "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": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "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-local": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "dependencies": { "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "p-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" } }, "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" } } } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "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 }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "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 }, "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" } }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, "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": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "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-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-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": "3.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", "dev": true, "requires": { "ci-info": "^3.1.1" } }, "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-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, "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-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "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-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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, "requires": { "number-is-nan": "^1.0.0" } }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "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-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-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-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-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "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-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "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-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": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "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 }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "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" } }, "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" } }, "istanbul-lib-source-maps": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, "dependencies": { "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "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 } } }, "istanbul-reports": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "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" } }, "jasmine-check": { "version": "1.0.0-rc.0", "resolved": "https://registry.npmjs.org/jasmine-check/-/jasmine-check-1.0.0-rc.0.tgz", "integrity": "sha1-EXcowVAHjs8hGYbF8WQnW3HpN6Q=", "dev": true, "requires": { "testcheck": "^1.0.0-rc" } }, "jest": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz", "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==", "dev": true, "requires": { "@jest/core": "^27.2.0", "import-local": "^3.0.2", "jest-cli": "^27.2.0" }, "dependencies": { "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" } }, "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 }, "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 }, "jest-cli": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz", "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==", "dev": true, "requires": { "@jest/core": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", "jest-config": "^27.2.0", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "prompts": "^2.0.1", "yargs": "^16.0.3" } }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" } }, "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" } }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } }, "jest-changed-files": { "version": "27.1.1", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.1.1.tgz", "integrity": "sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA==", "dev": true, "requires": { "@jest/types": "^27.1.1", "execa": "^5.0.0", "throat": "^6.0.1" } }, "jest-circus": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz", "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==", "dev": true, "requires": { "@jest/environment": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "expect": "^27.2.0", "is-generator-fn": "^2.0.0", "jest-each": "^27.2.0", "jest-matcher-utils": "^27.2.0", "jest-message-util": "^27.2.0", "jest-runtime": "^27.2.0", "jest-snapshot": "^27.2.0", "jest-util": "^27.2.0", "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" } }, "jest-config": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz", "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==", "dev": true, "requires": { "@babel/core": "^7.1.0", "@jest/test-sequencer": "^27.2.0", "@jest/types": "^27.1.1", "babel-jest": "^27.2.0", "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", "jest-circus": "^27.2.0", "jest-environment-jsdom": "^27.2.0", "jest-environment-node": "^27.2.0", "jest-get-type": "^27.0.6", "jest-jasmine2": "^27.2.0", "jest-regex-util": "^27.0.6", "jest-resolve": "^27.2.0", "jest-runner": "^27.2.0", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "micromatch": "^4.0.4", "pretty-format": "^27.2.0" } }, "jest-diff": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz", "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.0.6", "jest-get-type": "^27.0.6", "pretty-format": "^27.2.0" } }, "jest-docblock": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz", "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==", "dev": true, "requires": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "jest-util": "^27.2.0", "pretty-format": "^27.2.0" } }, "jest-environment-jsdom": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz", "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==", "dev": true, "requires": { "@jest/environment": "^27.2.0", "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", "jest-util": "^27.2.0", "jsdom": "^16.6.0" } }, "jest-environment-node": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz", "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==", "dev": true, "requires": { "@jest/environment": "^27.2.0", "@jest/fake-timers": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "jest-mock": "^27.1.1", "jest-util": "^27.2.0" } }, "jest-get-type": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", "dev": true }, "jest-haste-map": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz", "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^27.0.6", "jest-serializer": "^27.0.6", "jest-util": "^27.2.0", "jest-worker": "^27.2.0", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz", "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", "@jest/environment": "^27.2.0", "@jest/source-map": "^27.0.6", "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "expect": "^27.2.0", "is-generator-fn": "^2.0.0", "jest-each": "^27.2.0", "jest-matcher-utils": "^27.2.0", "jest-message-util": "^27.2.0", "jest-runtime": "^27.2.0", "jest-snapshot": "^27.2.0", "jest-util": "^27.2.0", "pretty-format": "^27.2.0", "throat": "^6.0.1" } }, "jest-leak-detector": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz", "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==", "dev": true, "requires": { "jest-get-type": "^27.0.6", "pretty-format": "^27.2.0" } }, "jest-matcher-utils": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz", "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==", "dev": true, "requires": { "chalk": "^4.0.0", "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", "pretty-format": "^27.2.0" } }, "jest-message-util": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz", "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", "pretty-format": "^27.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "dependencies": { "@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" } } } }, "jest-mock": { "version": "27.1.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.1.1.tgz", "integrity": "sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@types/node": "*" } }, "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true, "requires": {} }, "jest-regex-util": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", "dev": true }, "jest-resolve": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz", "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==", "dev": true, "requires": { "@jest/types": "^27.1.1", "chalk": "^4.0.0", "escalade": "^3.1.1", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.2.0", "jest-pnp-resolver": "^1.2.2", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "resolve": "^1.20.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz", "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==", "dev": true, "requires": { "@jest/types": "^27.1.1", "jest-regex-util": "^27.0.6", "jest-snapshot": "^27.2.0" } }, "jest-runner": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz", "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==", "dev": true, "requires": { "@jest/console": "^27.2.0", "@jest/environment": "^27.2.0", "@jest/test-result": "^27.2.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-docblock": "^27.0.6", "jest-environment-jsdom": "^27.2.0", "jest-environment-node": "^27.2.0", "jest-haste-map": "^27.2.0", "jest-leak-detector": "^27.2.0", "jest-message-util": "^27.2.0", "jest-resolve": "^27.2.0", "jest-runtime": "^27.2.0", "jest-util": "^27.2.0", "jest-worker": "^27.2.0", "source-map-support": "^0.5.6", "throat": "^6.0.1" } }, "jest-runtime": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz", "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==", "dev": true, "requires": { "@jest/console": "^27.2.0", "@jest/environment": "^27.2.0", "@jest/fake-timers": "^27.2.0", "@jest/globals": "^27.2.0", "@jest/source-map": "^27.0.6", "@jest/test-result": "^27.2.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", "jest-haste-map": "^27.2.0", "jest-message-util": "^27.2.0", "jest-mock": "^27.1.1", "jest-regex-util": "^27.0.6", "jest-resolve": "^27.2.0", "jest-snapshot": "^27.2.0", "jest-util": "^27.2.0", "jest-validate": "^27.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^16.0.3" }, "dependencies": { "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" } }, "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 }, "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 }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" } }, "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" } }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } }, "jest-serializer": { "version": "27.0.6", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", "dev": true, "requires": { "@types/node": "*", "graceful-fs": "^4.2.4" } }, "jest-snapshot": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz", "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==", "dev": true, "requires": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", "@babel/parser": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", "@jest/transform": "^27.2.0", "@jest/types": "^27.1.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", "expect": "^27.2.0", "graceful-fs": "^4.2.4", "jest-diff": "^27.2.0", "jest-get-type": "^27.0.6", "jest-haste-map": "^27.2.0", "jest-matcher-utils": "^27.2.0", "jest-message-util": "^27.2.0", "jest-resolve": "^27.2.0", "jest-util": "^27.2.0", "natural-compare": "^1.4.0", "pretty-format": "^27.2.0", "semver": "^7.3.2" }, "dependencies": { "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" } } } }, "jest-util": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz", "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==", "dev": true, "requires": { "@jest/types": "^27.1.1", "@types/node": "*", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "is-ci": "^3.0.0", "picomatch": "^2.2.3" } }, "jest-validate": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz", "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==", "dev": true, "requires": { "@jest/types": "^27.1.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^27.0.6", "leven": "^3.1.0", "pretty-format": "^27.2.0" }, "dependencies": { "camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true } } }, "jest-watcher": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz", "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==", "dev": true, "requires": { "@jest/test-result": "^27.2.0", "@jest/types": "^27.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "jest-util": "^27.2.0", "string-length": "^4.0.1" } }, "jest-worker": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz", "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "dependencies": { "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "js-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": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { "abab": "^2.0.5", "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", "cssstyle": "^2.3.0", "data-urls": "^2.0.0", "decimal.js": "^10.2.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", "parse5": "6.0.1", "saxes": "^5.0.1", "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "dependencies": { "acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "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 }, "tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.1.2" } } } }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-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.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "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": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { "jsonify": "~0.0.0" } }, "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "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": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", "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": "3.1.0", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", "dev": true }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, "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" } }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "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" } }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "dependencies": { "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { "p-locate": "^5.0.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "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 }, "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" } }, "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" } }, "magic-string": { "version": "0.25.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "requires": { "sourcemap-codec": "^1.4.4" } }, "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" } }, "make-synchronous": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/make-synchronous/-/make-synchronous-0.1.1.tgz", "integrity": "sha512-Y4SxxqhaoyMDokJQ0AZz0E+bLhRkOSR7Z/IQoTKPdS6HYi3aobal2kMHoHHoqBadPWjf07P4K1FQLXOx3wf9Yw==", "dev": true, "requires": { "subsume": "^3.0.0", "type-fest": "^0.16.0" }, "dependencies": { "type-fest": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true } } }, "makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "requires": { "tmpl": "1.0.x" } }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, "map-obj": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { "object-visit": "^1.0.0" } }, "marked": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.2.tgz", "integrity": "sha512-ueJhIvklJJw04qxQbGIAu63EXwwOCYc7yKMBjgagTM4rjC5QtWyqSNgW7jCosV1/Km/1TUfs5qEpAqcGG0Mo5g==", "dev": true }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, "meow": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", "dev": true, "requires": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "^4.0.2", "normalize-package-data": "^2.5.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.13.1", "yargs-parser": "^18.1.3" }, "dependencies": { "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "p-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" } }, "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" } }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, "dependencies": { "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 } } }, "read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, "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 } } }, "type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "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.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" } }, "microtime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.0.0.tgz", "integrity": "sha512-SirJr7ZL4ow2iWcb54bekS4aWyBQNVcEDBiwAz9D/sTgY59A+uE8UJU15cp5wyZmPBwg/3zf8lyCJ5NUe1nVlQ==", "dev": true, "requires": { "node-addon-api": "^1.2.0", "node-gyp-build": "^3.8.0" } }, "mime-db": { "version": "1.49.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", "dev": true }, "mime-types": { "version": "2.1.32", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "dev": true, "requires": { "mime-db": "1.49.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 }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "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.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" }, "dependencies": { "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true } } }, "minipass": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "dev": true, "requires": { "yallist": "^4.0.0" } }, "minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { "is-plain-object": "^2.0.4" } } } }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" } }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "next": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz", "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==", "dev": true, "requires": { "@next/env": "14.1.0", "@next/swc-darwin-arm64": "14.1.0", "@next/swc-darwin-x64": "14.1.0", "@next/swc-linux-arm64-gnu": "14.1.0", "@next/swc-linux-arm64-musl": "14.1.0", "@next/swc-linux-x64-gnu": "14.1.0", "@next/swc-linux-x64-musl": "14.1.0", "@next/swc-win32-arm64-msvc": "14.1.0", "@next/swc-win32-ia32-msvc": "14.1.0", "@next/swc-win32-x64-msvc": "14.1.0", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "graceful-fs": "^4.2.11", "postcss": "8.4.31", "styled-jsx": "5.1.1" } }, "next-sitemap": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/next-sitemap/-/next-sitemap-4.2.3.tgz", "integrity": "sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==", "dev": true, "requires": { "@corex/deepmerge": "^4.0.43", "@next/env": "^13.4.3", "fast-glob": "^3.2.12", "minimist": "^1.2.8" }, "dependencies": { "@next/env": { "version": "13.5.6", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==", "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 }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", "dev": true }, "node-gyp-build": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==", "dev": true }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, "node-releases": { "version": "1.1.73", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" }, "dependencies": { "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "npm-package-arg": { "version": "8.1.5", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", "validate-npm-package-name": "^3.0.0" }, "dependencies": { "hosted-git-info": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" } } } }, "npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", "cross-spawn": "^6.0.5", "memorystream": "^0.3.1", "minimatch": "^3.0.4", "pidtree": "^0.3.0", "read-pkg": "^3.0.0", "shell-quote": "^1.6.1", "string.prototype.padend": "^3.0.0" }, "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "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" } }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "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": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "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" } }, "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" } } } }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" } }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", "gauge": "~2.7.3", "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, "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": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", "kind-of": "^3.0.3" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" } }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, "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-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { "isobject": "^3.0.0" } }, "object.assign": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "requires": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", "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.3", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, "requires": { "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { "isobject": "^3.0.1" } }, "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" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "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" } }, "p-all": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", "dev": true, "requires": { "p-map": "^2.0.0" }, "dependencies": { "p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true } } }, "p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true }, "p-event": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "dev": true, "requires": { "p-timeout": "^3.1.0" } }, "p-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "requires": { "p-map": "^2.0.0" }, "dependencies": { "p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true } } }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "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": "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" } }, "p-timeout": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "requires": { "p-finally": "^1.0.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "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" } }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "parsimmon": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.18.0.tgz", "integrity": "sha512-EtVsGuQfDgwGgXzsSDe+5egRPwbcgKRd/omQ1L3Oj2pHy0gYqd+Q7zrBIQ7P/BN6DWUP9vV45HIgZHCmssdzMg==", "dev": true }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "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-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.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true }, "minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "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 }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "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.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pidtree": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" } }, "platform": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "dev": true }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, "postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "requires": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "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 }, "prettier": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", "dev": true }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "requires": { "fast-diff": "^1.1.2" } }, "pretty-format": { "version": "27.2.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz", "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==", "dev": true, "requires": { "@jest/types": "^27.1.1", "ansi-regex": "^5.0.0", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "dependencies": { "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "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, "optional": true }, "prompts": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", "dev": true, "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "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 }, "quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, "react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, "requires": { "loose-envify": "^1.1.0" } }, "react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dev": true, "requires": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" } }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" }, "dependencies": { "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" } } } }, "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, "optional": 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, "optional": 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, "optional": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "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": "8.2.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" } }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" } }, "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": "4.7.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", "regenerate-unicode-properties": "^8.2.0", "regjsgen": "^0.5.1", "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { "version": "0.6.9", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "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": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } } }, "repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "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" } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "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": { "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-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { "resolve-from": "^5.0.0" }, "dependencies": { "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 } } }, "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-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" } }, "rollup": { "version": "2.52.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.3.tgz", "integrity": "sha512-QF3Sju8Kl2z0osI4unyOLyUudyhOMK6G0AeqJWgfiyigqLAlnNrfBcDWDx+f1cqn+JU2iIYVkDrgQ6/KtwEfrg==", "dev": true, "requires": { "fsevents": "~2.3.2" } }, "rollup-plugin-buble": { "version": "0.19.8", "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz", "integrity": "sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw==", "dev": true, "requires": { "buble": "^0.19.8", "rollup-pluginutils": "^2.3.3" } }, "rollup-plugin-commonjs": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.3.tgz", "integrity": "sha512-g91ZZKZwTW7F7vL6jMee38I8coj/Q9GBdTmXXeFL7ldgC1Ky5WJvHgbKlAiXXTh762qvohhExwUgeQGFh9suGg==", "dev": true, "requires": { "estree-walker": "^0.5.1", "magic-string": "^0.22.4", "resolve": "^1.5.0", "rollup-pluginutils": "^2.0.1" }, "dependencies": { "magic-string": { "version": "0.22.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, "requires": { "vlq": "^0.2.2" } } } }, "rollup-plugin-json": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.0.0.tgz", "integrity": "sha512-WUAV9/I/uFWvHhyRTqFb+3SIapjISFJS7R1xN/cXxWESrfYo9I8ncHI7AxJHflKRXhBVSv7revBVJh2wvhWh5w==", "dev": true, "requires": { "rollup-pluginutils": "^2.2.0" } }, "rollup-plugin-strip-banner": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/rollup-plugin-strip-banner/-/rollup-plugin-strip-banner-2.0.0.tgz", "integrity": "sha512-9ipg2Wzl+6AZ+8PW65DrvuLzVrf9PjXZW39GeG9R0j0vm6DgxYli14wDpovRuKc+xEjKIE5DLAGwUem4Yvo+IA==", "dev": true, "requires": { "extract-banner": "0.1.2", "magic-string": "0.25.7", "rollup-pluginutils": "2.8.2" } }, "rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, "requires": { "estree-walker": "^0.6.1" }, "dependencies": { "estree-walker": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "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" } }, "safe-array-concat": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, "requires": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", "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": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { "ret": "~0.1.10" } }, "safe-regex-test": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", "dev": true, "requires": { "call-bind": "^1.0.5", "get-intrinsic": "^1.2.2", "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 }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { "xmlchars": "^2.2.0" } }, "scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dev": true, "requires": { "loose-envify": "^1.1.0" } }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "set-function-length": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "dev": true, "requires": { "define-data-property": "^1.1.1", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.1" } }, "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" } }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, "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 }, "shell-quote": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, "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.4", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz", "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==", "dev": true }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", "map-cache": "^0.2.2", "source-map": "^0.5.6", "source-map-resolve": "^0.5.0", "use": "^3.1.0" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" } }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { "kind-of": "^6.0.0" } }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { "kind-of": "^6.0.0" } }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } } } }, "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", "urix": "^0.1.0" } }, "source-map-support": { "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { "extend-shallow": "^3.0.0" } }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "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" } }, "ssri": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" } }, "stack-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.4.tgz", "integrity": "sha512-ERg+H//lSSYlZhBIUu+wJnqg30AbyBbpZlIhcshpn7BNzpoRODZgfyr9J+8ERf3ooC6af3u7Lcl01nleau7MrA==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0", "source-map-support": "^0.5.20" }, "dependencies": { "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true } } }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" } } } }, "streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "dev": true }, "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-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, "requires": { "ansi-regex": "^2.0.0" } } } }, "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": { "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 }, "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 } } }, "string.prototype.matchall": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "regexp.prototype.flags": "^1.5.0", "set-function-name": "^2.0.0", "side-channel": "^1.0.4" } }, "string.prototype.padend": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.2" } }, "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": "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-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" } }, "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-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { "min-indent": "^1.0.0" } }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "strip-use-strict": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/strip-use-strict/-/strip-use-strict-0.1.0.tgz", "integrity": "sha1-4w6P0iBoNOQeXrPz3B6npOQlj18=", "dev": true }, "styled-jsx": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", "dev": true, "requires": { "client-only": "0.0.1" } }, "subsume": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/subsume/-/subsume-3.0.0.tgz", "integrity": "sha512-6n/UfV8UWKwJNO8OAOiKntwEMihuBeeoJfzpL542C+OuvT4iWG9SwjrXkOmsxjb4SteHUsos9SvrdqZ9+ICwTQ==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0", "unique-string": "^2.0.0" }, "dependencies": { "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "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" } }, "supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.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 }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tar": { "version": "6.1.13", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", "dev": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^4.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "dependencies": { "minipass": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", "dev": true, "requires": { "yallist": "^4.0.0" } }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true } } }, "tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" }, "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" } } } }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.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" } }, "testcheck": { "version": "1.0.0-rc.2", "resolved": "https://registry.npmjs.org/testcheck/-/testcheck-1.0.0-rc.2.tgz", "integrity": "sha1-ETVqJbhFde/gsIV0UehbX6dO5OQ=", "dev": true }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, "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" }, "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" } } } }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" } }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "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": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { "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 } } }, "transducers-js": { "version": "0.4.174", "resolved": "https://registry.npmjs.org/transducers-js/-/transducers-js-0.4.174.tgz", "integrity": "sha1-1YYsEO/0vj0zIqv2u3QuMPG7b8Q=", "dev": true }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "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": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "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": { "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "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" } } } }, "tslint-config-prettier": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", "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" } }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "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": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "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.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 }, "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": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "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.6", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true }, "uglify-js": { "version": "3.11.1", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.1.tgz", "integrity": "sha512-OApPSuJcxcnewwjSGGfWOjx3oix5XpmrK9Z2j0fTRlHGoZ49IU6kExfZTM0++fCArOOCet+vIfWwFHbvWqwp6g==", "dev": true }, "uglify-save-license": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", "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" } }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", "dev": true }, "unicode-match-property-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^1.0.4", "unicode-property-aliases-ecmascript": "^1.0.4" } }, "unicode-match-property-value-ecmascript": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" } }, "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" } }, "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 }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" }, "dependencies": { "has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", "isobject": "^2.0.0" }, "dependencies": { "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { "isarray": "1.0.0" } } } }, "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "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 } } }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "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 }, "v8-to-istanbul": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" }, "dependencies": { "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "requires": { "builtins": "^1.0.3" } }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "requires": { "browser-process-hrtime": "^1.0.0" } }, "w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "requires": { "xml-name-validator": "^3.0.0" } }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { "makeerror": "1.0.x" } }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "requires": { "iconv-lite": "0.4.24" }, "dependencies": { "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" } } } }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } }, "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" } }, "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": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "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.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "optional": true, "requires": { "string-width": "^1.0.2 || 2" } }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "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" }, "dependencies": { "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 }, "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 }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" } } } }, "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": { "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 }, "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 }, "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" } } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "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" } }, "ws": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "dev": true, "requires": {} }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "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": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "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" }, "dependencies": { "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 }, "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" } }, "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 }, "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" } }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" } } } }, "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" } }, "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 } } } immutable-js-immutable-js-fa7d047/package.json000066400000000000000000000073611515165743500214210ustar00rootroot00000000000000{ "name": "immutable", "version": "4.3.8", "description": "Immutable Data Collections", "license": "MIT", "homepage": "https://immutable-js.com", "author": { "name": "Lee Byron", "url": "https://github.com/leebyron" }, "repository": { "type": "git", "url": "git://github.com/immutable-js/immutable-js.git" }, "bugs": { "url": "https://github.com/immutable-js/immutable-js/issues" }, "main": "dist/immutable.js", "module": "dist/immutable.es.js", "sideEffects": false, "types": "dist/immutable.d.ts", "files": [ "dist", "README.md", "LICENSE" ], "keywords": [ "immutable", "persistent", "lazy", "data", "datastructure", "functional", "collection", "stateless", "sequence", "iteration" ], "publishKeys": [ "name", "version", "description", "license", "homepage", "author", "repository", "bugs", "main", "module", "sideEffects", "types", "files", "keywords" ], "engines": { "npm": ">=7.0.0" }, "scripts": { "test": "run-s format lint type-check build unit-test", "format": "npm run lint:format -- --write", "lint": "run-s lint:*", "lint:format": "prettier --check \"{__tests__,src,type-definitions,website/src,perf,resources}/**/*{.js,.ts,.tsx,.flow,.css}\"", "lint:js": "eslint \"{__tests__,src,website/src}/**/*.js\"", "lint:ts": "tslint --project type-definitions/tsconfig.json \"{__tests__,src,type-definitions,website/src}/**/*.{ts,tsx}\"", "type-check": "run-s type-check:*", "type-check:ts": "tsc --project type-definitions/tsconfig.json && tsc --project __tests__/tsconfig.json && dtslint type-definitions/ts-tests", "type-check:flow": "flow check type-definitions/flow-tests --include-warnings", "build": "run-s build:*", "build:clean": "rimraf dist", "build:dist": "rollup -c ./resources/rollup-config.js", "build:esm": "rollup -c ./resources/rollup-config-es.js", "build:copy": "cpy ./type-definitions/immutable.* dist", "build:prepare": "./resources/prepare-dist.sh", "build:stats": "node ./resources/dist-stats.mjs", "unit-test": "jest", "website:build": "cd website && next build && next-sitemap", "website:dev": "cd website && next dev", "check-git-clean": "./resources/check-git-clean.sh", "benchmark": "node ./resources/benchmark.js", "publish": "echo 'ONLY PUBLISH VIA CI'; exit 1;" }, "prettier": { "singleQuote": true, "trailingComma": "es5", "semi": true, "arrowParens": "avoid" }, "devDependencies": { "@types/jest": "27.0.1", "@types/react": "17.0.11", "benchmark": "2.1.4", "colors": "1.4.0", "cpy-cli": "3.1.1", "dtslint": "^4.2.1", "eslint": "^8.56.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-next": "^14.1.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "flow-bin": "0.160.0", "jasmine-check": "1.0.0-rc.0", "jest": "27.2.0", "make-synchronous": "0.1.1", "marked": "2.1.2", "microtime": "3.0.0", "next": "^14.1.0", "next-sitemap": "4.2.3", "npm-run-all": "4.1.5", "prettier": "2.3.2", "react": "^18.2.0", "react-dom": "^18.2.0", "rimraf": "2.7.1", "rollup": "2.52.3", "rollup-plugin-buble": "0.19.8", "rollup-plugin-commonjs": "9.1.3", "rollup-plugin-json": "3.0.0", "rollup-plugin-strip-banner": "2.0.0", "transducers-js": "0.4.174", "tslint": "6.1.3", "tslint-config-prettier": "1.18.0", "typescript": "5.1", "uglify-js": "3.11.1", "uglify-save-license": "0.4.1" } } immutable-js-immutable-js-fa7d047/perf/000077500000000000000000000000001515165743500200605ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/perf/List.js000066400000000000000000000046621515165743500213410ustar00rootroot00000000000000describe('List', function () { describe('builds from array', function () { var array2 = []; for (var ii = 0; ii < 2; ii++) { array2[ii] = ii; } it('of 2', function () { Immutable.List(array2); }); var array8 = []; for (var ii = 0; ii < 8; ii++) { array8[ii] = ii; } it('of 8', function () { Immutable.List(array8); }); var array32 = []; for (var ii = 0; ii < 32; ii++) { array32[ii] = ii; } it('of 32', function () { Immutable.List(array32); }); var array1024 = []; for (var ii = 0; ii < 1024; ii++) { array1024[ii] = ii; } it('of 1024', function () { Immutable.List(array1024); }); }); describe('pushes into', function () { it('2 times', function () { var list = Immutable.List(); for (var ii = 0; ii < 2; ii++) { list = list.push(ii); } }); it('8 times', function () { var list = Immutable.List(); for (var ii = 0; ii < 8; ii++) { list = list.push(ii); } }); it('32 times', function () { var list = Immutable.List(); for (var ii = 0; ii < 32; ii++) { list = list.push(ii); } }); it('1024 times', function () { var list = Immutable.List(); for (var ii = 0; ii < 1024; ii++) { list = list.push(ii); } }); }); describe('pushes into transient', function () { it('2 times', function () { var list = Immutable.List().asMutable(); for (var ii = 0; ii < 2; ii++) { list = list.push(ii); } list = list.asImmutable(); }); it('8 times', function () { var list = Immutable.List().asMutable(); for (var ii = 0; ii < 8; ii++) { list = list.push(ii); } list = list.asImmutable(); }); it('32 times', function () { var list = Immutable.List().asMutable(); for (var ii = 0; ii < 32; ii++) { list = list.push(ii); } list = list.asImmutable(); }); it('1024 times', function () { var list = Immutable.List().asMutable(); for (var ii = 0; ii < 1024; ii++) { list = list.push(ii); } list = list.asImmutable(); }); }); describe('some', function () { it('100 000 items ', () => { const list = Immutable.List(); for (let i = 0; i < 100000; i++) { list.push(i); } list.some(item => item === 50000); }); }); }); immutable-js-immutable-js-fa7d047/perf/Map.js000066400000000000000000000056061515165743500211420ustar00rootroot00000000000000describe('Map', function () { describe('builds from an object', function () { var obj2 = {}; for (var ii = 0; ii < 2; ii++) { obj2['x' + ii] = ii; } it('of 2', function () { Immutable.Map(obj2); }); var obj8 = {}; for (var ii = 0; ii < 8; ii++) { obj8['x' + ii] = ii; } it('of 8', function () { Immutable.Map(obj8); }); var obj32 = {}; for (var ii = 0; ii < 32; ii++) { obj32['x' + ii] = ii; } it('of 32', function () { Immutable.Map(obj32); }); var obj1024 = {}; for (var ii = 0; ii < 1024; ii++) { obj1024['x' + ii] = ii; } it('of 1024', function () { Immutable.Map(obj1024); }); }); describe('builds from an array', function () { var array2 = []; for (var ii = 0; ii < 2; ii++) { array2[ii] = ['x' + ii, ii]; } it('of 2', function () { Immutable.Map(array2); }); var array8 = []; for (var ii = 0; ii < 8; ii++) { array8[ii] = ['x' + ii, ii]; } it('of 8', function () { Immutable.Map(array8); }); var array32 = []; for (var ii = 0; ii < 32; ii++) { array32[ii] = ['x' + ii, ii]; } it('of 32', function () { Immutable.Map(array32); }); var array1024 = []; for (var ii = 0; ii < 1024; ii++) { array1024[ii] = ['x' + ii, ii]; } it('of 1024', function () { Immutable.Map(array1024); }); }); describe('builds from a List', function () { var list2 = Immutable.List().asMutable(); for (var ii = 0; ii < 2; ii++) { list2 = list2.push(Immutable.List(['x' + ii, ii])); } list2 = list2.asImmutable(); it('of 2', function () { Immutable.Map(list2); }); var list8 = Immutable.List().asMutable(); for (var ii = 0; ii < 8; ii++) { list8 = list8.push(Immutable.List(['x' + ii, ii])); } list8 = list8.asImmutable(); it('of 8', function () { Immutable.Map(list8); }); var list32 = Immutable.List().asMutable(); for (var ii = 0; ii < 32; ii++) { list32 = list32.push(Immutable.List(['x' + ii, ii])); } list32 = list32.asImmutable(); it('of 32', function () { Immutable.Map(list32); }); var list1024 = Immutable.List().asMutable(); for (var ii = 0; ii < 1024; ii++) { list1024 = list1024.push(Immutable.List(['x' + ii, ii])); } list1024 = list1024.asImmutable(); it('of 1024', function () { Immutable.Map(list1024); }); }); describe('merge a map', () => { [2, 8, 32, 1024].forEach(size => { const obj1 = {}; const obj2 = {}; for (let ii = 0; ii < size; ii++) { obj1['k' + ii] = '1_' + ii; obj2['k' + ii] = '2_' + ii; } const map1 = Immutable.Map(obj1); const map2 = Immutable.Map(obj2); it('of ' + size, () => { map1.merge(map2); }); }); }); }); immutable-js-immutable-js-fa7d047/perf/Record.js000066400000000000000000000033531515165743500216400ustar00rootroot00000000000000describe('Record', () => { describe('builds from an object', () => { [2, 5, 10, 100, 1000].forEach(size => { var defaults = {}; var values = {}; for (var ii = 0; ii < size; ii++) { defaults['x' + ii] = null; values['x' + ii] = ii; } var Rec = Immutable.Record(defaults); it('of ' + size, () => { Rec(values); }); }); }); describe('update random using set()', () => { [2, 5, 10, 100, 1000].forEach(size => { var defaults = {}; var values = {}; for (var ii = 0; ii < size; ii++) { defaults['x' + ii] = null; values['x' + ii] = ii; } var Rec = Immutable.Record(defaults); var rec = Rec(values); var key = 'x' + Math.floor(size / 2); it('of ' + size, () => { rec.set(key, 999); }); }); }); describe('access random using get()', () => { [2, 5, 10, 100, 1000].forEach(size => { var defaults = {}; var values = {}; for (var ii = 0; ii < size; ii++) { defaults['x' + ii] = null; values['x' + ii] = ii; } var Rec = Immutable.Record(defaults); var rec = Rec(values); var key = 'x' + Math.floor(size / 2); it('of ' + size, () => { rec.get(key); }); }); }); describe('access random using property', () => { [2, 5, 10, 100, 1000].forEach(size => { var defaults = {}; var values = {}; for (var ii = 0; ii < size; ii++) { defaults['x' + ii] = null; values['x' + ii] = ii; } var Rec = Immutable.Record(defaults); var rec = Rec(values); var key = 'x' + Math.floor(size / 2); it('of ' + size, () => { rec[key]; }); }); }); }); immutable-js-immutable-js-fa7d047/perf/toJS.js000066400000000000000000000006041515165743500212750ustar00rootroot00000000000000describe('toJS', () => { const array32 = []; for (let ii = 0; ii < 32; ii++) { array32[ii] = ii; } const list = Immutable.List(array32); it('List of 32', () => { Immutable.toJS(list); }); const obj32 = {}; for (let ii = 0; ii < 32; ii++) { obj32[ii] = ii; } const map = Immutable.Map(obj32); it('Map of 32', () => { Immutable.toJS(map); }); }); immutable-js-immutable-js-fa7d047/resources/000077500000000000000000000000001515165743500211365ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/resources/benchmark.js000066400000000000000000000174631515165743500234410ustar00rootroot00000000000000var Benchmark = require('benchmark'); var child_process = require('child_process'); var colors = require('colors'); var fs = require('fs'); var path = require('path'); var vm = require('vm'); function promisify(fn) { return function () { return new Promise((resolve, reject) => fn.apply( this, Array.prototype.slice .call(arguments) .concat((err, out) => (err ? reject(err) : resolve(out))) ) ); }; } var exec = promisify(child_process.exec); var readdir = promisify(fs.readdir); var readFile = promisify(fs.readFile); var perfDir = path.resolve(__dirname, '../perf/'); Promise.all([ readFile(path.resolve(__dirname, '../dist/immutable.js'), { encoding: 'utf8', }), exec('git show main:dist/immutable.js'), ]) .then(function (args) { var newSrc = args[0]; var oldSrc = args[1].toString({ encoding: 'utf8' }).slice(0, -1); // wtf, comma? return newSrc === oldSrc ? [newSrc] : [newSrc, oldSrc]; }) .then(function (sources) { return sources.map(function (source) { var sourceExports = {}; var sourceModule = { exports: sourceExports }; vm.runInNewContext( source, { require: require, module: sourceModule, exports: sourceExports, }, 'immutable.js' ); return sourceModule.exports; }); }) .then(function (modules) { return readdir(perfDir) .then(function (filepaths) { return Promise.all( filepaths.map(function (filepath) { return readFile(path.resolve(perfDir, filepath)).then(function ( source ) { return { path: filepath, source: source, }; }); }) ); }) .then(function (sources) { var tests = {}; modules.forEach(function (Immutable, version) { sources.forEach(function (source) { var description = []; var beforeStack = []; var beforeFn; var prevBeforeFn; function describe(name, fn) { description.push(name); beforeStack.push(prevBeforeFn); prevBeforeFn = beforeFn; fn(); beforeFn = prevBeforeFn; prevBeforeFn = beforeStack.pop(); description.pop(); } function beforeEach(fn) { beforeFn = !prevBeforeFn ? fn : (function (prevBeforeFn) { return function () { prevBeforeFn(); fn(); }; })(prevBeforeFn); } function it(name, test) { var fullName = description.join(' > ') + ' ' + name; ( tests[fullName] || (tests[fullName] = { description: fullName, tests: [], }) ).tests[version] = { before: beforeFn, test: test, }; } vm.runInNewContext( source.source, { describe: describe, it: it, beforeEach: beforeEach, console: console, Immutable: Immutable, }, source.path ); }); }); // Array<{ // description: String, // tests: Array<{ // before: Function, // test: Function // }> // one per module, [new,old] or just [new] // }> return Object.keys(tests).map(function (key) { return tests[key]; }); }); }) .then(function (tests) { var suites = []; tests.forEach(function (test) { var suite = new Benchmark.Suite(test.description, { onStart: function (event) { console.log(event.currentTarget.name.bold); process.stdout.write(' ...running... '.gray); }, onComplete: function (event) { process.stdout.write('\r\x1B[K'); var stats = Array.prototype.map.call( event.currentTarget, function (target) { return target.stats; } ); function pad(n, s) { return Array(Math.max(0, 1 + n - s.length)).join(' ') + s; } function fmt(b) { return Math.floor(b) .toString() .replace(/\B(?=(\d{3})+(?!\d))/g, ','); } function pct(p) { return Math.floor(p * 10000) / 100 + '%'; } var dualRuns = stats.length === 2; if (dualRuns) { var prevMean = 1 / stats[1].mean; var prevLow = 1 / (stats[1].mean + stats[1].deviation * 2); var prevHigh = 1 / (stats[1].mean - stats[1].deviation * 2); // console.log( // (dualRuns ? ' Old: '.bold.gray : ' ') + // ( // pad(9, fmt(prevLow)) + ' ' + // pad(9, fmt(prevMean)) + ' ' + // pad(9, fmt(prevHigh)) + ' ops/sec' // ) // ); var prevLowmoe = 1 / (stats[1].mean + stats[1].moe); var prevHighmoe = 1 / (stats[1].mean - stats[1].moe); console.log( (dualRuns ? ' Old: '.bold.gray : ' ') + (pad(9, fmt(prevLowmoe)) + ' ' + pad(9, fmt(prevMean)) + ' ' + pad(9, fmt(prevHighmoe)) + ' ops/sec') ); } var mean = 1 / stats[0].mean; var low = 1 / (stats[0].mean + stats[0].deviation * 2); var high = 1 / (stats[0].mean - stats[0].deviation * 2); // console.log( // (dualRuns ? ' New: '.bold.gray : ' ') + // ( // pad(9, fmt(low)) + ' ' + // pad(9, fmt(mean)) + ' ' + // pad(9, fmt(high)) + ' ops/sec' // ) // ); var lowmoe = 1 / (stats[0].mean + stats[0].moe); var highmoe = 1 / (stats[0].mean - stats[0].moe); console.log( (dualRuns ? ' New: '.bold.gray : ' ') + (pad(9, fmt(lowmoe)) + ' ' + pad(9, fmt(mean)) + ' ' + pad(9, fmt(highmoe)) + ' ops/sec') ); if (dualRuns) { var diffMean = (mean - prevMean) / prevMean; var comparison = event.currentTarget[1].compare( event.currentTarget[0] ); var comparison2 = event.currentTarget[0].compare( event.currentTarget[1] ); console.log(' compare: ' + comparison + ' ' + comparison2); console.log(' diff: ' + pct(diffMean)); function sq(p) { return p * p; } var rme = Math.sqrt( (sq(stats[0].rme / 100) + sq(stats[1].rme / 100)) / 2 ); // console.log('rmeN: ' + stats[0].rme); // console.log('rmeO: ' + stats[1].rme); console.log(' rme: ' + pct(rme)); } // console.log(stats); }, }); test.tests.forEach(function (run) { suite.add({ fn: run.test, onStart: run.before, onCycle: run.before, }); }); suites.push(suite); }); var onBenchComplete; var promise = new Promise(function (_resolve) { onBenchComplete = _resolve; }); Benchmark.invoke(suites, 'run', { onComplete: onBenchComplete }); return onBenchComplete; }) .then(function () { console.log('all done'); }) .catch(function (error) { console.log('ugh', error.stack); }); immutable-js-immutable-js-fa7d047/resources/check-git-clean.sh000077500000000000000000000004641515165743500244170ustar00rootroot00000000000000#!/bin/bash -e if ! git diff --quiet; then echo " $(tput setf 4)The CI build resulted in additional changed files. Typically this is due to not running $(tput smul)npm test$(tput rmul) locally before submitting a pull request. The following changes were found:$(tput sgr0) "; git diff --exit-code; fi; immutable-js-immutable-js-fa7d047/resources/copyright.js000066400000000000000000000003061515165743500235030ustar00rootroot00000000000000import fs from 'fs'; const copyright = fs.readFileSync('./LICENSE', 'utf-8'); const lines = copyright.trim().split('\n'); export default `/**\n${lines.map(line => ` * ${line}`).join('\n')}\n */`; immutable-js-immutable-js-fa7d047/resources/dist-stats.mjs000066400000000000000000000033461515165743500237560ustar00rootroot00000000000000import fs from 'node:fs/promises'; import { deflate } from 'zlib'; import 'colors'; const VERIFY_AGAINST_VERSION = '4'; const deflateContent = content => new Promise((resolve, reject) => deflate(content, (error, out) => (error ? reject(error) : resolve(out))) ); const space = (n, s) => new Array(Math.max(0, 10 + n - (s || '').length)).join(' ') + (s || ''); const bytes = b => `${b.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')} bytes`; const diff = (n, o) => { const d = n - o; return d === 0 ? '' : d < 0 ? ` ${bytes(d)}`.green : ` +${bytes(d)}`.red; }; const percentage = (s, b) => ` ${Math.floor(10000 * (1 - s / b)) / 100}%`.grey; let bundlephobaInfoCache; async function bundlephobaInfo(key) { if (!bundlephobaInfoCache) { bundlephobaInfoCache = await fetch( `https://bundlephobia.com/api/size?package=immutable@${VERIFY_AGAINST_VERSION}` ).then(res => res.json()); } return bundlephobaInfoCache[key]; } Promise.all([ fs.readFile('dist/immutable.js'), fs.readFile('dist/immutable.min.js'), bundlephobaInfo('size'), fs.readFile('dist/immutable.min.js').then(deflateContent), bundlephobaInfo('gzip'), ]) .then(results => results.map(result => typeof result === 'number' ? result : Number(Buffer.byteLength(result, 'utf8')) ) ) .then(([rawNew, minNew, minOld, zipNew, zipOld]) => { console.log(` Raw: ${space(14, bytes(rawNew).cyan)}`); console.log( ` Min: ${space(14, bytes(minNew).cyan)}${percentage( minNew, rawNew )}${space(15, diff(minNew, minOld))}` ); console.log( ` Zip: ${space(14, bytes(zipNew).cyan)}${percentage( zipNew, rawNew )}${space(15, diff(zipNew, zipOld))}` ); }); immutable-js-immutable-js-fa7d047/resources/identity.ai000066400000000000000000013453641515165743500233220ustar00rootroot00000000000000%PDF-1.5 % 1 0 obj <>/OCGs[5 0 R 6 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream application/pdf identity Adobe Illustrator CC 2014 (Macintosh) 2014-10-30T16:19:54-07:00 2014-10-30T16:19:54-07:00 2014-10-30T16:19:54-07:00 256 108 JPEG /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAbAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7vhYuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KpJrfnXytoV2lpq2oR2ly8YlSNw5JQkqG+EHupwgFICm3n7ycl9BY PqkK3dwImhjbkOQnUPEakU+JWBG+NJ4Smup6np+l2Mt9qE621pCAZZnNFFTQfeTTAgBJT+Y3kkWC X51aIWbytAk1HoZEVXZfs12V1OGinh93zCeafqFlqNlDe2My3FpOvOGZDVWGBBFJF/ysjyOZZ4hq 8Je2DGYDmQAhoxqFoae2Giy4Cr2fnryle2F5qFrqUctnYBTeTAPSMPULWq13p2xpHChB+Z/kIwmb 9Mw+mGCFqSfaIJA+z7Y0V4dr2+YWr+af5fswUa1CSTQDjJ3/ANjjwleH3fMJlrPnLyxot5FZ6rqE VpczKHjiflUqWKhtgQBVT1xooAtGavrOmaPYtfancLbWiFVaV6kAsaAbAnrgUC0ntPzK8iXUoih1 u25nYCRjGCT7yBRhorXu+aM1zzl5Y0KaKHVtQjtJZl9SJXDHktaV+EHviAnhRN15g0a10VdbuLpY 9KaOOVbohuPCYqI2oBX4uY7Y0ikmj/NHyBLIsaazCzuQqikm5JoP2caKRH3fMMpwMXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXz7/wA5BD/ncrX/ALZkX/UTNl2Pl8WEuvu/SxbzmUGqoWFR +jdLFabj/Qodxgj0ckkVK/L7yreaPzC1zX9G0zTL9h6WnL+9etTczCoSR6/yx0+kk99pRj3NRlW5 /t/Z1WXlF8kWgAFBrt5QU2oLe27ZEf71tmAMkh/tn61TQvzC13R/LN/oVm/G3vt4p6nlbcv74J/r r08Oo3wmO+7UDtt/Z3/sSbSmU/XKDiv1GYDx+1398JH3s4kHly4D97MPJ4A/LrzxTb9xYfjXIdR7 /wBLKYA/0v8AvAhfJ/lfSNZ8u+Zbi9nlgk0uNLmzWFlUNIIJSA/JWqKqOlMkL5sMsgJcPK5foCh+ WXljSfMutS2mr3M8EEFsbhGhdVJkWVVAbmsgpRvDJEHoGuWSogyP4soHz15gXX/Neo6iG5W88pit W8IIv3cbb9OVORyMRQZ2OR67ft/033PQ/MXmL9O/kXFcyNW6t5YLS7rufVhcLU17svFj88jEVJEj 6SfxzeS3JtxzXifUV5vUJdWXiR+6CIByUqQamvh9JjyHwb8+05A8rl3edUPJlPnhzJpXlEvcLdH9 DN+9B5D4WkATfvHTifcYjr7x97EAGv6sv9w9L83/APkgoP8Atm6X/wATt8Y/W4x+l4/ocnlyPUOO qxXskv1pfq/1SeGONV5inJHjkJ38CMRfD8HKyishF/x7cq57bW+r8qaHYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXhf56aHrN/wCbbaWxsZ7qL9HRxmSKNnUMJ5WIJA60OX4gSGucwLsjcd47 2OeZ/LOvT65bD9GXMkDWWmRyMsT8R6dpCsgJA2oQQcYwLbLNAWCRvXUd6/V/ywv7Gy1OaJXvPTkR NLhiq7mNmDO7KvdR8P3nwy84yHBjqozoX069PJTuvLvmF/Jdqg0u69UaxdzND6T8wjwW/FiKdCVI ykQPLyc2eeJkZWN53zCK0n8rrq7j0i4nD2sMqt+lrd6rIDG7cOKn+daD265fHETTgz1UY2B5e4/2 FLfKvknX7u9ntbmyuLOOWznQTyxsqB+JZKkjoWoMqMCT8XJGeMYncfTXMd6GTT/PGm2uoaQlnexw X4ijvYYrf1klEBqnGUBqU/yDv3wGBB5MxljIXZ5Dly5V8NnoPkXydfWXkjzHJfq8d/qEDm3s1oWH CGQRqaV+Ji/TCRKPLqGk5IZJ2T9Mr/HyYZ5X0jzPptrrDrpN6LqawNtahYXqZJZkBPT9mPkfmMdw eXNncJAbi4+Y57/rUtL/AC+80XlpK6Wj2qsPRkiuJPRZ1Uq9eJjOxYA9euIxz/H9qZ6nANjfL+cP +JNfNVstL83p5X1rSjo16LS8a3uIy0MhAnhcKwBAAq6vU7fsjIiJBHe2TyRkJEHb3jnte6DbQ/Nc 9ulgmj3Bi+stcoZLf025uAtDMx2T22/oxhKqr8fJOXPi4zMG9yase/8AnH7r6Jv5p8k67Yaf5dtE tZrxo7Gb6y9sjSqkk8sj8BTb4eYB3wGMiTt1CMebGKs7VLu6iupCIml/M+88pXeiXllevpMVnBHa xPZCL+5uIBGFdV5NRFPfBEerzTk4eHY7VzND/fFJdO07zfYzlrXSJmMswkpPYJKQSezyK5H0ZIRk BVfj5Lky4pSMhLnK+YHP3T/Q+osx0OxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpDr0cjX iFVJHpj/AIk2Z2lIEfi6rXRJmPchryGQ3KfCePCOv/ACuWY5Cvm1ZoHiHuH3KbWtFcjc7cB9OSE2 Bxc17Qy/o9BxNfWY0/2K4OIcfwZGB8Mf1v0BatrXgTt/OMJmxGLk61t5CzhgVBRt8ZyC4sZ39y1B eRxyRorem9PUoKg06b4TwkglA4wCByKNsLRTZzmQkOBVVHiAaZTln6hTk4MXoNoW1hlCyngxfj8A HjUDLJyGzRigaO26mltMVPRa7EHJGYYDHJWiS5FlPGY29NipBptyB/pkZGPEDbZES4CK2UPTnKBO GwNa5OxdtfDKqpEXltIkFqq/HRCSR0qWJpleOYJLbmxkRiPJUL6k9k8UqH0AihPhp0Zab/LI1ASs c2d5TAgj01+pCwrcIwATuDuK5bIgtEBIdGWZqnfOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KpbqUbtOpVSRxHT5nMnCRTh6iJMvgpTwyGZfhJHFK/8CMlGQprnA38mntSquR8X8gxE1OKrcYp fqqjia8yafQMeIcS8J4Pi2trXgTt/OMTNRi5LYIJCzAqQCp3wykEQgVoW5RXQK3FvtUFQae+G4nd FSFhFWtuRby8vtEVA+g5VOe4b8WP0lQgimUSURuRWi0HeuTkRs1QiRey1LaYg7UrsQcJmGIxyXIk 4t5EKHi1CDTuDgJFgsgJcJFLPTnKhOG1a9MlY5sOGVVSpcW8ixwqByopqR7muRjIWWzJjIAXVvGt 2jdT6YUBdvAimD03afWY0eSlGs6EAJ37iuSJBa4iQ6J1mG7J2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxVQnVi4oCdsnEtcwbaZGLDY0oP1YQUEG22gIDEb/y4iSmC3g/pgUNa/wAMb3RRpcsF eJO38wxMkiC1I2JIIIqOuJKBEtcZRVaGh64bC0VWONljavUjpkSd2cY0FNFdQ3wmpFBhJDAAhywy EHt88TIKIlwV+DLxO+NhQDTXCQjjx2rXDYWiueNgFAFaDemAFJiXfvShUg0ptt747LvTSiQdF/DC aQAUTlTc7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWTf7hv+Xf8A4TAyd/uG/wCXf/hMVd/uG/5d/wDhMVd/ uG/5d/8AhMVd/uG/5d/+ExV3+4b/AJd/+ExV3+4b/l3/AOExV3+4b/l3/wCExV3+4b/l3/4TFXf7 hv8Al3/4TFXf7hv+Xf8A4TFXf7hv+Xf/AITFXf7hv+Xf/hMVd/uG/wCXf/hMVd/uG/5d/wDhMVd/ uG/5d/8AhMVd/uG/5d/+ExV3+4b/AJd/+ExV3+4b/l3/AOExV3+4b/l3/wCExV3+4b/l3/4TFXf7 hv8Al3/4TFXf7hv+Xf8A4TFXf7hv+Xf/AITFXf7hv+Xf/hMVd/uG/wCXf/hMVd/uG/5d/wDhMVd/ uG/5d/8AhMVd/uG/5d/+ExV3+4b/AJd/+ExV3+4b/l3/AOExV3+4b/l3/wCExV//2Q== proof:pdf uuid:65E6390686CF11DBA6E2D887CEACB407 xmp.did:5962c3f6-6a0f-4199-90f1-c6dea6f71387 uuid:15bcb097-31e4-8d46-bdb6-d8c19fdf6524 uuid:1abccb90-0c26-4942-b156-fd2eb962e3e1 xmp.did:58fdc1b8-1448-3a44-9e20-282d8ec1cf95 uuid:65E6390686CF11DBA6E2D887CEACB407 proof:pdf saved xmp.iid:5962c3f6-6a0f-4199-90f1-c6dea6f71387 2014-10-30T16:19:52-07:00 Adobe Illustrator CC 2014 (Macintosh) / Web Document 1 True False 960.000000 560.000000 Pixels Cyan Magenta Yellow Black Default Swatch Group 0 White RGB PROCESS 255 255 255 Black RGB PROCESS 0 0 0 RGB Red RGB PROCESS 255 0 0 RGB Yellow RGB PROCESS 255 255 0 RGB Green RGB PROCESS 0 255 0 RGB Cyan RGB PROCESS 0 255 255 RGB Blue RGB PROCESS 0 0 255 RGB Magenta RGB PROCESS 255 0 255 R=193 G=39 B=45 RGB PROCESS 193 39 45 R=237 G=28 B=36 RGB PROCESS 237 28 36 R=241 G=90 B=36 RGB PROCESS 241 90 36 R=247 G=147 B=30 RGB PROCESS 247 147 30 R=251 G=176 B=59 RGB PROCESS 251 176 59 R=252 G=238 B=33 RGB PROCESS 252 238 33 R=217 G=224 B=33 RGB PROCESS 217 224 33 R=140 G=198 B=63 RGB PROCESS 140 198 63 R=57 G=181 B=74 RGB PROCESS 57 181 74 R=0 G=146 B=69 RGB PROCESS 0 146 69 R=0 G=104 B=55 RGB PROCESS 0 104 55 R=34 G=181 B=115 RGB PROCESS 34 181 115 R=0 G=169 B=157 RGB PROCESS 0 169 157 R=41 G=171 B=226 RGB PROCESS 41 171 226 R=0 G=113 B=188 RGB PROCESS 0 113 188 R=46 G=49 B=146 RGB PROCESS 46 49 146 R=27 G=20 B=100 RGB PROCESS 27 20 100 R=102 G=45 B=145 RGB PROCESS 102 45 145 R=147 G=39 B=143 RGB PROCESS 147 39 143 R=158 G=0 B=93 RGB PROCESS 158 0 93 R=212 G=20 B=90 RGB PROCESS 212 20 90 R=237 G=30 B=121 RGB PROCESS 237 30 121 R=199 G=178 B=153 RGB PROCESS 199 178 153 R=153 G=134 B=117 RGB PROCESS 153 134 117 R=115 G=99 B=87 RGB PROCESS 115 99 87 R=83 G=71 B=65 RGB PROCESS 83 71 65 R=198 G=156 B=109 RGB PROCESS 198 156 109 R=166 G=124 B=82 RGB PROCESS 166 124 82 R=140 G=98 B=57 RGB PROCESS 140 98 57 R=117 G=76 B=36 RGB PROCESS 117 76 36 R=96 G=56 B=19 RGB PROCESS 96 56 19 R=66 G=33 B=11 RGB PROCESS 66 33 11 Grays 1 R=0 G=0 B=0 RGB PROCESS 0 0 0 R=26 G=26 B=26 RGB PROCESS 26 26 26 R=51 G=51 B=51 RGB PROCESS 51 51 51 R=77 G=77 B=77 RGB PROCESS 77 77 77 R=102 G=102 B=102 RGB PROCESS 102 102 102 R=128 G=128 B=128 RGB PROCESS 128 128 128 R=153 G=153 B=153 RGB PROCESS 153 153 153 R=179 G=179 B=179 RGB PROCESS 179 179 179 R=204 G=204 B=204 RGB PROCESS 204 204 204 R=230 G=230 B=230 RGB PROCESS 230 230 230 R=242 G=242 B=242 RGB PROCESS 242 242 242 Web Color Group 1 R=63 G=169 B=245 RGB PROCESS 63 169 245 R=122 G=201 B=67 RGB PROCESS 122 201 67 R=255 G=147 B=30 RGB PROCESS 255 147 30 R=255 G=29 B=37 RGB PROCESS 255 29 37 R=255 G=123 B=172 RGB PROCESS 255 123 172 R=189 G=204 B=212 RGB PROCESS 189 204 212 Adobe PDF library 11.00 endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>/XObject<>>>/Thumb 20 0 R/TrimBox[0.0 0.0 960.0 560.0]/Type/Page>> endobj 9 0 obj <>stream HWˎGWTNWlcƮuAf֣[dRAdUV& ߞgg~zl.Ot8Rߜo7WӥlK&`)vJe_s=wkhs1Krބm)\_/|z9r ,>X Goc 4n}Sy06Uelm۫&~ؙcǰrqB!Mgpjm`s0|iFl #lk[XÜ IBaMoI}MU 5l]zYv,ܗyƭvZ@IR9qQTx4m^/xHsa#wFq^<ˎsUC{zެMx8aYcj=hCbiԉl?7 ̰ @fxi4uB̰8YMU/ff!UQRV 3xnEXܝ;%çw|61գx48ndqaa|6%U^0-~/B#t;6 ؊JjC͡`8q! }*D^u&4@~E pvef YglDvE3gFłpF;*b44C6]'Z#Ġx^xl$9s|ʚbE^0HCkQ*AO T*':iIVݷoHiUiU_@G!(V=+':i*GѪvҪVkhg緣U*ZV,6/`>]?nl+~ ۊ[&z,WOuVnl+b[ɝld['*u>!ۺ;d[RT߈PV#E`d_Vwpe< tz1_sҐ@+ ]rRM\fPI +[k5|:j[ǛleTiݩ3A$MT^~ԚdvuuuUჳht.[> endobj 20 0 obj <>stream 8;Z\u5n8N$$j;VR-9:UhT)'<$0@%\#iB&n#M&p=M`b5lXt>9a/<+@KdI>\';9_Ob?VVFp#qBr 6`>t+Opn?\"-,&u;UKhmW#jb?),s)kWS;mu=QT4(Es1c*Hs+$IogkoB7r@q*WQF\3 W#eMkTStuRhFE':++9f0-UJ(^KFgHU\Km4:!!e-hiW~> endstream endobj 22 0 obj [/Indexed/DeviceRGB 255 23 0 R] endobj 23 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 17 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.427 0.737 0.859 scn /GS0 gs 271.996 378.559 13.56 -40.02 re f q 1 0 0 1 289.6611 378.5591 cm 0 0 m 10.56 0 l 21 -15.36 l 31.38 0 l 41.94 0 l 41.94 -40.02 l 29.16 -40.02 l 29.16 -25.62 l 21 -37.62 l 12.78 -25.62 l 12.78 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 335.707 378.5591 cm 0 0 m 10.56 0 l 21 -15.36 l 31.38 0 l 41.94 0 l 41.94 -40.02 l 29.16 -40.02 l 29.16 -25.62 l 21 -37.62 l 12.78 -25.62 l 12.78 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 397.1504 337.519 cm 0 0 m -2.52 0 -4.8 0.321 -6.84 0.96 c -8.88 1.6 -10.62 2.56 -12.06 3.84 c -13.5 5.12 -14.61 6.74 -15.39 8.7 c -16.17 10.659 -16.56 12.96 -16.56 15.6 c -16.56 41.04 l -3.78 41.04 l -3.78 16.14 l -3.78 14.739 -3.49 13.67 -2.91 12.93 c -2.331 12.189 -1.36 11.82 0 11.82 c 1.359 11.82 2.33 12.189 2.91 12.93 c 3.489 13.67 3.78 14.739 3.78 16.14 c 3.78 41.04 l 16.62 41.04 l 16.62 15.6 l 16.62 12.96 16.23 10.659 15.45 8.7 c 14.67 6.74 13.55 5.12 12.09 3.84 c 10.629 2.56 8.88 1.6 6.84 0.96 c 4.8 0.321 2.52 0 0 0 c f Q q 1 0 0 1 423.2202 368.0591 cm 0 0 m -7.38 0 l -7.38 10.5 l 20.58 10.5 l 20.58 0 l 13.2 0 l 13.2 -29.52 l 0 -29.52 l h f Q q 1 0 0 1 460.8916 350.959 cm 0 0 m -2.7 7.02 l -5.4 0 l h -7.5 27.6 m 2.1 27.6 l 17.28 -12.42 l 4.68 -12.42 l 3.36 -8.82 l -8.76 -8.82 l -10.08 -12.42 l -22.68 -12.42 l h f Q q 1 0 0 1 493.0215 347.959 cm 0 0 m 3.039 0 4.56 1.16 4.56 3.48 c 4.56 5.799 3.039 6.96 0 6.96 c -1.44 6.96 l -1.44 0 l h 3 18.42 m 3 20.259 1.999 21.18 0 21.18 c -1.44 21.18 l -1.44 15.66 l 0 15.66 l 1.999 15.66 3 16.58 3 18.42 c -13.801 30.6 m 1.859 30.6 l 3.859 30.6 5.689 30.37 7.35 29.91 c 9.009 29.45 10.43 28.77 11.609 27.87 c 12.789 26.97 13.71 25.85 14.369 24.51 c 15.029 23.169 15.359 21.6 15.359 19.8 c 15.359 18.52 15.199 17.43 14.88 16.53 c 14.559 15.63 14.22 14.88 13.859 14.28 c 13.419 13.56 12.919 12.96 12.359 12.48 c 13.239 11.919 14.04 11.199 14.76 10.32 c 15.359 9.56 15.909 8.6 16.409 7.44 c 16.909 6.279 17.159 4.86 17.159 3.18 c 17.159 1.26 16.819 -0.48 16.14 -2.04 c 15.459 -3.6 14.489 -4.93 13.229 -6.03 c 11.97 -7.13 10.43 -7.971 8.609 -8.55 c 6.789 -9.13 4.76 -9.42 2.52 -9.42 c -13.801 -9.42 l h f Q q 1 0 0 1 513.6592 378.5591 cm 0 0 m 13.32 0 l 13.32 -29.52 l 24.36 -29.52 l 24.36 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 539.9697 378.5591 cm 0 0 m 23.58 0 l 23.58 -10.5 l 12.78 -10.5 l 12.78 -14.94 l 23.4 -14.94 l 23.4 -24.9 l 12.78 -24.9 l 12.78 -29.52 l 24 -29.52 l 24 -40.02 l 0 -40.02 l h f Q endstream endobj 18 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.427 0.737 0.859 scn /GS0 gs 271.996 398.559 13.56 -40.02 re f q 1 0 0 1 289.6611 398.5591 cm 0 0 m 10.56 0 l 21 -15.36 l 31.38 0 l 41.94 0 l 41.94 -40.02 l 29.16 -40.02 l 29.16 -25.62 l 21 -37.62 l 12.78 -25.62 l 12.78 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 335.707 398.5591 cm 0 0 m 10.56 0 l 21 -15.36 l 31.38 0 l 41.94 0 l 41.94 -40.02 l 29.16 -40.02 l 29.16 -25.62 l 21 -37.62 l 12.78 -25.62 l 12.78 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 397.1504 357.519 cm 0 0 m -2.52 0 -4.8 0.321 -6.84 0.96 c -8.88 1.6 -10.62 2.56 -12.06 3.84 c -13.5 5.12 -14.61 6.74 -15.39 8.7 c -16.17 10.659 -16.56 12.96 -16.56 15.6 c -16.56 41.04 l -3.78 41.04 l -3.78 16.14 l -3.78 14.739 -3.49 13.67 -2.91 12.93 c -2.331 12.189 -1.36 11.82 0 11.82 c 1.359 11.82 2.33 12.189 2.91 12.93 c 3.489 13.67 3.78 14.739 3.78 16.14 c 3.78 41.04 l 16.62 41.04 l 16.62 15.6 l 16.62 12.96 16.23 10.659 15.45 8.7 c 14.67 6.74 13.55 5.12 12.09 3.84 c 10.629 2.56 8.88 1.6 6.84 0.96 c 4.8 0.321 2.52 0 0 0 c f Q q 1 0 0 1 423.2202 388.0591 cm 0 0 m -7.38 0 l -7.38 10.5 l 20.58 10.5 l 20.58 0 l 13.2 0 l 13.2 -29.52 l 0 -29.52 l h f Q q 1 0 0 1 460.8916 370.959 cm 0 0 m -2.7 7.02 l -5.4 0 l h -7.5 27.6 m 2.1 27.6 l 17.28 -12.42 l 4.68 -12.42 l 3.36 -8.82 l -8.76 -8.82 l -10.08 -12.42 l -22.68 -12.42 l h f Q q 1 0 0 1 493.0215 367.959 cm 0 0 m 3.039 0 4.56 1.16 4.56 3.48 c 4.56 5.799 3.039 6.96 0 6.96 c -1.44 6.96 l -1.44 0 l h 3 18.42 m 3 20.259 1.999 21.18 0 21.18 c -1.44 21.18 l -1.44 15.66 l 0 15.66 l 1.999 15.66 3 16.58 3 18.42 c -13.801 30.6 m 1.859 30.6 l 3.859 30.6 5.689 30.37 7.35 29.91 c 9.009 29.45 10.43 28.77 11.609 27.87 c 12.789 26.97 13.71 25.85 14.369 24.51 c 15.029 23.169 15.359 21.6 15.359 19.8 c 15.359 18.52 15.199 17.43 14.88 16.53 c 14.559 15.63 14.22 14.88 13.859 14.28 c 13.419 13.56 12.919 12.96 12.359 12.48 c 13.239 11.919 14.04 11.199 14.76 10.32 c 15.359 9.56 15.909 8.6 16.409 7.44 c 16.909 6.279 17.159 4.86 17.159 3.18 c 17.159 1.26 16.819 -0.48 16.14 -2.04 c 15.459 -3.6 14.489 -4.93 13.229 -6.03 c 11.97 -7.13 10.43 -7.971 8.609 -8.55 c 6.789 -9.13 4.76 -9.42 2.52 -9.42 c -13.801 -9.42 l h f Q q 1 0 0 1 513.6592 398.5591 cm 0 0 m 13.32 0 l 13.32 -29.52 l 24.36 -29.52 l 24.36 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 539.9697 398.5591 cm 0 0 m 23.58 0 l 23.58 -10.5 l 12.78 -10.5 l 12.78 -14.94 l 23.4 -14.94 l 23.4 -24.9 l 12.78 -24.9 l 12.78 -29.52 l 24 -29.52 l 24 -40.02 l 0 -40.02 l h f Q endstream endobj 19 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.427 0.737 0.859 scn /GS0 gs 271.996 418.559 13.56 -40.02 re f q 1 0 0 1 289.6611 418.5591 cm 0 0 m 10.56 0 l 21 -15.36 l 31.38 0 l 41.94 0 l 41.94 -40.02 l 29.16 -40.02 l 29.16 -25.62 l 21 -37.62 l 12.78 -25.62 l 12.78 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 335.707 418.5591 cm 0 0 m 10.56 0 l 21 -15.36 l 31.38 0 l 41.94 0 l 41.94 -40.02 l 29.16 -40.02 l 29.16 -25.62 l 21 -37.62 l 12.78 -25.62 l 12.78 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 397.1504 377.519 cm 0 0 m -2.52 0 -4.8 0.321 -6.84 0.96 c -8.88 1.6 -10.62 2.56 -12.06 3.84 c -13.5 5.12 -14.61 6.74 -15.39 8.7 c -16.17 10.659 -16.56 12.96 -16.56 15.6 c -16.56 41.04 l -3.78 41.04 l -3.78 16.14 l -3.78 14.739 -3.49 13.67 -2.91 12.93 c -2.331 12.189 -1.36 11.82 0 11.82 c 1.359 11.82 2.33 12.189 2.91 12.93 c 3.489 13.67 3.78 14.739 3.78 16.14 c 3.78 41.04 l 16.62 41.04 l 16.62 15.6 l 16.62 12.96 16.23 10.659 15.45 8.7 c 14.67 6.74 13.55 5.12 12.09 3.84 c 10.629 2.56 8.88 1.6 6.84 0.96 c 4.8 0.321 2.52 0 0 0 c f Q q 1 0 0 1 423.2202 408.0591 cm 0 0 m -7.38 0 l -7.38 10.5 l 20.58 10.5 l 20.58 0 l 13.2 0 l 13.2 -29.52 l 0 -29.52 l h f Q q 1 0 0 1 460.8916 390.959 cm 0 0 m -2.7 7.02 l -5.4 0 l h -7.5 27.6 m 2.1 27.6 l 17.28 -12.42 l 4.68 -12.42 l 3.36 -8.82 l -8.76 -8.82 l -10.08 -12.42 l -22.68 -12.42 l h f Q q 1 0 0 1 493.0215 387.959 cm 0 0 m 3.039 0 4.56 1.16 4.56 3.48 c 4.56 5.799 3.039 6.96 0 6.96 c -1.44 6.96 l -1.44 0 l h 3 18.42 m 3 20.259 1.999 21.18 0 21.18 c -1.44 21.18 l -1.44 15.66 l 0 15.66 l 1.999 15.66 3 16.58 3 18.42 c -13.801 30.6 m 1.859 30.6 l 3.859 30.6 5.689 30.37 7.35 29.91 c 9.009 29.45 10.43 28.77 11.609 27.87 c 12.789 26.97 13.71 25.85 14.369 24.51 c 15.029 23.169 15.359 21.6 15.359 19.8 c 15.359 18.52 15.199 17.43 14.88 16.53 c 14.559 15.63 14.22 14.88 13.859 14.28 c 13.419 13.56 12.919 12.96 12.359 12.48 c 13.239 11.919 14.04 11.199 14.76 10.32 c 15.359 9.56 15.909 8.6 16.409 7.44 c 16.909 6.279 17.159 4.86 17.159 3.18 c 17.159 1.26 16.819 -0.48 16.14 -2.04 c 15.459 -3.6 14.489 -4.93 13.229 -6.03 c 11.97 -7.13 10.43 -7.971 8.609 -8.55 c 6.789 -9.13 4.76 -9.42 2.52 -9.42 c -13.801 -9.42 l h f Q q 1 0 0 1 513.6592 418.5591 cm 0 0 m 13.32 0 l 13.32 -29.52 l 24.36 -29.52 l 24.36 -40.02 l 0 -40.02 l h f Q q 1 0 0 1 539.9697 418.5591 cm 0 0 m 23.58 0 l 23.58 -10.5 l 12.78 -10.5 l 12.78 -14.94 l 23.4 -14.94 l 23.4 -24.9 l 12.78 -24.9 l 12.78 -29.52 l 24 -29.52 l 24 -40.02 l 0 -40.02 l h f Q endstream endobj 26 0 obj <> endobj 13 0 obj <> endobj 12 0 obj [/ICCBased 27 0 R] endobj 27 0 obj <>stream HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 N')].uJr  wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 25 0 obj <> endobj 24 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj 30 0 obj [/View/Design] endobj 31 0 obj <>>> endobj 28 0 obj [/View/Design] endobj 29 0 obj <>>> endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 11 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 18.0.0 %%For: (Lee Byron) () %%Title: (Untitled-1) %%CreationDate: 10/30/14 4:19 PM %%Canvassize: 16383 %%BoundingBox: 83 -268 726 -4 %%HiResBoundingBox: 83.2057291666688 -267.358072916666 725.64453125 -4.17317708333303 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 18 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -560 960 0 %AI3_TemplateBox: 480.5 -280.5 480.5 -280.5 %AI3_TileBox: 102 -568 836 8 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: 57.5 -4.5 2 1192 711 18 0 0 121 293 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 73 %%PageOrigin:80 -580 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 34 0 obj <>stream %%BoundingBox: 83 -268 726 -4 %%HiResBoundingBox: 83.2057291666688 -267.358072916666 725.64453125 -4.17317708333303 %AI7_Thumbnail: 128 52 8 %%BeginData: 12290 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFFD81A8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFFD04A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFFFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFFD81A8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFFD81A8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFFFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFFD81A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFFD81A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8AFA8CAA8FFA8A8A8FFA8A9A8FFA8CBA8FF %A8A8A8FFA8A8A8FFA8CAA8FFA8A8A8FFA8A8A8FFA8CBA8FFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFFFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FF7D5252A877527DFFA8FF52527D7D4C7DA8FFA87D527D765252CB76 %52767D5277525252FF7D5252FFA8A85277527D7DFFA2524CA8AFA8527752 %5276FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFFD26A87D0027525221277DFF5227007D522700A1AE7D0027275200 %4CA852004C272727280027A85221277DFF7DFD05277DA1002752FFA82821 %270028A8AFFD1EA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF5928277D524C2753A1284B4C595327 %5228A828522752524C4CCB524C4C7D522E27537DA82752277DFFA8275252 %5227537D4C277DFFA9284C2E7D7DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A87D272777522728 %27282728277D5227274C272827284C522752A8522752FF7D00277DFF5227 %272827A87D282752272753A8272753FFA8282752527DA8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %FF5928277D5252274C272E274C53532728275227282752524C4CFF524C28 %AF5928277D8452272E27287DA8274C275227597D4C277DFFAF284C27274C %FFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFFD26A87D00275352272827280528277D5228272727282727275227287D %52272860592727535A2727282E27527D2827592E27277D272752CA7E5227 %2E527DFD20A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FF5928277D524C5253277D284C597D275252 %285352275352282752272828FF7D28277E524C4B4C4B52277D284C4C5227 %527D524B52277D2852275252FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA87D0027775200525A5959 %27217D4C272784528427272884FD05277EA87D0027524C27525353272727 %4C274B27287DA1004B27274C52274B214CA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFFFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF845A59A8 %7E5A59858484597E848459848485607E59848485597D598484A97E7E597E %7D7E5A85847E7DA8597E597E5AAFA87E59847DA8597E595A7DFFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFFD26A8A9 %6085848560845A845A855AA9848560845A84608584845A85A8855A848484 %6085848560855A845A85A8855A8584845AA9608584FFA8845A858484FD20 %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FF848560AF848584858485608584856085848584856085 %84858485608584FF848560A984858485608584A9848584856085A8856085 %60858485848584FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8A95A8484855A84848584845AA984 %845A8584845A8584A85A855A845AA9A8A85A8584845A8584845A8584845A %85608484A960845A8584845A855A84A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8FF848584A984A9 %848584A9848584A9848584A9848584A9848584AF848584AF848584A9A885 %84A9848584AF848584A984A9A8A984A9A8FF848584A984FFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFFD27A87E8484 %847EFD0684A8FD04847EFD0484A8FD0784A8848484A8FD0684A88484A884 %8484A87E8484A8A8FD0484FD21A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA88584A984A984A984 %AF8485A8AF84A984A9A8A984AFA88584A9848584FFA88584AF848584A984 %8584AF848584A984A9A8A9848584AF848584A984FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A884 %85A8A884A9A8A884A984A8848584A884A9848484A98484848584A8A8A984 %8484A984A884A9848484A9848484A9A8A884A9848484A9848484A9A8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFFF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8A9A8AFA8A9A8AFA8A9A8AFA8A9A8AFA8A9A8AFA8A9A8AF %A8AFA8AFA8FFA8AFA8A9A8AFA8A9A8AFA8AFA8AFA8A9A8AFA8A9A8AFA8AF %A8AFA8A9A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFFD27A884A8A8A884A884A8A8A884A8A8A884A884A884A8A8 %A884A8A8A884A8A8A884A8A8A884A8A8A884A8A8A884A8A8A884A884A884 %A8A8A884FD23A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A9A8FFA8A9A8FFA8AFA8AFA8AFA8AF %A8AFA8AFA8AFA8AFA8A9A8AFA8FFA8AFA8AFA8AFA8AFA8AFA8AFA8AFA8A9 %A8AFA8AFA8AFA8AFA8AFA8A9A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8A9A8A8A8A9A8A8A8 %AFA8A884A9A8A8A8AFA8A8A8A9A8A8A8A9A8A8A8AFA8A884A9A8A884A9A8 %A8A8A9A8A884A9A8A8A8A9A8A8A8A9A8A884A9A8A8A8AFA8A8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8AFA8FFA8FFA8FFA8FFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %FD81A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFFD04A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AF %A8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8 %A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFFFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8 %FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8 %AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFFD81A8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFFD81A8FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FD81FFFF %%EndData endstream endobj 35 0 obj <>stream %AI12_CompressedDataxeu&0 5ZǼ[ N\rK B:+,e;+e"'"^= 2␇u/n>}/gson?.O?9>㛏o?>y{~#*[oֆSO zﯾg_ͻ?]?<K]:"]31&/䳏ŴxN!Do]D7gg޽g>׏_|q_tWNy'Լ:ߏo߾0G7o1xs+>|gO'?~+_}O#^.QC)??鍬&v矽o1ӌVbeB1gԶxigcGӚNu<ǿ=|]k|߽%~4$o~WRmWke'_ wcgYxr'kgwb9gOn3&ͻ_v1ͧfw*?y3n~'dcǏc;f7ܿg\/xఱaϽ}'[~|uZOAj'{%/?ջ}?L| " ȅ?z?;܇ǓVgo=+uݿ?}[m|{ݫ'|o50=kl^#6Ct?`S/|oG쫖w˧lx^}3(OX:?^"ًv<6G2jcޞ|9޾}>G9_*olݽO~7>_||| ͨkz+6˫7vw7zN Z?,Op l/~`nSw^}w {wߓOp;'SN_&خMZJٖb]ٔ m-wro&n`)~S®D-mBoٔyWne)K;݄?;-۩)aSK,fS.Zh-߭gج꺶(ӲaȺ-(Zv;oVRž,ˬr﷫9\k7c]/WkYܭM-Z{)w*zYuXtڒu@S]#m-wRky`i'/]K+Ћ'/fy;#Le0I8Hc'!r6-Pn%܅tSq7o}|0 ]R`7(x`- Vs~S6vS.r+s+W6%oJڕ)aS`N= [~s+Z&)72oJٕ)iStvo)f-mʧv۟Mh[׬~˂6_炙Ns720u w<-۲>kfDg㦖YJ%KIZ_+SIڳEM-R ZPEIo#m-e.^E'ʂpLLl,dެԽLE&LQޕ/hndYFdD=&t%P@̈́tYѻ+70 z(7Vqo@6˜A@#dq?`#a.s)oŃ[\!wK.9hGonq?`ab/ 3} &3acoq1(&R0<. kq2r! n.}]qRp3%qGyUv(U^/b%]ڊZ+i:7p)wpqҍtо~l[ Æ+I"6f:JrGo +璷Pnz*m&@nvY9r + Lý 2qanY fK!ܝӢg]-*ֺ 7• KhG9c\d/tAX/Fq4g*+R=:hOE:iƇ񲰿Lى8=ZN2Ti?ʐd=E@[8})i' ݄;wte"451s)a(~(ԟi'OܖI[;,"iVaai#kI/,He(q/,G|P6|ϑ~۽hU.w(ՔMIQ,ܔOUlnǻEߟơӻ==MOk^T(VݐĪc;wFUr]edUlvih42 ãA~39ݷ~FGQi\ }/\%T H?#8n!4A" #@Q9,rr%[HA$ RHB* Qr* =TeF΍[-=0w*NVbҔ3+"@i׵ᱚ&U-$дavDu ;eG#wq$,m;$kOp#22q||JZj^-Q5nua"H/nWn+iWSNWv*Jr˴Z0ǦM=R5ycWJZ]SfQ7?Ug)E\?U^VeZ5KvT7f?]Xhi*LUh6fi?Znthzlz4D7-l$J#-i)\h~@UuL6thBQkTgCi.ùNk1;R $M9$ϑiёiK%6i؜kd`<{:_IӢeUeag&pzic=T,mQ e6E^XQh$iN{/Zzrbm7n[ZoXw#n!- b5`IҦ0Td8RA5*h73fAJSX+Sg}['ɇm?y36 rkyH<&a*Dd6F{/"HQ.ljQ 8S]?Ny\ޚ=bU~Y}nfU̹ߨN%}uùcWBUamu:ٺ''oON׉PASH;}ZD¡dC&b(b`bu5Yi;jb/*sUjkՄBW2?+u%Y '+zUVCJnf_l\'cU'_(2i4lZĎp#ETRw$"ª sTbUuZEnK, 7$k w;!c˥o"6YvY ߊ͗\ݙWW\ ;~p#^Y`Q良W^{cbLBA}.`Ӌ]}\ocq Nބۻpu;{/Ǔ2>ն{_?~y8=~-GT(Ҡ"`T+ʴx>7lg|R-Ozٛe>TYY:ٻSݾIuL\چu͍2.O",W(^Q^l~924}9!,4#AiEq%,g %#s%υja3'g:<<r=?39I;yo|0vYdBŞ#K<$K1FmcAǢBH=Qh=W; Ѷfk2tPACU}02x/4>/ϕ=ӧ{A1e9qoY8ejoUI'O>sUcb FcWTՎb&<9WDU\g`o =9er>h*_Iig=~Jhgnnyms^\j/e Ro:SnhBL\$#kq  kX&,^kz\u>l/ƴ7T7rǥ2 M/ޅA[lH8$fqOTqƅYv5.b5)% Wjk@|G\X9->L䥔,岖)n 7nݬMrXJܕte>(7SrDY̺ӱOPj<m1F~Ke=vUP^hũ 19f)~uݘkFlgVf 5Rn{xq{Qƺ7NlnNq#.uėيE 4\ETp햩ڭ(-uјc't*-2ߌAchn%jjfLsF dkN*Wn&k5uNi6l;⳦2I1/6N^gf[`:[t z5{^r}>nc[4}ok|>\,"MUZEi/C7V_[{:AIUޞȽbw \vqZUo"[`qF؈DO7ϼZḔJ 6J~-[yWsHrMW~$t_onQ]/ 4v%|"74o|u4$ybGL}$WaPMӢݪD6]ա;eZDh޴u}tB]kt@/]đ_5U'z&9s5faNXգxo$^#qHj+v{WYQceϗ:UѪ>KNRlC4hI١K*VgZSEt7U/MJUH~٧ۃkѫ-j>OU7 赠>qUS7sO91w$LζPqĝ$D}G=hݻW=~zSd>}zS {Ef٠{ sP*n޻:NjWkηɴ8{c* 5/p 㥨#OxO|: d;ۻp5c?ӿ}@D ô}I? xc!>[z9pn9?@4\>YFkc)6>FqG]u$/~)P 3/~"gATYT{,LwbEyTlm-LgT58GBs'Ӵ2ݘ.'VM>g﹟ENMJYZNZVTo"๫NP۲0V}Yt-+%}^T2]*_L_:e^^~“4/-TD9='|G!:S|X|Y T{k: 47샘C*H&V%Q5~OKVz⪢h*jQ!,gݣ{ꝣ"sظ+8 sh)S_̗H|vGH}N),\2ٴvƇc'o ŶKt`1 d)ڳDEg"J|8'=b^èٻ9|o|?;8:t $ww["PnZnzm<#+ l .眍K§HF*`x'N?isĬT/4ggp.FWl X_<q`WA޺O(OY|ǏaVl Ë}u{ o5Ss}6GrpDoqx{q}%wSUa SyҺSqɾ;G{ztFM|ԙax$nBIW{QݷbdXw'z=WYL~_+V,QLIia}-+49r0iąˆcEq"9mkKKޤTZҷ}|^}dH'ȍʾ ߃R~xZ)k{" ތ[rx|vAXl<ƲzuZܠ ٸ_m_Ə|aSz[ KdH>F'> mTpue*״V6^/wM`W 9P&k-JӭQI hi+]PW7Yȫhӽ%X!3l#yfQ={tqw0(^bcl'IJw޳y#4u1_χ3l%}q@.O؊x ML;5>b p),Jq tD[G6##iyռs]Vg 6oaF{l9WEs sYݻ:n:j0r.$~cQnŐo] ,wk,ZGJGV1h<<$7^/?klä2.)_"F#x/G6-mC+dm=wK>Y XMרO+2;Yƀ{Rc9]"Bᘬ0wBpɀD^23_uӨT ڈ|ˏlՍJ!4ccK|7$ɹ'@A#`T`rU8r(8󍄻p$ۅKWVjI.ExPd\_y !3OUsh}f5k6oŒmm&|RcbncH)171Og}YyZߡj};IM/Wq fʸ nrn+Lߒ"T<ʦF 8Qԅ@RbEIo9QщAMF;cgXPKJ8,[PƊ37[ ޠ\so|RЬ['-w}[PUpb+b'p;RZefy:Yִ$J{eήr@5JۚVl1S*G\82o7"k{O?{L- \"n/iF,wBj-UT3|/>-\K[tjg)gEwMr~Xkɴh ٬[Szu^)b-c JӐH~[͎Csߤ+ÕR%iAFae/l䜣)Ӛ)KE$ZôOB5fvIco7 c&vlWE콷b0JsEOӕ̳JD&Z*f5%\8{}OFFxd4;C^~1Jim3#K0K!X!TO5UFу63&Q阚g$' Kr7]ϳjn6j82v{|NJrRm8eeLf8 m; X\lKz07A+GsK~NaG)㧸>sOXFXS$-▛E{EI&Y㭩.)+Kz5A^KKޒwwwBwg;{foG!+SWcUW8]ytt67 W܅^];,]dm#gqPu;䥷eӋ2-VܔBuN>7GgX֙[I=硿r5'xw|۱o>>#ȭ5xfviVoiRnIаo!x_a&ffs= 6 e&!J.4} ZHܫ; wl|e씆Qkh,+V,~ )5qᾦ#A>jn,&lL*u 6kRE[k3VF`# Vیml2<K̰OPMSfAx~fl6t%+uxdEݚJV uہLtׯA7z=N_?Z.E Iԭ)p]Ni([!JE0{19}IE39}IM^tqzVO[᧭Vi+\(֡ ߕ |Ûw߼/~۷?|5{wo/^A<'h) L#;ozoO'|/?})'Y(k-Nuvn 8lrL̩Bː7lt.?[{6`gXb9{,.fČi;0@xD!YL)fǴ|8Іlitl63(UF _r[/c\> iق6 $3iŒy 'Y2)g osg@ .O.K qƋ&;}%Vgs @"PilM^MJ VO X1=X~׉Kə1xYC:3ma= %س\ Zg YC,}l6 .E†*z9Hes{5I:֣nq2{AxD tDaSvI|=r֦dR!*0Xl׃G; qkO6 3_ _8Jexl Q~MLv HDs\(A7Ufĥq 񜊯s.SLXU[BQ̌}:p0>@| cþpʬt9أQo5Fw6*@|Xp"9|a N`z03f`J8oBŬb-q8qKbI8*&R{ͮs[м 6 ;2dE#c=׭dCRyt{'<,D~_gG89DM?+a#Dg2';ux 6e hV; zo;p"MP"0=N3Xp n$|9#APr- 23CިLOZę\'"LӁ |7`yjwt`qsz4ȠR Md.qO+ޱEIi@  vgGuE5gspxa;go@JJ_قV3:0ĦK=%syCG*uoua.HKE<bw06S1=7rc-RDyJ2و[X]HsFLN+]N˷IXsy/D|6tjv!DőՒ V|Bҝ IsT)F=fɓ'iO 5%gm-᦯gJ)0P83Dc(~}'S@ZQa9![$>|}XY[]&d?ٵ٨cW·YC pgb" O w&S'D)5{ڻDB?!t=Gڤñ-wj~]^PSNXJe_4;-I Џu /'~N[zR>6GBvqgAw#i ݲ "=-Z ZipOɯ%:F I6Fɒ "K6{%Rzѱ{"Dv"rH\hEja;s<%-È8Hfxٻ(R3I9Z"օ޻^ѐy@7A;^|DYd(@\▃@zusKVtΐ"Gh΃I >RFH+P8vm=Y ipΈr쁿d\$Gb8 W&:y bLT})G>9Urh28+invv;\fe٘itS{ }. .bcB=NǾN2͔ZO<y:vΙtp+39鯐)΃&9 L+l WXq9bs3:0xp:rBTav++'-"B^Wm-31܍-ߜ; 6bs[qd{{({Z;8DGCCЃ~:Gσ -W:tHD P*qeލl\lG ; Uf !O )MnA؞);zwC[{'҃ aDcӵ'."u6dX:jK[x\txL.n&iR87+D7,wo~ylR_=fqyx臮_|'|W$p|\sA'gWӌzj_Mv9<& Cyl?6"CsQ*ǯ>ݫ֋QN=s{ MYn_fss'˒{#b悡U3 ^3*vD4&[{X2~F^@%lUDb/aM NM;{`olt̖.`,Ѩ= [@l Ї'1G@}`d1 $h΁a%{k<*#تWɋUT/8£ԫ-"T*uuSYc28Ҥ4PzFGƁqf~5*"|L!֋݃WN@F2y*7Ap45Y&@$)&*el\$p#nţ~(pYwӮ]Y|Y/(+Ϥ% n6}ya^<>?+#Y$0r02T;gTaťb0W8;u3I<+^ LHcT/;qx bADF{ 5,-h'EA sCQ` ^(Ji$3|+_ӈ{%$81!3gǭ(X( %m9gZfd@-V3A+ /$^h,CIC+:SZQ͆6q,NE VSעQnn~:+8`KďY3ЭշbD`-.@7g+&@zEB ,%w'Ka, U=f:L9kU$HKԠ( #fUԪ2ij^ +Mo&+DhI(\3Qi5<@SL:h1 MSR DJh^wh\tZ o*{")|#pX9Q3o8If Z=k8b$Q+UY^x&mu0ׁbÈ:A2֌--@:>h+ %5J9]W@Qn.t(EXd#+)u #j_]TdTSW38FW8W*q\&(V@f!E\GWkb%XЖ`w4} /fpꧢ>>I"tl?֘Ts*Oi5K;Xql%1ԫ "%(ӥBo[!PmkFn9#v7~s(V1eF2ށ :!Wz2|Y:]$KR`uF` fP"0* },aiටkp=9[Éw-b8$f'387^H7gbgy@h <9`^k&f觟a(Ϭ "eA5 cK>;n5Wg y DV”N̉AI} U ͐ƅYư{ȪK .%L)P+'ujh̎BڏtJv|>av3DUqڪȦS!CN #kjXpj10=& T3`"|1бOJ|d*҉)F,9 Z#-.')ΰgqxNYW-~qz-:ѴF -ƽ8tZ|Q9#$d['VoۧQ[T0"ucOUq{JW%T3NWuzn:-7jZU ҏR9Hߢia2O|3 rlG!܉-ۋ: px̙"=B- A?:{} 21eL!du?NjxE3vS2O0gdňw~td6[AFhR;b> U~`u SŦRSܳA.:f:@ }ߊԈQ}vC!ta =0gWh HzDkJr1up$ JLnfz%mQWPĥ_o<h 6M\ɋl'nhƍ_1S]mtf: W=tJ$' [TN5 Gt9CL=d<0%g 8CSEqj{p9Fk'Df~*t=L\N Vd/8<=u |\7tr KOF 0DSMmaDXEu܆l^eJYLcG9xD&A[=Yty?cq"ֹxg<k74+ęKE'+4}ގmRwE7n}ЪhSC SA@@Կ0P[E-ك!К 6a po}1DSu=FĮ9 Y-袀NP{6'upotqcZja,>HjiH7z6[x݊!A+A `s@ @DKS1+#z13 e~ Ϯгʱ* 1@bD XxF7`D L1 p!HĀ7D PzHD;Ćpf!b!>!aft%b;l ѐlb  x0t8:TC(.rhÀpHp!10  =!xC;8`7DF1Zu Cb8 c7=8A8aп!03 Uڲ;|C VBl a,\աa(hgq[5QBߨ~nǑР{ isq }-v@w{n ~WDy*ev06"tm[O V<Փq_lF3żṙq -i򡕦FuZ3-u`?l+mWԡ5cվ$58ɼ3P>ĭ1$[fq,Cڝܵ _F5>Kb]2ԵhR\77C?cyn~HqS.V2ͣJ5ammlED]5XPO4#L3 ׃m UQwo\9CdWeeAĂ;, !bfq  .@aae4m²,gq#,(zy@ݺfuFBwF@va]fM1VbDwh`W7ޭ*c쯵.β){.fN8L2 SY+0k}Nk}[,tϹ:wϺx~1 uZi챵R 3@Zgrz,*}F+ L<ɥJw}.G"|,TcF+skeF +C lůrT]A`Dr5z\)sNzU9B:T5P%R<9N7Ax`~ޔHW(#PT< PtIiĂ*n(+ 0$02/ Zف)I690L|8qI]%BY;>f86Z+;`92@u\64*+ZC(AH%GHJg#Vq*{ިP_@&K+GKe6D&BSkDwsD _"&~cZ6ZA T,eHܢe2 }_צSU[v?%Z+;ݬ(Xy(H/ߢvY*xg}NCh}[,Ϲ6wmrik @R٣~+x@‚t6?U鬕{1ggyfkst?⨱ cÀFH?SGQX`+qW0Gb` Ɨ[?Z*$۵(ksOǛO?Yջ <z׶wo><~{s??|xoH3B4ӯ__\/}\6\ D_~_O}Zп/z~Ϳ?|D[t 7O,5ShDMe?e~> )s{_oN?S"H,OV[z}Su{vy޼n?[3/~+jʂB4};O(c]#5V+Fk>ũ*(~ y#ogclk)+J&4 f`E ZT:УRS%@3W$OGGQWN#!;*vR$dK2^;z+xR1g^Ds&WT YӃ29Z%CiX2㫠pVt ffoҙƸ~&w?8fe]|md*f_+[&LR0!/̝l'6ސP:TTd@ʼc"gB] 9*˸6gJ"܍ZzTL%4G`bD}L%y*$+J&:vK?^AT .*m>GRW9E!e?"Њ 2WV|Kؤys $t"i-5$'Ce>D/#d>fL7#Ad(Je:LڨDSC1)E| D`:^!f Tm44DF+tJj'QE gC!cZaViQQ-WR,TDc9iGi ĚҲ/y]i ÀGԊ4т"h ɳ`KZ%M5XSNhjʤ$KQ } )fMy|E BjHXX[DŽ0$N0ѢPn:q*Ac #&dxlse&] &#"UqI cJEҐ9KȯjA=NxGh @4b#AM'bË 21Lì>. N(RK&Dm@& iʚK]a7ީ cV. 7n&qëΌ4ׄꂖK"=`l|J>0ht$ܙ@(IH1њĀ-)I}Y"E%Na3UTHƷ^A3RQP^LEQDmE Z*xn;\uqdz ߜNyS/FQy y4B!1!-&QuDbiɊdBуZw,j<Й@*MDb+IWjK ť.ѕP ^1N*5ӕx*jEh&In!JEjnauxy0i=ue`v.Aɸ-AI/(~1W!q$*HUd j s\9HX" U4ӠYI*J 'F5]@H$ߢTseѲ7*J_F;ůPȏT&N@Tٓis޺'{wy "7I"0T%VY5f'*s6<&39ўm:EEc5N!>3>G3)j CkRƁ P" `T9 TJw&L+;+A$ሉ[R?hJ [:9N:܀Kf%Tܪ 0"1%8X!D)k~Br7cIl5;+WrL#tgIYQيYAq%$.\G<~N {ŬwCePGD) LlŸ1’$',l$0s0zU -t٣F,$Ӄ5^J]Ł,F^=xdr^fB$W26Cd{&,|j _ ,0{c(\7D`4,W_0 s%B+:qް輻=Kޞ&*'/C.Jً\"DLZ*gg8H\;~~ne3ٙmYL4R9g \UصءYT|>T~>T*Y,8 7^\ÝZVݝ<+m7C&[e쯡ިMF誡i;R HHPUh^LÎ"bDo\Vs &p-H>(?SLxR!jG3ɐz_J$~0^8PnuA4`VK뤾5It8cwLO4 kp@@c*管G8cRJ)V`G+۪?\d[EaQ)QB73Όy B!YT+,$ժqu։x^b*ap$d.Dh>KwrSvHe(i}f(4;SV2[^T# sfeU@SYAv!Tm*P"ege/e}UDj!rǡTT ((!Ͱ~Գx)&=uB ŔHҴȇT H)AL7K$$}+ND%dV g^eƄߒc&+ 䥻9K0[Vdpf&dSWʥ!Y'F_dl'RhsH5̄`2B$s3$6Q>$܆P8|!= IEOlaϴRvg *t-+dD| n]ښ1w81/$R`i-qE8+eTe[eSukћtJnab 3n_JצzV4t ŵȐ6` #_%/0< `5 R=gNfK`QUVr+PƉ"p4ar :1Q*.NVK) yCgś:5>ws)M\P>K>'Ü/՜u-׃(ee]v|%cYD\|zn#I.iRǨ:, KǜGS"L#CiqITQ1QfjXG(;;L$-.ݐbvPz%Շ +Q6dFHĥ̔E0RM\Zu ܤ ULrly*0pRkETU:CN jXEQ/x rbR I!N!as?VvHbs΁N(LӰC8JGARps#)fԊ; 5!b?î6]l2Ĭ Hdff T7'Y2ydVW:*=IHyt 뢹rτq_=*7 ~&\jYVP0ⓖE j/Pj݉2Lxzt?Psi&OI,)D$ؓw jS R4(̬No/8'0 |ɪ\ж  Yތ de;:$53iS^γn5I`nDT.I5S}#hYפf^T #)[ ,%̡'-u0P\C<$0L3I܀\- 㙵UV@% [4nQ.qfg 1m1d敕Up^$"-m6k?QYtĢC $ ,ҏW$.z ԊTj5, " 2 %#)X5CII>ga0.mJR]rԸZQ|w5{iîb]nx#Е4..4RMKi>G*S$|K â%(!7*3ЃQs&v ]fh*W#\EʙZ <$z>. &2=āVz(LfC~ KViܒ<5@@gɆ#y]PE,#(V,.ߴ5cK9)?B!}̠j"O&T5;Ss O[,'=@vhRJs(Ѣ`@Y\O~RеI:{LT $qN"Ġ| V0$s$5Zq?fWv&;ӻ[e=gP-\*AV|YLf\238dk?oDXr82Ռ~Zq&nMDt 0ng=ܞq) l  {Fn^ 4Zc[,kl\bI+(5Sgw!9~qpT40c/[FbʞaRE7kg~D8ࡉ1`V aKb%J*c9dм(=L N7"Lbu9%6W`_ 2Ar+Pj#؂\͍i&YS~IY6e mCۨjk!atZ=x9[m5{z`fyv>C',|du2M JOjߑfI b಴^˥ǐ%0~VjA`Xl_nZCu$ (f_Ŝr}A'V e쳄mgB+ |%v1_#NjJم10tfW '-L#!<؍IMMΪn0ǟ` cu  n-K#!!?FT 4ISiAKXZ^!TztAwJ6:7~:*GCb!1; 8[]>mS*|)겍@ .(W <:; :զ3 h8qML(=\2)@xYȫ3{!n ؿ? mD=ߞ+#QZ)N,czA-\7t6lN B{7qes P)|ïMCcK-8>4 34Lh=^Q HW,7)ӣ3?P8 !FRd% Hi&v * r*Y6zELS "XG}v `ͿMA7R-̫{f4-?BEf/3~bpGhvcPS|]rߘd 2J9|J6 m!Dr< K9o)ζ !~H㓃6-$ж|PN *>q<QRpQU?9/amK,?hca&ť6htKwO- G U!|j l_p$7G:j'Rdq! U~~־ Em;np A*&<8'cQiTr[LmG@^J).bf_yXz|+ǞaV'%Sf'\<]1)fv=%LVe%wb$T*돐Cʉ뱉|^@r|,9Ff g*;7;v-n9,Vl(Z5420 2( νD͗8Q)XE4}<ZM7Jh]5y曲71RddYl=yEpw_L!;!N?P Gk6H~)H$(Ңa~=ЋorUO _7t~o }\vS)uIMaSw }҆߇ORޞ @1Bʰ'p sZ/B٦jgDʀ-Lu/?5JPx"CT Ld8|>24и(9LR*f]=4`?Ĺ#eւk$5j {aym&sCEݵSVyE~jGYM3 sJ'K*&WnLÞ6US!G`YU̔+,m26IɄ$'\KJwghәnR,+-=Q W)Æ -ʪtZ 9)]7R^w_gۿ2jes"e7jsFTR $ cCĪaTܐ bF4KyyKjg_<]ذб1cT3.ђ#vw RGŠH!؍ipҢ9Rqc |ĆA:dנ2qT2ꬮReF332'r¶Dt#V#xJuK:)D}+|Г»#%fFL*g k| soq..?Ct 5 (0:7.A1@z!s=Pg.3 rJ+("ҝN)?" r|5(L^m86Զy(elP8@(mh^-p]8D@R0'CH_A5x{[['\sp$_6E0Mh/R z1ݸs#Zq&Qcb#.xAG a9"< Ў%TߗmmmW9Ց9 333b1'沣v-ڛS5-FOD49L͹9'ײca+@Ͷ%2! A2Krdռ. DhIP%/IxAE#f-ץK[0AݑIs]eZmtjF^ b$*v* Gkx үB&W4LUsb%ADl`q.p}h,hje'1O NNL ^ځv,pn\%N<'RNq.Z睨9 K1puQb"&%}t녑f PPiᙎx^^#"%ǩnہp*ĽRi:#עa:iTdq>6 ͆P@gCOcG_Pj:-TLH%&yo$3ha ~̘e/&Kynq%s-d̿D'@rafl&QCɑFQ:X/5_kt~ )%'f6+MngO=|N VO:- d@s ݬ((y~M%b/\kږ9D;i sۛF^\#%k29'RF j&ǒe N\bu§JcYmG|\ nC]euEiT ~ k="C\Qcwݣ/4Z*Qt )!A! ~Ap1U!JRu=֧w/jHbM* =j)wPEƝN;Jc=wx`OGIMގmV v4֤%e BZ*  $خF<C?w,Gՠ:md} 攝UDΟYA, Q]pe6T猳ݥ9Fَ1<2#@&?ci܁"dz6UyxFb* l(+g!8"3!-:UIeӑ@ǡwXh0Q=UԂ dX|=VV[sfwÜrG! s})c KlP#c!L[ƆbbÜ4_~@ar8A G|$gӡEeKcd2}(!+=8p|z,8~* =El"3Lszm%ǦtoUZre\b'(ЀF{û"Fq)n7T^CcEDf=NWc.{k7D3B4˜^G׼.] 2 9I~毼LIY-O!z7OCkBJ#B_<a?ef3Tq^5C M;#m/_m_d l4_(t,TrHj>j{/TD/8CpN-WԂf. 2m3mЉLR,Iu .Ioh)A/ޔ|0t7ev?JŏkG؊FuCI@-'Q"28z҄cEqb&גAe I8^h,S<&|< Q|x4˜g@Z湾i_([e1pA}K(ΈcI@ 2?0w0`Jf@lkb,ô[V"rw . X 2+Ѐ'<%)Kq+Uۚ)Nhbe(2&Ͱ΢ċd-UQhx,TsC#ZDcy-9Pրy~c(Gn?FUTI!Vj!p.fei7Q #1ʘ82Yq>p>e86V'ܬ- gX #fy|ߥ0/zXiW'}~Xv] LNPBJ덺}+L/S8P T߳ S.p,FYzmȴht7gFW^u}fj*!@mq6I/=SlN(0ɆEPNؚB:jح(KB){Վ}zJVMNJS~xm!)1@8Rէ)`7}G^($CI-$`4_f7q|U}B9wp/: 9'`V X1)؈R)`WIbHP-`394pW[S٘1B"#$;x\}b3h:s3)vYҍ恘R9w]V[/}U;Rn,ȍ"s ) dǠXm|L`&uCgnk%u&Y%cjU(&z 9a]e|Y(-@FBC .0ء6%Y׾^ޞ[Mi>2|/U"{?wr'ǯO0?g/?ÿ^?_$6p'3*L0$тP;`[U-FP]&5Y˷`X05,ol@q׿bu!>9f"=*`cJ԰ ۋ2G86{!8rE:iDe?匴8:OYWleq8Egd',;C+N(*.P & 2at.Mb6AUqڗ{cW{$4AǷ=,u_p}gEDt/dҷ}R~&Q!]!e3)smMO*HO=mD綗3 ϾUlԾ]mhgsi{$}8WpV5#'=%^N&t V?͖vN! ,2}wEM9\@-C5ߠބ"7\)ַ!8$'KWX쿋BDvUc}w"]Tnkoƅ}gy Fޅ}*ÿ;9zvS .M@K:mJMS羽?]: 5!(Nܨnn֟"ǸJ\=ʼnpVW)қO59*T5(mO͖t&xk6f&ABcQSxzPs)ܣm= BvgCOZ,Em V0n0Ho7iX&d<"i.o^bc,b6캽kfr~ZBArv#mA/MfV_vz<7s"`b{:(l'g>šo"qҶmH֜4hIG̐Xu͝y91S&O>Z-]opk[f'|dl˻2 aF//#oʘlsrs/p{$0 ]!PM/cօRvi/++L4v@FܶXcIaij&enL.en ><}xt0Ƕqe>!j閭YýH]f Fʅk=/>m4#); c ,|Cѷ0hXŤ!!7+aNC"J|&}O8ȹY0QUGUZ߬C%jYx[3*:p|{i0~e,_rLO9_ƾ~dxSH-^jȅi/[ڧW/+ nۢXV̋r͐߶s'Sz U4-]Sa{1rW%;y[r78fȄ=t t QFEX&`7.)roK\qn^pYo@4]n~^8&mnSoK[f67˔7p%`Wb#J̿jOr,~b};%ϿI۔,K{hoSZ@{^g^@V_^|ʶ=yDo#@KVCF{Tr9q,C%>*ف'|=kt q,S$=?gõ -+GZJYCVypA!)$,rnwܖZ-V(u̱GsXtM>si'^8?;r\|[Px6JG̟i'#ZA/j#ۈx3sf*bˈ6U2>g願L䟍hMT-~kCz;ޜhM73ȊɉVt-oÉքeo#ګb.~Eآ^.m7;αNe7Kcqz3e/\A)kF *>OYn Q3L?z^oagΑ5jqV+ jez_ =ɪGrjá.) :im'yM%fQY!mUz3sNo![^tL6ԕ$ԕSp;EmSWÒJ)U 86CdoSWaeI6uAg|3@>]]i"jȁW]]m%7WWJ )ػl{WlT@Gbդ?|^Ӕ )꧌9秬&-<1Jpyy1ΓCJ/&Ttk>4͇9nWwxͫArfJ "}Bjsۼ|# *ja!v~=$(M4֚5ct~FHNp;5YLJC ZBf;@ 6^Иiļy۝}_B<#1nX2`-Pn{::U oX$fCR/,`=HbIoV6 i rbJ߬`J9ʩ_^jj6dL_էbPL*bN?<`yt>(ov؛,0Ƴ(K #}{S: ^鈆[JO#֟^qP'+[U+onX?UCSuWOO^`zao_Ʃ_}h٤kQz{adQ/a9o/:suq?ާ|l< ȺN*?t`TXHTg5EzV>$۽k+o,o`@۪+Ӡ |IǒvgS{!mmCk8POQǸMGٚz^-|a1ꡜngQ>2ŋ@POoQp}.-TA0TDTcW4ޒ4Hjmf)%<7K4(!l۱+=Rߌ*9ÑZJ@B&QGb'kQ."Zz38|{NWi0dLF &{pYXO |JSFEdG*R3c(*3\˦q[PR,+թ9~@r, OHt)ݮX%0?ᤸ&aA5z;qڛ#:' #oy7qK68}3"k2}#^HO Fs`Yi"`m֋h;.gPzWD2W{3zVSg)Bȁ]rDc:;2A@QiS"Щ1KE^ ,v "Z}W\/-۵bEmZ۫<~ OBTV8,gB]z CHV;3AUճ╇:!u/l|3" F&gɆt}%7iDH$ڡmDH4sрп*NC|}2 AU>aۀP2(ErԘAc4Y)ur ۀpFBK8\!n%JbԽ /׿%VS4VnTw6i2HrjF,,i k$d Lllk1e?]"%;&A@눟 Oo$=xLk9.$ >9a"I$,:3/Ap%G#ЭQ6V;V f $vϹ?ח%=)uv.OO@뤓T޿M}4RM?M" \e pNԝ6R}ňn!%_!Nk7$ja7k@#rV2ݡ4o#@/ߧ9׏+e( LSU :,(CKξs>"omp8%Kvt V- Ш?~vAkvAQِ]N4 v9]כ9!YGNb@(Kfhg]ކL Y`}r}fYy2 Cwu&.z*7[mHP 7@Jc `<=IHGߊ*xt; D7o`Yo?'e\dA!ԗޟ" kx Gq]thrSsHyQt)uuw7?}(L in?ʷ5e9i`7l Jއv•!e~ מ|D,2i`nEvkYΧ(Z(qݾm_E~Kž~zE+U97?52a)or펷m ǎ">qqf@Qt1:5h%φw""%{ ewZi1JGv4+mo//@$o۞~ ~SQ n{}OO?H@Z3cIzT۔+^߫ijCΠcx{ C[Ǜ$ #ԿZ[gol 8OJRަ~C @Y?Ϥ^~ZrXzL'J.?X9?`뛕Nn*o+?̭L;o/?b7r\'ГOlh*@cIo/?\|9 ~B$rVM"!$K_IJ>MTrsoS?]7F}s' p$rՏ]ʤ,ǻX4?dC*ޏ>s6|AD`6vYQF͑џWSqDnmF҄|ٗx# s;7ms 2afᑯ_*J/q7?*f9utjr3†b6O~@O/՗Ej au1J]97??*!kl~E:x:ZJV~8IjqDh'eXbH/?Wig3 *HSo?`הz<|hʐYǮ/'{W㇫E>ӛ6Yyxy{1(nG@2kA*FcuV*Op=u6ٓw{!l) uJ2O=qu ?8yQ9m\פ'd/PA zZi]ݲƒrv4XN/7 TR4+kj. 2CovDloU0} :gJKtۛU7{rv߲c&۾ O^Z4+ر\XS0՛,[?,ɶv"˪m@Ɵ_nn,3BMUp_V.!vIǶCJALvqXȹ__М\R mmh' ,Q? ]ZWuLo~_c|<+!O{Ur6o//2$^Ri˹(42bފa!{tk\\ rr17tjیUџ0B R2bBq l}m/b()a5т:V{9\^Y0VYdE /cvaͅ+GݯZjVo+vW5L 0‰>V&: `Ϸ] QۯP)ۧg=.*2sA4&!ӏ `[囷@)R9P J_dŔB{zsbRӴn;1G{TM!MP^QfRyXD"Dβ+܆P0#a?]8ƍfOi{<4Vm^}`nu\L(ݾK}DuiDbk#H ےitbǶS_Rv.FURvY~+cSI?VJ})>(์U_Yk8n.\e&#J iX(иBKӿw492e;moD&7S#l/#/[Z7-V /^XQ/=-Ky,L\:CPɞC 6NlHpzB%vb y2gnr5H:~v ZW_.A\C@0 )|4e3,gOOs(g xzYz?Y?^bøG(?>MP?y >]y:t|0K !INѾ-wڱL>vX%^͗0D:֐zB2\ ʑ~p)y~8el2bJ}P(ml^quFG̾p))_5ENf>j ?frz~h>#?߀%Sl!]’^J=TwCdr* @V3wzz)l(z!BT!HU-pbralMslkWxbͽU[a&816@A8hغ9F.s٬ʞTSYS1Ck(;%z`41~{= =U~I(;ym3p}N 'X+qL0|b{ 3B=9Q+ѽ¸`p.83sS>YGkU!Nqx/X>qѫ!c2fzUzΛNqhn͙+ȚBI$H"msuVTMW%jsE9];T:0YAkE3ч9) :"}3&!2WE$)n#tHSŎ5ϑ6V) ndI+x'=Pk@e,6X DO5hTC(5p)0rX7̹%rG+ a_ 7F),Ÿa |l'ޔWeO:  MEmR*(1у}Yڗ(^6b/r_sta&a,\ 0_(A΢iz<M-V:7W$BTUpql;9hzΌPF"\َPL) ɦm$OftW@~]ٹAz 20MPVg_# i+l=NZC @̜6E5 ~]AdU 99 u44i>_i^G^+^ ,q Id/gqŢތMiz_|ӦSOL ds9+sy SDES"2;#7L'~Y 8G3弮I:'bо =;d}aoy~[[Guw x@2NqZ5Z_[.+B:Ҝ>lfsJNxZCwCf'Lf Fudkח*,C2FHe?DރI/8I][:`t¢?F515>A!27уa>c \jkt>P^D ߤF =)G1|cy5Z$PD JbU8rg[B$TRD.F9b9fP="݀5y3!z(_GRsK7z -;džQ 6_ڄ>H__z:0RS=S3u ݻ#z\k=;%n[tF~q7 ih/:⋮lC岮N]oz`zT"j.wW1Q.R`XVäOfN{4C~C9zpvSw2_EHuu2qw4~ OB91IZXf޾% H@h(P8/&]'KUp#żο>!au6}aJ.upH Y嶄$([~^E`ka6P"+0qPQz*z]}+): w(5ޖAZaƵh;  -SГ3,㽆ʇdTC7BN^yifN f98A0/*i .f^ ǩ~)Ir>G}} FʪE_XW:S3}@8JXf!"2!ѹin3gvؠd\SƆDG!g3i2G~"S@`c[nmA@Բ.Q)2(bgΝ, }u%\}(VC7$J}Hh11\ 90[\,omrlkZq`=4xov5es+?tdAqpa='M_ : 颚j+5 LGM<<Ġu[/24[~w!@)qR@#R Ĝ۹ϓy!M4FBz<W8Gy.s/)\\6?SB it#vby$36r%d '̘R#Lw#ÍiEPYKՔt5Sd}>C_*~ qltR#H,"( CG{̈+ r_'Yx̠WutC:gc:.Z^%5P3G0O!}-/zSA-N\XLXvz J8Ԧ N3bL^vPh,FiPM;G+38Dtanu5wZpu#e42έ ~\ ʸx朳WִjC`!Ʃ [ e:US`HM]wRndYɐJ9hU$bΩ8<3tϳXbуSS}K=j%hP-@!(7D/|:)$2S}["{ ^2|Bj-/%D\D˶e䐑pTK؅5F#L^6~\[C#] j/,Mf_!'m#~bJYK)N0cZtĪ.IŌ|3tZ 1o:0茇J+G)~W0Yy:efB2'k ,UXa6{cb⢌H@V=4`=>}޼d׏'IEl8l4VwlX2 Wᩧ3)z!Km*.X)QnYXYJ8(dLWjBiIc7/]ɺ2:YG2SBeo#\ J|M,7dBV}Z 3CeXiЕ/!$BR= c rsW ْ>h#P#@s@{vJ\kDօɊ/ 3?Pa^cڴA tO#ѫAqra ͇1 6??xr$Z@ , ڹ&& G8,q0ÈT_Xg2-[q3$8B]J>%flө/P,"11a~m(JlT/aBTbhY>TʹE3^82Gv&&/?|6(y{8[1%u͝s%p2?\b1 _ ^%G<HqKmkLC#b v Pt[,UYc.f#s4&$QƐL@Qiv4Ġ؃Ѥ#AFv^XtJH-Nhk6Xt=(!Qj.35ȑ2X;@AJ'%Р|%gf"F^ҹf n-VhF(φ'h-W3wk8d{Sǔ)v ,{,I PMS㶬^-PRM% vQ@L9zh̒i1 /5h{wpR ,"򉡁,rFCwcMѹNNS0*ZTr<`FZ}k?l~\‘(t4{OoX(swW{Bc \#l/ӘФMpIDM hGȖqv[ |'RSdQ\Dר_4(c]zrps:EW5# g5**y.bM$c:愍V";Cf1^qIi.4p2" ̢c\uas=oh3!>{UccY>N($c_ʼUs+5١-RgH.<+P4/Kf""D)$Hf8J=hzH0Ùq c8ހ$'IUV^A` Y%yO]X*I H1QzZ[&etNcsM/ z6o*O/<pBg0,) '4>HGm RMvPYU0{ s GLFty^[ΖE:Wv2"lO!Rk&۴6s!T!F'v-EppIAV@$][ (Er`'"w{ ;JjF2J\GtPGk=,c.ƱmrI}9m3kD\= ,r/B)aM+[J͙\ȋ[01YTz >M0(&h;n=WʄmEfCxׅ!]T GO 촢l^c,,? pGhT%9TVuCD@ !b!8ts@hj_J8bnX7Ņ( Pb=cRӼn֕l9zV4+e~p+O#-;m}AC+8B>$Zldvri"_/-a)w&w@BN\JZmLfBߚMũjZ^Fkc.<%Pc7\ 8̸فH=L62j5 @%XcVbgأm?"R!g].*+>;`D@B_i8D!BKbCMTL~,, O1F.)AeCx+Jk͐Ig2a u~>07%F@@M~^*]HXw ead"4M@EeG1_ ڂzu4I=gon.(56@gl:;pz@Gk+t#E@2bd v,>dg.5/aoxXة"|6^DpkQS루)j9vqG<6jÁ$*ېj84" 2s ^0`<݂.[_N 6RgM!1'f)+XTpXRXMN.9 f]LHLU#fvk5Әvwxc̥/pCHҍ! tTBycy)t(vKY }Gd%;^\7~(?#ėhg`1h_ի(M%|֡e}z|VZGj`_ VX>`ִ{07Y2hbJLUKէDK,i/8V8m#pTK- 'uW x;oFte_O @>^`ΰ4 &4:= ѷ Ii~`D 3ύ bA_qD )⋽:#( KhNp9(@{`$)Fy?8cYzBKy*.holFyW w9~FhHO5|z'mZtkA|E$zQk”^+1 t |,jh\,7QK'y uX1]ZCȻw'ԁIp^(FPp bZ,am-})Tgy1V!7D=Un^ZK(Q`%7*g@B11A6"A93f] H<] `&*luh8jq1ɔM:\Zi.C <A18;EWɂT cDxZjRq/K3Ԃ"=_ LQsE*RX^R ̉r,de >Rc NrЇd7Fhj68 ںxHth)O3$4(GLlT ?G XyBkЅ;s=洀O2p6z~©SNlNT<N4e(Z:f-֖LZ J̟rĕ1:,ȧIaF-=ڱzos^+s@ bszVYQ"#,9'3cۥYIԹuw B!dsR)R tR Ţ,L QskO>C?\U!ܻ7>Ws8GK/BˍE|Yk/0ZaFם镬#OR/:'&V8~ ڹ,(^>&@1iW[ry׵jT":ˁ=*ݷRyIčKhi,gunXDZB @ .]]3j\$AN5cjn}^h.3M¢fu->p۝V/0|!GI})k3ޚ`4R g wSCm60E*Q{֫KrŧVR IAnԃ/Ō)&b5st%d$^hh t'8)Θ LD}}$9u6\liƘ tp'=d 1I侥x#1M@H43H*Bn56镜)/OU*7bLu~FL0wRExTJxg*_gPD!m:=L / > VUzeޅ$ {wvݻ" d$(.[zՍ:Bp܌>B05Nޏ[4`BDIL>^0t ?dd4d|n:DtN߱q-GZN)HTk) W04JU* fZ 﫻Mֱ 'z`K"QF JT J;(ԜŔu~`B_Y<;7kՕPv0(0^!uƂi zWi+&## mQ2  S8=b8 m؅3@r^ŝY=䒣Iuz}yamhc$8Hz/umdT '駲jtdўK֊!NGYYv.C.rSö%? (]f{7ng-]&rpԹo<M44c@[E4s LY% ֐%T!:_ZL8vHK1.vI Duc-F,7h%zHF #vU. >`%u,LXt(aMNekh?t '{;f='dxS?'`h\Ɲ9/_)Uڃ/&M./PVa^ׇz5HH=)L2cJ"?Ԭ拠lKUʸ"K^,L$Fkrs,0Zn衤v,>MEwbKy8kwo )ej(Rziq(ƹ'7)Fށ%"4 ԫT*9Ccٴ廩Aŕ X){x< IRp4:eImͯIWB?zz@lwE*ʉVL(YLh[=\PAհ6er[B"C>uՙG5"w|Uu潕ӌh?T<qPzXW^=l3 _NB3;'tz]7] Z2zD\g)Y;5V)+# ѻʝ Lc6r ZԐUCcgC/H&uxr+!MR=_vBe*-H=H4zQDU|ݜ"ԡy"c=CB8\!^}9j&gJ GG=P81 9L1Kl&ZY~fnzwk Fj*&9ޜGnmsԔU$DAƻZǩ\g* gIᠺK`f(MH~ KT* e~ ı FӔ@ !Bg^& ux5x EZ xY#4!A,# |$u5n#7 JAU}r)7^[xbcgʦ0za%rd$L-W9vq5^W`bP%j;-TK (]_4z=܉*|LmΝb FQMm!@ɀThDc-u1-Y%듆`iXγB4O%!UL. 8AI헨}9xmYyNJoS}q`-4U?b~-fze(ږTϽurfTէ%ck=%M)҈0MPwV6b=P8ltŏW>*\ۃ˸{1F5s(Ex$~q ֲTU_eCWh5DmW8u:cAUZߨ>)StzW8S/I-_ Z:Ԥ%8F и:(=r0ĚVJ~'apSGkM0 Blle'khA$NJ=|okPԳ`?WRv(B.ȢPD;VzLEEE@L4<#c5hޔ\R?gwX %1KhcO|{9F˲"SFHDeVx rԶ׹ SˊBӢkr=e0F&T[^kh8~ 0TyՕY޹1qWNڀ匔OM [TzZMbUB}r_LXn2Ygm+d%Gds}w$?G\T}]y) h|0['֯/|Ŷ]x i!6\qY\O 0zm)&_~(Ve"I#oi'=>6=(#WS/5Oゼoou^!VOm8RKʴe{ oQ0ƾEZ,ll୐xBD)uP#"Rw%ɳDp 0J|1C4Ãka& W^]/u#ݣ7vq5쯠BўPujğ}Jȍ(}m5onhF<|G8ol{_5$σ) 39۰O"{ĕQBԦc3i{ǜc-~[jb GqA{{AQ-{$66 5D 0}XaZJF*2==Eꥈi?\s;\9.'xĊ[&f?p2Ɂe;%VyfLOF(wF H-Tԋ<$F؂ĽĴ\Pn)e}S jX2|()F'`2B{ /&O*k\6%w[̥F;&aWl'U ܹE2'eߧ6_ӦvQÞgK>0SB;CNB<+%Ǐ(B ,MQִ*R4!M,K b|Om9$[$TR d4Q)=㱜B=IUԮ.W ˔=T{ރ`_; zB5A{vORmUJmry­A>kS/Ph4aNocpIshqdGRrطWуRԌ60 .Oi?'<oG٧3r3#&.j1lJ2}g0Sr-GڭY~QQ(iwdh^tħ Vm6,͏́?D6r^ٽ&zAe/$cMB(Urۏ --cBġ?7joDzs%yP}^{?i^֪Bug|Jv&7e.tlLTȫ˛_eXgLY T%9.Inj{muIw !#vh+~ykL&"\)X `C{d%rW˃XP;AbpͰ_VC/Hݨb)9,mv^M!9yk?PLb@Y< -_62w ɭegwUd )9>W`o YD˦^ # 3,~(.-{?DWD %md& K:",`㨇x8sT%V.CVYȋPʵ=bC{Cm==^osWA-Rryf4?!R)SzNL؏Jv366<~6jMܐjcl@29)}~GKQo}$?_uYgKH:sSIp_fBV҄z;jзBȺb(l+7YZT}o]H{N{b`LxKV<(ނizh@XY$y,=n#wi֎_]qBN5AϐŝƢɑѸG>}E 6#2A9'hee߽>j+./["ߣ0R4Nx0}V2bկ%Tc! RJǦZğ.Texf{%8'^jyw4qIi HEQAl0@ߔY7/@|71=`W ࢮ_e&xRs{h "O*QuOR^G MHΪkdD|ejkFNvy3XcIQ,Pf˔֒煔;85ؙ/*@4Hb]i0Y"b/k&ן(+Nmti't(8+ƒ%#EQD$OITX^&б7JqeQNV@rU<9;j5`'!Iv)U~'|:Y9~*bQaY0|<f)(;}%\cqFPWO=dli H#KT _e}nٚ^Q%wHl!V)d6H\ M9u-*K[n qЁ鿖L:;e@Get'2"#ڒZ2Xr.b]Xz8&z~+d.$[<-fzUmNa]鍷-I=|QC83~U*%x\ܦ P[ ;ĐIqft ,DD6ƺI0[Lv3k \QwZ!js+H @Z1Xp,FDJRߞgOeH/>y~GJ7󅱳),!IAʴM`yeez#lWW9/R؎u'wÝI} xq[G6.r #|9q˔ed|FWxI?tz0dl&ti;H#ּ9J )ɏG(cLA/XݭX]W~eՋ<4aCjP?X$`ih30?TNO$4e"pi^R oY )q۟?۟_ͯ~___|o~7?~}߽Q _|M0cXb (wgs *dFJJp(JM}3D``\d2\ -g~ N lJҤr*(nye݈>%ЗsH4?ײB) 2AR9 KrJR8cHAIo-iг}xˡPETd{8ۥ &o6V&,0\ڨ@+}XyHFxpVDRB2'!Hs}Za )0A56O0oρarFc:=޺.sbYƎ;jF&. +&dY ftNӞLF~-3'ZI'֛%+ymj8~D‿JD[8_a%׌Ɯ'nrm"ڛxZQ[WH7bt'8@엤D iRoRl6Cկ @YU.`Qd6`{e""R>AiWsXAm2^D!9jr Z-L R(tic<>0}&sHqG,Lj$x|+."Mq@eY}股, @U>raBy+'+hE -b<j{Aߐx,UMz ׾z 7?>PtӉ%K@Wf,i05?~p`#2ce)zSk!b  lmP +oJj+Dmu6Ҕ!tM7==gqEyُ|?BQ)S\ Yf[=vw5{Vv|s8``{(-zXl; 2À{?#K C/yŦ.$mf"4 oux(cŻ,=ыqyh .G(!zurUdTq?Ql59tc!U4 endstream endobj 36 0 obj <>stream Ö8{@үY+/YP"pKFU(\l> ^?$D *#Q..yr(mȺּqmvU~VMfd)~u[%ggKe$pKN!p1Wﲩu͎XV W_ A/W/v7|ghӴ[%&7*€=Rd`D/1ߠ(5CBZT*q aqr}K5bUW()*;pF.\8%79]x t2Ev=iL>茥SX[v D KAƒH)mZ]tz!w)-z*^Hr(ke9#Qb; 0rX.]|`7/caⲔ$x­BF2Z`g%Vo .U-T='tA4 ^~|$ӂ7y^MӖKboMh ~s=*z7WLS@mڋꪟr #%)s`PT]q ~~CbNǑQ}\CeFq5ו7Ҽ?TFs,+t|%xzAYqhKh!E`.O%fw蟮vܾ[УN AMep*a3}059xaK#En$H#DXݶ[ޫkhԱxTZ $}S> oVo<ԛAWޅiS  ~]@uk80 =dzޙ}2pErʁF<}P)4o|+`pp=szJ זs+>{4{8n.ל){w`qvM%, Cg@]nu껡K' u{x7yhgQِIJcDޞv?)HIH=eI}2 Rpn.?ԂS *d\R(.T¡*Ɍ(\v\-b[9ATU}$4(Ad/~2tXChsѰD}b'#epԲb-Kds5%T$Gӄ=,qm"ؠ(}{vv+@5cOmp"^xv}˔/\-"Or(~u@\nלRUn 'Ȍbể(r5J͙۟0)(}yB2c1'erɳ[X+_r $q̤C3;r burK(R~?|>8EW%ۍg@8\q aCAHr?I; GLجO{M-0| +fJJ{pJ;9De&KuMs_sb?xnB@5Qߓ@Ca44A wx?"Ն] t8Ma Ů.eO(W+az^fBOЃDTpm°UWE96颰9W߳gE8GTdYӌf g{w[&V]/>>s m])wC3[=Jn1RF/$Iԭ=7|a|Ln7 >_22:.!jw^jy/a. _"-*v^Z~)9hMnPSUt^+[PΎ‰bm{`|)Xnw HIyļ BWuUoV'<^ (MC3 ,%+OY;njqGDGf!HpI7g+RXR8)j#D. ~'-%$q N_tL9d;o(G1j?ž&6N{UH^ONnfk ѸuPnz;lV%Ba)}{OctCeW;{ ^A FWBmU<}Ѻx+Zw9pŚfq_"79,JJ!vi&۰|sEV0-g#.lGsvrj@Ҥx B =HqM$0uڮaV0F((KDqobM1(`d/س\%1 (<jr$~^eǁ(0sBK m3-bTLoo\958,̕<*j^1H Ԝ1VaMN E擼QtbTj{PQi0 CH]I+Ps= ˫!VYby˓{\7Ce )!9P?[bPL\nVq;_ ]qh1G~!YG͈/ODbIa5HO{BّV H6+Lb{*S}E:-I"SjѺtSM2yR=Xa?HU[^ H4-$84"Bk{KCu P<:$ތd/#̙O:[%m8^KFOl_rSHZIV 3Qԫ\DBAġܫ̈́9j;V2DF8%n)N.KVu6 FF96I<>;W.H("9iÂ*9pG]vtI"EYQ^qCbTV X $n .F?e6l3wjr(j(cr[ <= VuCaWუƒn7sDgV '&( >U2vPA\:MV()zGM`O:@>8}/ҹKJyrl#Y& רw4硦I1S@v`BbRn%Z@0'э~ߑ0B5@|bz $T!Vۯw*s#+SE2D7\%tOɄ2 Pߟ §U(^J~H֣s*-NiRBPx5aiaY 2ba1u]Xt+&~z(RW+jUe8ЪX{dRq.RC5Р8)$6=$\73< sTR ~9UBt5ij؍A!&?NHTS5.r#*dJt>Q`SԢN{f2 1!Dn [JYq;x8FD5) M6L}VKna=QEߓk4 ԧ/3L۟V Bѐ&[;,ÄpƐ=!/ @w3PHEl90GڅS:l۫0A0EމBb;BZw,:dB3GR EmXC8*0Z\RtQQM3u/Zfj []RyIC'~"cjcv~T]D}5X 9~Xi Ds]_zV훈qdJST$Jn&,At~Hz]k2~xTJ/E% Kr۹z?@1L܅\:$rN"vTve{R.uc}Z9HWL%˫w<5,E̫D+B CR ki"0B[G=KVx &Jc%0n JIS{ A6 'Rbbn\=G4qXN}n"(('JLLs] ,= veYO!!@q8np T\q&r-rD*Wu,[]zΫzxMqIzIMP#.%keӵ07)$p +x3qI/[=ڹs8#ۅ0-G)t1p$Q;tG^%TBzRʏ=6[j9"S#(+*b @6G#l\&>k]7-wN`DNpFm+WBwVהZUe/C(맯- \^zOaqvG'I:Eٞ[=;N#` Q2b 8M,+1;ܘak}]bB+tS4=۹)(Gj!(aa 2t!4eCݍ+6v_^ѭ9(8n9BxpɼKG{z ˆ[9WPv@ypnЬײ>f4\L9)oyy"Cbxy?9iN<%AQI`-qGV|> %(\@(p 5`)=QMޡ8@AB.ǎT]sWڒ6/cDNAlVeTD)m}<9娧}>XuzD<9ЃKehe~8]R{9n%:xZ=OŮ|ZSeJ%XAkx_SH_{_XoXOy"=)Yu*|TZ#!$SE쇝}F3 |w98}lU3Tw  ՊA{nRTuN=n{CQZ{(7:PM=&tTʬr%C-:vх45NѮk?8yh6\ns@Bf!|h'A)b W`֠pA1kt=nwtq<`f+H}.qN5*=A8WnN&Jb!({s.Bݷa@! `5`fJ0Il b/}TAb,Dп. Ky432p x.XuЬ(# ;:A|oH9 +oe}8sO2$*KF3AKHFZʶx\19BM7"nopaZ,EnF('|XWHu$80&0Y繐g킭hJRe$< T&REV+B s VIP\RH^zDia1Nx J9U|)J& doL&>ɡg]n;y 8WX42/uM7SB!Tq.Ay?&6b`܂Wb@xojىW_,$Cc_Px=G]A  , ?8kI13 ]PƊxX p8 X{+Y oآto|BO6$d00fmЍGdU݆we)w%-mn@Z[A6=_ü8,@,=d-H ]:z.x7Ưs3fH'mlJ/qZ|^@^.h {gQ:Hl/CU(ёl杈}J ⯈삌e#٢ AsB'&OU:XD8Շ^+B\5VWIS/#mئr%IC7fK%:jC(RpwaD$`S0vr-I@ek2lBs4^%xUBRd,VjP—\$N.K-2Oe-VB (XHBH9_ag8_[5M\՞ȤP6ܞe-!xjI m^uMN52Q΋%NB9$:㼬+*jCN/K^IW g( lO͌(e \l<}K.&e' w1~<=:%4c[%֥b&9;@\ߛ4[QAow L@e9"B]0(&uґwLhb,F̻yF s4AnoJC6{ /e/$9C$m%,#1&tZ5Z/T4+*R^zG`$ UԌAUJPo0vGKo ةpre7Bأs0"?>q{ 4 YSIP_^ do5 :S'zΉ˜?S~PĢH¨X"BElsʬ>TCIg5y? QC[&J9$=W K:`H! .˙'N@6*l%'8c(yKC辚/HPw[QNn*$;zw$5{8M9yF3ǔ"P =e}T5K$XbK;KQn_Imká''j?0Fx`z'Ez a:>:\ٳ%odّJn)R6VrX/!+ܡpRZg48ௌ/(-;+ğYGLk"սKn`~E7KҼUnDl9"W;.Q* Д|m5ϗ̣=ǜ+ Kl\-d?B*@C9qqj8LJ,dؖ̏#(nߝT$b՛f]GmS"5Áuxj\IRza$U96n,sEH;N˩w _.W9.͌jC'Y }2F i` n`8:>(gQkȌp.ռ-G^ bɱi p01 SwvQYje,B"A)#uʽ$#YP&B W>N@%OIt1H7L=?tH)) 4vcreoZ0pIbtYXh%J*#[?ag^Cco^>cHDrpT0]i%X$pp,").V"?~渾_`2;H5^E;NۖEIjU2\,@90N xmsG"IC%v7-Edဧd$ ʟO|eH%(g9";A}$f;dogDo"-c!I:ˏKYmQGK.r N ~ V3's/P12-pPgMP+A&M7IB$4VBK.(;R=vvSGz|? +ⶒ@J1Ui4#Л&db-N`fxPcJ)L5D.BW6=EvYk/$eؠJeFPMߑF/E6O##q^';V倹d66Ca5BgTb5b>ȧ Hk=nگ4ֳBz yyAxXsĐDBBIDl(:!gp7$*kUt2zN1F煭ݡռտ"QrGۛ,Ԏ8{hZ/^ک~XHEŦ=R&.3Z Tߦ!>ƗCѪqb~B3°}[g(myw*w:$)Z>n Sbz ߊv ]஗m:#nsC ںu`8DBUW!:%`jz&8&o_$[-~/ F;3n[wy1⭧7kBlD%2Ms/ a9QI}xbܚ2=-G :H@Y@K`t&]O{{@]'>نyle? `ӈ5}q*ԣ@: S gQmqf Yؑ-H3cЅO l%l# OrQQpb_3lҺTtҒ{\@RAQ忒&e^S :\"Oiz;(ge d@YO3 Viǒ%vzU|["TxvC^ڧlvmd֬yQ/?*k͊!t7v83t_D K~5՘MȫU5jj,zv_Blam=@ Vp5"\u㨇=:$2tjA+ށC==b3;<|)gM$cņFn*"ie YGB-Pi]6S'قN{Vׅ 0i bUv-O=Ghy> @8*]_tbw DUJy S eE0:m3/xDy!?iwO&$0zg.LM XBR;6b9"AyzX.j@吥 dt/K' KN@!1tOaYÁɦF2x:P}@`)srR B0z8f?]t37 0ѣ$uu jłM|+t I VPǵ⢋%q' 9tJb&)ԖYؑ_h  44$IA_orfLu/t]K،ׇ̔E꿾م\l0V/-bM$Tռ{#IJb,!%[@uSv I+ѭ^1;,4'N[@_ `٤v&s?EcqId @3$Y:Iв2M,sm:U,(FcxS0=xՆx`*3q:A\/ ߼!L\)DX()![TP aU}Q.b' 'Y71$i7HC*vJ>VgLH=004Lh6k,TcѴtO "?{y.Ffs2֜C*&4fpFX +$C7]PFdH<׬ jqK`~bF_P2Eyc@$JGqhAjk]"kӒ=~h T2n~&zOvWJdv/{P@?`Ň~u'@HO_/uF`]59JPph iJ%<؅n8!|)S%劅:Jxlztv V\[R2\J/qY۬' ?ӈoOPfQ9Y# J-h %;1S 6(c/nv#+Lv-pEqɨ['$&Xfp .O.S"ku)>L{i4'D!,c` oBҳ\ Z8ɜٸkJRHXfZΩG[jt>~L²2fh?j_nZ,*ߧta?EdC`C6CگA ]+nah2A8t$[en2 BK%.kg(PI@kB]@i/Fp"Xk+xJbd!-XR%G:>/P(i' Uɂ1LTÔ!4TDM!Bѡ61l8P}K eTo?ԢP3n"0^yAf q'sN02} IW^$^A(+EE \?Rc_5qXaC't,xud{PnS׸ ~닶5neo5/~H;bOxxQOKk@oK_zD| Sswlg%/47QRI"JK NBւGSʭ_.&H \]ћb蠀fcCz8,|5;Z@ lH;}E(%AePNP!+H]-_GyM_.t:ܫ)s Jt1&}ZuJfD*K)ME4>b&/*;☣lX
s.5pu;Y1R[y\{dV\0- 1:MPma~跹p} <.zg}Y殒r'onhw)uJW]R%`tAf5yNvg) }nYtyJĀO(9Y L[~+:(*Ln+KCyNdQ0_mg|\lLKeUS'gyPoBUt[THp{dst9.S@h<;8W0]ቼ9h(Qm()9 BEut&O<%িBVL^m ciˎe[V(ݖw w+ҷS 3㔷??_|~~͏߿_w??d?0#g?b?}ͯJǿo}b/o~~|}Xo/ݏ~}?++_oyťgZb OD7_:ߝw/}Wg,W?|~q_H__Uu~_/~ ( |a7a~oC, ?|_C@A. kTXH ;Xn7Tdl($b(A4jxakvaP3yhDW 7etcf onD(~ɍX;cŋ,)D#;_q D+S ֕;f;cLt}x`=wD9~FWϗ|u[)H )n8,*eZ=O'`BBH!QK煚[ =NOZ_my]qǁgsѳyLÿyb("ٜHDѸ?h| ?G#n㚋w'sD>tGqEdH#=[[AW^{AWv0+?w_:9ȶ:P_2Yo|IdѬ[)-)h+`4Ƣ ?s!w,t\j{F~v_шݓwHrm}/eX=AG8߈K@h9o~㫗z{P$VuF-Vǹ7'j6n H8pgq+CF$1k /gAWV $}jc3ek᫻z$t|LY {M=>zb,L9~7>9_ݰW=~h:<,Xrgn_4jE!)|~hY<-ީ>}/u:-_dsoRz}><5x+#guG@r-m4QbO444zRz#0-] Ln|_njGs}9ӷytKySfa{y-?ZKkyw?C6_][sv g~udzBNb@j4 <.XE\ ŅxAKcok@G 'mr99hxh}3SE4߹ɤ@}#ra3\8l+x} 62>o`t3o9}>b+Ɗ go_L_l|Hb[ :x-'~Q.vn޽h@Z1ꕏAKR<^X@>Z@qAhUx“ѼWk(O4_껌¯/yWh_2=S^Jcx4jnXhٷzc7\e[G^sH4֫dh%}DJ!OaBܾeEh^}ϔ{vyΥq{ʠd>w>rȒghEQ sv7W2,̞Wyט\y4T|][ D֛^:7[߽F_eb%xN s|eVB-'0XєNV,߯5mFt<Ȗ3l[[s^g$mfsWґWb^\;^ؐ,XWK(m4%'x6tQބR ('/X9^H'q{IeIǂudaUY5DLg<՗a2HO6/7ֻ9"2%_eyfngD1I3@Sx$g9 0]66~ίfF(fu+k}_yE؅g \/4u2ҒFkpw+-?t _^%j#D\E]63Ot9h[Ɠ}kѫ'E @B"m=U\8;?y]اWp5ΎLƙmx.Q3$`HL1 '۸7Q"~ dsgH.3xϲ%PZYSc[y(Ԟ>ypc.o$l'ONPy邲3crx3{Oc ly/WS (@dڟR&V<0k퉞Vϰz߹k9gU0):A]ɿUu);yPY#I]_sW~akq{ ߍLJFYϣ7C{,7gsGבynVmDud\]y`Z\7d@h+<̃g!6z垕u6_8)Rq2ZL%Y3 i5r'j&ί(-:J!?o4f&4R7Vo Q y)yPI42 ̻xEd|2_Yn畟VF&lI fl6w5/^.DAdD!?[}2ie0!Z#I&cu}8S< w= (X{NzrٵVSg25F|kv =Xxߏ׻zo]\%v"gA@,_A^tܫLybvūMu>7Z=䓮e:.Z\9vʌ-&mK8H sXl2{_I}ڈH"j=EuUO2vۙ9PiǔՎh,#>#v0qLwc 9@VHw~1O vs2@+WVnj}4yewwi<[WHʓtqX'L;UWL7\dH:eؾW#El~ej}s5lD;Ni8?fdQ1[Jn?7?GߌD7ޑ?6l,w!==Ov 0v>g2?G|Ƴ7Km-*GՕ9% 13Sy %8ɵWap=<9_m59,'ؽ\n}vƏ DRy\f;g_:qOfw Vdr [C#*o13ߨ1]`6gFa9żZ̺JwZJ3*4F\U},8I>k=NMi?RλF;sC gm'y,7*>3F! nlgPO*A zS>P9OOkգpw+-=OY"CzR8l<7EƼn|Z~VxAW ֿ udew]k\}Uoů |sL ŝ+nUw{3j}F=wI]H5X|Ω<Kh8nָ5{9#9.=s_goyJU4^ d@KapWK@Y` r1ޙ[~|sgYɣq-Q} M~O=ͯlœzgCW1Yk07W]yJprh.kޅ]1~ Y.y~:%arxĸ?P9U45Ϝ*<ϋ:وg~JcJYD=N)[ܳxSlЈI%D_vsM&^^cMn~)֊eU_2%u̬5}OI& ī't=3U_/hzxnŦfߌD2}RuLwsGYaXA DͮhiTquxUwڜڋ/:=neГ3@9NhϋT _ :kS,es̵yibSfb5sW6f_`):|yQ@\okDK-%9䕻F}zۃ(8ˤBdlT͗Vn~zB|Gݢ`V=q[1C< j_8uLz# $EL3Zϗ#"0B N)G\:~ae8XEw%V׹7I>uesOͼQ7*ͳw5|'*\xɉWJN^zF}w (fӷ|_9_ ZyZ+3#nkƔ됕ƉhȀIO#4Y}dq|'P 5/KE;q:u+:FE|%gfX}mW\0"k絿OXޓH. /ter-uHk6;_a!4wx4?I4NC\|L.'X+r>{3 s>7I[KY#Qsߕ4ۋD_{Mzʅ|{\rmʕZw$NtC i|qdfzzbJXz2w"}k>{2-Ӣɛɀj'w&у1VJ8(x ^sUoX^Aǒ㮕qk{ɜ@,qG"cG{$y5pσ|FFfhTJ #}+|jLlА%zΚScJgO_)2w,lA9ܘ;1(5Uqɧ;2q>Y|g^ $j:m4&{=SJP Y_ @;מD6cM$*?%7,L.;oR{SO|S5cL4S?Ú]}P#) CȗV BYa9zdɡC4W3q57ϕYVAM*W2#^[7y݁tEJ4I5KH1@otRsq#jB̫rʣol5X1ցhU=7Y#&Lmgycc)_ssX :3qc澻uݸ <$˚SⓧjF=&eL]vl^B[ͼW5l[ *3_e4ާ1&)\N:UX` lά+Lg Ȱd]\tN%#2F}%RGvXF $u^]4$LvvŋHyuMۜĉF` rRygJ4bCWT8 n|/*m?/=1^rX4GCy͚[Yѷ9Uצy]Oͷq8GYdrbsz" k 812w9NOzsG;lS~(d.3E[V2<9O2>ۿWW$mu'7U'[Shc&b  R'w%o=Yi?;P頻{}aP"NJ'tH)ƬjB}#vܘ$\e*nJ~HDdW?ٗԪ[<3s7p&"ѷ4dRU7d.3~lӎֻBo֝^^Yv pr INdXup Ř4W#ڝ qld 7"L{܂} 1[fgHS]u=)w5Q{XʽF}5"*I8PTdM5ݍwP^^&5eTeھ G ECBr$Spb2P|\AUN8qXuP8BRBE£t~'U=*?a$̂z_\k*2L|/aMō ЯX+S(hޝj,lTQĀMفX l^b{"D,e v fP2DBpPf+'q}u T5Ldj$nǓ*w"/f*%Sa/AIoMq"PD 8H`p↸RQ^-웃 aLe4,>4K QS1!FPU) U*_e焙Tya@+LL bA:(=9YMBzmzbT*͠Q8_=1Fb䦼ٌEhhh@_JKAT/* U@s+JXD {c(zڟ(}5wIKTsڇ>X]R[lR5|ia|NtzjނnԇJ®ZzWP<@]WK5ʣ. t` -M ^[Vrܨ ʂ7wfJf=C $(^O*SD(' e* RTS~Ѓ$Ta\Bn EK ! ,[+|.eֶ- T5C`0KCQ脥s}!"ӓ*,-\^huQTU,KդҕMMS .DNp*_bF##Z2T3R+Fu%X}PzjWzb-2Hفq<=r=ҮTY/P([Uqe&}.IլvjR@Gnq|TY[ E.+0C6g*TФNYKH(uCQ2qUFu52+77&}#e 0dʏXDl#U7S4`)ƳD䃛E"hX u@5#'(e!|ʳ1U1#,MuukM ő5'銊#u]JlԕbuNe^~V]5F5Q?Y:p*w+E/ $mӚnf}æh;RvLU4UTB ݤjVЁTԒ~BB@Cb"5TUKO E]MODP"%YM2x)iUc@8J-f(>*-|__& k&o nX@1BB >BE}>XDTr*\xVXV 'Ԝ4k)VE*\ĶOv\Z_XMT51a$oT5 UEdļc=84Rͥu*ň뉽z.Ec(c[e  »(yI7SS F[ڰE/ tE (5Yf(a5T[p@2nP^Ձ_o&JD1Y PNOYL5Qa(zk ;"cSrY CWʧ/b4U`HIzE*k,ZDd~?nT?g S;5vS_7WYl'[]NJOU妿cx۟NqɪfUNJFAQp}jUN~S73 jY]KgvbPI6Zա:BDLF>W.co6CP]H][L66FBa& }S Ga(&VúH(&TQW6RFAB>1 vrtbu^L+! ~BT)9eZYEBpt"hO>RB>uM&=5U%[=P@@pv+.Sj6 ~BHèF*ckYu:,GhFC?=Qua"OU[%L QES7}'0a:P~b͚m+}\,})W::nCqG ɺbغ\DDǹd+%}2F3i#I!Op15OF(Y{ j0tѦ}3hGr<4iQ_H5?M:khliAwp̶5؟rG:ș4LBZrHm3n(~|XDƁMj3ʯȀjC%cZ44itXx&l]1 J$*"S1r$`c¼6ma:iX#ENbnʮF NBp~Zh崇&Vٌl\/X.֬ a{-Yzzk?k@5i5elka.sgnn')4f[%֜3Gl3#Y\ ]Hf[?w8TFyiX  %r[$9䌫M{kN9!gP6 yMT>t6<<-n /z 68o,Y=J'AYc<#'!cA~hAkP.+4YA|T)ʐʞHvmhOE| >kEb 7ȼMh$O07x1aH;?m\Iظj۴O$у)($3ySIp)\Ld>v=L2#A mZ68 F<͟]fZg LIoLy bCG5途[@6(s 捴b<鈺ɴg Qcr3#JH@-+[SƸג㦱y #ٲX4)ϰAcZ,  uՐmբCI䡤{`Bϒtg8w`"сchAּ&? Cȁx~ܢy/M}s~2KrȺ%qޚң6^Z[.8o9¹ ⃳)BA G`:"w-'Odo&哹HWnlTdER.i7.tN璷B`*t}6yp&.uKИRlCW}=x;xKBt#^oo 0'L3KҫR*6$w,:HX@U>οaH{f7=Ɇgs.f.es.c؄jD9haxD2k_h=re_)w]zud]g.U|ހE:d .8m cqp# 5o&,a4qCX3: 7}$% :ݓAa:@z)<Yش]sCh>x}x!Yxb){dւti(u%e3J=J#^HgKMN$<ĝ3dߑ> ="]˝|0bk9QS(_4QahߔWp*`5>t*+.c[88-Ƈtdm)s ] Ag-)~VȖs'*%aC1jc{ #𺔬 zp: u^0B;I3>NhAEO"K&Pa㨐±TtW!"k'^dA £[`:( 2LJH; ef`9@#֗I#mC{P+0v m"_yoySA>HVL]Ox#<;0?>b 恍VYd_d_@ćd,A!!37 XNZՎ0 =. 2 zF!| )LR 6.~䦙GGza2;fPHְ"a=I$4W3xhg#+uh$r`mcCRG>]@6tG1?1O/k$31B a|I HV3!nȦ#.~g0HgMFXx~h/t0S 4@>$ܵNZ2-lG]C-8/f}6 -aae|ݦiN:h>&֤]DNF dBl, h%MV?^^^_Ǣr'ھZޛvcu S*]_Тq2G_-KGw!4.٣a"`||8|(K!nQ2U0wP+x0O.,u &0a= k#ԟDؔ!l5E1f"^8Zd}=Eknwl)5A=裂 TӫgĎ)W!QA9#56遮] ~!KC}3Gb\Yx`&03pt$(@6Ek?]ذv]f q! DDxovҠcަNu&r28 )1r9Px%46KƾG\:G |݊GjY6AB:i5t,-Aw"8 iѰF]E祀1gD,=g@~:ZMD]C:p"cqp֠c@XD[D8{#q+cl~doX7#}PdcA'ba]58|\Xx>&I/6~MiBe&2\1MoK_۟"^xaB]G:s&<l-6@1 -x,aL_6#'>$];tۦD}gitTd*FҎ/JՏ3{+nv%r RV]Iخ1G9P%׍̶$ؼQH`M/'  'M$:A:p|+ҟa1ۅ 1fF^>a-I-~0=Mk^vdl6ZCy$#.wFL/`z" 0U9yGekɫ|6#"k~gk_p 8 s'0>[<{>'aOWHP/ aMV 2:FI̡_gR!؈9׽H7 ;,df2wwtyTXX:񗠴Q_FҾhl^3ͧcK_Bŷ0a_;Ag[Hֽ\N<0⛦]d«&QE'tO*gP9 7dIjԁuV_AVGԶO_1ΛXB[d\5LlO#.oYmCY}׷YV/mu7kB u)lX>Fs^PKY¤]ߙaӛcgнd[x"yG|d2aa &ħnW!B䖯s?z8&~<ĉ袉Di]rϋMv[=֊)v=CO 8;xtXriȢ38dyWW=2gCC-U|}p,x6-1ʤFy>Qho7cp>5{g.HT\7..L'$\B|Oh63F;Twpif!kK4Ȧs)ͳ+&d.fSA6%P\僕lUl1@КGzk0^ȮQvhD\2Ʒa`Έ+RyeWZ5NyhLψuGk3l0[&.PMGW:|=u&uxF|xPK dީ%[?%jb]>bbL\*sօDͽo膮5D]2Il=bX1ƖOW]3ycqes#ypx #&q`bZ6]?j_v<⇀ 2G#69*U߶D;?cv͑״}'oyZ5{F`"=s5:wpM6lQ]1U{oUy[=MN NM]=Z͵m!ZB|Tkԁy~ -b 7Dn q48ޝ}B?GC"ASzo5({xнVVwՄNa*YGd욧@s&_«0cK҈6ܢ G 6da==ۻ}1S=# #ƌ٠đ?q#'d`b] ?`ۀ_cUSStι=q\a:|3e&Īج] [&docKوZ.Ќ mD=S2B*v*pp73't&fA»"{cnLS q[xa BxjCS^ið~G|Xmnl >O 7i>yhhȶ? rG)tȎ'jcDyj hȪʛWȫZ7v}8 |ooYAbaf.!nMj bK,7X>^/Zt ľlb^8r >,=7GaBrw3ډ0j\.'{*}]|J>ae|C| Zc\"z`"佒c֜ RUVРw[~gdph䆀~*cƇ K"s'Skb?dx8|@.`m\ ȜI8q6-E@a)Gؿ[7#vaĽy=֓׿^N .a@bǫհNaa=T8V=p FX{-LƇ˙9d .-,$-YWHo6JV~^q3%_+a o@  +/f\4a_ r#ؘ)`3"ƅ*8+ozJ穹U khg&3Ri#!]"* ƃI08aMtֆb=A:B8b=EI)[q;sad>Uzp&Aғg;Qt z.4)x p~`}2I;fEtԎ)r!dPh?o$ȧ窱ndŪu ,%$.#j .>,kgOׇ/Q%?4;WgUxY!ۆ}cqr9b&׵}Ooly;dFl`9ϐ Y5۷)8ߚ5ZO GO! psYy C A\$6]Z7lyS"^,!%D8d.ۜѵ旲º2Sw5]zt،3|8$${, 1;*YJ7*:O>izmƶ<3'Z?\N̂5@_0L=:G^;;2S|Zl.g>> Ȗ1y{1g 1iĄa F 4+:"G5 (B1SL,Hdd t`6}hp:qiges;xye`ـ*s[˸kp +C/3,=kB=^ 1!YDm{>n݅C}hk`sgYDM}܌j^GgDL̤к )KD_ a%!f [8޹AX|OrYa|v'&펰A&j^4=)`f 9S#st!1b:k|l ҆8 6> Utp^986}<)p k@o`>y_WO2v/^! ̘2-a(B ;V|&Lba}왋s@E2ĔOka^Sy w>*8D1w6Z2r"蠢t wU9\o;AF D_KaIJ,?2 ydUu[>}yk'ulbLLґ8}0.Km8T: _ڀ8*pJes ]=ð݇9&=֨)C'1PaV4'Y8kmaro`"`? yMö=}̗H^|KM7 ! 3>M?X~N12ϣs3k#P|lFhD6=]-oy |Ttvȳ_)}Aڀ|=fby݃o@a䋠>1{q, > !Ko6jMQ+Ε"Įa35Y\XD50ǁ" .\cQ5=a햄?8G5v0䢀Mf̩ߒ&ۢ˝C!+n([?ʿO5 B^XŐ "rQ /;I`S3CR%d=c>sH\CMBטƾO6B)*;f;qEW0fZ8pܑ_Kbk Ȋ<6"G+[ߒEq ;klgT?'dψ?8n<q~6RQ `+Fdc.eil LkA6{|i͆O&|l{˚:Q)3ZjwE͔i~l~}%d5#޷f8*džfv6K?.8@wwX!ӚgBcm!M4ZI4YNܖ8~V\2 H'lxmLԴ} 8< ~)xJ잙\Cqwdۗd9G81G:aL*|y)/`ЊQDdD2nty/ɽXe迷!.}J@;l|YM4\Cm͝r/>~Fᨦ7ڤVx]EcFf@2>9gtU {{r;Vle |@XET5cD?3 wH1D؞nyj}j|{&!}\c2gy엦sO.I4X^xj3.}Ktdd-#y˕DcJk=e4wl"W|xvyo@N@!w֌m`C/֍~U=FZK?j'wۙ:b?nC蒱٣W[ȿ+/0jiy͟iw=,jo7ZfN^7fLJJY5]'mn{6:M%IGgަ/1cchtu#6aO-Ec AQ) 4mJ.O:6Ӣ53~WiG^IvZ'yJ=EC_ycw'Ŝ{DȒg>pܹ'ӏ[趴`ke3O/h_=̝d<&y6SRfH~8Gj sjKs>ϼʞ~̜~A-5O5ZNyaEzNQh>ْ8ђ>$OA樼uA.A2M ^˴ܢN(gDCr}t#] f!o|LvOɝ7{_oy3q9u>74q3O_|{ݏs9DJʑ^Y/eG"?I_,[_γ΃ۋ7mO|vvoZng /-v#g9>.غ-]|VOMK-wp\8{ϛ=Ɔ9N{~i6c[lߘ'RaCsFA~aS:Ͽ)e0c_n ެnyꃩ_j2r^w >JEtB@5t3b{˹s7/3=Orm_-vy~ #GV70Ņ_S^q]ϭ.؝~FVf+kűvz;9Q3fZnAzBnG7khu䁧V.[#7|6O,#OP0W0^Qg)i {s7Gg;oOĕ9?j#3C\bG}?ƿ>A}iG|+#[?m=^e5pIqǺ4lg\q3ȷ]wSڒݳ9t1g{1\N}a-? οW~qoQ^{Q_Sz|s9k lqK~)x/cw3.UW͇[ܧYwU{S '# u9¥`_eUpb{AN'UR'Ym|e~>֭X!+gd]7lݧ rCmnCm\zjܹv~˶XeǻuHd6 LhE*l7B~W{O1ܗ[ܧ̗ә//Swrݞ{u7&ˮ,RҳX}W#onsof/2G=Ah<?9>9Z~[)o?m{nS7[g':nu>`~do>?oEٶ]Naouyys:} =N䏯r y_]yteo3̶h׷:X$wf?IVxߖǾLcwqo:g/íoIvgWSG:-rKWy/yፂ\^pM̻(ydDسN6*VQi9fGxѧ^*g^N/mܩgmhE!K_xݿ>zzfz˃5v׸:RB9a:~2{=ޖ̇~kZûeU{w7V< |TYYWؾgRݣ+=gz.1m]m9һ:L+l$$F}losڀ]yr3`wvZG8x+ ~. ~S 3yk9[I3@*tr5X&[oǖSVBww}rY.RCn"Z['y-xjS=Y-ϽĪm쯔Y[SJl޵2O;WOҶQ¿jˢnxʮ|>/ ٙ7uuYWXWJهw",cyC[{ٖK^|yʬGp?=a֏MWq]2sGjg w ?폒g6<,n{v]f5Oe;^Kz2]uھt27_99ZUZS(QBӖ:í3҃+$U~~żJV/sn-VkL13ٙw?`N@F]wJ|Z[_,\3ei޽gmq_jD^wOˇ=+y|)b--Jd%vyT-u]z^EYߙPQ0bo~km/C/}/c^_п%ѿ%9z^nSI\#kvnv>lKw{z&aI}ɽԚa Y̓Xp8]GoGSmL[QM؃WJO\) yRt Ň{o9>Z]ې8!yK9)dOO{No{>o 쮨(_8ҝA)5Q[6d)b]S6]amrRg7ތ/Fvx;YE]MEN={'oè_w;{]_J|Ssjl[EGƕW|ZLe}k̊7/ߌ,hE:мO]A9:u3eioί.#hGxInWrlY`>]-g{o[s֜d$F+%F+$K-Kɣ85jM_w-;E/1JFiť+Rvl`޽My} W7\K~+t e*YwcK/ v3/B wmEjR4~c ]?n8oYn*T2s; F_$c%:$H[J~-\|v芪OSvw。6^g2خ7ܛY/eWV]K.iXjB1ҋ%WJOތ.Vd᎛%HS㕘+ ƗO}eyng꫽U? *9:EIhlH9,y0u$#%%%$-6z/M?Ze(z_m(ڰ]}V-@BYg3K/]N/)RRq%tK]/9w9آyfl1%D=ȪIg~z.K\Ӳ? /)[w6ny!9mz* 07CDiශ+aI~5N2q"durxn|F:ʑ{ߝtwEĒ+c %ވ/A:9voO'ͭ%:g>{}?Q+kqLB3fhm ^6޶\eˡ %/Xvj~kg/~u* GڶTҲ{]s7v~Vn8\^v9rꢅ+d Ȼ6JSØ%j⟏#sol{?Udd1!U1hEH#㷹!o>ZX{%f@^u%ν+[_7o49cnF]׃wǚp~!sNgi6ګ?߃UgcI6B2{<R\3sAjxWJ(3"V|gVb _,qrAC<xUQ;m=g˩˅-;~TʗIzFdnW~zyǘjOpL4CH\4L֥fGed[T<[zBQK;n]* {/6nlGhm3Mw_3?g<Ƽyj0*LT3P&Y *&xO21~2Ҙ&Dj@kl+@/h8_R.^yK n׵ʾp6&cOc_ًwazzNӳq͙WeG7Wd5ؠW z+9&/CSJd:.GzEPg!2ϵ ]{&hpdGmXi#x|r&:͎)mށcߋ]*¾Jv}wp;o>cd$ .? )0^V@5"D~?Uͱ/& q -2]&[68GK|7?)7U6Eyǵ.py.UAk͗?=w-ry"7Gh>?8j@S8! ;dfrGBdf-Ff3M,ַ}tEH͙3$ojkM87ki^҄V=] nm~U~WW96 u٦j։yO<:|AmL@T'#3mdfO^fќh]$~ yRd>FgSh4dꎦL"?[$jE x{r洽ANy; 'M)^?3xH6q,24C:)p2ղ"7퐹Z4mŠk3LB4˵M[,7YFԈTux1rr={j/6qbk/K{^(xjm*7=lG:sNӱ\Z#襎cT}ӰEN"i&X##7ykdeFKb5hf@#Sl#ڗ=Y{P9 qϔ&Vw-ݼpfN7w3~xYVϭ{9]7{j+X_Kra-*#o1wJ{8Ƹ'{oiᄚ=Ў7r1slzkrk['ǯm|\99eeղwoK~krA˗rGnf7Pz>RJ^*~O2=^[#,p^{pM = <}'u|5]1>Ó4wdj#Ds\B -"iZW;!庳x|(Q:[U`E"iS48XS0⹑sn'Kq~e跏OW}(yꛖ~OmۯG~7ߤHe=}8s(=kw[h٥ɰ)2IVf=Xf8~:V"4}~0E=2-ڄFh4g;@ VhU28W]u]Ce[eӯy_ﯗx\/}}J;PpSɈF!'ro5_W3>dn(;m}QR|w{%ϰZOإ*Tm8 LdnZz!{99hUlC5u_)y 7J8]@u4+~(LO3RRR2ukeW% ߸F-ZMJ-ex+{'O(W b^zu=IOׇ `, ?oe{lҙ9wCTS{4V->ʯ{Vz MRT|Ko75ܫm~<)=O(n)=O!$ɇ߳eܫ~f S@PA%c81 HvZ ̞?у?z2M}#k-X*Dz3M5gk GvAݪk_s̗P8_?(#|c_@IRR~7G0eVX-%pF%lzi+,9l){c'{ Ke+ǬD;,~b>ȉn.,ή`&ߺR50j|= yzZV`D.YE祍5 4q%2ԟh<_?Pr[wzG '93^q}~GM+=اbשxiIAe a`&MA~_qkJRa") P߼%, JȷRqٗag#i{>ŝ|Jޝ?M(}P3J'{tYK< qXHJܳ(|W*T&Wa-KKb?7tD+oO'=xx BBߊ +} N~,ٻ@ɡySimFd5@ jD' z-ǫؽ(.:h!ffRře 5~sj ߔf]fG48M&Չƹ}zX^+y}eq F^b( FV;o>a'Bӧ Ǚh5~(8wPo?\'l{X8JQ{ok: VvBHB㓴#7N )}bG~rg?H|/>uT-ɩ2vϦ==g =nTn92G:'lkq䲷M  y5]wzdwOoUWgIQsdu#zE+Mܯ+ſ)3EUxJIySN$E*OloJcNIRZ y#(/lS6>b9Z9k>Z;o pqF0<Ȕ<ФtW`/Q0uk5h뵒~Kjؚ9Jj%~\&ޞ~%nS*>[j${!].0WfCxD0߾]WiqI^77Um;m埐MC.G4M69_44#|Qh: 6Ϝז9TϖV ElF$IUT5L.+&Ì)h1`_(?{;62̷2ItљSwn>HŵkY̡bq3l fSKeS.Eާ=rN'L;6#eQrt' (4 BNܑ: Iؽ/Bz੓$)_[(V ILj@zcJOq$UQX$8]]HoPuvtoZ:rd[g7\ hfn1H6~F$wײ;{]x+]NJk̖ L^/}?Lz;"wl gR>83'_%kϡsꌩɢIŠC2vy+U=x_YNUHR[ E$\7-2\W!WW@t`JF8I[&J#b5h|Qė{#> IՒ3N,f|FxV*xtFIBSudd3 fRՇfS͒4][,(:qZg@Z6g15g.B/Ennn/y؆c@0C|H&h0A/У Za*BZ/ϜAJ,ad> \~=H?Ǟ˘ ݩ=?yBOq!_XgFWf|ȟ~.>7OQ9Ia[w}ӄ9B>IG" MW6dk:,GF u~o0"A^eZ஁$ (`a7A?;gC)S&SRt/5]-ÔЋgӪ IO^n4~ VK5YL7^Ȕ O+z:]s+5ejf(8S nsbhꉃ35@gs `hb*\=NЧɖx@z>tJgG Ӈ X/\M5a៝Źݦ┆ /N.`t$Q!et^ uվh ۥi$J"pmXK'fiՁAI4^4Fc]WEZ,*c|PT WGeh) g#@ 16Sb Zr{m@O,w_z*y, }#$^zzvkxc'vˠ58;2Or7]>F&9;;/5PiTwkv#.3q6#gdyC֗X?#VD͏DM.d2_{R#k\b_fI7^n?no{woq:cL`mYlV)I6͌hl`:ŋwMc̈df$:!KN(!z;ې q5ρ>|Ш҄>i*嫿XH'R* Lpy0_߻vq?Kz S t54W s {9'ޙ|Н!iju?uoITnI2Zj3ڑbkqjF6 n*:Kmڔ\4|-MFc؜Mꢰx5`vНM i<zD㺠h-m+ёi9mY#z ny2;3{~:{/Kzx6;X >m{h:$ezua}1oLIj!.l BoCt#&<ƈq|RDzdU:kQbЅaB&&:x[g60 X\W&3=L``LmLv UmLvCfS_K'8!*We3ꍡxL tg*a:=ŀ\^`3Z24\_'dGɹP#f4 }6lyh=M痂 Ah\'Ꮮ`΀|]j75pwq-50؊3FAC 'dC$&o<]8<m'nˑ90 KwLqb tLb82UӗCl =tH:hɰD?{5R[fCVJ9T%)l*Kё'Τ <&zxOG7XrU";x|1HX(5d {qwk$_m(,DD޸&M'7JtG,OP ° ClX&hO_ Fbu@+ %fRAܖv[zF Wr1ҁ~~s9X'G5h38lb1Zg(P\-o qjqh:hSF v8>"6JC&3'K4q pt c p`-!1Ҋ&+@ 8Wzu89idZw-"Q5ƠcZGk/@XSm< .s2tr$8Z 62+ٴVc4N5žPa#3A asԊ  8Ǒ̳ Dgb(BѡI/u _oL,a㲵`LǨAEl1`ƉSāV~n)Wk&ׁn"{ۉk8hm/ ¦3_dUm`J/A,|_}}zPÃ+}5& &fUYm&P#ITV!9+:$ Oռq%Ĺ4!ф-&7O~)ha)b:Jݨg3U&r|3l.,F}˟|D xHAo9:eO֧h EW 8QT_$2u8iU]L«P1u>XjD6ϥsvta[ˌsh64QU[$9h \b4Amc|<]Yuݑ hnv~9`J=*N =;9 l _Kংf*`ĕH7i+Km M1B.TڐIXB%V2}Q0O_z$ֻhȚf-Dpnt`uqq&0 -els6_zvJ{yM]!3mW=7r:uj0GМw?s M:yy"&TP(W"34Xi<~r`;.g0$VN7dɤN>Sa Q 恶{oJѕtr$?gކ0'R/9$V㹡k/@ ]% //ZcN0!wHɐU-o%kQ!4<\.]3)ƶ^u`/.քZmWҽ7VA^Po.+yuHw\v'd6KBc l 鶡d0Co}IxLd˴٘mƍ#'# x./uLM[^wF\mړ 6Lٮ8%zzĤarCoaIA)F~2[΂&ox$~`H%VQ35l7z:(` t|5uP":"Nڐiۜh nB4ij \ ]y`a̓~" H}MY8fPv`gIᄝ%vd{WVEr1vV)aMJ)Lg?YGn|37bx8U -`sdj\; iiQ4xO\T=n| QXU1B- 3| A5vu]]'h<2]OGt;ozȏ= |._90d4:ސ+[_kᢈMu⺼[AIx&,RU, '^ \$«tx4Mz1hKw?'R|mdgU; wzV Ќg;-ȥ;KNw^!Y\"z"+rzJ)gp<#: +c a(fUR^d Zl Ju}ם]p ƞg `lrցA#>!;}*?u$x! MY i4IT&IH6lm5ܬ*TE@HVך\>w ?`5LH$EN ucbO+5Yxm0?q./ql |%݋ĜLE;;k:AL(PǗHUO,-yt4b8>2su^YA%O6!S =]k˵ѧTiy ̓5n;h+:00J;1zX+-n.֐ |33䤰(ז*-ol: KP','3Isׅk) J7m7{泪W,%Cm쬢1v_TM/Xc9\yQT3dn}d|X8Jf|>ҞM}k4]pw_p *;O]c{&,-g3y @Gر#DZ/[w'+) U Ha=;@,C`..\O(  ?RgU(JvL:m q lYa{ f}5[y`g^I.HYC ",oMUFԢA:zh5 i<> D`su:4Dg ;pr*&|­]3Qg-P\:>Grֈ"BhAmb}ts! w ;Φ:.v~ӑrہ sQn¦޺OvV;K쬄?Y㘠h5ŵ ;>%{r`l4y>;( j\*_}l>yS%c:ǻg>Yqf͗ï}%=OV R4~@FꄸM05?o)Ѹ& Xo1uD?Ppp䴚q5^}=$[ fӰ?7U/+ql>2|Fa~+jSg~3? -񿳳`gmRvҺvbI wmýRyVdYA%3RߚY͓{UG+q4DxM8߼^3!V=L׵t'ka?2=Vp^\KAK=*..lAiFlXbC6,!p-;Ɨcg1u-tY A0 tqt *h,X_+m%9`++nN{a}|i×v ])MՅb0aD^m6X:Ҏpc:w!vHUsl|yfhuok?mv?p5rXu6Msl!a+ >k@rה-bcl$(\b'A?׃EP6l<\[y<m;4_ ý9s )yP"=?8@.qL5HgHkU`SpCc(ya ׄ}' `F!lӱ|e か"b&h6y d}C?1RpKz'=}&!GK1 _.ۮv|1# Ys+3-k9KY *l;x7mbYo1_nIrM0zڎ];/NX󥃳dsW-sI)3P~C6\3{ǝYCU{l>'Y剅63&2N?4dѐNTk,RkT]w\[˷\vpPe1JckPm!al3\Plی֍G$#lmyn-=&dhȚ{˄\m>)_0€$>8g{|N}e簭aMDZ?Y-QZ-YM\//'j@gTM" f<68n }±׊מFXӐ~$U}w\xuGp0jp +% b.#u[a_wb 㒮PK"35%8g;L&-ʼn>h6:W'GK!|rTӀkKם{Vyk`'J pMrK2g˫>'c M* k|}rz|t!Mz}/I Uk;}l1uc ycl˞9i[󑜵\_>@Zj ,2zSWr IclIU灟\JQb@).+rOwr">Yz^,S~aB|^YaCAp8$1{f s\,|BaP&*{o{~ @֭w^6_s[9`% q֮ >ܛPb,>{2`-8ElF (h2*pNpoܠsZ)7b{یx/V kprFir>ab 97yi>#-ߟ\.a`rį+s I)rt`or90?X[j u6d˫;d Vt5Q/',.zjUl~qw ɝTXDQ j VAL86k;3M_!W:`EooCu_s/Z/A/*|L6.CKe,‡=${fp +ԑeP ,mr;=0l\p 𦤉:r}iZ_ԏ}TY57_Z+Bb A Իp!OY.>S605uO<|| y启O Aس%+0}biz !$Mdӷ8fL<^O2MLx°_10eh7WV/!WX3y(qn1S XΎ4 _"lg>l@˘/8BNt|ůϓĀ aXurrDg|}tL:ηa/mn[g>]V1IMmGf~W& "9]SI\>lK=3V춦OW˦7C>G tpD[Q  }V77s_v&*MC c7 8=8%؃ }y}|t|:>Oǧt|:>Oǧt|:>Oǧt|:>Oǧt|:>Oǧc,p=Ko (dcJD^ެE)na) !V-ߏvr ɈHZd4jA s_]p"QDH؋Z[ 7a!c ?(x +-$oڸ^?Mm*>>$."܊| j\V'z%V?6?ـfdT*~_gkod/~+ǾW}~??<4vi=c#>%gu멷-"5:,՟bV7{pXpb{{+pvgOxVZwd%RvVf"lnɊz7]?*B&J| Q  SDxM||H$Y"ӄIId$2[S!%; к^ۃCtJ"I5@"7@!D&WEl IT %J /E#%KQD(ǯ!FG T U MFgVO $E~T͇Y[=ԤWfcB1eNyq4]J:4I] ֠ Zgb4>.GhZ ZD<7}*u=M5%d7U C"25УL+T(i*V=ЇE$k%o3:z&L4i@ӋւKdKU| 12eٵi(Va6iV9ݳзLj@4r,EsSMelJ-~QgDǫ,K48rZȾrSj@ "N(؏O;tPޢP ܠ,TBT|2Nbub>KU,S5_~UЉeKrmIhh @U$ j FЏn5 KR瑋ClH&_3KfƕJU`>*RԼyo h#qP:#OTg"5euqyMerIL`/~Ʋ^+FU#ʨ0bӴ4M)KA"BtAZwN[caӵGhu1i`Afl=yr<4B}Р`B6j!AjLXљfsu?Sb}|J42Gh7C,Ƙfo/ۃmWg#4@CBm#zKk,5q:lB69F7[ )Ft/GVC_$;=$x,=^l[?.>[d q'rƓF"c5s.HGGz8`D oTu&cXS!7(c(ՈMDa*BJ@迲㠟+M?x!D]f|ͥ6qQZby йfiLLcڠ_ $6&ctCD&a?.P#K>I\e(֑dhAo"Ƅ މLM岷3{<>ڄǁWR* h6N"49z'z["/k#vb|޹2 s<zusd3bc2C;،<zaI?3BuS7UFrir9x-cUCzQI]%C`Jwͬ~AkoV7Mi=oNBR.akz$ь\7 xl6NK}sL 'X%V{3>AӀ9Й ?M( mыF~ $OÒ5$HU?D *}fI5:"Nz}Ȇ25<-Ʌ z`ctp܂+'Ps/DWZmEҔC vD,VU }8QTp:}]U{#d1ڠ M.K Z(+ﱆ>h`[| O<*t~?OҶAE٤,l,/&+K(m%:|l>E-F&j>0< 7^WIҍ|F$!f0 fC/B"?DK`QpN0UZudm8  !;y;,AzX$%וa7-;gֳl,yv%e s zR}У'=廱T&S+L< TkA I㷞 #?zUqaC62A)\h&4"%Vz!Agt@Ar2]+4M0^j TD_ ZVseGl\X})5s2:tj"Uc#TVlp-q‰@l:eqy:w GXs6 bϠ5c~nZ BQB|Tf)r;Cɒ:d,ˆ)aEo23 s(ٌtUFg I_$0/AaހCtNIt@!^Ȃ6=m@4#6 Z"gMm,賄Uҏm (@4\4Ұ/ۗ~Дecl4]r {|b+H6ZmH4{)EzԆL} =xaLzA,X4h| x/p|_\Uۺ6>-vw' Ұ֚ ;FB>xswZlswcqϔsx- 7ރ\Fx=nl*[<5z?Z5cCneOLA6YʉngsX.N?_ZqD Gm\ե 0FeAS +ErĦtb/{E,'GAV4#YφpហuXqϳbmQ0^|½AW&3g&#,| \4!- ч=@Wq\74F{yFlj Z1tо>Wb@우p, 6raF9/{-*a/KӠ$@&EF|1Zq, Qqx/c6`MHM~ \zf-=Bn,ǀ7Ħx?=&ڢMR*:h1:19?8|t[hй~kSbX t!,MW _. Xd5u@źX|}p,87 @蕽 qU7;ִ{ \ ^蟻r"[ ~16B9n=@-|85i1]|j{+hPӠw-:K"Si%QM]4OD5b Y_*q\Qb xƀ<5kL]13X;[Xy3oKՏx{y_^fhΟu9Q<(rKR$/DS| endstream endobj 37 0 obj <>stream R>hf 4X?q#+3,Υ;F@\ G?ǿ+bGvx4XxMBsQaLv6cBB ScZO91&cnN+D#EznYj60y~Y߇ɘC5Uxp7f9J7ʙЛvllSDѤAWfz(؀'Ϝ=ÂGMGhm}|4wi4 IgpxBp"1GV0p K"'뱟gt|2UOk8 zok` | `JWOBhp|^QЗ4{3vy5k8zX"(@;{ý.ɕXrac1@s <):ťd?x{,)GAGtH=(λDJ(VcB c߃_=&܆=&P(nV=7w>hA_Kqܝ yWɔ%:K} -=PWx9>|e7"R V `;V-WT3_>xz<PLu8/_}:m*[hNmm}qpiOGi=&4iB["vc5O<k{%:➵@ab_y0':+f&vc zyX4h6^GuWuTl]۰"B+e($/کGgt;'ύd\cva ğa!+:+>K;}([DŽ˰DŽ_=&MD'e0ޅ5aT=lt.N36b+΃^M*uP"K .5oÜ/0t`sSYˡ\/xXY)kWK:\Oԅ< uU=BYEP7 ؓx=p'\=,>~F1||A-GKõSՙmbTp:`&^N@&c;5DpZV?=&.`[A_|kh>QaM}< xH >5R|)xֶ=K!WA<za;) 0/ )bϤŠ,yѪ'ڢ ^U8ƕ+J+y䪃lTv Lv&h:C}TߜUÚ_ /eQf%JRX㡎;Mt߼Wx) AZ/q ;ek϶}o8xo0VtB^ab RBT(B+ k7"LhCmd.9*d|/L9C̥lL^6Z 8m%XF)J;dwhIKn 逧khy2d:yo2AMG0F# Pa@e15!Ћ"=M>-J|z\]yi_|)D*-x?فoϵ^U2pxxLqzHHr%m?w4 p@}\㸇<5+ފ$FUSom;x/=~ӡl`*zEr3R&SeK-;(ɨ^$ vbOH(Z}# ab f"d o4Qe_s=mD|T^g|30\ =/[B1>1!z|$?K\RX&W+u(Ú OO^Z*ZxABkZ뱕Jfu:h&^= ziPGݪ:+yTsAJ-}:8;%.mv:M]A̓د'By R#Ijf9?W,r aT웷F✱քb_7X4W r[MDG__* ~ns{ C?k?C־}iB!:$N(cx9XyOk􄄱%ZJ5*,f `JGS@@m| z; p5iI'7)EwW<`^X s}^ W.䞸ЁOvOum*%?;O#qc ?B.BBy1b🦬"gRa{ahY`Lj9(QzaE=c2pDu+Џޫ{%pS|B=S#^Fuaz4 ֩`}ֆG{n x_9Ax u9p}GC5XrpF8恗j%. ľW^S|E䒾 LOƗo.#ga#3ߊCA߻ȨMoTg'CV=X >{ax^Ff=k pW26/ ߇x)wFÁ"|XR-L/pIYJDX9KATp>m>g]'x)YNz~ 7x+Rn|# w Bq}haoŇ80o/w-YZ=>&_BB-s1 )ʽx-zX!^2 Q\fa=u ;|d(&qĸ+d$ZRx1p:sa31GV5bL|p=@B~6)R}|MNO>O؋W;Z*l? n茶dV B Ytg2b0&ܗFs8JX+~ owAn؆=`7 nӀ8tdV:WCXKx!`er"]|zY)K^lgĆex>?7/(}µ}3 I|='^ O79;zK|ó3&8'Y_r=aS0!0 z>ʱao.2 9})lp{9j*>g؃t=Qh1G%/? N,[kKcK웷 /ڎ1+00y|}r`}aT/q^pN ^ו7 >=qetx 25!XwGBP=R*1/u; EA6@? >h; yCy:TP; cZ!;p:$hVdd.߅ u/IE5mtf!*i/!J܃jvðVy<-5Gs po&}*r7흹{G@Qށ'LZ*W -#aeBl/GdlgחЩD-:෎\pX< ׫ wUqX옾a/!=ɐsxc Ō*2 ]ֱre4>i6풳(B^tٯ˿UUCz͐*x`kȬOAUv_UuQUgc1Lzv%UtCgٔf8Rt84N-bK߱eLC+ڽП2ڽ%9'l{m&֯$wu8繴VE_=PqhlhvD*xC@&!7 03ۿ {{1mlQ)wrWqUE)dPD?_4>?mxDQǓרJ1)-QJ?]$+]mDIj"+&,1:9-s0 ֎:GFss`6!i1a~z'Ee Q{JN{aȻ_u NgD[Œ#FEN5AJ^2GJsLcn5aF& ;!6u(*!QF(AcPKjQ5 2"?g }_٣CԦn}ԡ|cHg}(ԋՇ㢼âvP¼Faaa̓3WAW]g-xLPw#WR\^mgEoHVKk:L 876`+\W>?J6u@ER#6CwH𴄵Pb+Jsѽ^CanT|S$n$iaZ(Wd}, :t;% +EyH6Qz(ګ,KCQ#y-߁noYэ"* :~Ɏ1@Q{?iWcQwEICb‚ޓF˦sm:#㼊Ӈ_X?*߯Y_T׻Ҽ>? tQҗ^߮>jxV |NTe!2;m8Jf(xEH}2f*z%ޒw> ;{c=A&w#3>هbq^1{e۵.aVQ1o 36c@_:_5ɻu[$'PT~.z}kVtge_`Q/L^z'Bf)n4x&j r:Δj|ia^r>iСF^k8#\ UuWvI$ŕL_׫1Ao}W'o̐Oi~oʂoECҬ6^IiqaywnFeu$[DNUOQc4&.@WC>Ÿ́$.@=2F:*~;u&zdj4\[uTrPn1C>y/%6SQaYq~ǝ&:A/T\Ue'uT{|7t ۪|xac29^Sd;(֔h ۣ=':nHG_F1Mּװ%[2ٽZoo w4lH;4لTԵ ]%U'Yn "m r%y/*4*؜Q^\Y*i+:.pi IjkrάqȮsY7ҫ7owƘ>egƒgM$/%ŵϚNZiFc/fv{n͉?z5ټZ[ɒZ_oAݏdOu95mW?mxCiԑ(S})@8Ey-zP'3)_U׺i7ZXuQ(nd߻KCğ*CϝҁP۞w>=)*;%my% 6xZz5Qc܍;s+ں-<&=^}DIuhQUȫfb::Y]x.w.Q.QɕQ1OAzP?l,?( 13*+u3j* 0, id*QQIqEq/H=Rj#RK"f5;׾1OD–fWSJP.,6/ m >қePShޖ,xv5Wq> 8/u}Vu1"=dgNcSZ[sEXqZ\Vo%zd%Qzŵ_oo[eHsMHlR{_"55s'X[^e+));$:7jpI ~t[ݹlS[}H&/mo:W:߫ /i Mmr>{7Ew y߹KONFOjcc"3K##-#5Dl͎~(2}!,y im>uZ5i)<גz5;1^D,Zӛ5*VxvIN̠uXXk W^qZY߶=Yk4]!inr&?DT_YؐfظZ(Ӟ[qt9CXkhsBL r ~p{勣N'֎lYS8".m19v/ѡ62%+15֦96U[/llvf:mE .sMIN56ձ 7ܢq jC9yt2̤(ڴ'7bkR_os]X⩎+tW0޼q[ccc]c=Z}vT7[^=g[jڥ;[+(gF)~FkuW_LZk{7K\#4嬲jࡖKQr{_Nm;gyV&ǘ!Ol#rl#Z=Ua;"\R36kT ѕ73X^gVwڭBtZ?ur>mӳ%"W #r|b1 c.#b;u4||b1b1Uf.1{1rBazbĪU6}swլC/=:5P%;"|ܨmD7aoJ mCuOt.OtNHzskD+1aB= ~L5Ե\nlPMUV242g]PJL&cQH9 ],Ay$ze"Fdk/V7=;a[DDsȈBBW"cҋ<"G+p|QWK]47:G<(q|Sn]~~n!r-:U+B[p O+Dq8?tV2*`l&tW w`1f4u21Zf2i1{Zb#A9 C#QGfmc # 2߸EfuD9&,!Խ*0Ó8GŎw:EĖzDudE mgoulyo;w`[i gk4:C~(⦣j|uz#'xBsqSo,՛jA8SYhUZ%%=isԓט'%Nq:EDt~U'¥*$&':+* JNIQ+nʦ62o'fL18s28#q4z {p^>':ML'Xnjn&ȩ{䔸Fjˌ>lޔ x%^>M]d􉎜x=sx%uVX*$%֤?7 1 #kp?ΌGwhcqhG-&q7c+1_n+1g~b2Ub}b>1g>!?OH!i{&)6߿p {qKw"͢bJ#Όq޽s/v,.qD;,HfɖݨN XFsblbĜiyI;ÌZD[Lz,yUbC hbc$n?wԤԀg~e_%&!}c`}@m`}b]c`Rd6՘OmO8\` 7 ;=7a1gjB~zWr֡3}/!?c/1s~|mW󗈉N4}G Ꙧ˭QLs7 8tUlDc7aʛ[yrIb3b~+b LřXhM,P!~Q%V‰2|ڧ(=V pDž=ŎK C=Ny#9 8CPOes|l v)nٜ9Z>c-zDlKQ_"rsE K܈ (/$ MENK9KuÉE:2;<'-Vi>-|q6-(U@U\ѵ8=-_c6~6>1-Gu" c\2ǡњL4s1SB~&"~Q&)hP",TAB(gy9{ys 䕈+hbJUb p<&:$=P?GmҶm4I6O%q10˙ 2Gyb(8siK>x1r_H}׹ϸ's+&m;{r|+)qss/%5GNX1p"oZGV9%սs#ث89~rO@c'"֩[+)kbi(>o:77 ?jgm~4Nvv1ݫ&x̭;PU-Q lSVsZ@ipBwRmL8`lCch}BCz-B*@\EKVRYV"+,'Bl[̮@1O5@5 iOdn[#v>js>m3c?ی!_9#ޏ7^NxȿlvdJԽ?eDϿn+H2>q qa9[(egu!0Ӧ]fhd)b5A=dIwX"VU%VT#nI;/<˦d/VT48>ΘѴf+o߬jq졬j&պm)8W ϲZ#}ϢMz^F>vVwDP$VXUn^4h#.e!m'm1 6&v.ʞs*q䮰j?8>7t^3[?QkJwNO3IrGO=:=ѡZǩ.4ݜ?w;]]f7u݉Мly'QW_`bB_l4R>~ڧmjڃy1/;z;NӷsNC9J7wN|ۭ\mQTu[ׇGT8VF8^BEŞKnCn NM3p?j/trJf2[vjD?b1eȐk:Q[θ_ۘM:ȄU`70y-qKIoE^9lC5)c'/B:]mc\by^8V% ؂W '],?puo ӯD9MF0KUңƄoS{T7[XRTr jWMh(wQ;V)+zMu,]v{gR6vU'3e]G ^﫝NQ?g~z8Uk?\wAa.y Uv3.zMt˚?g=$1k1c,ܨG(;MUmj~GWj7'k1);48EIЧ)(xLMA%UBmBWQ2fY!皽*lPOBA'c˷y+i߻+{+D魚&Y56|7k4 oҺu{U$9Cߕ)[ȧCaK{/g.vj\ΙwPߴiVt]|cT y~FJJMعl B2a$6=rq-JmgSI{`q#s>{ - rз`_75^LAԍk6Q6Iqm,~jƠ63K }J/w~;co׾mU+vprb!NG~i J9V/zsiᳲĮ ;vzuhD0c:DX@|ҖK䙳Y=dr>7v#@P_yp OEXpbmtR#JW)}֖3秴=o,-æ /xEOjOgW;EBD6G2Us&Yr U%tM.E=vsCWӤO( ,<Σ$xڠaxTuKU AF"92d:h:?6³lNY1Q^DpФ; :2iCSjdՂGkߴ $uvqht4ns[tjRT#%,bTU-o uHB+iJk{ʨ{_"DRYs\S_[I\C3mEދ>(?* "J7gO\SIRzGg]lyfb5a.2_sw~JV?T U4+ߨ1]]˖pzU~=sfg|E P[bflf .L}cJb6w DZ,hI.-v2*GCtN$|P/d[|:_ {vZbRv(!<]P! DugɇyTY׾~ْv aA)|'ӖIRIk͕|NOտV1O Bѽ4 S<]+؎]OQޭBTAV2]phfn1s|Lq-´CTj f?v4 k$^J=qO_zw1)~aZEsfWQf.|-byuP~%䧶Nա?2:ʬ($!Bp N@TOUbąw ;tC7hh>g{wg538c/5F5tH%U3״WLfv.0ӫ^)܌\n'4'wspᩙ=bf]Wq~t]Fx}tcފ'es {l̕Y{<ˠ+IBn4bۋ͆ ]|.n 7b7ySibr8>z,?w:m9N߼~4 h'}mw77Sg..ok-~nO|}gnpUyzU}V/yS+oŷݽ kh߭qټ_sPh9KmD4sl4siW]K+0g8z}`oE_V/kDc%i_4Fo*FxK/׵>Xw7ϼn6p.7sOpO짵^}aP?;qwxpVx{WA? ,&n " lp}u :#1|fF#P;# c- س[NC,ȶ G =,_` BjGV_]u~E~K8x;/~}GOO:i軟o7Z=Nřoߌl6~L-x|Jh}tPqi~._vA70+O͚+5˜fk6]ٲrfϞ==Ylcq4]4ݽ5Gh¿`FZsN|dNﯗz{_@ɵ*犧{W`b)e 43_kO ՗pg/n{LhW7ktp7ssB}ݥ=luLL+o9]h}(ْuІeXoZAb|͖u4v`~S#j酆O]/:jF!fNdCE.9RfYM[NՕ{g:Q`OŋI42?"]cV 7 ŧfe]S7\9,ZTK.;hRGpH1kXvu!w/hbW9-s#slЎ ѷ?D3uo-w} ,=>5oߏr5"a6khOE9Q0F7M7o;u'ۅ|.?vA LghN:--whgNKܵCu&͞-]j5:^SAǤjC,$$+>I>u5&5LPCRF(R!$Ƙ;[lZO೚'eóާۅ;s*O/ E9X'\x =]ۿ GϢ[g~ ?)s'quōfI_Xx.a,]اku%Wf듛ǹxj6,_qv@'X_:1Ȝ4?ISHTK7ņ˄oqwIct;y:xsX{c9~ɿ Cm*9IE炵;'"N9͓IS'Ճ,/)f7O&-|t ]`Gz;o-?kr!#5`U֘ޞT~m\r>`h|;)s*֋_wi7ۤXlҰN~OzuPR/ R "Լs?.z;77VsY=WӧW2br&̏Cڑ:C\Z8l>YÅt':UsCHcҾЦ fk9AJnt5Ed&Xj,o@JR;OҸ QfB]ﳭl=nJlp#qwp+>^a<_~VaBp;ETObkwp.x ;4ȊQBġܠ/Lї]O<\uېnd|1ec+!i4UxctaC!cΟ]7 ͸'pEf!k,/D+ RjqlĚBbP7V, nq@(s1 \o.\7;!w VQ5sZ>x!1p44\?SK__P#@38P,rjhπ ³:?g7_z^nL\()m:n=bѹ9Z5@bl(44,O>$k}xH> wJxzhnߧ9#kD+}tġ$Dځ}B!^hCCص!hqВI?{piғ岾yr%R~aw*bO=p/}$=u#= v+c |QuVz|M,׳D].Іٺdƍt[8xĆhsC^ohĀkhON /V%Sۆ|.տtTZ[#\V?6 E@^d9e;+ĺq>jr=YպCQ玔C#Kf>3Nd.Qdj$}H,% t +9h 8dbN@J-.#>8,^a.&к4c} ,xw .Zp~&n#4YԷ(&pR"}D 318ub2O,I i]`$]0|Ig#g:brOoY)`b!GfؠO-Ln-$TBGp)0Q*M/t)5\_Ew5 vzл'z'}#iC6kTZrO^FcN5!e&nМuė%gM{s֓‹츰\%ʜ N"p-ܼ$VlNiz^r2g Uc-U'9u`S@lЧbQ-$u? -fMq_n&[ oMھ Sֆ rr}4]=Hvw8N`2͡wé|Zޤ1JIHSCvɵo] VO|Ilt k5|+8 ja,p Boh:HO8R?aIJ%C 'X܅OCml[?-Еn,۞nnV8jgAHn1O3;S)_~wr>C'{BTR23@XN9G˝{q7>{Uz@?J~ CNj]r67PNrx`uHO/LL6q7/ѷ@zBqLqO}j>ԎOlpb*é^˶=[vh'Ʌ-0N5buVAV`T7-ґشlZ}?(y)Ё,uPSmg^߅_+-:AK c9*@'],DKQVYǦs:9ǧy8K~fcD܄7ZdyʉH-mĀ+9uNS{6[ӆ_JwW7 }OHgk- /8u?l;=H|F<ΘPxj;Ef c"ِ3j?9s*i=٭z5/YQhhl+ĞĶ{>gA'=%/vz^ƴR+{ګ.CoߡG`/&0[Kˠu'CܫˋF\.tj]V%64Nf?t$avCב1*/4T^]i,/%TUb(-Ŏ;תI zG8~ggq'X^vo@T!s!~"4PY'C,BXxc冏7]}+-ww;~lr0|H!6{_X{rt+o۟EC]y7iqu5 Qz>BZܨ)`5jhQ:pXn_b/:g޹ ^G$YD?5K==% Wf5¶tR9|^c37Rz)̇77e*=r|#4.P`׫Zvc9tԱ8ɡ_048\g|}ycgk9|ǫm|ǫ+;P,xpnp[wke7_wkP 1|,sا:>{_mf^WC^ 1Bp"qb+ǂ;1 B3lrX.7yO9X >q;w}7c:\` H[V/EXpsq  v`$k4msGѡ2H*783ƮBlb Mrwk-nlp>w>۟}^tq1q' DZ~>3o߁uRw{Eb6q2Z7;Kv_w>r%;XĶ϶K7ϰ,=r׋=dlkHs=-ȧxORH1|yC=r+Wp>\'1Xujxsp/tuW(tk .jV"$W;A\|qYEھfgU\{54hY%FiY|p^K梁.CR@E#0k#XH|h.4|&hzH-.^oFɅr%hq\: 92 3Eɡ&-nL:`>C2h<{#lL}Tb|sFFgؙY 'JI`g5^$ n!ɶ&EzYA#]3[k,X-q[C1 KCnth2/dU -#gpgLf5[f\2poo]wT7>Cw;םzto+1 M5}7Sl>,mPn'w̋3ӃVpz\Frz?4kg*f'a=R8XIEc՜醤: kB=cy2{y5'vNRY!&zy5{,#>RGBm )6JP98u$|4Xħn6OSmwt0~H>yr}M76(5)u0go+X( 9)zJhms#*읅~ { GGsіrb1bkvV]r襼fg!* `rzxe`gY&v~/r`5.4#Uȁs 3g4٘Y;Ir@bo&L롷Gu͆61k4nߒӋ }X C?{AGX,v V9:0]+u5^rAP;S5`bKguB.)Gxk4<baH`,l:rb"[`K΃=f&5Y}:@N!Ʃ`+Y!Yp|TW^]BO05X^b9kD,4aJFd؇kS?z軞m r=QQ08h<Ƀ2G{<9x\NrB~.zNs,<1Y =\7qd|x!XW-ß2j98o?w^ v4#Rltgg%uvRws_2F7{o{Ij饾s}oMxIf8. iكW@lIrZ-˽NE[?*w+t|oyo= e񹤆wVCKղ+K%U{MM*'DXmY6Mjl+r0ղ&%;v{ AF}@,Q|pmH?5; %0T=O:LͫJ=Y=DixwR+Q8+5!YCfb@!!v'Rͅ%jWI{3GKq%![wg~XA.8fA156OC/#Ծ m ƷWC`H=6`٭w|[?WV(VMSġb1yj`! & <,@s'`þ0cf07uCĦ+cmB}EGll E/w>cN}?@ ā.))=}!:RBûփe8T vXsvf>Rv4hY sY`U쳤}&y*0co[߈AV -)d~‰k:KgE=5_44OmN:Fb%x1`\(uunϪ<;p>{R˯/76O#KP<QoNwb5Wʭny_-%dk|<pP[CRnߞ{ĒI\g7̶ #A_r0fZ݅O\483&g?9Ge+BF fKJ% {TL>r0ħQzg-2+Q'YMs.#^Pj%1P ) PmV!' ng]{MeLw{R4ԋ_bσ]o^+kE) yXd(' ;Kl궼irU7~ZY/&N+M)>gJY6oc]-c=3`T C]9@Ll&6,Գ<?pC.@ )F*V<ܡ{:n;칫חӹɔG:럄_p`}.V=Yٽd]y8&dTͧf%af.y}n~`z1\eN5Bp\‰?C_Փ#tXw)s%bUX|#`ќeыC"TZ!V]^^>beb-QR|~QhLଡY2ZY=LEjyPrqFjc-i 7T\^{~x\3л{3\˵CmCqVJRx|i8 |%B;}u6jbyr>Y+/B%T0c7ws-.i1ЎbRȥ±db(p=!;cogN4*,+ f#Ū Ee Cx8{& ub{k9b]8멞Z_K:vrV\1^%xO8@q+޴^X|!( g2 H;b'τ1!8i|kƙxo-W*,B{|bb P|rxk=3J1?ԒK8!Ff*)X6qR>:Ku`?-OLBMYA^^݅eG[ f{QV{l3Ex {U"|o>O`J5=\:pbWO2G:{^#](|c?=;>7YM{:,vv3[> 8;ql)Gns\ǔ;%Cs+j ps 'ײ84QfVeԼWtmv ا2030e\i&CNT1ϙ=t3zk1*Fd؀)F(3$yó0C#Ԕ*TfT|%IVs xSJLxAI'21|fz|i/GiG6A< Y)*Նliv͔8#GeتoCARP;#$nzB#9 >Ɖ1'2"6Nәx8Jn8Ѧ#VV=bKMSsV,l)I3;c " }DN(^f?}N≁ 0<'RϦ?99:!8K[̮S#^˝P']M:\~f.λ! b}Q-!cťʋˈ >tk6i"1 }6{i|31Bb מvwJC/= $k̇ cn8=,,`toZVכǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛǛϏyFsq[_$>(~ =Qq)Λ%mfS|WZyB77 ϋ]|Z 煦+.4$4}Qd-il ^r,_zH|ykVnX/_M//?|a{>~E΢`%>t-\C#6+/ U>{Cvf{=Z邲1δgXkX.^[k\%'ni5ԇ=.>HykXXpy"[T+! dtZdK_>3t;؟ZbQ?pG 5S!ebH"cN cԕdz#r0L-G*b8zqLCAL`?k`<'鶐K+1292Ӗ$(؟JX"i|?F'X  q';BDɴ#iTkFyCB`F 16,YC*[I?Bq>4# HpI6Ngg?:VͨZd陉Qd5LH}yf?cqGǒQVt%p:EH(vI)uNBHHCd[Q$yb2'ɚtM0:sb Fp|C7܂!m16d|ͼfުK:&H$x9~:%B>)Has@RȺ E\hP _, }`|Z(6bdPvvRui!92NδcrD1 4Q0 t$٫cn[nebG ^0{xf- )¹EeҨIj!cP2F KI${e#RddӝHWV`͐hc,r8{j0󃞲C4!lQ$|7g@nrb`ţ !f$>FĆqRHgY +vQ=h5&;SF*avz5B2?m٩ɵ qjdbQTcj)s2jhT gǖ>Hv $yYfEZbKͅ4k!4ݐ~Vˆ5E\1Z.$Vdu yW9Bm> F+ ɵb-!A2, jx-$2l0t2lKg'=e7O,i$TK#~Ƣ4*~|)/蜩etH }ԊK3 IchlrMU+G)u!B2d2@k(dTJ!k]cd2úBrm3>I&!wG4cDB&CJ,ؐ"ϤJ"Lǘ)O2[t!b4c] f_!+H`gB8f$sa# Y<Ƙ?Q{HECgO?2OvMX`U ^xi+hm76r˅7 iki|1AJk$}kdTZ)K ?nOP/.뮮h8]YI?v_XbQM?1Ř?0 ~G;l $ʗJ p{|lSkq=Kv*߰HL85fqM  Q9v?%)(ܯ1 |ɍ8`IɿX@KN_2!%v(#'9΂4G\Y YlYe6ԒgR^1H QH@yH#Ё>_lhυ'gC^ecR;gJזbXc/$k$dm0 A9RL|*d;h<׶aj-IV2[d}s|`3-^**ie^5a?HjŐҋ -$2'^3N.93Ozk $IzC#48S3;'Yst bl=Zc9rRz&3269vqd,V >  l;9ډ:_PjC1_fH7BI>>y5ސ[`| [aGbr~ oQ}Y_d_)`L 4C, )V7R.bIVRIl&hd``M?EݳHP@֜:dX=X;(LlHJNYaQdVC['|c֣t>qRG+$!kc``ґ1@G:ct[j $xo/s0sC}gg!&\F) R\h'enXc-))ͅXC2ZVd,ћ xKoJhz 7$t)4c$$ \V{<< [i}eLn~uן{un&S,}$ 7R*G.0 =R` ȱY7ΪG'AFИrQjt-O5t S o5EYd 9NXn ) *Ɠe1  `gJV$\8/z$YPv)dd@מy|'5- Ŗ:FP x 2;4q B>j H5hk$ւz}X~Vִ~^ 6sl%SȐqD l-4p8s$jVx|5>rJ[C::9%|S~G,i1%|',)Q/2}Ȩ;X|(##H|fd5.$ӯ~qZ`5Qy錄1oB[KшE| ݐHA {vzJe'cNLߐ f5[AiɇBT;BPeR6]o<=C5z!$Y79|m>J*~&?RM^ExǖO7JwVCP/X 1X"‰O7Hu2'!?BGBv\hbl;I9U0G/$?)w>-s\IŕiKIK@9S~̞J%ROֻ{5e.zM:+)p$ÒF"PPs g6ݣσ~S !1fN (c*/#AOIȸ˱Uc>׉Rhwt5 yG䡆#EԫT3z̨7yd9\bz$]?d| ;fpml՝?O;?o5}YHr#õ" ws'(?LTn4飇t"'QH/eRXu7nH`1cI&!2?I5T)d-n>Iܡ^ζS X00Hg6! c1IJaKѱ诊IEc NxK3 r5ח'uOA.8!U\["t}S<`?qQNo,6z]Rq,1ڑc1/9EXJ}V6 $(Wk'uwY!OtdQU[[HR,N|sf9'Qu`!ؽs\LB7B{᯼9q7}Ǜ ʮy ŃYXjİam=@:r*ԏ$*3Ob WL)?H;>MzuH=R" y(2ѧZTCRi"G6-wrdXԳȱAP $30ÇccGB+ NBI!HN ļ =v;D8b~B#d  j+s% srCXh9YgCLl Ixyo焌e[k$Av:gW{ԡ}pm%,;{4 Hj2)wؙ.Q.Uu}DLB_C IY? { &LGzk7Y||;"I1#!Fc6h QH*j4ZOCi&+U\Yl_CJ9czHajhV!'?I~YX]nd IC}NO{m!*UZAl;U-c`kpmh.}G2!~N8m;b2lH&Yw ,PX"Gj"< fbȄ/VYT~}1pQ&Wnc >P7͒0)ԍEd-Dz|)@bDY=J4M,ؚ$Y@#c`_/j @TbJō`Lhb …kr6i]z|s!!V !weP>턾dp"fwۤrGg}HȦ^ye(OrɵM2É#)`k ?hf. ?ClL(ǙVHSX3aϓ+K !dđFBt?ܭ>rқ'FBd3CWG~$H8B:01($mgMܮ ;Kv]?T*N{UO(TJȵ֯J~a"iXlG jj؀<8h'ICKy[~39@=ڏp_>t>Agf׶ TkՅ<^ͰeQ~!u@/u9@2q5/*q]Hֳn_ؚZ$6^n5S'H QCg45''}(+38 J` ;>$ oSZJ~9'z@t5\-y&dqOo6ɍL}Ԃ6g죒U5y!}z ؓPqc\DjxVG '?䑆@VaB뤬i\dd1Ojoe>>F;G; 7 rtu*m{Or?ȁlk3p!!j.p !R~GBď4rHc[ӱ 5 S 8 1$yzmZΠEXIIg. W^AMrθwΆJ /y/Rk[0 ]HooCK:9SPƞk$HH?+CqvJ%Cs?bͅؼFBm϶.2P}n!nwڳKw֪P|:=Vnn˝= ލuѹ\[V%W ,%Uqyb(7>} JwJvҎO@݀z=> J7K g_B%BjD!Αp. G3avDdy[/dы~;V兆+ˍE(9R>5P:-~3`z.kp* !ԃ@gͳ % WWL)NwKR=ÀDn|hI)uDCýJgL5;i8qaoz} GpO-O?>(zhq7G}4@Y/{ܹ6OCRմ7a,X͖V7\3MYys߸  X;Ӵ?7?R3tńHGuTBԂ(4!!o$YoH`@^3XJߥ.RTt?w = nX܏V0I9 5CN>UZ{KCR5|qNtH =/wY>E ,ΫQvF DF*\R0䐱we8 )kK '0lأ 8+<5`4g( >=WP @gʫ$ ەR˩YSQ>ɵbsGHw#-7|A~)UR}z bkXuy1B7{?\H)CH]5LDN.=AB~}Žз~X9>(c62M,08hBZ 5qj/NZm(ujڲb;ԎJ=BW`XS}w`pGI"B?s@&>PhH_r9k*bTqz! .O9g6GgacuA V3Y,G=Y'<,>B68gJ,@?6`:F=p?k/>@Y 3S:,ce@ 7`P!(pVA-rs7`2G%W"GQאL9|jF<3[^!iZ~z1@8"g=tT:U0 g qFm7g zJ,3g`ή4O dݵ$+=ϔ7K}kbpltП)o;~{M>>2a&+,Pvf19p])=?i[CF9:ߞ E۩,<(~/ԭ襖[@F%.9pvoaV_[T\]{=k:}L__3 ΦL諒|:gH%cɏfh @?\=sO]wcRe8S?u&0w\@8ʉՎbt3c*#%9galmSU3{ [k ]}e)"l8/z8#h0&9j,Jg%S5ֻ\za1,i+bk`e';ʙ7"TM/ŠIgCsmq}4oL}@%zK:h 􌹨,[.$q`Jb_nZ~:cl.!_Q3h'Kjo2]cS= RBӽ @R=|+D} P]V+G-00H,2"KmHO:'we A xI~!sE(._2gu!IĘxc5zWͣ qQLʟX<㻿.4ZGV@a_4 U Iz5^] ̷2?MC,fYD9-0_XDg;ĒY^/bOJh&y0~V@;ma1k=0QY}=o\ 3}7~optp6Ы xKv_uV5B1'1cT|z.Aѩ߈. D>~A34{f7gD$W_ey;+)?,-V^]g9kj.~,9I;5k;_=uW?=͗ேkIɿypCytGzy'ϢķWI͟n-gLC_ήk#[ wVJvO>)zq=wJ';OPdjkx;mjNKC{+v} &xWD~HО۹ԗj^~E|G`r`gjٹKO< vw +Ͻy亾ކ ;`3v|gG?^h/}zٮo{wW|O;"H!W|=.>.<+׽┫+?|OWrO7jCdxqڣ2S9ag7+J@!ᬁxMj=Wt'` 3:4_zKJ>=n}/> *i%0J di}{)1;RQJG <p[ =(|V?Mr 'grEf{>Y}O= ܟ?WOߕ/%9V\;㽻Y_Vw~S[_Go~{Qp~{7v/|J7Jg2k&)v-'7`6 >x[/o>o$KYzC'!oП])V+]F=.ًOO_}.~+~IoT/Tõǁ~?;\'}j+ {͉﯄]Ƅ\WدmzO>gbcWN>;g~e-jֽ]*$M4R/(ki;PTR(Pw7 {}39g{_כ\ISsd%9H 7zM͏&\ѐz:@?(^݂m,RvKAGk̂{_M_9Uͱ_i󬸲U㒂Z)nBsbX/>J> 9KA_`y̜J[+ZUFP7oϪDw{$5tV(C]3AVԥ;+YvVF4h_D<*&~o(`@di rh v8{`6樰s0zřG ~󑌔EXߕ麑(n }v7GTwH4~ZE}Ge/[N :$ -_9[<,;)[/rS;wz .߅К1~'R/Ukcv^M"lrq/.l3h<"yb/,{EH<oNEGȧR E?{oE:B}!"+Nvx6of—_hY 骼$y_$r#} D޵ nz^,fAmN#j6ɕ>9[(}$n׺M]^+hBa/E_m>4Y{p>?{I"!pPHm7mdsY-lO?0&DuN0/EW].HV;>z$In%#f$|_5vG 9ŝ#ҷ%.f%>ő*\InDM\ʀ!n]'Lj! +fE |*Tџ>SџZApeđ\ى갤 oÿy"}'7+;$Bn'؟[刍05!y`^\)}q~7OzVgpqe^TyZRR"0{sAT~VAA\zzmKhXc/ySqR\\{<3˽! ˜%D]́ުH`]=~IJt~pTBP9V񋭰=$Te Q-px'%pwWF5ѳ[ՎUIA^YAKL= ŞR[ћMŏ;D[aM|_eMX-md[{CA}=l_&5gՠ9Uyj6{k="hͩIIZG;s͆"ɑ~a/~7A?Qj" aCʐ!m(v -e|N6.ҪHfXb4U]*,nh -[214a(H\de*޾VlfeA(QqQ^rG`髚Ե6V}ﱮDhs)! mę|zi@$cm2;NW\v_C{FڭMoa]DPmx=Ժe<2¿{Hˉ+_͟4<îq(_Ϗ[/|vv?K:q@] +idW' %˺ş~ di1auxQ}iz[x9û8w1Fߏw\gV&%6\JkH=Ӟj{/Q&Z3*j tkFxG1y& ;a֣"Kܕ3bc }:0MBIz!RO(ݎ}7Txҏ-9j c6`oe'#)z%K+DF*c[SSR|䁍aDSROKTK 1- Wd 17j~%ݡ=/;f>(|_7V#w ƻqѲ,޺EU>վ񁵡Oo" ͋X%c4"!K^+Se~-%abEZO s˃6am_$ 5!^L]y y0.x@DmM8y3|¢XHm)FTtPy$c]"OjݨsAGA{#8N/d/ʼO< *8~j{__z筷e{l[|g}dOyɲKlz`,A5&DS=:Zȑ6(ο)$QG/o9{fĒsQ[\e-qmUaﵡ(Z ~u4zhp#&vP:h~Fq@ vj`}`v q;<tO*&F˳2:6bEAY7 `p5GN*ü(92(%]<7> r Z~cQtvwKߞ:Gt9r$6l,V`.P>_=f60{Wi^,:of)L``zxVj.L1chagw5yw,b;we1o*]zĦU&$T/ֆF LŎ,BbLˁ'2s[ktbC۹8- W?U ].O13(tafmش\o.\X 0L0d:*MK ;L~h%s&h&mcx__瑢uO({jfⅺwqYoeɠ_ZS=JoDzgodb=b2|jØ^/].i =֝9z-M>¦``@⤢A@ Ct+-[L0eۥ @ϟ+`Rb_'7z[2oٽwn1jCA O>N a tJhJe8̎VB;Tm4<+Ehlz֠D=0V 'QO̩km`` 0#'Q6УEqob->&EGMܢqT@UD͇o=c Jd򲀸]9q/oIuFĴ{rcƿe1X8a:lG3D'6M 5ۭh75:7՜a0(}_n,֮#?\\eM1Ʊb/vܐ/};3=V,=[n 2rFw7L#ڨgUŋ9`9ߧnN/r=[28k'o&>.JWOۗ |"Kd>5QA Cv+6?9ٮxky 뷃Y˞isl+vk~Z(hv sxD0LUY +-u]sEðcWP=В2TW+.>oKʗ˽ca3uJm[ `~!<5zެ} n_*vb{fq>?=Og[DzoƔ``[*7u>٦nԩٻKhɌk(M)/Nhc\7+#;h}SJFɦ0};'jtCm瘎1l';[BJ l*3ڴܼ<(֋}Tͨ,J{V#_Q 󨎍CoMxﲄZ?uHJh͊v;~zC%iL|o|wi 20Yy)L̜VV|lx¼E qQ ⏕f/]A FA9[emboӹ=6;caC 426J_Ӊ+6YfNfO fw@= ̘o&X0U:Ϭv3vD:e 'sJZόZJTTwiU3'+A>RWY*ß&QDO9З,ӕWku`ڄ`܃`JzT6:SqOhT/S28 IE>boy[ Oyi[oR7П,GǗȴ47z>>Q]e1 iV0wV0k~0gf-YKy@}]AuFQ`GDw1ؼG2'`jo`srƷ^qoK<`e]G#l c]Oa=29DZd0]q&5n%5u3s?XNV<oQ0gY10sLWgm'u>0zAƪ̰!q_M1^C3q=qU>PᙂrRd6kOfsf?c{?ߛߝ f_fMX UC߼ ̘ο]`^LS϶mJs0w,`VwvEN(dVj19CP셿Ob3JJd47zduyft5DPv#o6♪,+$8Lc8j¶m3fm mfo6;EZ`'*< lz7*M@9H11obaU3qe]wy[3ɱ:=&=TӔԁEM=NO{+?c7~[X(X,˴.`y0_ǂfwuNx̬1޷b>Z, u@vQw<"g[ŰNhrc!E_^и,5kÿ˕\ 0z)X6~!Kb@ڦOS۷_}#<3A,\g6KyX0#q[bFNgED _V'+I{:OCUi~?׉c3ϟ%?spù6 ,4O09b0wNSrXQk9a`=![?U=aCfs@alQ0Ph{Wi/ɏXy7fVUqJ.dM'׶b3S:?Ƴ9x _NSsp>Ut,&%`~|1 `#i9ĜZ >8՚,CQծJ=b++bk=/m^jG ?c9ON]1N Xa ֺW^n[ߍp*m i-y61۝FY=pY>C;Y53B.FdЂS}b,YPraU%xD z~ro>@;),YKEv̐_`Vh@6הv7Lڛ;O-MمߞЦr6BVi.k*+'PL:#f3O~a?F/%~F} Z18m%/d%~]wFaa4|| $Gv7NTC4M{h=41`_֘%;.`?? k`Zr.X۱PgudV1چMc}iFso?\:J?׵k3[M*!5eN}x`2^}(8/g$GNԚ5 i#//إ"`l`Μ`SY.9+tꁷj nj}zZj׻hsp>3|+cM~7e5g>ʸ1T1֜?v<`L!]דuߖiJ?v*gH*dMf|2 e}ڦ{6uU{:M6_}XN܋`+'`ԡƿ2?X٭YlctL~g4b52XK_bmO%CU1^p7pˇ& QE-;@(uXVj\詴%DFa3<ws5G6l<0g,cM^ nV4Ž]jKwƞ @_`*3.gLx͌pq5aqɺ q3 j~!g~s8…mxg}%H؄E=_Ni0/KJ,߄ҏ{,dL2~i2TWƭdM{]_4L3NZm`j#8vSy {o}v-'Kf~su}qԍ_1d[ד#o"V?yN1ǩsOV>;08Ɛm Z;y Ec̻صBIBKW2i'}G$~fO貢Jڏ+Ls }r+u,/Fs/Z c B Vx1`-a~fN1f_y0_Fo087uؾk8Q17/j-:ّ&O0Տ덂^3yhp_1Nff^̓弇?IoS씒`cJ,' 3-{k8׭N'AቋMTOMkr ,JzŸv(6s XCvJC4fk>gj73 e?ߚ-_Ģq {,9.nlT{QFF`.@ H'Wn=/t\$ZX% ۄI3唼rYN!}[b^Y }x.|/;XNAL^Mrcљ iٵ1eZ5r{n>xYc< ʸy ɭ6P106`7fhyuOr:b`ǘv, v/cl`򢭢WMG'ݔ &LdAcc +Q%KwdDfFE®v~Np!^WfF-2 ͜Njո׿[b9wLT\fC&k+>%B"4GXI Yf+p066yŸ*/%/"}yz'G*k|_UyI }[4~9u/*Pi LCWnM):mA~Ŀ|Ň~fH&3iaؗOVP&L@LA m4y+IJ|s;̤7~K+aW+ȋwV r$TBn-b:ڃA\guk {'W?jKPi[U鍿k }3+`OFH w2{KqA72; OZ=a䖵dkyۉxIz-G#J,JC\_p4JSI)Rx=:_Q9v=/5 _Bj׿>ݘP ?wKNd!cúm׫Y}y] '.n|٪٭7p az#a3cl\q^2Fe }GȷrUSG5wkmBB3a&韽BK >[O^M,+]䐡® kiAf^zXA VwygӦn/F:_U3SŎ+]1ZA?5I,úi| ޽qY1WhI*8'/NSa[x$ݒDt S9ƒ5VR,zk Ln?gHiu1h] ~G,h5wT#//E@)/:_uL|?he byѸ!1gAcgC&!o/FJϏ2y!W"'%;k.ԼLn@l3byBm.E$jb9h8} 6< M8;!HizmHCxoz%s!.dHĿf0ބPTB'MG̪H+=^?t7R=!V})X3q| tI;?Jp(Sʘ͹QYe -wzlؙIx" qb fX2m4v(1aĕ^=5$΅N#Չ&mR['>vuwc̟W! =hńavoy!s!r#~{Vh6Ʃ}慾X"8#녭{@s>0[+}cc._NTk`+3E;О<ɥ(y>U e2"DZg|cPq 3j\zARVAgv?.ұ('#?pk=DFqۈ鰼[nf>_@P-& IGc߭g}݃w,<>B3]BL,r,2t#?o7'lYXٸ`_О0<~C'jre t+qk~e-?JaXZ^݂ x*k Qqq^ E􊝉EY-9b]~'뎆S*9_=x+* L%po\&X3Hi} Fe~\e1ш%dL:"UvB9O62}\9@y磦Q" 5z$8e꜇9]Y@z&bY.c~YNÕcThĚGAJpu'x{TUtSZ#0Ȟ)ϴ9h?j naWaaF>8Dv6b!auQ9&dA|)!vPCD5;0 v0l39 P33K߅#?bG pY+a#ڀ0k.+قcG:Hр:<))/gPb>s#0;̷:4;H1Dy[>YƵweY0VZىV/JTvqVopzWiGY?oQ™"B> V1ڋa$ț;}"G1@|1;s0p1A墺ZH ˍ ]1ڸONaf EL1D:OF {cAX|YBh1  p٫͈=ApX'X c3aF!S^(y(o$n.AA5".F6qE|q%<9ɟu  Ʀ4Uh#8@qH *zF0!`_C!t-N)# .aY*br:({z{ J {ܭ'ވY}cg;6TvˣcMk#]EQhboՓh_>cʞDRCտOlHmMػf'05b:qcG,9ȳEpL=uN4Mg 9($kОZ{KơIs;>]H+0͟+(ǰicX¬H_ՂEz/~gN 3?S1a$qE$􍄍i2C> w 3g5l? 3S#,g7s(Gh[TAENA{EBX(#Vm,Z'Ga vE Jr-" =bԩ+Ka~qˍDF`˼iv">gm?u6Q#eِ9*ފb9ݒ.8q\ s ˎ(N10>%NMFkUk T# 4]+v&o}NE qP2>0ٱ<br#4"?nuFER-Oӈ+D&;|FŘHwGpC EV [6'nsLq1YJh_ Ѐ2(Vc80;=Tt\uC}b`ͣ v,vt4RgqL wV%.XJ8MExReuTQHo*3rDqX}6ħ]bb QuڈSiUY 'ܵi!P4) ؗ둟}}.@zW8OCSdZ("ޱ)&RYF ùY)!\WJ|5a{FȄ]dZk(c35]ІڏvMò벛鵻Q͋4кټ$Qv-2z?>A~HkH: n܇8hM/\[B7k#|:euZ{$,Ddhsxf9(VO*߅4[;򿾄սpw(Lj#.2S|NF| ,Z~q*j pquMa t׹aAhY$Ҍv') X1VABIhFiِ")"7,28N~UβQ|E>v[]<&k>/,G+Q)+H/9Ryb--Zx.Sw;) fu"y}2p5n$p=2;46΍euyIȼUFUE 64c';RWrTt,òQMvЛs#ޓ0K[^u bKXxĥ;q +'T o"Ek+PElqg5Cd["C/NבEQ0-7jq.dL*b\t ũRZA#: 1S$-NMfOI 2j88Hˆ,l+6}xMDDKXS$®hHWZ=(yRy}Dz(@Oe},ҜCӑ>iкG@;AfuD':@OU>Ps$*(.Y'C"jعEN|{2 b".7Wf(|dCacvaq+Ge-+) ɣ-9?Ib=iLYKQ˴2/,i@8NA:HgFh4VXmcInեf͏{NB*KYKbq.:Juf OęHeq\a#?p]o]iPtHY,Y!7l%XYF!~cOV+ն99iS,6{>?#K;K|No?1|^Qm iͣψV(f,@DKٸF򒤆tF.=S ~ ]| A _C>*JA\]*S10y,|vʪj ]7D:WѪbXZ"6η9X4Q\d5qјP#\(U\es>9 "z5H(=s\t݄ }vV΂DO\ȸvy,`<&I ,(+{Z&6 { Ue`cDN(#}&f/,n4:N\ܢf/孤cvR_sQ"`t6vV<2RNH;K x\g4tݐ^CbsΚX^_Y6ncEQϷJ}axyTNj#6هr ]f@gj^2KsGi"m<0v5Btҕ?uO)#D?w^& @xz6G H>*ڄrIą< `bLcCJאREH嬶);nDk]SjVzr қGYt$em'V;@!jbG)fǜǛMD(8H d:({)@Dj95KO%Cs3^ FQ|=ʩ'ȨDH9FˑU J-l*G f̢bckmN ND@E9KEΈ9E(Qَ_x{~78J(9{Z{9}2GZ>jN:$f p'7,YT$yM=XJ򠝥m(i!{ǀjSﮦYJ'C;+\g,Y;{VrЎ)~oo@ L+QVO\t>t%ʉkH_Ob@HEWF(vry WyW/"c 9]`OLX6k ~ICQGDAE -NL^2xsEqH)z |)$q[?%>2O~+yEJao&tޖ[E.,v tùCokJRVvS}kg|wRKCW@3G~{퟈8[&ԯeȻ94)uK3K*m2ZٺtW9!h>f0OrYF;YM? /}؃jaSp֑;4Rltx:|}>t1eܱЮ݃a8&b}.<>ǥT7&@EǕtjriRpHbٱ;s]X?^]s`hҎT%jݫŠ􅸲 X`ireoKNKfE _p& 5Z1q~=1*SG@>O9:]*lLyV5|>Pt6 {~HBS}Oc$kTg5Oa l9p/Ffo?q*:)lA}S)4XCEb(pj~(!XXN B4qQ©On-Vĺ 㡋.ljЖ hPp/uRyMU ]:Sc'kQȒXǘn}.f\ȭY,VVtCSGUF˚5SvBPJ SN\/"4YBم\#h|ep5߇f 0saF;tU6jGUH9~Xs=HLh׮J*JkRJ>5zvޓf7w$k#$t6\DHEs3{? ٷ'Z0 w|$A}(wK*3Z2~iz |]FlU20Bz4kP FuN(FC 9R<BTx:S K>GH?0ClIL<2T}[.ś}`01d.RDĨF戏+QsFCZH|'a`&c*Mr4}c\Uϑ{Os#$vE]O9>5 X睯41'<Ί,m#s*2X"Nмo B:z2v|&wu1%|Yh*qTՆ&vO>X6N9%\qxQ8H^\{.%EM ?9syw#wU잺U$Zs/Ɛ$@}lÓhΜwu蛡grb a{8G-̊`CKBŰ=q]l텨K|\ٍjyc'@ &QY 9M9@rYԢ8hm~ggsI'9+=CGkbTB`,tPF/ve֬!j3ӤСVc tUMR& czGZ(o2${+86{ꈻ҇a_wDyY6ry?R9\?KՓ94o 棘5T/CsFA˺0_m%^B hC yݕtmNy/b,ޟs ¡SYoױh"g kcSwcÍӊ֘ShNE kgxEb40Moyy3b4?r~RO0\>б$X-{_ BAk p9#gu 2 ^^љ#TQHB9v_NxjBC=n(nYQ#|@tkST-z3n0{Z#G\ }c ƟdEPΣk:$vv珢뀨G`p@H FEw(vb&m}td%[M8?pO 0(V>=+W_[uz6)MIJ }yx^H!hG_zhRyޭE Ћʹ>&[0pCV=^p"15=Z" +=<6Ir~X{ޔۗ_ܕ8D/'>h4󑜉p/mjd[h&wq߁ irﱗGGB<<xzZgK3{70pX/s;GRttS86yfAә cbP>얀}s_D}ٹT5C13SbQg'sLE]83I4ͼ4L_Z$$ IĠ ayP'DJ &>X}t7KMEGʰN?y0}H99?8] B[+eH4.%I55KS;H9?]xf*9x^_D5unϲM}ύ#Eɬî#cgA>=v|;ߎoǷv|;ߎoǷv|;ߎoǷv|;ߎoǷv|;ߎoǷ`-klvrt Vn\hE~پSDjJkmw8m_8MkOdci5jT8w۩3K̚@͛_z::8n#OZڸi^#y\hYHsf-`xZ0ob}<Ok^ǛUݦkDT}Օw~kV3i\eG.?<=Em}>yZT9+Ƀۅotȗs?·`Hq"Oҟ;GX_T߂[]F?|y6|/_~_@>}.-ǟ50#]`Eu}6ld,cl렅YTnܶ} Fnch$2,{SfCfbN3CkJSf u ͣqk`JANEwQ%]\ջ`j[d'| [aR;hVE[--4⡃fI4Dv=@n!62B G OJr197AAk)f)lƁh\o) y2l,%nH#T(@^q?=wLAEcq|PwWtnG2y>m6ueܦ BZ=% I7S2A)"$;4i1n A  65ffaLb@&e ޅUoc5l1h]ez䞒Av& ec6{뀔Ĭ6L ROCKAچj)c]¶Akd? suWtغHp [ٝUwg{HN!}DVAi6sSJ iPJ IJ7ûpCQ"7rFKKĴ AI#ͻ7%(Jx%А-䏅[Ty*=*㇂Ml2 fAprfmPK>gP?4GY_MɏBFLN*an1dDl_ᰭ;g2 ћA P.&ܕ'Ѡ%4DL=)^Y7jAҐ`,d,=ЦĞXU>$Tn[@D9XZ4;EdKƍ6ڻ%xfֺGc,X2ߔ;[2rMĈӈiS2]dv3@Dm "5>f-Yn \CxޖJOm|7\-:'4!jA !'٧W&k[JďZuJީÔ %׀Oo4٪|x[4q@/B@2>}J<0T7M$pg0:NBҹhD9lEr_AA|/a(SS>0U$hG} 񟚆dⓉD6ܒ}{61MM3ѴDoQ{#~Y3a#f ?_s$Kw5PF3\*&KӸX56E FDHV9~< !DGNjhVDKPH/m%61KP*CI Ơ OL.z a-*Hp K#π}xspA/`WLM ȩd x ORzȔZ?P'Yf㤭s펦n#ScmbzA؋q>lLa&f-4ц-pr 8\[d?qg)0d⎤ ,ܸf=#\D49[{t%x%\_!91$S@o4[J1%А } ]@8Fa%FەJUQh87?{L$` Ȓ=R±MR)E]AٻІ42-=t+|҆0@IhT[B/&v@ 7CdU&%4܊ gf⌫h84pP1xo@ScH?1`A:6PKhܣ6Tx{T}1Wm޻A"ׂBnNo+%< x[rnI\p \jGw~oFOA\r~AS&?@02];Aد{t?Jpn9r;ov[L?jMOv;txKi+Vu z1o%M ~Q(4ZѠNI \)\XzzGzXD0aHhj !R ,(ߜo`;!% $8'MMyEv N6h$6GX̡Z>1%b}4&M2_1/ADˈ{'%@6CѦ\ڀ Gmܑ) | AjK|Ϥ͢h -ZJl  Err/} -K>M =-0]4NR$63q0%s;uNX[@ 02Lj?$ Cs?y{O<⽿X~4f@b)b_ p.)`HqgtcoڌKlTI>v% @~d.T d4paţ)gdz}h|79 EރXbxX> 4Vsdza p~ A-T@z*EVOçACpo3$݂Du m ]:>L0YXn*$W漫ɿdFЄ=|m== ôq726i"~2D9h%2n.0w d CX<"O lh% p2z#Fb$*7-`RPLE_O`;RP; Q" 'WKJI*Wѷ7d|兏B$@z~aDÇW؊א5 HB$f7F"r<gI|H|2_ LףM8D0%t!y_EH4$rYhs=O`*@b,HrXg2|z(H<`ߞ8h7\Ea $BkE˂w y `Dgg - r[3~%^%q.w.ѝƃq>=@ F k 6n諰n|]ܦmnB>| Mf rJJKt1nBIA8-zE- J!/i\U3ZˢgK@I`dvyX|yW`Op@9 xߤpP:j($ D. In}?%!g v)+\` jr 9IAW(w0kÎ {5DUӳJ29_]UjA O)i{kJ=\ۃ]ww"^CtB^_GlVxpEc(68 ># hvGv[h5&d.HąG3s5g@-x><)̐bF?T '[̥ dڜ4fV`ۍfv{:H墧6HANy(ޝ1cQ$^whԅ ;H*ld^]H @^ `<5掾s"`#3TQV̀ЎM9;3H|6_[aՒHEIR0X$$_)y<"~gXN}(Hk@K " q7`^885C/YO雮! LIrlEqOTiW 3)Et81r2PjEUT2|y k!BGKlν||@CѿK?SX4ai\v iPXD,2FWBG#/D D\K}C?5O0˺DƠ06iubWST`iW/ 9'ɟ@F&{yPOc $o:v@N*+^[ ᗁwP!=lG@[rZcPos@qKP/&+Cۣh$Ԩzg@)y+p;#QR(Aqd򂻋?*|4U[ IZ˂l8c?A9BգiM5zd}Se@"-Z $_jJ/SGh~%~P 4<<BB[p_{'P5JT6D 93:!ˮ݃P_vE 9?>B4vʙYJx!N %WpY ?p#. #̳s!LGLp"1ϋr}1~%[شLQl}D# $J R: K8 [`GJԇ즃|C8Ipj_)IF`-```a#~藧w 5Fs/@-̦^%ĝ&{T0/OCL3G$٦ #[d$|zcMHKZ+$@kzd)EB0=lxEzd_.x^ ۻ# FRpg8sMI)9?Kǁ\VVHC }I^G-%ȱpn24[m@r4o"!Bk kMCN/$ȻK6KMG TۓRF>v /ȹ9\ɬ{R4Ԯm$?Nٯ8MsIA!76$fN&yhC YR~*jc@t^eؕ{}uR|7cl~ZeQl|GE)u*L漫_JJvfQ/%yFhk yu>tn!XM6+"GlѓIwK@?u>,7 1_xqX/䌦 !xAƖ֝&|/BPgbBiZpMU(+]8{`q{sDwm䩭!u%?a8 _B@ endstream endobj 38 0 obj <>stream @ązI3S"דi2[#QCD><>aZ_rG-W)\㈘ dr_-hHzwٹPAp8]TsDD~Ħ P]*v[x]$i_ h &*g08{FΤ!tO7>8O89M$?ImX?94ɍ WJxl:,$/WlCEӵĂ1 /ϦT0#vʅ́thF.2p͛h؅13jSXqoI} \؅}@/ aȃE]x_HINgDx*4D?rgC3fJE7R=<57-eWr$ĸ>b+:r~m.?{uL-eQԂطѿ'/]yR= Qr"=@Zq~I0_LL8? +{ջƛknӡ_upD Wᰓ!-2--~Ne\e_] H)|}nH5e]G(:*%8=l66PT>ėǖN7(+[,Lي ?P 2O7`  3[X1& :**vY؅WQ[!:iQ5aټKx;i se LJ6T}X~`X8zBr47%#*9M#!N dK;b\Xq.y!w5/;R>-$GkM3כ3]dK-.QòT@Xɣ'Þ/(իOri\TZ˸P"}?!m'~ϳT" ،b>_.vRRó  ښ%O =!XS;JP=Qk+nKwiW0J=`5!bUh>wbHA,=?;n*m3B4: ~ }e|WҨ] j?yo}㟅WbSSE+XQl )C[кL"yɇg)FNbzh~qd:$vн=c»˄|ij /jlyX!uxGE9\̩IlG% 1M.$`:ͱ!ʉ|n2ar/[y,}{&?%MN#G6Cta:[8J,L5K[u7sbA8|&Z֋L  ^Gc.TƝk@Aد j!|kvP Pb|7rBB͡5H;NSnL<5{:4d 3vf|0@#j]:8j+ƵbnOo?8:M5{*IסqJ>yT@pq|3)ob nL=Xh2>2SB \}wHAM# E0a]TKrSå- Ε:Y>V>gb{@sqQ ߤ!4JQ0]Dj.쳋 hAWz| T ˑ<%% +4?)m[5AOFCZ1`5tAX }ϫ[!gn}5!a-9:ji$G7)l_sSmbJ6,Χx8Hk"_ۓR_R4$lYjػ!k6QT wm}U#Gu LňєkG[=?$. ?=]Z1kBT`kX_!cb9<"Z֠ޢW&ɣLSχ"[_OQj.Oꨛ 7pd*FI ڌz&LI/^5ZiʙNA^ ͞)$Ϡ{t1L)AXo:]:XֆP^)D+0 GpwuGOGC5>9# jZ2L=F?0 {9S3V4BUVl9ݣ-b ;/EԷ#'98G>Q{`JHh:W!vz25ǥ%/oY^`15 {"4BKg*DueE LQ B}&TEՅ+siXnL4N΀й24ws'b5B;c!d`e$g *L 2йuTȻsA| qQXĚG>ƘuE-r:g1%GTҡUBJ!|4nt=^Mq6^9[QK=<ISQ0'{HE~ bRb©[YcbK u.5S{Z>jX;3xAԏB kͰ3sX,@/OE'揅=WP^޶[P_31?AV@Lۙ6^+]ԶğKB)Sd\^@O MEΆaa+:ȫ:VEG>+zIWҺ4د|CSVL -omE{bX_:/j؏fZV(+jZ"Hu{%QS5{tP4e@NFڿwP*RMo*4(MїwG1&r쩷uڒ6jmA}= >t vcp1H^eI|,p1Rq=A R+s5 k$b*=gAJ0U-(.o]cUDCЄӱ/)L>"Y|3'wr:A xIBh>|%{r_@A[xy~]CNc@kXº#jQc)~"LQg6Bn"nXSF=K2b[0a9ˊ|i#1pwRL  !Jc \L8CYq2I"4.*;LE-˨ݧ"EQݏ$f-:*ɏ-F#ŝΧMk>b([OE,PrڦCi_R^?X=\wPοh}`[ֹJh3;7 9qhȧ]JqHĸ3EUL,5(.$?`CưʣN72DZſWWoՆne ~u|bx޹ީjå [{^.7.W>R\NVel>PcwmnX yGu]J6 7^;I5~-h釮9[!xWVVtp॥tV["P3:L2S}$9`gu &[l-[x=a!j۱;p^{pߺsw~qTV [mܕlj KmcodlǍΟ`>p'^gt͆?sO/V UOMUg`ߪ {9{pN;m~3d+N=}P\ybof{?|ʍkx᩸ANߊed‰vٶk^E[!}lIw[4u+Z~5㮿SM'1?g2iR_Np)UfZ©J]R<^ǥay#ɮ`-RveKŒUUrNw}jm;rH(V?3XeX=7LH ;FߴXvO3y_B?_ [rEJjSV˳3n}q8[ᯡһ'_WKo:/v]h_h'c Vw[U:koؓ܅WtǺ&Ym5O+6*4Y7ތ{)>vʼR˄yM,w9ѪWSUSWw׭Xi/Ց})@ܘfL-^}5ߙæ^zHq/[]۩]uNyJuX wS?W/7ʓmgc|H>ǏBUm m^tz~遢/O۽+~x'uGM>w|Pw2yн<߫(l֒]ɍxյ63~YKl.~TvؠYVo+?N}sFDMmAh!Y{Gd(ڽ:y8W!Ezߞl僯M?ˊ^Eu/FrEf,٥9x>;_`1Ch ^6^ec"WUv볕广.VppOdMo^= Řlyy>[|T`~/M+7ߗ2hkGe^Y]xna}D~bˆEN*O~y,|LNOgۼ;a[͎m5wWSS?LSv_ј{C)$@ܪLYiȹHzSWpem}p/d5)gZϖ_(W>bëKIh;['G>N**i ˋ~T쨉etyO֒Vۼ;'%<1D]q>8\oVl]|v͹9ߜ߼dw.}Q^lqQ^mqW~Kogxˏ]o/c]x-qoW~DQ<[ŃUʚ(o7';]fW֙ZhRӝdoy}%xռ=xATfI<٤yZ\w<,ΓE^m{[yяS23+BGfxVۺ+n_zM> |Rku d ʬ Jso)ϵz-UД`Z_<,wY(NKܙxfa'3Ҿ,wwV}S-YxͿ||8M\~x.,^A52_-śM.ÛRJwhڻlۻqv/n}u,ߎGwjIv|7cߴȼ+k0,.<;!1Wfim``微‰tfWvO5-wldwZ=dV+ޭdN;֝-jlzXPH]fZY~𯆖E͋e~]ǝ+ m^%.O[K|w5oͩ[^k.*|8ȽD~*IcmI yCՇ38yՇ+5!yk=VFf9=۟%~HE57;]}->Rݣ uM ƴĺ"P]]N[J~Ww7:g'Yľw;sS|b|zkѲƤI?=\aTR'=8C2ԅfo ȼ^XafoW?vb|JPcf^b܂Yw#rR}][9Nl/.Kx_ڔQYU Eκ קs];w6E?I(>+^x.[]&F'>.ٔ7(e5]+-^M!9>!&\Mputmbk[E|?g;ώD>J.:~;T}~`aG S_s/2%f ']Y^M|փԏm?]"$)dcG]^/gm νv_}?+-DaGC"jitkI`ʀ[ݵXRb~Xe,X3h*fޢ̜?13`,2e˃ 8?hmտN]kg!{fq+>;F\vHuĜZo^gl޲x煦>ꁫDfh}f|w=f,njf0ߑ>~Z0VF)@k*\{24h43I^5cj}njό52?z3urf;jw ~4nd/Kqkpww"so ʸSq?½؆Ģ;ѹG蘆f܏ZOo۰ܦ6])d.ܰt?gm:8зbqq={Կ-4<ӵ0ɤD}1L_ӛCOÙ0f}fbsgtޗ,8f][z_YkrU1Bl{-~pnLcR~#/fUފ>W~?0coMxKCodܺQ0<;>:}gR+_;}|=Ei_Z:$nsf&Ogf̜¬O0rZG?m@?Ӌ0?r]_7F3U!A~Ҧ#ם̙'2?*.λιs/&+Vl[QY{oFfufs2y&T}nH֝ڀ o/_~Ց{৻rBr62ʉ2r qn=Yiѫ%i7?ZjJ]gAkV0fĠ̬[5эzHL|=ѹ@^Ȭ[7C2*DdU ">&ݠ<7Ӣ65%WJF{H_\d_=M~azAkJ,n0w/Wn>8gfEakuM3е&Z!ٶRcl寮<ٹ׮,Klcw;6xZd[!tK j y00ST@~Ӌ.]]w[jb "#5j}#_=ioZ8` ^>z=27s ?y/$ͰWsJOMIͮ'yW]PmHfqmdo]^u-Z}dJ{?ٳ1#PM?ڜN?_{sO3\//fDf5̔E6Z뚻ydla5.Yȇ[ʲːWG5e8vWC3fonI`]ayN Vz3rN|_j{;Ӈܡ>:{5Uヴ\ko:c-qf:Ywku]lj4φ=9;e5/+4 满mK6= ʹv'4g[aمw>v).W2tй:˘ z@8x3nb3_*Se_Z_>r%*;7  / )t+,Ь[Q꠺,<듳H|W4D:jXe4}uh6=gn_~ׇ/7ff@7=2NCOEbXf3DfP ̴ҭuVͿLpĄкSmՇ+.mjc._YJ| 0^[oۼ3ӧ=3.u'hdFhJ5^`kˀ>Х!?0Ç-f/da ;ed&,^k.G#I{Ӏ͎_*$=7* +{{/raBm .mo, .B޵k;`3'? O(K2úOa =o3bfօ0n 2_2Vx}=8j|։1n=Ww;Ap޽[!youӫ|(ήf__W чz_EH/$8\g<QC00#Ǧ2Xˌ`ƌ`Ɍh 6n#3z24Jc~ ]qkrp,[n:w+TMYvnMGoBAYodݾEQKS&_JbuO;^5sE#aZ#}0#fF1d&RxfA7rwݺyiSoߦOdYo_×d\s c8>LF2͠c5ѝؠ3:fL@fX_f07fhOff"2ٱLmzl0tmlzҳZMO*߹ɥn{v`7^?üo}kI}N Wfoؒs!ه$i3ɇ+3t;˙ACB|&gd>l8ؕ1F8N1ckl;3c)%Ϊfa߆jʠ`|tEƍ6lJy׵E^.٪kco R_\5LEI׆x \?Wol!%Ͳ18 7NYQd,fK83n3j)Hpi䁘71l)3zLc U̮zano ݿ2|gR6J}_pCmߜhRUsu O{v~wcK񃦎[r6};~Ǎ-Y㹙󱡱?3+[џA/I2N4fh?y9ɏϛ.~Q?2LD>a’]hk^ XX|za晾K1a?R6$?]Í)OvlF=ԮW~|yO?vQ [}fMc9>Ù3c1Ӽ|63!tZf1Ӿ32Ϛ(`6弚gY+w~֕>n۬8caCg 7Lz`{d`_4O !3&,8}$w.Ӱ]!( xOeOȰr]1_8C\A<̄tU234̜&..18.@aފ;km2CSo1ZliMeݶZ?s/Fw fr֚8q!iv}G\63IŌ81=irfw3}i 3e.LLL/3Zg,̹f?x5>46r?Z͏+տ[sש^M;hpӠT|nT 㷉ғWFh[[5?|Y+|>3nN3+qʘ|>8tadA4[bs5e4+՞^?T~t?"?* xed_|Ws_-CD,P>m~S`KGSthk2#bĆZeyZiaKm`f45sKf i0 _ "}5hW<5,re#U6U|ds MwKKla-!Tʐ̾G{ 8mp 5v`G}\W,Mڄr)gaSoãչ݃Ldیւ6MHEr~dfnp /VHKWC/?"_2p [Cn78-xr옣۹X!K'T;{~>|'>??k0_8~?HsVwZ^Oj߄JmV]ĺ?O=C^}{Nq ZeIb?LhRGcFOcfd3.qM]^r?F1,&I}ѰԻ`K/<ŧ_~up'ŷOJ_^5( V$2UI3Wo=+zR.=y<6GaòL; 5.^z/]x.]{fFоxp_{~~_)u}V',uv$fL2 FncpѐLVI./%/JoՋpjt⵷YOwE>Zm~՗>4*.;l<7^oG_GelW 3$~ _~z?Cn1Xeb矲zI@ 3z\Mzvi7!qmf ,nvyTGe5߾Tۣo/4ޟy _"Kӊ%h<)|V$zr1>2Zd]\R>C}+}o<߫汅-C]#;K7w?<;r /*\5n6SvrPIT$fI>+?0L r|$WYyp䟋# |Cow5 a$.8,6:|mxyKUa̢Ù%xLxpa+s5}-}2OGޟ-³w}!.:^k=Ļ4מp{k4M}g_Ht7>[e`>%yڳ~&{[8Evr 8aXjߖe Xĕ4=|8z{1a ɖQ9#+O,O§/co?J}/C`kOgkOtƒC]sq<5 /0W1)fe+E/<οU[?=3Nn~`3}O Z-2gƓA7Nvsq z0ίW;/Mg^魚CƖW9;N ~z:_WfVՐNYaO0K(`os[_ggmV.aPhT49;Wc,< \ƄhM" R Òs7 |3BS_?zZVv:r5_+=j9l.Wm=i%YM sznS5\vSyܰ2po |y1Šzg}dn h a ~9$'%x1 'bV0@0SЄETab~p\[zh+,&XYs/*8 E-CCY u |-[yt:w_~bݝ/JRzpZlPqph~/zeTۃ5F>@=O¾}ӄåƁRAp!o;rU]0U޸s|D*Ձ_?,WB8 ]{,_y> 6uVnj}"N{v2;oU^0(?2xn~j@+c_!80I@m*<׌ 4U7YN>}}7̛@) pŰ$S}zvGs|MW2qso0 Gu+9 ۆe]xingyt>?qώ'{n\)>Px$n[7ײЏ^ܱoczy*m(E >LcO.OkӍFlV;՚z[̘>@R7Ͱɸ/^ɸ/Z)(XqX\_gƓs>-]Z[99=R=ݩڣ\ln nTo\#cեsV5^i={5^!t:ٛŪcN RGб=2hO5Gƨ9v d+0.~Sj[WϥcW^cG0_a5&Bq"q3Wp3E(n!fn37 s6;[HUvoAЁ77J++utho7˭P#eH }?=\ŧk,.)OCCӱ^hfQ_dT199Aɦ\dZfƒYFZc+$YB+ KmzՌɶM JZ7A\E>NpBf9`롻k1Ta/I%Gu'&N|ř†H0IjA[TkS^pV6p ̒"o&@a>KU\gKf=3f)?_t|ztNO, ?II4U2#cM)Z5%å-.co/&4\}=ϗBGAHY |ù·ݯ\ptP{4< ,VuɋH+E\>Gu\5OW>/?5 (>B!#_8H<6|2}+B[?.ЂK);Hr)\ۭBC_)}zPWߪѧ?]6}@e[^RUӧT?/B l[7nϻfrGsc7_vv^̜ 3ic33g3+Wd|$7Hb|Sx*ex h zZOÍ9=\1Տvyt% n.J7V<4Pw+Vw;KEĒ>`5ϵ\ܾƷ[k(qV>W8:H>2B}o^ٺS]:_88Jo}#eX)V:|,fy+ohD :0QvS2讁C^3A zEC~x80R(ږ/)vfw>^H{?|!z+I ֝!|_(_~?]9"'7k/UvS V6gKFqUY| VFaMC0sT\aA!Y+1K.dV.&vb<ֆLZk'ZSLAI/f|VTsv*>3iGg[hc]t~mb :/ﻊU=0w̷Z?Hq:qduYv}r}.8u6s[ 2}.ԟ'j>Ҙ2?RFTjoǦ _zq7e\+l#tnt~3<{Y.7r#c68[#NEۇRN3I.^gX}(eIf7 s-R+YD3}.:Xx R5G4x{SڏIA\Q:=s %VRapՇxq{]u`۟-;k`{\^RsVYB"aYb' ֛|u=R-/aawo_wߨ? W.dIksCܝ+|^\o~ꂞ^܆'1 :c1\7+8RɮThs@_ x6CbzY?0\C_˧hCԨ e(Vr|i63Ixs 3 3)ERG-ܞoW凝Djd%Xt `3¾#vOT3˼ ҝ#HH(BR:*Ob#r-ӕM1KFΔU=qr)n˅YTSd^ڃ>:}>5gRcʣ c-x*h>Jҽ*zʁU=rOD_>MgI ER }ݔ̒) RDfr?uʰTS?E8eTDe++);- (薀/f; n>BvXLpT/U R+H(? PKrƏfAH#zb!gYS5U6`ri ,㉯Xo'7<0  1p'XaKġ^Ӗ12J92⼠ \}pxu$2E^!XleZSm8yt9>e5c…6Lb%1cBo$(DQ}CĂ|zu?ep<ՐVGͳƔQ%P)3|XH2H.j M,syX'Sʱ$G0b#rͅBtnK9EX=cIݾDqo W,ʼ4hvBO{>elȦKs0Gs叟מ'O5<8BH(eMFwRa>5?nğY8avuV\䐚dCRT35ṁ1685'o1Ow聬;L>Jمe;FϼE :jNqdCUfJYCNkbNļz -GƙI*} Pˌk*K//T2z`i6F$Ò(jں#fhNB { )U } ";r30CnvѶ`j>]9P[/6G%tSL +6" ZRz#؄a^*0#nu9*kwTتBH~Bؿh,Ϩ][LfJG@jIV:$F@oKXhO5 'R9N͐;o{jWjv7 υW>wC=~u>Y.巐MBnߏ`N۞-zF˅;$Idr+nuE&2p-2|y3nr)CL;aݡBzpR:vzh "PÀD"QﺃL}SJ5vk*r4DŽ[27H3A;tq:x{+]1)Mf}1xAQa`ySFtbiQ<ҎKtVț>R][(XTa͵_]: ڲ]96CB{*/aM-gJu+vlAڏnTq`Sa)Zrdx+-՝xDnVt0fXKH<%Fo&K;/tOu]_,&A*!8zPHs&[n̗۾Z)wuStQiv?隒a+֛6]hNFrbh&Q^B-41K7~R[`քjڐq \t%~uptRxj ^jZj c cA*3 8cBbN06*{$fMz!!'~rnpʮz5/4.FʻGuBW+} טacI,㶛2i|Ri`IeU4]=_):^.*Ǖ=ΔoBHOMW)*kԺABZe^&O9Ќ!vՔw m u'gjh5[/׶>4_^gY6yԞ~Ajkw9<׮!0DJSe0WW6R0 T}6G`kS-r.ڝ=w4tZ-tONWp*462-6^^gtRsvD}|@yS ͞\ǵŔōrRCsvM-Fr+RERg$ހM+X^x>~:< uK4%Gk& WO5mc;y[hOMEJFA|+h5,4uKr͡km%k?m'f~<]}ہ` #-7R]`/ *N6\$5ձ㓸=]ugoF?;ws;wtabN+М}:qm#;+{xyHbޜ.VJ4C\YɵwagyM-'ב8*T;^*0|v@;kU:<ڲgŠqlu1V8Lٰ s2m)Sy]X|nh@dT7tf@cj'URҽck$BSEs,nM\ /!7.H'^ߕJWiQ6g^'=RW"T;l3< Y.jgiM;;C hԫUNMj )6X-FQhWC9uHMjz+uQh}<ʝq绾ԝ|~bvCXwx]7CQ|z]W;9UziUi`$/G\u>T`̱ 9'+.4Qjm({U9t^ #R5n278},jgkvV H~Tl]m\~ʭT$X2a,gHf`-zbavT1&ZяYm }&0)zy -Nau=+ $Lv=rdHΔPf%PE3 gp7f-Qul-v61ϪW;QRR=>}7!i3-,+C;+2>HM$Q굖T+eP]K]fGuyqĔZQ0'_{_f5[L$Y9@k|pMНwiy_y;h3{B MmQlt9$9} v Œ| rísa#rBJaR5e{FmvG]F}^㓅'+KE5{-s{xS,5bigb"PzH|2F|EfEZb,4i}ԅMô?l {wA 4~(>mV-|E4MTe'`,n)}@fR]7XYj ojcuz -tM4F 7RBդm=˹+vQvVIv!q/ ts]0kJzf97 %>pb݇jogl׃G-5mه\c兺&k g[ud{O;8Ў6}=X?Yg|z)?@ dF!G5R2B@&D|XerI9&H &ܚAj"T[yhS;xq桝R1XAbhgY>ﺴ{mzI,Rh4IbD&Ohw,Ww"49tv^&̦A'hT<>r*>1Bm7PI#Lr[7W 6Yd5 #u/XJ;.T;ϵ|BQfhga.j=`uSmuv*vVY}N$y_|oo '.ϦV'uM^ڄ#K'45H^9;VK&ȊŤ&oP~'s]OC 6r/naT<#9JQÌ:#"~b \ > hsy c2?n]o"|i^I RE|.ezVngT; , 2JSC5jS+P#|wm^.qvÁecSK5s "=p-z{7Ѧ;P 縵T^Ip ˑGX$ZHc68`g9yL*H 1Wڢndi){K).D3Rb=ȥt#i$qb͓m؟^nga]Ps MgfB@e+lqD hA[{bԪfp]S΅ K? ľhþc`\oh!7)o"@;(NϠ m<;n>W޸_}G."QTl(yMe?ǘ/%4~<~c>t 7|cX]s>?jgA+Y5>+;9vVivybt|]a#5߇f aa۹r=9ryh5_=Ntvk{.>_uD~ǃoIk)гOOeo*DśM=y]zd>w"55֟*\_&oyBtS)4k>䵶AfY2;H>wBIdr!I=$:Kl[10º1hAs0sg+h.|rQ#47ccBיJzE+/ ,"kaTؒϠ kmĈL#T nk"1F+QKf5si:eR T]V@Ly@6ѐSEN"6n69ObkHOŚ#mqg`ʪdFMQ07at=ߴĦ shݶy\zqBlT9Kr|1e4kqQYemm$aNm?O5ֵ{{߷c$ւС7A?>MlBllt,tͪgރjU'\6N9*֑Zr<+?"=wmtdVQ?=ukNM ?i~ rw/:$@}U8u j*5sEAjjcTzmtDb?qV1f`JQ}㼄mu ROQs:#I>KS }+_Dg[?h>Rb-J3fÇ3ĺ`-1Z)tɦQ=tMő T&ՎQY6z sqϊjb vQyz8Pw9abonIQx]`t=X;=]J)cr-İ3MF@ yyo/=XC'g-v|L[o4-hZ{dh ~Swyʹ1̊ƤCKi<%0]i'D;|q \謣Wk⍡_A5UH\>{X&P 7i ^;4Q$9[ PI?ޛ4A݋"Ͱ'k)C֘U[@S{cBj_jy ch߫gtMIXC=H䌚[Eb4r$|7]EMXT#O[y|8{"KMt,8}b/ƏAAk pۆΦ B zyG!l/Ljρ{T"h5CJ94 wijH.]%ڍǦOܴ{T+ڎ=Z#U(U;t;.e[?[o8$CXqpz;eho2Oi$Wv³XЭBM81w3$ߪz8齲ͧfm7I/>oVqH,+ĵ|k=ʻM&rmqWsۮE/g}L1>BS{ՇȫI _k:Zhi|TM|)IRsY 4IVJ[MF\I|TGj&ZoA_Zb< ]\wI*-mCc\3MIH,Mg!_AҖw9ck2 B <ꦧ{с1J|4TO ZftnFSmOpyŚ C1ǥM{O:WЊ:;c rJyl@sga -ϗ7 IĠ a`>L:H)D +PpExT1~FŮ2RGÑ7gUfJmYě@>(Pl{J Sɀ~ԭ2VE1 M2Z-f~`&@ƀO5e#KB2Mg{>䧊 !9ARe.v hEG+%[ۙvRtc1:1uͣeNH>,ThNr-AݕDG&|KJ ?5-4I4 IRI|t+G1'R秭DHʷTls5y 7T!" ݄"SAVqÅƙH)I3S(=-)6#f$?b6o`mIQB if*s;NU}뙲n:jJ Z ibz{)A.K0UJ*mCpJ)@  Cvӝ4cMx)dD.mAQFJURˀFWGI&J,Q&ބ%ÇkJ J 1\L%ijRE(Wzf9-0 (<7@fVx)tf uԍ2kVL4:C>ć<T#P=@#R $S!*\J_hI\Pɭ,9_5;۝@1e:HIVY).Â0 #wDm#/.ԟ+HvL tP*II+g7 'R2t@+45kmABט< c"'Q"dlR`NJ}SKl5QTe8ur\j9\ >`*F&$^1CS4uǧ2 |K9:@"BjD;JaڢQxr%` z)BrZGƂ:N%1(P%b"3Ȝ7RrzU|?Zň>+A( !ڈ9[YJoZu)& )}-jtvU4 #16fuM2Qk N4լ^k4PRcϳfY U]7H GC9:\K tɓ񱤪d('AZmCJKoH)o t9 ],r]A "uO֭;0IK) _dM} '.H%c%fE9lFQ:]]%%ǠvU F.^Z9@Rd?D,ynӕ\Ӗ Uog_3 +-1ڽ@4H.ZFˌv:WtѠ!MC rw\%URk~/|W^ON3` Sfrv`|U MHlћg +ć(cJofCWzSLa,D 1 A!fBwhJ,!߹K,֤ڃ4h:;|Vz16XbK.$dJ@% /f[I)ʨ:݈]Xmɱ>xҎAA'ۗ26>}K6w޼mk,AVu ߤ:8HQe dF;<@n!Ǭ郮Tm5YA2P 6l<u%ĖB2(w=d7 焹TM۶tbs Ng(%p#pt+CljXPuiO>k0r[i;kmiL<sEH >1]zԧ_ bDo% A8jQou1ą RX9J/rc/Z&fA>:zbI֔yQ=]L3!)iݱ )-,<\*_+*Tӱ&A Ǧ'g+^ݣyBy2id\H"QmdX*1d G4_ qM-A<]dS2ް%h'5:fqM EV<(WJu\K |%WbIX ̀?:]h2!%2^4#gVۡ#7 "6V%6D}%}dI5PRqmJH)\я粞1 .f.*XQ҆SSy,.1]PT[YJOA͋pmK݂-Y*a_X!O9H2RXВVxcXm!сZuj2D(G3H~L^<8Np hb!P 6*H CU@M0(.&W@CO4FNJ<GAʎ&u=+ޠB+9g8=swLd|o:;w'eN!ȫAyCnEj5$n}"O% #oEK8gI|I|9eN0vq!CP fbs,i.Bb)Q$2aC[``N?)n@Dso09;#[q433JQ "?Aj8Ԍ"w<UUO}hPԲ\p2h9~*;P@bCjX2"yj3֕,U#%!/wQhR6 ?tƙ,d [hOBlUJYߏIG~(ƚrQIlD)kq1Y݂`"uy//kBBfDI0QƨPOằI&7RZ,ӥQ5 `I[JyZqPCZ/ ~`n%bz[\ &%)AmsMWfKiuv\Dp@ 7i=\Ѐ5RKo>IyLKڜ*{3PKs &99H N2Hn P֦A HA*3R_KbIhn'>=VtjL)e(\q7AJ.I_S3kOlv -8|J %Wr<9AZh^H)$%hq\sP#QiRL@6P$B*l"2W>qa '(MZma֛ ]/@*R2u)V.'f)҆s- 2`~loN s*pWgEAI'P$vu'HIU2[@$Ǻ^.st9>$5ZN|k &ApC\-K1rʺM֔ӵ:PK;hYj{"9aO0k*tH)yEul:F"^Eeq.a㚨@YJE!ck2۹N+a}N?XJQ]۠>p8y CK vsN؎|~&ٞR3}sVC|d.ƈm. "-`r=kJL(xS&ꞋrLb+<43[ 1">b5rBIk ^ -cҖp1BnG..ܰ6ES ~Ӯ'~ #z4_jhc ÁӉ.N%iCnJ!׽ :*t_W.+uD%u:X ޸E7җaͶxOMb x] ^䕵l"Q{ky2}rױ%qQNɰ%PzOki̽33Os\t`Jg/gC4'g |S8)\MloEO6c%q 1^]B'v.^DAoւ""(:s s%R*@TL>׷1g|'q}uzP7tث:qЙ˯yub쐴Xb6릘"[.얶E"[+Fg җ+鵆Mک-yS8!1'%出bmM|0G\w$T ' ~Nqg1t>_np_" y`CD*VP.:)9q)ա#Ѡvm!S TȸfeI 0&}lOڏ#d95A:c\G ܟjnėS5Yqw8IkCjUQls*tW`WAY1sXNT!B/(BK3s\(=<&`;atl2a7ׁ ,na8%XEg\IZ<*Vn}]9\5tEx#ȏJa'A\:~m4t%L-G@naH&~7?\8. `kxqj7NwxMt n*S  :b?P`0lnd 0؏h=3*5N^CǸYx>^=d]3Z{τf?84F \5g9[ ?`ep]{ϹrQ[*z8e7^!Eĭ)眀cҟjA &K 衎J]cXBs"y:-X2V ]j%xQCcC1xrf`xc Y ( Zp97P%7h UimαAN)'O9? _Q )j1Quw)AIP8 A8#/p .KȊ=b9̨Dr*USشp. 16 A(mܕOSue.6sXNG/=7G.yCf O źדs0|y4u ץD.~V0`@z;sWN-AW)p ܚ8 s W5!585ndM>?/8-)}w]ʭ3J*ߥBwRo7qKnȔOK W١@NVPT@ :*\sf \<*3!=Cy09> ܏<9"(jiR.]T WLP셸>ⅠXǩo@,x9(voN\-j{}xOm5lPiC'pap (">ͩAPHODke5#Hq(N5jpjCjU8ĥ1yR|\û~(̈́d0bwV8U :ҭC& B\Zt{&z.֡Jk煮> _Jy\]e ?;A Mb~u̍IVO,KoclSAwdX|19MuRUDښF;je4 !% AyHO< 5_FF2K%t`6 m\{:Z{ؚHUeڵ95fAXqqSK.ޘ5O$Ԟ`) +Z(GX"+~3.PsᒼlWAӰ2xEOj[bf, 4gk#K|Q\&4G l^ݗ!vՃ@'SUC/5S'J~M"Qr5UdKOz_-4@RCA-;P Cj.R#@Hs6+%178\r$RTA iąCɠNZͩAXzOxWJyIrj.CjЧJu_z xENy T0~Tej9~ߤ 9PE;2POENu1SC]ù:bkG5)M`p9!PՁ\*pt?I|4}i!~F*7g=m]k_'s>f>tQZ``yeͩ;Gc@ 󻿎 { |5}`uO]NG+Kb*5ı*Q)e4WE:UP:LnAE3UPwCB%P#ʁ̵`n{\/ p3:Y񼽂SotIM @- e2Cpș/%Nja'BtDaqjρC<9aM^UbdPEC5ScB-W:P yWF@ {*HrPncugu(FC5\r!Ᲊ o:ϗx^ 47fTʧveFx1.U b&}a]|T+0y^EI,vJc":z"jUywe2j"ϜRSVN5_st >㑹 M@=͉G&=%p\MԁC"ID}"+P\v#} @6 ~QSS.Eυ'#V߇9N^ն̓-p"Τ]@]8Cȷh+M<7q'9vzC$>ٛĞY`n!g zN5☐x!B9u1)\.bXa\>fX~O6rJO#1cXHP!~>ퟻ +{0` js99ȗ] NPlz!r 5H^/SA5ضº:Qc%/ofP< e)aI<1AJff]\50]p]*\\{\W2(( QA7s9x^I˸ 1c~/GθM3}nxT95|%N/(k#e2iax3 ;8L `S;ɍE?6嗿 USb@vk1 {uޔȘg)<*[!-v5L \ o7廨9U?=wޒعLVJs5t-Րu,*m8Iѹx#9O/pJQ< }y,wVb]B!T@jdar#9(2w^YPfI\ B΢3[۟}ԅY? ȷߍO~YH|LPgw $/H֝kLmWB6#(:[RzU`+vgbZD$O&6RM ^K$O^Ԟ2~Xm&KKԥuZt|l{vü~/ұ*f#:Rۦ!|Sbl nSS!w)5'?wy~#&aZDuGD9m$6A&w0w6sH< 軟#&v -bf4INJ:]C_HRŗ 9FXƨN QrkE6 djH \A&4cmRQH/<@Ӧv{x~ہn|Iʼ9*<(ǘFe''-a'b̂Y _(&aMDKk&o?\6y4RFj֧zޘܭ 8I*2  o0mj. IȅX^?6e$VRz%6Ӻ nPbn>\A)q o}_MԮ#NM%t ҿ wT6,` ~{BUI&Q ՂL}wy|ndGSQkY|-'ZZW銟z(J8E*{Pcb]v\ ӧE$eDWuaL.N,(s #wBbƢl e)BVˀoR MA _d"Ω=.i8%]xUH藉 Ήr/{e>F݌k;N~>LKŽg_&}7*"?e]gm7ʲkTfJ&ɟ~uP̓v$ɔy魺Dj('{ZqַE уeD=h$ME/LɻtO̽6jOH2OF~;|>˔u\/ҕ:D> }Bѣfto$lr3/ 6ٳ֜lrﰢ&3>kS؇Z^9MΖc\ UuWeuHW̟\FjоO $B(A^%A]AmYZ a긬Ҹ`qInuI&8݈*)(瘤~m $R #k 1$Q_%%%ޢ=_E@3͉nޑeÏv %~s58¤8X-moj;y~7hμ<,LHP45/=k9.zsz/\RQqM\[ kiUtcf̩1G;G{.vTKk,}&Lq9}Сޜm6'F^\z1.Dkz@="$\&O]HTn 0):`w ^-4D5ig֖lZyeءa&kaSǬb!:ƈvwI:ކj{1)X˓"wkfR|Hӻ&uM-b3L{ɶp£]C=J<` ~b< \g$Z]0&KB؇$;mu{++X۽piPPa?41]i˩Z&/j.Jw#R8@UNZ<;^Eme[(jiptW^3U\0m`.ZR#ʝ£+#jnF;\l1z.Z #%uIȅ}?>]'j~~@Sd W+ޭG-RnƩuBi\] D)yzʸIZZa'zc*Lu0h[\x1HHkK~|}U[x4rcLkwKwL\c[wUvѴCca NaU5w+xCn{z{xU ZvIB_ J_6i8+-"ypyL1wğ=%Ʃ挨)qgoŞj'M*yq{P?%vm3LKC9tK54]~c&C:㣞qLI;cm"?98RSbucp[gMoO[PjCZZ +UV%5~~Jˀk٥A!>gÍj<ͺuW3iMWg}upika(q7ALv᭯^Rc\{&憙I j uu9ے'/c:udF97yG{FD:߭ +&7eׂs#^مfGoj7ɪNIJj- k7uQ\P[UCu8cFQl|ܣ" ’ ]BmB{90hc?> ;û'ldά0JT^vѹ? 7Awm\ *lHh ;ҝNh3) 㳽Is_۪ʛQ%!.!*CDž;ޜ,)5~,i~l6zrw]ѫ_5oJK8Ӝ}cf!z^>$z~{߫|t5{lΞ0j(±>q]u[V 6 ,clc5m2*]LvڞYju/W~'kJtYn+giA{'{^r%~oa%z!M+ $EV&U[Vć߈I-sjHvWzvkq]|Cr}UPUeD|Ч,#~!/43 YPs--:a+nĶ<м;;T[z戈z:hf5553(d t 󏘥1OUw8-FgxbS0{w JN5%w \+؏a;쎵gFT<,p~SlU#_Nvؾ@/>cURi7t s ^`/`^tyupVuo[GGC`Au_*64?`rQn@vA[wCJ;Jhֽh ڨCʄ0kϧmFA~m+ Jzs#;|Ј\|`<;iLwUmˌ(ʿ=:[DRSh a?a)7 ! o/-Z?hd~6gyƫF hb5 Ľ]AgqS{׫#޻$.pv1$55Y]b"l_˷/ L(s plnvfK'\M+iZ\]v5S9u1+e d4F4%?!?_G=H}^Q̷wїzwώWZ6cz?>L5k|éFỒFs3_p|C &< h԰)D4Rn"i5e-Z:V5? kmaI_׉.!yC?8`ShRaߵ7E!'BDx15z5FV}l=u ݼ-{x 4;~ƍ_= ܍oދkD*3ﲫ أLGǬUбЫ5ob,$aDPǬ.oy[,!.&H=s1cO ~Ŭ.s4ܟO;g6s2xZqsjˬ/F}%EC\?؇9q {=ر?ܷ=̧Fhj]wKbK]BKoY%uUͭ6WB&qkp w皓㞿`Lcӑs47Iĩ[ѢBJ "75?pFk9a9"9F9ŗǾwww - ˩'JC]tJY5+61d {9{ca hҰxa4hڈehh4eZ4kZv}7B5ar0ɧR/MƄ25Sm/ nntsNPaďwH,AV اU1)^fM܂L߅fOہflG3nC'lDGm@SǭGSf2ؕy}SU)v ƾ995cB2JJR]YIo_v8Ka"2\4 "x~?b[MMM͚w-Z= &J=E+k&~g#r#" K">G8D<vzhkZzz,Mc9>Gsvd̟O0b1ih̭h}h2u4!Df/5D sьEh Gm[&g7H> |ᖂ!16 /r 83 ǃ<_0+. -)( c yWnɖ]طNvr4gs=8C# Yhؕh h}h:)Z4Z_'b4w1f-'Ь<4CA͙ŽNPj^?[3Kd;p1l9@K525PWB ԭJ~h,ӽusv=**P͘Wqu\rsB3G\j<zs]l /a-{ Ǿl"K/+r6r3Y㖠iaۈɫ/ALzshIt=Zjxu嶻Վw]`|JLu[]+:㱕( Xe::&&9gub a/[2t)ͯa®[l vj'ot/ ʻmg[ kRw->bI-,ok>ُx,}_Ex*hB5l+Y~ڎm&gx͛͝WPAZZ цrFoo`O9͚],Oڸ퉛@\פ|B?^:F1qiou2`OiTnNSאoáCc9zi椵h.6hv3l-^ru͛cJZB6rh7ZOEG_o);GUV7dy HSuia:jLHx{#"͈MM{Bjʬ*,\BXr޹ql#L|dُq} rQM">qH-Q{f.T~ɮ<]'owN5eCWQ>E5]uU5̞7̞}-t3{{1*prπ;`TZr-&d>.df_< lgmӗd0j.7e=ZF32n=+kczMH0^Rƕ}e@82DӐiY_PT}QQ¤20?aʼb*ʞU䵜z'BHE%?]{6u"7|h Z$Za]ZKhchVXV@kDHQ; Ob*VM5eM?|.B姵n hV'kv~)k+a)~k*l840 3z*EXYqŹ/ϥ'L-vpbEc]k3A$ɨ'4.Ō[j7x(lG 0νz;bG]^{;ޯ!adKݢͪ (p v q^{oOحZe5w\|a~U10>!ePGpF*&u<)"%Tﺢc2&|o:MA{͆h%kS,&DKVX=>m헃?Sg >u-e 2+f Y3kmɞ䕱kV0mK|^BVA'ւƞC=K]Ez:K619J#qi}y);xN{lhӦ7^2o^)KoM$yhhEGoCV h{÷(U~iajV:0V᱂[Vn*>Nl0ϗhtZ謇mխ);T4MF{čϵ%X4E%? 8*XN?eUxoY͆/>ElG}FiW§  !;)I󩨆wWd5W񃻅gn3w>dh쭜\#dyfmA+ 09ٵj>_Ykmo9Ac[\ھ+IӒFgii== !bg"];-ԿJ>aԇ 0!Ze/cvZ%W3&"MaQ kn+QYwFx1lemd7E + +uRcod_H]j~nse>؂P+zVoBd/} ό%Խ |mF~N?bi@6!HhM#24V Y Ç;]I6U#ݥJ4Y}zVOk5*b^BQHFhk۷#"]I=4AGE/{A$%%ݓq@Km=3NiD\^-EM9b[()?yS"`o*xy!ieA>| ;);KS^V|b-" SϦռ5Ibx6'*+Y3ZH]EITFwF³cmC2IEx~@L:! pN6[$:'(B ar292͉T'k5?&4&'}YvD(fdRu=t:|?^Mض{Zt 뻞Q~%TAϛ}voR=3ZUDʀ*C$Hh#E'3W6 Y|>YNӖ] NӕXrz /N_🨪lf`޴aR۵><0BzB9wc$+NM[ElÙa&ZO]a&y"#ޭZ$oVת8$EJ|VHn瓖~Kw ߈Q7u?e|'𼿘rwZ q0/?f(Fp6{rDXۃpTpj.a:<)S]tT ͆~F\?&Rx_vQQFU"Y ΋ئP~ȫ>SHT;nodԫ.)ׄm?Bd j/;'NgL[dm鋺eťTN0RMVa)Z3a!:iшjH#sÉWG dWGܧc#.zNڏ㛚ˁ2VrTN3pѩ+cWVA4""SIu.MkH]"SԤ?pa|n "+ 2h3zHAJ^Q{L2z"n7[NσԍEDX6^UsK0ZϺ(w'rP!?0<7I}HsQ< SZX@9'o=[n +vc.)`<: >YkزT|~N.}#LVm2u 0i0:~F . 5ԫ~ yp/?:~p$1´U"ep?$,'-Oex燲JTMSeFnb}{ftgha߆t (CZ:쌼"p*g"I39mqXӏ {$4 Ug7qa噾d W!K-a#@O,ѝZ8N*jPzxD'u"& ##w39&=S?l^MfлtaBv]; ٌ0fxpDk#wnڎ6,Xvoۏ4 ЈWJc?h~| (aΆE䑼Αb? Vc cvwuOuU/O_ʝɳᛠM\_AϬUDd["RAJ>"ǀ6$7.~|yyuTob98>tD>u=&#$:mY+Z%X_yI9)kw$ro0a'w:a\N8[4(A*˩8#zWw1o>]gmU¨Sʌ `Cd;!Nl,kc[vDdr aJ 3 -Б򵥗2{{?[kQ9-#uk{~O/_վU{>vvӺC߷ߋc5ud&F}m[O1?6@1:'cTKެ Yp#럾4{SC <;3}/]>11F`ŎO~dhRL{\_ZKro+N ?ld^9'cy1Foъ4 oΔ{qm|_Kҳk{/{?k}}M)`lwS<7 ` WZgqs}\8svf·KM_`|15m~%ORm(n|{OܽlpcLy̫P-/:"}ø0Plxo^k56?[ca΂` ʻ7\:`_WW>~~x#+8߿%\D֝{Ced0ż!45>Էc"o{Пn8u.\E2xs3aВga TyX5_܇6ƌƵ!+Cy0S9=A`'^9cfa?YsFx3_g6vݽl0Ph W"b תS76#O1ߛZzRէ{2۷x 3o]QwGߺdBg/8(صt́ ݛ*}K&̞J\\0k 9cɄ(~ WQ,~5͇&Eq=JƵ'~RNyvd;?e"|s(u>]w~a럆\>chz&A;o75mwm8땊9``L'w?77,̞8fkE$=ն' 1V-w-9v~`8]aL%|ӂ޼ cNВKC]/իP΢][u"siO|0?5xgx]'>q%̶p*FkjwuJ[U4-k>aخ5. :d4I0&7Ɵ?К t,{xb׮EqO|(6y/mߺb<7W-?;Y='[섺 ;1\cNJfi@Hy@2}i3Hq1)_%ƄE* -Yv(si1.>fe:{ūzmWa\.YJO8u]?S#^j Wz{e9?UB~qK݀&bN=W/,9x\}3çPEpw=hx{Ib9ayj+k JYq9kN,qnW.vƉXGxscn}`> D0>WGA?Xě2ѴW(_Q39ǂ sc\@ cm{OΞTqm`1qœ 1X/p<gN|pck"~w*u=;ヅ-+Iz%7b;.wh~0a`jO2;س̦)g>rz;:ۃG:d?TS,/_Jn<-xi~0W:31#ca53\KDyn:$3xyWtYSbQ_A oy_ ?v^ir Evӂ~;# Gs}`?LuߡQ7ǵy033\{^~Icd/pߪCO~ y{1Ů;ڦ}6/u1Zp =Xo_ք͘ h)sꖦC߄qBqM/yW|ys  _qܳ֞ 8q)lձß44ݿT1gkx[U.(զoMȑ?79I~UD[_12w?pںw yËapE}#9cCnQc̭ ,5އΉvo9;rׅ=m?b+&BF{;sY@/{O w~F1w; @a n)o󪽗5/M`Sboqr>Lc,9շW̯ h~4_}y?NѦ[0 #gn/^;#c7?x5z|k[.v/{ڗ^uYDz#o]8Dc^>س\9߹ߦpb y@.wMvO$ȹ}5|=GP#bϢO~Olٜǘ?{C"ܻbM?c}MMЖ}.iG_z|05tⱘsB0?ƿ_'sf^1{&0w35w;3؞rfݽ̕ Twڳ"@bUMdvg/tϷ7=sg-4_1lS8uBShxݜ^fsrb.\zRbڮ=b*?xK7y1̂}+۸{㙔nYwv>sD "Qݖ=) t<—(w;!̝]}O]1cWsgRNo=xތ@m|ղpkZys)?1Zn<˟Dτ1)?)79Zқ|u-+_{Ο*aŽȵ*§#^Vp%L]O$Xܔh(,|8ߨ˜F{;9U[^N9>,^s掊WzЋᥘ;kAEC=3Yz2}7r(ֹ4=w;+OYpˢ(,X51gN]+v_D9Wly,>~)o^ 5t?>ókcV#}@6kZ~t{Ot3|; /x}/L{$MN599(1o|q;5a_*W 깑/Bm 91Ztr"aYb_ؚ/m^]׆s b%E=[myc㚂f+pebg6|i96'N&zO/?y4ԫw^[?C姢|S?1ŧr.1\{=9Uч^rm}yOf b, B,jIq 0\sZ,tX^-wKoMH@f4rg&rp-ȝ6yHϑ['b2̝6rgrg-{ԉ(_,y%'m{p^<'S-߲>[G;>aߕsrO?muѕǸϘr>56+r1,xTd'w}_>5Z̉+z yG*#|ъp8q={/V93Bʢ.Io!^1.XQ7"`W`t))ʝMMƵI} fos|;k>J[c`"Ƒ?Q9>ߛ{:/d-L_9#m'] ?1wCWcD̡Fk왏o?M5l `_D=9Pܔ=W\r$lcAf/i^;v^ز-'7uӂ?F_cCc'L(w i;k.̝u\/Xݔ)wV3OYYYi#w֒-!-c΋<{)`.楛`~s+P};"PλNa^*(sj^9~2ڹtO=s~GW>}aC/ܦ}_L;;N@C[SD+`'=-X8>r϶7l00﴿ {0[a =wVS9MoK0ɘ˗J'[&ҷr?TGrgaTߩ>3w2=wV (w֫ 즳}Mqw̷{+ 7uKv&{|Pu=WEmG68Joji_|ĹBw4.jMg}ۼ 0 #o\;<{=y~8L dR(ǚWd$5ʳk`jK_|]/.y?q[R;-wm(ت7P E=u{~C=r`%?~'  X``7C=$LTq_sc^TM-d5g~u+g܆u͍M$ )}Gz6{8&T?0wVK6=խ;+ȫSGxËWWcYiS(w >7^̝u;+wЮ((#hd~] |s>|{Bd;i \O|O ?Bymq%>~L:73?),c>;b[6/`{ï^kW> ^Dkp(Xdkl ݿ9POoW,91_vL̃[wZ-(=G]  `7m+0c>\ )_oPfC#;@n>Ah~OpO]p9+Ïui]͏&ubSc(G͚._ Ϡ[dݷwXǛ|Ծ&CvҢ\`<v{/M9+ڧ;?;u/||GЯk>#/s)%$u w>%kfi叝[p ԔC̻Ao %75n5./?c+q]ɓ}q}U ('')b)GŵPGjB|Fжo]k(CU>(ztR~ŜT\ypmϒEH=+ykH޹.Iy>߄[<:|MCߪB&ǵnev9Hrũ ѥ;~=W4E>锳(Lh/o ?˛cx-4ǜκ)_< 1VP3wq:֟N2WC>To9EО'ޝ\C=HugRN,Ѩ#aߚ76D7Abޚ{\uZXBȿ}"Qet\<sQ ̵VBy1gs9rųi됽*-@"7d:CK`^%Y8EuO|')ג 5W'7^]>MM{~1G{:@v リq=}W>q# {~FSd}{N@[V΁9B+97#Fjb=~1=6ÛÏ/>}ޓw/Y9dlkzXbc [ B W/.{|Iy{K>G ~#AM$9^<s:S>aW\rvP݊-Nu8 啫&bBE:U=\ft Wyw휈~/r'ʱ=7#>ǹ_6ر$<$r` G=t&wq?~܏q?~܏q?~܏q?~܏q?~qL4mF< V9zl"S9rRLvF5Lw3}iXW333.ޗȴ0-bt9,)Q x3Yk?{3ɎdZ㩄tWY%K2eEQȊx9c=X^^D[q ,ЋF(YT쪼RL ++,jg]&Z槻2ɮlJ+I\*w/=+BN5/^ {:S]St+\؛M "a2'Z%SmDyZl_7 da&MLw%[vu>$՞]Hv,x'= }1aZl.r CT=:ս(:+O >3⠤ޕh֤{ڠo5eN!jf{WN9DJ>p&DWk)*agr O&ӛrG/̶-zd*ᜭq9uvַfK^e¶0ޓI s9ɫ {@6IhrNe0Fx|Lkbv&޽(Xr=0'Rs69 eWhDsyB=%[өtfEkvӗrr?=t'Z{!ck0zz3քtr*Πc`t{SeD+8P dm'VrT\S$-wazERV4[̰ }\Tt+[W̒YL[ӎ QaH@vJm O[d!L+?P4/uXWY< |t żs@9m-.md; ($:Y.Bǎ.~mh;J9/H &O%*V{Cr:GĎAǣt:UI$;)Y*1%p|bW^g3ds*5y(nPI 2}R.OmTܹB9ZҙET1,e r7IJ6:Vc,t<sΐK9ז˄ =/jcjt62:GcR.\1@="E>%VxvQ+%Rb +87 daQG3=ݩxk3ѕ.?oT\RRǤ\,1\9N!+(:\ҙyG)-g]3 cR.L) R*(?d*UWj4 ۶I/hOA!iAf~>!yFaѳ1%[[{;{﵃g2˝y&% CP%%E YtD{&ãpt+w|5jv~Vt7i6rzОLQږ(Y&dg8Q)wLYG·\*u)>VfZnjL 6Svn3cߌSqC||98VGquqgFX3g-Ǚ"RcqugʈǙ"]3 q8;ΔQCy4eOHw07Gā2,H ,)|L%Hnx I_gxoeffU\V-r7\n.wsXnm\6s oНDEL"<N"wND!k)h)z}rRGt\u:[r⃙DgzpnLhŤqHn@7iX4Fň4=)deb0\ɮD{kvغ"s;c<=~͓E)Uja1KL+YˁwclqBtA&GM!H7j ,?0TNamJTAvmࣥ{tr pv@9m-.md; hdEs.JgcH=8~ÿ\\R\gr\w>`ܽ7f9JJyTl9u%8w n83w: QޑI$=';ӗ$өDvz&6=w .ЍtD"+Vb1Lq X|y7;HH;7՟I22Peߙ[k7MOwt<d/mc{m9t:\ VkpGX(^i,.渋9b.渋9b3 ҍКSڶljpWܕcOwij9 { 51&/نxrc <[3a9Ra9Ra9qr"t$MH1jHv+BKau#["Eh8-ܨVCa,E-)Ҫ|ؓ{ؿ,L0D!h+9˄rmaw[VҀ8NL'ZCncX(׈+q#INtQ&_ô4V/Cdn2]Ŋ ѹ8c18Wj+史$wdw&2V?.v?JGY-aKeݞfZe14p.ێ?ߧr1Ҿl2:zƧ"cn]JzǚZI$Mt:7jT{B7\pEn"j[3Ñ3Sc5u)vG70őդ)eX[v#p:]==Њl,2ew<}%V|bi9cze*m嵁P\ءV˙[.wmc`Z̬=vS4ma*޺xG+Jw[پiE,:dRG⢆o\n,R=Ov,M⸄&p,2[.Wlgyc0*rhʅ9g_i(8Kq\7[0{qm2ڈӭ7oMZŨ9JHiTl9uiqhnD֒6Jন5[[]Ԍ/Ovj>?j֌$1bSq~cIYBrQ\m ǒ ˺]"Š3}-Z/Xvړ<ʓ<'|T._iD#Mmcs/6ēk)yX5[<_ |$qN[Gxy; 3DN\Zƕ#=duKP瀔uNZc|ݤ_gͨ|bF@Y)?k`ve;ДpߋggC՞ʏF+)t9-Jg98Ơ5!EJ~FT?OVhUu7G)|p@>=tWC`rLrb `0w5pW '2xT>Bc\k.(n,jm,?2+{׃f6~][(;=2v.JWGܕwdHCxթk#q@ЏPRXM2-3TVX$bItW4A~DGCnjC~u.L*'Wyfŗ3D*O5 -ŋDeU_x%UfUUIaQ0^VPN4?/+1",/sB$3pȩbEE8YUax>stream V*/ jesk%<|FS8 *ST:"|+,[(ysmYd G *("GxQFP*plT "QQvT/Щd/xhWUzyYe@$)X`8hAUv5QU VGyF ɪ <(ZAH/FE\2IQ=6XC§20ˬv,"^K=`Y4Te r}LD AUâ({8ŋ HJI0cLA=0^ࠂY00< |Fl a@3#lWjUVcpLyHS,S +#!y6h6ҬkylױD`?RcBW3:?o#cGb[JwHL-3m{,rhr֪_iSiT(IWf0/%ԾI٪hh:zΛF+Px'}`q7p *[*|R֮?uS4T7j\$&UQg?V^RJȥcWAɲe}ψgTۀ 8NKcAaYQsOPQ%gdQYʉ`C ZVrTBsY+\%i l|4И,"Q8II#)0u3` 땭[eO<8@# 25@24KU~(_T]`d*N=DOw$T$b.oX?y1gY8F /l6PY$T*^.8X]`wif0'Kk> 9S5g8~Vxձ5j$o|KAGr(è6NQ lvDp`5zt2Dp'uQ1W8c(NG&78M d+"~grN6{_fxᑜ DG#IKE\͠i 4Ӧ=  A5` Grh@[Ž%Eb(nkj/)mp($,Jݐ/r ӾF_Rϡ ;آ\ʝf0B? TNhHRA$ KFN9#1GK 1 A` ͪ=V %"' ʉ~+R5iAu` xUc6E9 /itgEмY:&!v%a\h=:ecу58cTwSgk73vkk߮7q g.eir9s=Hr)Ll<GZQ*E.T9j aP*pyݰ9` @^=2ң:Z[Y Θ"Y Dt0QgAIY\H [Bkre:I$'J᮫j6dzae,Zm[%ՖQfuhEfSTOF£f3pFj>O_ 4:]SS٘Κgt1њδShK+/ 9u6Ԟt(h -s/ۗJX.1Ԇ+'d %(&h3"(.FBYd#M +Ґk ÅNa&*&=IA a=NCAnը +ӢR);FѨd S>n"h L?]]eU! g^۶p%y'' ZGo 'GGGUPTNy6#asQކӆX5ur2 +p} j֮Żd~rڂ`|YY,e<6X*b|n]6a"SH|n/Җp0J |J4ɠLbş>(,@V8œ>IqqrV0uWoXV3ɚ)|1%_/F5A);G]%)<#s:.ʂHF_9Vc)l^ZĠ3%e :W ƚAKSn`MߠyG "k~ !YTM~ ؽey[B]NF>t* dQgVȪN8F_`TL鴃QB`6U0IaQm@ @g  BqW90XYU d!yeDIbUëEQyVw<܀QJ)JG($'I)S ы> 9^b8zX {HiERYaM )`2+Q4+p( Ј b`xJ~#dbFYW)xRADgNezGT;  Ȳ6lXT`GYc\v$dY9_΋,+skFx[Xm* \$7%φn 0i'?=1͸!N r-31I%$)h'4 & fz@] S-d 9i@ !B@$9(UWIKaj^խm" "lĂzngcִ+IOg/I Tct!wt!?6RK%2 2lĄ;1j2@162Br6(\( b WlS8Dǟ_Nh5n`ꂅ?Lh" ^e,!@R.E-vL A~HKtaPކ8+ ` mV5{fknBC e&F֮^GYve pN"LJ]&YILr1&:!EU@v:Ƭ"c"lx0L" JYܐe 6ً0D6=Yar0oLF͆m:Ƭ"c"l׀|mZ=PfBaV3۵(+&t+]SAyTt=T" zb)xƽM3lUKWҬv6 LIv,gz-Ⱥbg:ٮU@-POl(3L ^׎l(3t( EˬebfF ef2[Ѱ rPfa2!7ڵ(NfCQdf(;&FdÙ8pfhWf5]2m3J,Y%\F&Ƌm2gCŸ́hV` ,79ʚ}ZE5tdž0CK!Pje6lPfY8i /KaMLvsbZÏ];pƙ 3tCfEL(2+YBUd"^Dp /f—QYVm:bW,\%Pc@mh: uB1%Fei[x2KL4JM^Y82nmuîY82J xkʍ#]PdHFBMEhW!_qS ޤ^P>6 !PT2 ButlSPd(hz[m3M#fZM^Q>>Zn3ڶS aӌEy}`,Ҟ:=m`}c" U  P?k{G{= ǺT-M7:jPU(Od7&r_Q^e=\;KKW1(x ڏU QP_l Ѣ:hɱyEIQU{l=,k9sBy5cTC肥 uxPSoxV3I-GQlrekh&s"6x4걾LBo]ZX5ө^[wt?T%3 OPm)pTl_PB3[t)?qfc,ҥìoi-fHo %MO[p\Ne=o~ڸ_x o]WQC:ɀ[UqҩhxA~O :J9<ͪ±b G(@WtݚFx`C"m)!wt .9DpN*ucv/ɛTXd1\qUgvKG1䴡7][iE;*UjSBk=lyx 0:Xđ~Wzئbk+f'C5i:jsn -!; :vёcf ]ʦpEcpxyE1XJ`kHK,`l6֔ m,L/ y%7h5 `4qQUY;t Fn Zti#W 3۠~k\m9vP^R:$)lqBx ac%Dў!: ;tfE_gWsl-vV18mcPe+;pSr8U) iɧi#xFvbSZ)!J/ oasheNtNx;{I,IkCMDzygoj~ PL^@Q`К!U〽tF*mM"85e9 5F0Kp:H nh[TKl -[hyjr+zK&T"9Xku sԣnHK,z~G"IcXkD p~0P,F.w P<y*#ʫ@~NdQg\Mx樋z5o~t hVKp :k)aΐgv^BjWRT(H;>8a"dZP9(A6H ߣc^S ,Уj3Jl%#!E,nIA`1i+h[J=O26p׊PcIW)2LplizjfW`]/1V;+tu55v ֻ݄)dJގ=QQxb7&xf ,jZ ‘3^l sȵeEem5/iqjZ2MqѫG,R+zk e"F%#//fN+hF'|AK:RI*8O{/Ƌ&K${KzbAo4=ȘxE5-;zF'),63fat[ƽ%em"ĵhgFeh۸_mT;Xy8PDPd\Adh!XŸ hS|aM0|? \N`[;SU99Fâ R<C} tQõt<4$Z)qjM{4B<{m\wu&gao*u (ΩS<^ 0@9Q+:pQ ɊK%L橞RyJP uɅ0Zj}Ԃhm!8B 0> Ys|ޛy/s+{q$`jӋTKs`ZHns ʀz X1NAѝ-aĚW #<y ,IЏ @f$/0l_*S9unWzi݀\鉷ML!4$뒄tg7΂Y]Fhh3UP=In`a luq-{E46Q{LǀΆe5uF3Slkt33!Ym7uQZA`QqmY7HfJ2(t%ʼ%/ d|ħ I\oks "f2«ʋ Z( 1"xtyQC2ӕӖPpa(I%چ XѳϪ? Sg.Kb[$pw!o59Dv sR^o,A:&4TzfRbؓ{=`ٜf${S>6ghu5ti1r3-x+w^UdŵAl"z4!1cQ9-hqE+ZJCϕLd=dW*r6JdzK*5jJeWO9;=5fַ w%Ƣ1pĉe8QD*O ʰ(9*)TMM s'-B=@ 5M~ؗ/}2QDӋ.'9IM7ᙟ(}Qf% adYNP9eeNVyV GHőN\#Y \#%-=v5Iq= RdNŤh<=QV$,N(k+N4a4DثFd>%  J~D` Y \ގ>Wd5d a Ʊ>Y8{[* Cv?fD}S.,r?1f<0 G%z#$5}D0<EQ$ # %ZlQY8E'$*#NJ`1ishVz8RSL 1}(>`COtnTT'0c" E?]<>EA0i?=f3_/L_e-&7ölD%JVTKm#g-%U]VL0}\faɋ-#Kql+ngnYaF$@uAʙ\JxJT–;C$k"{%Ioכƴ7\? ୿8GX@1Lqj밷p-QQN. :jހmb5vWb+t ς>JxH?7=xݶFk _+l4ךoA#y/ QYq҇JA+"I"ZpI ɛRհx'9<{L! Ca[_Us?ՇYLJ[٣vrQc2vg*_S}_{'ZfVN wKd~ϛ1zT/[a9Y^0[1~SҞ#ٵ #\˜,\>#!hTʖzߧ}7 =y|3Z It† #~ɳwz!Vl{ ꦡ ^|6")`{^Dz?gz ࡑ>%!A&02=a:Lb_hco*uO c'|ޮ&վv '` L LƭXE~/sY0=~|S#$%j<(J2W`|&tT @ ~#4DW5=VK EpO\%Q%3* pR(я^FJNQZA&S ) 臄y(a8 7ңA7 ? EҨ (ˀʡyĀRpQ \AAC>| C"`UfZ!R<L( $?lBXԠ0Gl"*( DOmOtOO܋H>,@B-M2Y'^X1caq$v^</!&Jt,o"QPAx"*#!*w3r?Ƿ8 kz7Ir`^/Y0XK݇c|~>?te ؒ3<);6 [..e$;E/zڋ@.""z:EB.ovuAs  Dxf;`l0v߁ |AXya\;@q )L`B%ickM@ i @y)!f@y,+N<#phbv((_v h(DdZ+1x@v:>B'^ E9G sCS?<`A`@zQI@gT$%U< 0*(mWj=SDiG?I޲ ' rN|K8 Q5_ZQ{}/1~^+#"c vf^=ZŅr9]4Lm9Za|=TU6 +p$0|kr~؂KW p;Z1ma1ǧϞml1v0 =t̴EdڡL;(vVHb|4ԂcK;l5$o}%&HELh B73:l_IR,ɡI_G]=XL+9.ݍ?x7` e1E{\dq,7鈽Lu-^qL{)׃OhIc6WɨNmΎ IN &Բ<X+Zfv;ɀE!D_-?5 {VN<qڴ2?GX06և`D A=hq9ÐuPh!'^cxk&cx%َ۬Gnf.Q%,"D6qدo~53hW4=HzRL۹! 9Ivרg=B~X|xh _Ta߉mUP'۔ۗj:4qt}h Xe3z8R[N2 VSDꈎːZoط(#;fѰ]gQipI 1-'UĨ8ӳq =JH:K|ɦuj3}Aܸ#$\şWmk6'jp46} Q|'M^7}`zՑd~9B8]p$^]IibSt3pI sm@=Fe{;Gdo5Ƭx q]ke4W6+ӪT,7)oyfiGgerv5<0G}KF߀EN] F:mL`%i1A& JȯR.9s?ܟXZX G&7an1ѯiUUZXHC~v$ߺ_OL~;[avBI~W]9) JHn͆m'L,np !#б(w^c۟{̠#n I zlm4zK^l]K΅ Ft)+jGI]-Zal8~_,6Y0ԉK6iV;d.RmwbTb V;%"6{PxNm:-zu<ƾ, Ք.j;jJ9#O =4 *(%PSH"f=c&xl˻BJ ({۝:f2hhMI-oe[/{N8 ahhW{p,6xRwLGjv0Qk\E?޹VIt2(h qʶfׂ`q%jHKh cީ_JsxhR[mJqKv.xnt(\D4@ =!p(H` @{tudH3NAJCO*vݩ'(Pӆ5 Twz1"dR3#Kje١ ?vR.cw˛-O)Zh /Lѳ5X9G(z?m["QB%Gm[9t~؍vs20oO'WPѥiI1Q쑭yҤ h+5DͶlw#4:m} rx<)z޿l_3B} IO |V͗A}௉g,zw$}56o9+6H_x@ogR]ӍҮs$~M|ƾ-C}Ijx.A[gS_ fMB |o$Z3f3Igw؜7KO #scȷ' ).x*T5D|_6w8MgP3.cz_h/̏w[@Al?si.uVBS'i~L-}"sK=QޛcqMtl͘϶\LCCG3KHk ˛4N,דC6-Ti4hf|Ȟoϔ0/XcЪJ4Uj6o[̕q6=|ݥ_OT…]C1a%Ig5]7"$>cwƞvP ;bc ׉A7'38 N{=vyJ%&^Rf-4`%:x:0ӥ^mJ/8ZYmz[g mB c-!kYsaﬓzD3H?({_g뚢Uо9DtūΚiuRإ?:G92_:Wiչ'Xu?y ;D|HQG; ]GzГ BbŪ+ҮKli]˘wl;7oBucЕ3~V]DtL(T'I:|ukGF'x}6}]Uoϛ;x+^77y2֭{T^+z&Yћ2}~S޹3~J/Q E1s/o;Դg%^Xo:xJo5yK,C_q@gOҰyoj@ٛh3Suo :o =g eog|džxŐ~(V 554NC`5ރWm IciJ_7FêvN_ߙɝםO }|J]*Mbo] ܭ]/dxWJӻp\F]1Me`~3'ȃ)fL17}+Ǝ~l.׌6~}|֌`i {^y>|4LˍׇMj)GJ|ejQco3i2VtpZfӮ4;Gg2odi57g{Vcc7/˅~gEu8lt -lRhi&[o`7e"IЖ}՝׬r9f\wzgCs1ն~u%,(Eg36`߶wn{FGӺgG](coն_ڭɻ ?ἾoOc#+[{O3ڿ*}oˇ!頲GĹ~udvٙ:1dԯs;!g™xn;KyosO '_+._ @qZUܹzkQ\-'v}w`hS|] =b s׺}bIDϓaNzY$&`)I& , SdLU֢߳EEv*,Rۡm.k^'|ɢ=x|']%n^>eF#~ر϶wԹyw>}_˥RFߓj i-yOOxzDfؙ$ړ8eM+|<, Mv9Cro)׃͓JPXS~{> .]\4|V)6$6kMlNei00?e. Y93%nTrv6OK|矧X~i[L f)VHX_AmP b9}/N[XR}ݕ/V , پl l;1愭$CgxxXFUW%U}\=Cpv}GȮՠxc|ik{ϗ ˇb=2=5rzѭZ7M 4#ZRmNm2<%_KFi [nlUJkl|ɆNLO헀Qގcg:\[ϓyeб;~ zKhZi:BeZ~%;k3؛5:н&{wnPQ~_7GU˸;۞>\OO OpLgu?ox{Ck~kت~}xطnƎ|KސvLb;\^#ojїh Ǟ`\m?q3P¤0}L滵ny\55]̷ۙ=>^g2h_tmPjٗ_I!:y+w_"y ,:r?/cx\vlqeͫ|[ Dtb^OȆ"MYuw3nzmqqf2ųoWm'`'=dK5=F\! ~08({g^㑗#糖ze,oq8njTQZL,0Y{9qJF[HE\Bp?*(t|ڍ)C`WXq H[Ogj'4+Glr-X(;þB߱1(wHQ /G[7ٸ$~A1MWFuIqajzGQs(zLUg2-JWsjs|6OX{*+afJ況 vA]-qlv]rn{lT''r<5Rhlv̓3PaYcۧޓ#\wBc?h!޵_ sƘždgwz|}K4S,SaBMdLH6 asؓ`WVB Ow% Or.Q$1Dg2.DBYf BtЇzp6Ԕ3+{T`IFf(4L4 dÃzBkP/ZJ-Ip>*nfeh  \j%]d(y+申eE8PXyc< f5g3i?I;-,p\d@ύ-.UkhN`qMS3nJ򔑖VNBhSF fZ'DLv8 ۙ"pFD;m|]$"ɹe3Fr'_'5IK}iDO-{7j=|Å$KkYLOx$rAH)I>C{z dbVϟN侚Z㉅w.h:ER8#92J{aIsNoO-k~e=2ooIDę:ɠ&}M%QS? OE|{#&@nx̄Ѡ|~ NPpb,r5X(0zqB%n`q5 ?r(h`|rP".`!DBaA:$DGwAI!.90CƟ¯ Y# Y@ܬN",(YQfs舞W*TQcib] G 34-(ZU7GHHJa ,n/G2`c,Yxjk^F̒p=\B(vl;G]W0B[t'iٍd?IlIBR_mGHT%ķE0+]Nh!EbfTrd49gm zI?訚͍#`rj c=}v[1R"fFEoOAJştARmFW^M|Wu';"c2 9՝pN(d6ysqw!Y+)cp`(q~ bݢ|`z_k5q-rh+r!9Ʒ7Tica>1 d>=$ ൛KNA%-qķb>k: `8+؝U7E3#*~BS{c_ 9O:90tqkdhbtӒ_Agڸ&"?zNNGe q/qjȫ|wJԣ+v#z@})-pЁΟvjDCe28Ev=N f\b.xQ_hixɅNBV;n ć{k|OtdXS@wFDI~ u,_ hJveLKēe&a$pN%#vXCXg|$(NJ0].=n|S3[Mb uADW]6M&L)Nn7;%uH&Cztg^F{ ~XO6X8u }; u_QI,J{$8Od Əq;2#* T}M'],$yBIo5 l$$AGx`~s(`ZզZgʨy^"Eeisy__n< (3;2[w.ҮЉx9i*p@kr {:~Q=ёnvN.19B@$vƅ(v^5]RXذt.)7Fv;Yd|\YC 2OcI8DSZd5}ꑅG=ts@Lx N/ssǛD}k p9>ӥސH }8n2MO|>8ط-V;Xj'2c;֨Ѹ_Ʊ01\G@u'fh84CTVK.d3u'O )bCh}1,<3]Xڢ- YK)u8ּ 4'fe͌$_bC>d#{>սSEݘ8 G7\tseYHEbj}t)g* p[x‹-L&݋f"pvEקlP%lmeO9[k7؎!lv"j~ bK]sM2amEMƹmol]Ke/}pU@g$KA1o /U+.,ze npT'XM{߷nm8ӽ}ǐ{}ž> gn7ԣ=d2Ƹ=Z:'9Qg#:KPإB 9 E ӥǗ{﫟1O2 x[`)CDc1nh?<.Gڮl^KF pWGOX"zԧ._%i?>%7`K4ݜ1}ZrԽ!߅14uG|wmxھ-%m0(1n9'h z=e<L'auL'O߷mCH/59yâ~9Ft;CS5BעP{xgV<YV;f;} KF"!^qsz գY5Y~1@$vTԻ1R7[T{9mdlI1»2 V tx{ׯ4Ј޲3M[ јIw)H.7S`>" R&`}v4zҏR@zVjTG9 x6WogD /ҫ&sw@Н9qDoi91by56 Ĉr!A@mg3ϿW (Q^G(hvڐZ2\VyF㗚+ZyK^^YhXerckd6Gc"[[ý$жeNX93/=ׇK7Y$Y\EPoDJwIg,P}ksYbniTܮD4-Irb΃6 1rno lC}usjm*u߉gy ]$ 4>TG"y"sAhԙGf(b'Qu; {7MFPjQ%f-n3Z[`a,3(8OOv1{,^Ⱦ ״}Jd"Cicu.ayLρӊn1V_%z?m3i&)v>qSu$dr}|&f45I䟶jw O7 cӴ߫]R===X};dI=e1Fz[ΞQIi2?}y #ߡӐi}3Sӏtw/}:H/O7" :gX+)F6 *+VIgfzNb;m{{pL{s*7`>b<EVXF}$}] z9 9 3]\bъ_sW+3X GD@#6~+y #9JE4|5:4 '`Y M굾g{.>&`)! Ѳsڿ PP @2Z'nz> !Wx㩙6&8B(ӟ2l3S07HCN1pرIy`iwgsN4XqTR )St<Y ;*LIsdU .\*f(=?GmzC/XAğmM#1?^~Djרu m4̼rRx1^JYaᝇ1!?br)[&=9>7 W  X@5QqAtx43Ýynz?$K҂[+ԜzqC1 ?ld}U`{ %;ItmtKSѓ%4H[++pʢ(恽Ƥa}qc| -83IQ{ʉ9lm=H/WƹhRdj*^?eNU5?\?jbl3n.ꌸ&a&<-87\'ybhe-1|JJ)VNuli䅖orwc%i,7;h4&h1eǓFS.;N4 աH DqE-a("Gq*{ƧbǮk tKaFlX5nJ#|dki "\w߲{=,?$Y *۲auo5+̺ ,Z]~8?~4!16?_ϐɁ'Ѳ9F#441 N➻nxdY| Nv47K%+8sJIeQlj^ijspH D-+7ȝ,&&4Xi/ߧw5}n*,/| v<6R@isUzSB+ӪdTiݠ/D))In}Ѭo+ O-{~ٔΥwd2+%:/=c?x˓7Fy',Nxho˖6:9J6hea0~Mn4RorʲOn +,L~nBjMOI~4rT/_T^=.g䂝,zպ}_-y-"}R E:# 6B,*+)TJ _UhD$$Gch7ħxM:uTs]7Fu1Eךo$ډaݮ P/MTXqK4Qq~KGZ.rqi-egO\ni8sl~cF`AU$ԕT|_]̢5{ #'Mc4Q$GG!<)ڗ(Oj.r7t6*@gsy/%bY"]d\~l5\ 1Ku}Ad+aP *)ޖ;Ѷwq"Rj}5%dsh[g7'KxH;MJ"(2Qh-ݚoqg2*' |> I"p<*{1˲Z_ڲdǯc%j}vɡSΠ: :9tt8 9ttl)gCAw-: :WɡSΠ;Yr 9tt“DrT+C' H>߯1Dtn: 3'pSqH)|"@72Qiw`X O:dl۴x. O 831dQfp?-hKkg|'8,f~9#JsZg .TpdD3Uw/SjdKg ] l9Qb{ɻD]ԞIGE:'?64AɅaʛrG(lZJ ^!ONv yBFP:﫣C p#ʒS$&yJU>i#%: XṮ>jzƉUҏTRLndQ<}"/hx,vot1^Yf܍A]$#0$*&$xs#S#8-bYY?HY2i]hHϹ NdW.Ƞ44Ie)e4zdpv##wǝb|%]9%砹j{qQ%F 9% +9eSa܎z> M.d{5RhQ)t>h5+՝JjyuƮ[I1RHTc1n(YcغE~_2p*])9Kg];rI>T*dn>o"T)e^/Y|W·JK~ݪ1Ugp21W·;UC~YX'uv_O~)-Qٵb"Nfox֪+P*Z ܏r֍~~c_P?T"u&ݦuysgsΆ %1 7Nk&kaK*4Rmf vq"bŸXL?$Ber~~{EMg:;vB/mxUTiѝòoWH%*hH%bޫUHGnՅ2RWHm_)#}Զ5put=;n9M>z{vqZAWOygI\˩agPGY%(d/ CC,~ vldTfNBQ[r3gyY| 2@q=)f@s y=?RZ6~=tsߝMGp)e\Hj;ߔ;^t#ك|$۳ԄkZZU͜E|A̕|jPVF%9)wtJr1:r?¥H*àh6YK"OՊOsڸjEI'bmʵ-:G15Rj嗰jf8M'!;sM'e-eI98M'rytR gIul:^dItEl:\:şdI0^kfI½tTiJL_{52w\,d_{0Z_I71`Yx_*XI6Yb.Hj?5]z Tddd/ ":?J3–Z>Q,2ZiVYkPz ]^[^1 :V4Tm1J9ͣ6G믓{S8ju?s"-5hDuZiB]4IK}y[3&72NR.CNϐTLdbC_C{\ڟe2gagJj`ˇjZ$ǙQO8Ž\υ RZ?Hd%j *lxW2RE#UӖ_ w7MsqjUS|9 zAG-Hk*ɳ+IJW(r 59־^bm9~ybm[٪Z7S2WH^Y\1\<3>zQvT.O a"U41}l~Sk5!Uк$&.h6]CV.?xwnh4?Բ~K!ؕ-vz(8_ϳT縊/:bVʻ^kG*dY\|+NluqGmj*+lA3Ӡt2\\)OkGPE{|yg7zѻtʜBقE[&3߭7NPҿ05M\) &#Sn ȥut>yܶ\ M.5M!.ri1^<ɥx۶K“N.&{%IřDHjlh{3Oru` n\ &Ѫ"tb10Ƹ T #-=Qv0|vYvXD[TKv"mfZ΃|b0dH>d3UT+SԦBd5]|߸I%T' T @TēYv欴BjYiSء~@0Iݺ kn WtG/Xy"cH?U(|x ىܦAJ UR5rTrX߸TND م9P]YG~eSc*'LhHVF/LgLVcˏjUC ?̟,@JYZsoԚx,@;m˲E7,@v4PO\_SOH*Y[?.',eE$pW/ʧV:E 4zQ>Y/UI\(UW74(ݙP\ \WJ~S4+ %[O+$֓ZOߏ.˯rU?-)dQ-?LkD+\WJDwYJ~-QO3\\՟JGT%_Fwr+;oIWZrI]?tk )^﷥lQO9;e]?07[h.lZ4Gj만I)\ߜ)?wIVڵUdu SL2RՏ-B/z:⬤_S) nש'GLU?Ō )7Kʱ$uU~^J~^봿(]vO)Ԝe]?.K2ojuIKSVsp)WN=>,\~:]]c/Y\IӖ /A]?dx^lU?99vi]?~_S6ۥ~U~bL[$/I<$8[yuC~U?\ I,,OeT맜+~\O*>V(^PO=uǟU-/Da\.'-E]BµUgŬ(J8a}G*CfZ-V[0*EQ[>ԙv(FdcW~":ۺB=%?f"`&NdDqe(;ue?Aޡh2ev!! C B ! g}[%ɶn ;YaeTAaǣ>|Hv_yC29D{pc|x&g?[ӣW ͇?frkr3'G_.;޽t<L_1$|\]|=$fg϶OnfZ_ib`s|ԋw{cG#x31t'TG!;WxG޽Ol-ܼ^xݧT?>xk!z(??6Ӝx/;/us ŸY0BĞ—SR(bgr:#{Q'&9>B_`Ĭ/99|M:#ڜN~^%{; /w'y:$»Z|l&h1 ,+4' /wua^~`3ɹXL~s:*Arzs4h V^GQ~V }X3-rv2MVGo7N흭0837x:~~`Dx>#Mj'x{4JUrcO=on_b;ǟ\AaX)MةJ80xױd}?Tls)s>4ͪWێ# [LXiru{' =^;#qꤕګ~[zʃi`\7`0hlç&' &K߳"=]#e2/'D2OHV۶F;":&v&Ɯb@[<δ٣b)!S  "w2s?)ih7 hsD?ph5rh| >R2y0^t~p/އ^{|ǟYA4mWuѐzץGJ+aIGqQ'`u\%(a⡣K.]*nlʨ^>$ ɪ/wz'w7|Y1JZ|P>'-g?mNwE\)o/jazpv^6qIgU٘cCª{mzjD]UNEͿM=.7V%xKO/hք|P\gg dA66vWuڇ66~w`"naVg,סW=ϧX;F'}6oUov!wFoeUaпه"O\O^,M&+ciNݥ[һ[D oI$7%<,q_KV}K˲DRS~I/zTHbyœ)wC~ꛧ3+Wut7 S[Ȕg'+|Oَ⋋b/[ .姲; }fcjjBWŃŽWk]u]n}~aw*~YL( F'ߞu7pkq[o[-ԍ햻a |y轒x]n%oJǟy/'hxHG%x$ʫd}[a=۹z:祥Ml:.gNUÄ합tl}8d f+T4ߓxөb-Ÿzvr[ tLfb3{8;Aߞ~jgC7l.?A~-o|mOw'}JGWƏ_ 6=ܟ#KzxI̷o_ٶ?ֶn~~|-wK1{yebaï-YK9ȡ;SH־ȏ:z円z[&|tK2+B7KoVGN^8r<=,He|SfkI?w瘅~q;a8T6>ܱw+Gf#{t3f-Nqӡ&w=AvWxg vE{~Glӌ2C戜djFc,^437?e-^5-">DZ8Y~6{I*GAfמL?f9ѱbk/ w+ ߙض׶9rvOֻT )-?Wݫ/gC8޽8\vtMkYxi3k|J׾?xh/~>/l_jzax[—Fxmtu8 3_Pߕq_p?ǞƗY~slO%Թ؜l/.vޮ,ړ[K#gǫ;+٧sko>B1| Uv&j~9^w>9a~|:~Ěs[Z_b7XDiÔg\pOb$ߊA?}/_NNLn_|PX UL?eO7Pm/m'/wuL+4{3U>Ѩ]e hDWgF|'ł7;kɗۇg+;XҾ 歛{凴TMB:ٿ弋XNSH⦉?Mٷ-}O?OypgnRavMdcٗ 7];Gۨ;;+ xXY^~~~iy2_]]y6Ɏ}=hQ퇐Q.+dY[s=U3.)_y-xˉo| x|{ |utܯ?6<3GHvʞ> kȳq2а#1*+#WrԿ3v۫\Uݙ}ǿ>}=lsUCnf˓,[-|mi+Z=ml6?Y+!][[6ɜ6iX)7ՀSMW2dEaBvR`Ⱥηbfo-N7&+WWO_; l|{"J~${OUqvˢ|&nKM?Z/Fԉy0-d$u`^^#1,+<. dn}U~~~99>@UȯJTcm}WЛs+hvPp' ;,2H *AmբkHAZoڢU:sëڄ.z[9ڳtDs;eQW;~lԕu鄹p2cv2|Q4A_?) s}L|7Ky<]mŝm{[M6p>|g{{qg{y _kyW者w:ԮA?Wg׾+0);[}]qU]Oݎܭ#2X41=7y!@bpHbH$HHC&BUXI*[qG^ɘBA|1D !cAexRbL`D(!RQ i 0z6ˁRZRO2-#8gnb4M8MHTKJ=?&#$QiHHax,&yKVF+ds O"HjI ~"zZ(瘀Y) yg\V \# Ղ!%"$K) j^+#:/)A9|Hخդߐ!Ȗ#:pX0eh`wÅ`pip &&QXÀDCPD4WbD7 .Ʌvh$80 %-8TQp)$OpE;n'E)TUǠ^չ4\^lq4^zcI0kE é A ([t,%AWI.@o녴UvU*`d C=++_^,A0!+>lLpy0B32"s/0N" rb{7(s0=N{)T! h~i ~r? kXG.ĘBbA &j*hRIM2 X}.&G`c!&xY.eBLFI\@Y͖b;P&? "cXPE4}M7q@ $DցbB % 2,i $o\B1 z  pJMu8a #Pv\ 2FJU5'A Wيԗc1 XU$(Aӟḵ *ˁak3pqDs hD85z7s0(j4=_R).>HyOC”b. AbABCL|DPLń% 3}L-@UfK8U&6%J ]eq@ LRS&ADÂR' ]u4Aϭn3DN, NL nTE;3 B}J̳!.cj ʼnI2Ф $2Sj&f"LNyOK!1LlA%lfVrA2{ }d@9hV0?TY3׭EpBpqM PXf~ݧ;O'_#x,83qZG8VBf)̾p!€T2#NUj],6-5 e! \QBUXzBC5Rӹjda$$$koX- La@S=r<1LVD"COUs-0`^' .$!XD4զ{9NBPWkLSH%B,aWzW9S+[!ϼ3bNdklU@J\,:[M)Ę3S#N GwSDr *,HS | | | | | | |jn D}"AE|bB@!?@ L0Lp`&-G&2Lp`n ]!?Lp`Bu9v' &8B^0A L(e؜LpL &86܆`%?W="uHL 5p p.&`R b8 !/ `7 & (\/P& `&sY L(,qXLpLpWLpVLpֺLp}Lp=L a0HL a0=`&:`BaG&:`& Lpd|` `# - UztA0 `#zgtA0϶`ےL=_P0 La0AdLa0AdLa0AdLPa0ATLPa0ATLPa0ATLPa0A(B`b `"80 NL >&: &` ̩ x0 RH0' Lp/P!0 * &0  ` U%c`P &hc0'&`48Lp%`BI& =e{7B&Bh;A``Buttnp;* LPa0AT0A=D? yט`+ Yz3? | | | | | | | |>h>h>h4A ":`#-B`+}g1Lpz!? EK~0 δW&`&`kN^0 ՙ6x۝`/yQL&8B^0?ڜL5UL5K^0 ՙ6sxep L &&C`ޚ *&:` * &` 2 &:`\`#d0Ad0AT0Ad0Ad0u?YLA0AULPa0AULPA0_>0u^0u& j P0  `PxW&+h&8B^0ђLpUT0AyW&T  P=_P0 La0xLa0xLa0xLa0ADLa0ADLa0ADLa0AdLa0AdLa0AdLa0ATLPa0ATLPa0ATL:&I 0nLp P &Tc? &:` " &:`&:`&0 `BUj *&0 2 & j Uѽ`B!4LPuUL(0|~0:{:7}G&0   j yYz3? | | | | | | | |>h>h>h4A JZEk?Y?@ UI1AbtqdhE<!? DDp "-AG"2Dp ": "8!?P{js} D`u@A #i"86x AxDp BuV: 2 " "": " " < ": \ #xAxAADAAxAxu?A^DAAAQDaAAQDaAAYDAAAoA!?P$~ "8D(4DpTDAAG"TP=_PDahDahDahD`aXD`aXD`aXD`axDaxDaxDaDDaADDaADDaAdDp xA71  , "0PU?" " ": <": " BU8sT?P DAr6Dp<DMmG~, ": ": ": ": cq~5K/P{fq@ԃ@'cx΋'ó 0L1 |1nspΨwD .QAϯ4A$L((&)'xڂ pD8;TJS^|hP)Ud(+2R/ER7؛{fnl 56nb:v)n=`ڞYV%Neai ~Fyn'([j)NK`FFv+kqMYe @J #Q 26)͖R˃yƍrKڡ4ږ^2P"* |晷{R!ujy'Y`.aj;)d`J˪0׃S$7<.ѱP"^'P !0bq[_:XIR=CtEp7ضTM@HTeTwjjjc\7Ol؆x1"47g@슘tmYn Za!SMnj{@B٩v $ZJr'Hvv'MA;Dӈe,~rdf,ѱ &WAb ܦlgiOdS)w mgDڠ zMȱ ԗ†q Oa«0V12D}i("B=ʰ#~`-Dd)B},ZP)1'S2L^++40S ^aͦzZ 2,}Jq-a=i1`FG5fq@gGƳdn%FOȹV0Yz ^llll{0 ,` a bn~h:׮#(XDPFhogip#k3a U%Pg&scvs)֬CI,!HLK6!76  fF_* 0;e2wp ?#rX2#1!u&6ɝ`ƆPdw)Z}Y~Qpoza"G!DXlCTv3ʡ=S4! ])jj;d>iI$dT.$2Befl;⣝a{> T Y5 HrhDOTv!$T9 &ep@Y.`u-MfED"r+ 08jyS\"%c( 9eWJҫ As¦!Ӓ~^X߻uJ]pRF`&^LeܘPA3&DвsJͅeE`vm节.4K jĬbԃvq*kV5uo`5rLj '98aƜvнh=ۦ7ٜ8%r= %Y @;_K4x`nngG6F nUO &,Oe5,N7F(3n3JAqYD)rg!mhҞ>ԁn`nl7l9OTM \ MeDfiqNm\#6Tޛ{{{{{n4> )SҕagLԺ2w%=Bl,H 5Hz7-cVYcX6jPpyUw*yZ JbEӴz9YJ A˜rQACP*x|6z0]5P#T晹{8^+G^MO;G_oλWC_:?֗Uu?|%oWWH endstream endobj 21 0 obj [/ICCBased 27 0 R] endobj 7 0 obj [6 0 R 5 0 R] endobj 40 0 obj <> endobj xref 0 41 0000000000 65535 f 0000000016 00000 n 0000000156 00000 n 0000038280 00000 n 0000000000 00000 f 0000053108 00000 n 0000053178 00000 n 0000378446 00000 n 0000038331 00000 n 0000038793 00000 n 0000041265 00000 n 0000053839 00000 n 0000050299 00000 n 0000050186 00000 n 0000053480 00000 n 0000053603 00000 n 0000053716 00000 n 0000042272 00000 n 0000044889 00000 n 0000047506 00000 n 0000041327 00000 n 0000378411 00000 n 0000041711 00000 n 0000041759 00000 n 0000053045 00000 n 0000052982 00000 n 0000050123 00000 n 0000050334 00000 n 0000053364 00000 n 0000053395 00000 n 0000053248 00000 n 0000053279 00000 n 0000053913 00000 n 0000054175 00000 n 0000055286 00000 n 0000067808 00000 n 0000133396 00000 n 0000198984 00000 n 0000264572 00000 n 0000330160 00000 n 0000378475 00000 n trailer <<0C9D12E6EE994682A6EAD56912419B86>]>> startxref 378666 %%EOF immutable-js-immutable-js-fa7d047/resources/identity.svg000066400000000000000000000344021515165743500235130ustar00rootroot00000000000000 immutable-js-immutable-js-fa7d047/resources/jasmine-check.d.ts000066400000000000000000000001441515165743500244300ustar00rootroot00000000000000// TODO: proper types declare var check: any; declare var gen: any; declare module 'jasmine-check'; immutable-js-immutable-js-fa7d047/resources/jestPreprocessor.js000066400000000000000000000037651515165743500250630ustar00rootroot00000000000000var typescript = require('typescript'); const makeSynchronous = require('make-synchronous'); const TYPESCRIPT_OPTIONS = { noEmitOnError: true, target: typescript.ScriptTarget.ES2015, module: typescript.ModuleKind.CommonJS, strictNullChecks: true, sourceMap: true, inlineSourceMap: true, }; function transpileTypeScript(src, path) { return typescript.transpile(src, TYPESCRIPT_OPTIONS, path, []); } function transpileJavaScript(src, path) { // Need to make this sync by calling `makeSynchronous` // while https://github.com/facebook/jest/issues/9504 is not resolved const fn = makeSynchronous(async path => { const rollup = require('rollup'); const buble = require('rollup-plugin-buble'); const commonjs = require('rollup-plugin-commonjs'); const json = require('rollup-plugin-json'); const stripBanner = require('rollup-plugin-strip-banner'); // same input options as in rollup-config.js const inputOptions = { input: path, onwarn: () => {}, plugins: [commonjs(), json(), stripBanner(), buble()], }; const bundle = await rollup.rollup(inputOptions); const { output } = await bundle.generate({ file: path, format: 'cjs', sourcemap: true, }); await bundle.close(); const { code, map } = output[0]; if (!code) { throw new Error( 'Unable to get code from rollup output in jestPreprocessor. Did rollup version changed ?' ); } return { code, map }; }); return fn(path); } module.exports = { process(src, path) { if (path.endsWith('__tests__/MultiRequire.js')) { // exit early for multi-require as we explicitly want to have several instances return src; } if (path.endsWith('.ts') || path.endsWith('.tsx')) { return transpileTypeScript(src, path); } return transpileJavaScript(src, path); }, getCacheKey() { // ignore cache, as there is a conflict between rollup compile and jest preprocessor. return Date.now().toString(); }, }; immutable-js-immutable-js-fa7d047/resources/jestResolver.js000066400000000000000000000011251515165743500241620ustar00rootroot00000000000000const path = require('path'); const pkg = require('../package.json'); module.exports = (request, options) => { if (request === 'immutable') { if (process.env.CI) { // In CI environment, test the real built file to be sure that the build is not broken return path.resolve(options.rootDir, pkg.main); } // In development mode, we want sourcemaps, live reload, etc., so point to the src/ directory return `${options.rootDir}/src/Immutable.js`; } // Call the defaultResolver, if we want to load non-immutable return options.defaultResolver(request, options); }; immutable-js-immutable-js-fa7d047/resources/prepare-dist.sh000077500000000000000000000014461515165743500241010ustar00rootroot00000000000000#!/bin/sh -e # This script prepares an npm directory with files safe to publish to npm or the # npm git branch: # # "immutable": "git://github.com/immutable-js/immutable-js.git#npm" # # Create empty npm directory rm -rf npm mkdir -p npm # Copy over necessary files cp -r dist npm/ cp README.md npm/ cp LICENSE npm/ # Ensure a vanilla package.json before deploying so other tools do not interpret # The built output as requiring any further transformation. node -e "var package = require('./package.json'); \ package = Object.fromEntries(Object.entries(package).filter(([key]) => package.publishKeys.includes(key))); \ require('fs').writeFileSync('./npm/package.json', JSON.stringify(package, null, 2));" # Retain marginal support for bower on the npm branch cp npm/package.json npm/bower.json immutable-js-immutable-js-fa7d047/resources/react-global.js000066400000000000000000000000371515165743500240300ustar00rootroot00000000000000module.exports = global.React; immutable-js-immutable-js-fa7d047/resources/rollup-config-es.js000066400000000000000000000011251515165743500246600ustar00rootroot00000000000000import path from 'path'; import buble from 'rollup-plugin-buble'; import commonjs from 'rollup-plugin-commonjs'; import json from 'rollup-plugin-json'; import stripBanner from 'rollup-plugin-strip-banner'; import copyright from './copyright'; const SRC_DIR = path.resolve('src'); const DIST_DIR = path.resolve('dist'); export default { input: path.join(SRC_DIR, 'Immutable.js'), output: { banner: copyright, name: 'Immutable', file: path.join(DIST_DIR, 'immutable.es.js'), format: 'es', sourcemap: false, }, plugins: [commonjs(), json(), stripBanner(), buble()], }; immutable-js-immutable-js-fa7d047/resources/rollup-config.js000066400000000000000000000023771515165743500242650ustar00rootroot00000000000000import fs from 'fs'; import path from 'path'; import { minify } from 'uglify-js'; import buble from 'rollup-plugin-buble'; import commonjs from 'rollup-plugin-commonjs'; import json from 'rollup-plugin-json'; import saveLicense from 'uglify-save-license'; import stripBanner from 'rollup-plugin-strip-banner'; import copyright from './copyright'; const SRC_DIR = path.resolve('src'); const DIST_DIR = path.resolve('dist'); function uglify() { return { name: 'uglify', async renderChunk(code) { const result = minify(code, { mangle: { toplevel: true }, output: { max_line_len: 2048, comments: saveLicense }, compress: { comparisons: true, pure_getters: true, unsafe: true }, }); if (!fs.existsSync(DIST_DIR)) { fs.mkdirSync(DIST_DIR); } fs.writeFileSync( path.join(DIST_DIR, 'immutable.min.js'), result.code, 'utf8' ); return code; }, }; } export default { input: path.join(SRC_DIR, 'Immutable.js'), output: { banner: copyright, name: 'Immutable', exports: 'named', file: path.join(DIST_DIR, 'immutable.js'), format: 'umd', sourcemap: false, plugins: [uglify()], }, plugins: [commonjs(), json(), stripBanner(), buble()], }; immutable-js-immutable-js-fa7d047/src/000077500000000000000000000000001515165743500177135ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/src/Collection.js000066400000000000000000000021661515165743500223510ustar00rootroot00000000000000import { Seq, KeyedSeq, IndexedSeq, SetSeq } from './Seq'; import { isCollection } from './predicates/isCollection'; import { isKeyed } from './predicates/isKeyed'; import { isIndexed } from './predicates/isIndexed'; import { isAssociative } from './predicates/isAssociative'; export class Collection { constructor(value) { // eslint-disable-next-line no-constructor-return return isCollection(value) ? value : Seq(value); } } export class KeyedCollection extends Collection { constructor(value) { // eslint-disable-next-line no-constructor-return return isKeyed(value) ? value : KeyedSeq(value); } } export class IndexedCollection extends Collection { constructor(value) { // eslint-disable-next-line no-constructor-return return isIndexed(value) ? value : IndexedSeq(value); } } export class SetCollection extends Collection { constructor(value) { // eslint-disable-next-line no-constructor-return return isCollection(value) && !isAssociative(value) ? value : SetSeq(value); } } Collection.Keyed = KeyedCollection; Collection.Indexed = IndexedCollection; Collection.Set = SetCollection; immutable-js-immutable-js-fa7d047/src/CollectionImpl.js000066400000000000000000000444431515165743500231770ustar00rootroot00000000000000import { Collection, KeyedCollection, IndexedCollection, SetCollection, } from './Collection'; import { isCollection, IS_COLLECTION_SYMBOL } from './predicates/isCollection'; import { isAssociative } from './predicates/isAssociative'; import { isKeyed, IS_KEYED_SYMBOL } from './predicates/isKeyed'; import { isIndexed, IS_INDEXED_SYMBOL } from './predicates/isIndexed'; import { isOrdered, IS_ORDERED_SYMBOL } from './predicates/isOrdered'; import { is } from './is'; import { NOT_SET, ensureSize, wrapIndex, returnTrue, resolveBegin, } from './TrieUtils'; import { hash } from './Hash'; import { imul, smi } from './Math'; import { Iterator, ITERATOR_SYMBOL, ITERATE_KEYS, ITERATE_VALUES, ITERATE_ENTRIES, } from './Iterator'; import arrCopy from './utils/arrCopy'; import assertNotInfinite from './utils/assertNotInfinite'; import deepEqual from './utils/deepEqual'; import mixin from './utils/mixin'; import quoteString from './utils/quoteString'; import { toJS } from './toJS'; import { Map } from './Map'; import { OrderedMap } from './OrderedMap'; import { List } from './List'; import { Set } from './Set'; import { OrderedSet } from './OrderedSet'; import { Stack } from './Stack'; import { Range } from './Range'; import { KeyedSeq, IndexedSeq, SetSeq, ArraySeq } from './Seq'; import { reify, ToKeyedSequence, ToIndexedSequence, ToSetSequence, FromEntriesSequence, flipFactory, mapFactory, reverseFactory, filterFactory, countByFactory, groupByFactory, sliceFactory, takeWhileFactory, skipWhileFactory, concatFactory, flattenFactory, flatMapFactory, interposeFactory, sortFactory, maxFactory, zipWithFactory, partitionFactory, } from './Operations'; import { getIn } from './methods/getIn'; import { hasIn } from './methods/hasIn'; import { toObject } from './methods/toObject'; export { Collection, CollectionPrototype, IndexedCollectionPrototype }; // Note: all of these methods are deprecated. Collection.isIterable = isCollection; Collection.isKeyed = isKeyed; Collection.isIndexed = isIndexed; Collection.isAssociative = isAssociative; Collection.isOrdered = isOrdered; Collection.Iterator = Iterator; mixin(Collection, { // ### Conversion to other types toArray() { assertNotInfinite(this.size); const array = new Array(this.size || 0); const useTuples = isKeyed(this); let i = 0; this.__iterate((v, k) => { // Keyed collections produce an array of tuples. array[i++] = useTuples ? [k, v] : v; }); return array; }, toIndexedSeq() { return new ToIndexedSequence(this); }, toJS() { return toJS(this); }, toKeyedSeq() { return new ToKeyedSequence(this, true); }, toMap() { // Use Late Binding here to solve the circular dependency. return Map(this.toKeyedSeq()); }, toObject: toObject, toOrderedMap() { // Use Late Binding here to solve the circular dependency. return OrderedMap(this.toKeyedSeq()); }, toOrderedSet() { // Use Late Binding here to solve the circular dependency. return OrderedSet(isKeyed(this) ? this.valueSeq() : this); }, toSet() { // Use Late Binding here to solve the circular dependency. return Set(isKeyed(this) ? this.valueSeq() : this); }, toSetSeq() { return new ToSetSequence(this); }, toSeq() { return isIndexed(this) ? this.toIndexedSeq() : isKeyed(this) ? this.toKeyedSeq() : this.toSetSeq(); }, toStack() { // Use Late Binding here to solve the circular dependency. return Stack(isKeyed(this) ? this.valueSeq() : this); }, toList() { // Use Late Binding here to solve the circular dependency. return List(isKeyed(this) ? this.valueSeq() : this); }, // ### Common JavaScript methods and properties toString() { return '[Collection]'; }, __toString(head, tail) { if (this.size === 0) { return head + tail; } return ( head + ' ' + this.toSeq().map(this.__toStringMapper).join(', ') + ' ' + tail ); }, // ### ES6 Collection methods (ES6 Array and Map) concat(...values) { return reify(this, concatFactory(this, values)); }, includes(searchValue) { return this.some(value => is(value, searchValue)); }, entries() { return this.__iterator(ITERATE_ENTRIES); }, every(predicate, context) { assertNotInfinite(this.size); let returnValue = true; this.__iterate((v, k, c) => { if (!predicate.call(context, v, k, c)) { returnValue = false; return false; } }); return returnValue; }, filter(predicate, context) { return reify(this, filterFactory(this, predicate, context, true)); }, partition(predicate, context) { return partitionFactory(this, predicate, context); }, find(predicate, context, notSetValue) { const entry = this.findEntry(predicate, context); return entry ? entry[1] : notSetValue; }, forEach(sideEffect, context) { assertNotInfinite(this.size); return this.__iterate(context ? sideEffect.bind(context) : sideEffect); }, join(separator) { assertNotInfinite(this.size); separator = separator !== undefined ? '' + separator : ','; let joined = ''; let isFirst = true; this.__iterate(v => { isFirst ? (isFirst = false) : (joined += separator); joined += v !== null && v !== undefined ? v.toString() : ''; }); return joined; }, keys() { return this.__iterator(ITERATE_KEYS); }, map(mapper, context) { return reify(this, mapFactory(this, mapper, context)); }, reduce(reducer, initialReduction, context) { return reduce( this, reducer, initialReduction, context, arguments.length < 2, false ); }, reduceRight(reducer, initialReduction, context) { return reduce( this, reducer, initialReduction, context, arguments.length < 2, true ); }, reverse() { return reify(this, reverseFactory(this, true)); }, slice(begin, end) { return reify(this, sliceFactory(this, begin, end, true)); }, some(predicate, context) { assertNotInfinite(this.size); let returnValue = false; this.__iterate((v, k, c) => { if (predicate.call(context, v, k, c)) { returnValue = true; return false; } }); return returnValue; }, sort(comparator) { return reify(this, sortFactory(this, comparator)); }, values() { return this.__iterator(ITERATE_VALUES); }, // ### More sequential methods butLast() { return this.slice(0, -1); }, isEmpty() { return this.size !== undefined ? this.size === 0 : !this.some(() => true); }, count(predicate, context) { return ensureSize( predicate ? this.toSeq().filter(predicate, context) : this ); }, countBy(grouper, context) { return countByFactory(this, grouper, context); }, equals(other) { return deepEqual(this, other); }, entrySeq() { const collection = this; if (collection._cache) { // We cache as an entries array, so we can just return the cache! return new ArraySeq(collection._cache); } const entriesSequence = collection.toSeq().map(entryMapper).toIndexedSeq(); entriesSequence.fromEntrySeq = () => collection.toSeq(); return entriesSequence; }, filterNot(predicate, context) { return this.filter(not(predicate), context); }, findEntry(predicate, context, notSetValue) { let found = notSetValue; this.__iterate((v, k, c) => { if (predicate.call(context, v, k, c)) { found = [k, v]; return false; } }); return found; }, findKey(predicate, context) { const entry = this.findEntry(predicate, context); return entry && entry[0]; }, findLast(predicate, context, notSetValue) { return this.toKeyedSeq().reverse().find(predicate, context, notSetValue); }, findLastEntry(predicate, context, notSetValue) { return this.toKeyedSeq() .reverse() .findEntry(predicate, context, notSetValue); }, findLastKey(predicate, context) { return this.toKeyedSeq().reverse().findKey(predicate, context); }, first(notSetValue) { return this.find(returnTrue, null, notSetValue); }, flatMap(mapper, context) { return reify(this, flatMapFactory(this, mapper, context)); }, flatten(depth) { return reify(this, flattenFactory(this, depth, true)); }, fromEntrySeq() { return new FromEntriesSequence(this); }, get(searchKey, notSetValue) { return this.find((_, key) => is(key, searchKey), undefined, notSetValue); }, getIn: getIn, groupBy(grouper, context) { return groupByFactory(this, grouper, context); }, has(searchKey) { return this.get(searchKey, NOT_SET) !== NOT_SET; }, hasIn: hasIn, isSubset(iter) { iter = typeof iter.includes === 'function' ? iter : Collection(iter); return this.every(value => iter.includes(value)); }, isSuperset(iter) { iter = typeof iter.isSubset === 'function' ? iter : Collection(iter); return iter.isSubset(this); }, keyOf(searchValue) { return this.findKey(value => is(value, searchValue)); }, keySeq() { return this.toSeq().map(keyMapper).toIndexedSeq(); }, last(notSetValue) { return this.toSeq().reverse().first(notSetValue); }, lastKeyOf(searchValue) { return this.toKeyedSeq().reverse().keyOf(searchValue); }, max(comparator) { return maxFactory(this, comparator); }, maxBy(mapper, comparator) { return maxFactory(this, comparator, mapper); }, min(comparator) { return maxFactory( this, comparator ? neg(comparator) : defaultNegComparator ); }, minBy(mapper, comparator) { return maxFactory( this, comparator ? neg(comparator) : defaultNegComparator, mapper ); }, rest() { return this.slice(1); }, skip(amount) { return amount === 0 ? this : this.slice(Math.max(0, amount)); }, skipLast(amount) { return amount === 0 ? this : this.slice(0, -Math.max(0, amount)); }, skipWhile(predicate, context) { return reify(this, skipWhileFactory(this, predicate, context, true)); }, skipUntil(predicate, context) { return this.skipWhile(not(predicate), context); }, sortBy(mapper, comparator) { return reify(this, sortFactory(this, comparator, mapper)); }, take(amount) { return this.slice(0, Math.max(0, amount)); }, takeLast(amount) { return this.slice(-Math.max(0, amount)); }, takeWhile(predicate, context) { return reify(this, takeWhileFactory(this, predicate, context)); }, takeUntil(predicate, context) { return this.takeWhile(not(predicate), context); }, update(fn) { return fn(this); }, valueSeq() { return this.toIndexedSeq(); }, // ### Hashable Object hashCode() { return this.__hash || (this.__hash = hashCollection(this)); }, // ### Internal // abstract __iterate(fn, reverse) // abstract __iterator(type, reverse) }); const CollectionPrototype = Collection.prototype; CollectionPrototype[IS_COLLECTION_SYMBOL] = true; CollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.values; CollectionPrototype.toJSON = CollectionPrototype.toArray; CollectionPrototype.__toStringMapper = quoteString; CollectionPrototype.inspect = CollectionPrototype.toSource = function () { return this.toString(); }; CollectionPrototype.chain = CollectionPrototype.flatMap; CollectionPrototype.contains = CollectionPrototype.includes; mixin(KeyedCollection, { // ### More sequential methods flip() { return reify(this, flipFactory(this)); }, mapEntries(mapper, context) { let iterations = 0; return reify( this, this.toSeq() .map((v, k) => mapper.call(context, [k, v], iterations++, this)) .fromEntrySeq() ); }, mapKeys(mapper, context) { return reify( this, this.toSeq() .flip() .map((k, v) => mapper.call(context, k, v, this)) .flip() ); }, }); const KeyedCollectionPrototype = KeyedCollection.prototype; KeyedCollectionPrototype[IS_KEYED_SYMBOL] = true; KeyedCollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.entries; KeyedCollectionPrototype.toJSON = toObject; KeyedCollectionPrototype.__toStringMapper = (v, k) => quoteString(k) + ': ' + quoteString(v); mixin(IndexedCollection, { // ### Conversion to other types toKeyedSeq() { return new ToKeyedSequence(this, false); }, // ### ES6 Collection methods (ES6 Array and Map) filter(predicate, context) { return reify(this, filterFactory(this, predicate, context, false)); }, findIndex(predicate, context) { const entry = this.findEntry(predicate, context); return entry ? entry[0] : -1; }, indexOf(searchValue) { const key = this.keyOf(searchValue); return key === undefined ? -1 : key; }, lastIndexOf(searchValue) { const key = this.lastKeyOf(searchValue); return key === undefined ? -1 : key; }, reverse() { return reify(this, reverseFactory(this, false)); }, slice(begin, end) { return reify(this, sliceFactory(this, begin, end, false)); }, splice(index, removeNum /*, ...values*/) { const numArgs = arguments.length; removeNum = Math.max(removeNum || 0, 0); if (numArgs === 0 || (numArgs === 2 && !removeNum)) { return this; } // If index is negative, it should resolve relative to the size of the // collection. However size may be expensive to compute if not cached, so // only call count() if the number is in fact negative. index = resolveBegin(index, index < 0 ? this.count() : this.size); const spliced = this.slice(0, index); return reify( this, numArgs === 1 ? spliced : spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum)) ); }, // ### More collection methods findLastIndex(predicate, context) { const entry = this.findLastEntry(predicate, context); return entry ? entry[0] : -1; }, first(notSetValue) { return this.get(0, notSetValue); }, flatten(depth) { return reify(this, flattenFactory(this, depth, false)); }, get(index, notSetValue) { index = wrapIndex(this, index); return index < 0 || this.size === Infinity || (this.size !== undefined && index > this.size) ? notSetValue : this.find((_, key) => key === index, undefined, notSetValue); }, has(index) { index = wrapIndex(this, index); return ( index >= 0 && (this.size !== undefined ? this.size === Infinity || index < this.size : this.indexOf(index) !== -1) ); }, interpose(separator) { return reify(this, interposeFactory(this, separator)); }, interleave(/*...collections*/) { const collections = [this].concat(arrCopy(arguments)); const zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, collections); const interleaved = zipped.flatten(true); if (zipped.size) { interleaved.size = zipped.size * collections.length; } return reify(this, interleaved); }, keySeq() { return Range(0, this.size); }, last(notSetValue) { return this.get(-1, notSetValue); }, skipWhile(predicate, context) { return reify(this, skipWhileFactory(this, predicate, context, false)); }, zip(/*, ...collections */) { const collections = [this].concat(arrCopy(arguments)); return reify(this, zipWithFactory(this, defaultZipper, collections)); }, zipAll(/*, ...collections */) { const collections = [this].concat(arrCopy(arguments)); return reify(this, zipWithFactory(this, defaultZipper, collections, true)); }, zipWith(zipper /*, ...collections */) { const collections = arrCopy(arguments); collections[0] = this; return reify(this, zipWithFactory(this, zipper, collections)); }, }); const IndexedCollectionPrototype = IndexedCollection.prototype; IndexedCollectionPrototype[IS_INDEXED_SYMBOL] = true; IndexedCollectionPrototype[IS_ORDERED_SYMBOL] = true; mixin(SetCollection, { // ### ES6 Collection methods (ES6 Array and Map) get(value, notSetValue) { return this.has(value) ? value : notSetValue; }, includes(value) { return this.has(value); }, // ### More sequential methods keySeq() { return this.valueSeq(); }, }); const SetCollectionPrototype = SetCollection.prototype; SetCollectionPrototype.has = CollectionPrototype.includes; SetCollectionPrototype.contains = SetCollectionPrototype.includes; SetCollectionPrototype.keys = SetCollectionPrototype.values; // Mixin subclasses mixin(KeyedSeq, KeyedCollectionPrototype); mixin(IndexedSeq, IndexedCollectionPrototype); mixin(SetSeq, SetCollectionPrototype); // #pragma Helper functions function reduce(collection, reducer, reduction, context, useFirst, reverse) { assertNotInfinite(collection.size); collection.__iterate((v, k, c) => { if (useFirst) { useFirst = false; reduction = v; } else { reduction = reducer.call(context, reduction, v, k, c); } }, reverse); return reduction; } function keyMapper(v, k) { return k; } function entryMapper(v, k) { return [k, v]; } function not(predicate) { return function () { return !predicate.apply(this, arguments); }; } function neg(predicate) { return function () { return -predicate.apply(this, arguments); }; } function defaultZipper() { return arrCopy(arguments); } function defaultNegComparator(a, b) { return a < b ? 1 : a > b ? -1 : 0; } function hashCollection(collection) { if (collection.size === Infinity) { return 0; } const ordered = isOrdered(collection); const keyed = isKeyed(collection); let h = ordered ? 1 : 0; const size = collection.__iterate( keyed ? ordered ? (v, k) => { h = (31 * h + hashMerge(hash(v), hash(k))) | 0; } : (v, k) => { h = (h + hashMerge(hash(v), hash(k))) | 0; } : ordered ? v => { h = (31 * h + hash(v)) | 0; } : v => { h = (h + hash(v)) | 0; } ); return murmurHashOfSize(size, h); } function murmurHashOfSize(size, h) { h = imul(h, 0xcc9e2d51); h = imul((h << 15) | (h >>> -15), 0x1b873593); h = imul((h << 13) | (h >>> -13), 5); h = ((h + 0xe6546b64) | 0) ^ size; h = imul(h ^ (h >>> 16), 0x85ebca6b); h = imul(h ^ (h >>> 13), 0xc2b2ae35); h = smi(h ^ (h >>> 16)); return h; } function hashMerge(a, b) { return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0; // int } immutable-js-immutable-js-fa7d047/src/Hash.js000066400000000000000000000136301515165743500211370ustar00rootroot00000000000000import { smi } from './Math'; const defaultValueOf = Object.prototype.valueOf; export function hash(o) { if (o == null) { return hashNullish(o); } if (typeof o.hashCode === 'function') { // Drop any high bits from accidentally long hash codes. return smi(o.hashCode(o)); } const v = valueOf(o); if (v == null) { return hashNullish(v); } switch (typeof v) { case 'boolean': // The hash values for built-in constants are a 1 value for each 5-byte // shift region expect for the first, which encodes the value. This // reduces the odds of a hash collision for these common values. return v ? 0x42108421 : 0x42108420; case 'number': return hashNumber(v); case 'string': return v.length > STRING_HASH_CACHE_MIN_STRLEN ? cachedHashString(v) : hashString(v); case 'object': case 'function': return hashJSObj(v); case 'symbol': return hashSymbol(v); default: if (typeof v.toString === 'function') { return hashString(v.toString()); } throw new Error('Value type ' + typeof v + ' cannot be hashed.'); } } function hashNullish(nullish) { return nullish === null ? 0x42108422 : /* undefined */ 0x42108423; } // Compress arbitrarily large numbers into smi hashes. function hashNumber(n) { if (n !== n || n === Infinity) { return 0; } let hash = n | 0; if (hash !== n) { hash ^= n * 0xffffffff; } while (n > 0xffffffff) { n /= 0xffffffff; hash ^= n; } return smi(hash); } function cachedHashString(string) { let hashed = stringHashCache[string]; if (hashed === undefined) { hashed = hashString(string); if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) { STRING_HASH_CACHE_SIZE = 0; stringHashCache = {}; } STRING_HASH_CACHE_SIZE++; stringHashCache[string] = hashed; } return hashed; } // http://jsperf.com/hashing-strings function hashString(string) { // This is the hash from JVM // The hash code for a string is computed as // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1], // where s[i] is the ith character of the string and n is the length of // the string. We "mod" the result to make it between 0 (inclusive) and 2^31 // (exclusive) by dropping high bits. let hashed = 0; for (let ii = 0; ii < string.length; ii++) { hashed = (31 * hashed + string.charCodeAt(ii)) | 0; } return smi(hashed); } function hashSymbol(sym) { let hashed = symbolMap[sym]; if (hashed !== undefined) { return hashed; } hashed = nextHash(); symbolMap[sym] = hashed; return hashed; } function hashJSObj(obj) { let hashed; if (usingWeakMap) { hashed = weakMap.get(obj); if (hashed !== undefined) { return hashed; } } hashed = obj[UID_HASH_KEY]; if (hashed !== undefined) { return hashed; } if (!canDefineProperty) { hashed = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY]; if (hashed !== undefined) { return hashed; } hashed = getIENodeHash(obj); if (hashed !== undefined) { return hashed; } } hashed = nextHash(); if (usingWeakMap) { weakMap.set(obj, hashed); } else if (isExtensible !== undefined && isExtensible(obj) === false) { throw new Error('Non-extensible objects are not allowed as keys.'); } else if (canDefineProperty) { Object.defineProperty(obj, UID_HASH_KEY, { enumerable: false, configurable: false, writable: false, value: hashed, }); } else if ( obj.propertyIsEnumerable !== undefined && obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable ) { // Since we can't define a non-enumerable property on the object // we'll hijack one of the less-used non-enumerable properties to // save our hash on it. Since this is a function it will not show up in // `JSON.stringify` which is what we want. obj.propertyIsEnumerable = function () { return this.constructor.prototype.propertyIsEnumerable.apply( this, arguments ); }; obj.propertyIsEnumerable[UID_HASH_KEY] = hashed; } else if (obj.nodeType !== undefined) { // At this point we couldn't get the IE `uniqueID` to use as a hash // and we couldn't use a non-enumerable property to exploit the // dontEnum bug so we simply add the `UID_HASH_KEY` on the node // itself. obj[UID_HASH_KEY] = hashed; } else { throw new Error('Unable to set a non-enumerable property on object.'); } return hashed; } // Get references to ES5 object methods. const isExtensible = Object.isExtensible; // True if Object.defineProperty works as expected. IE8 fails this test. const canDefineProperty = (function () { try { Object.defineProperty({}, '@', {}); return true; } catch (e) { return false; } })(); // IE has a `uniqueID` property on DOM nodes. We can construct the hash from it // and avoid memory leaks from the IE cloneNode bug. function getIENodeHash(node) { if (node && node.nodeType > 0) { switch (node.nodeType) { case 1: // Element return node.uniqueID; case 9: // Document return node.documentElement && node.documentElement.uniqueID; } } } function valueOf(obj) { return obj.valueOf !== defaultValueOf && typeof obj.valueOf === 'function' ? obj.valueOf(obj) : obj; } function nextHash() { const nextHash = ++_objHashUID; if (_objHashUID & 0x40000000) { _objHashUID = 0; } return nextHash; } // If possible, use a WeakMap. const usingWeakMap = typeof WeakMap === 'function'; let weakMap; if (usingWeakMap) { weakMap = new WeakMap(); } const symbolMap = Object.create(null); let _objHashUID = 0; let UID_HASH_KEY = '__immutablehash__'; if (typeof Symbol === 'function') { UID_HASH_KEY = Symbol(UID_HASH_KEY); } const STRING_HASH_CACHE_MIN_STRLEN = 16; const STRING_HASH_CACHE_MAX_SIZE = 255; let STRING_HASH_CACHE_SIZE = 0; let stringHashCache = {}; immutable-js-immutable-js-fa7d047/src/Immutable.js000066400000000000000000000070201515165743500221670ustar00rootroot00000000000000import { Seq } from './Seq'; import { OrderedMap } from './OrderedMap'; import { List } from './List'; import { Map } from './Map'; import { Stack } from './Stack'; import { OrderedSet } from './OrderedSet'; import { PairSorting } from './PairSorting'; import { Set } from './Set'; import { Record } from './Record'; import { Range } from './Range'; import { Repeat } from './Repeat'; import { is } from './is'; import { fromJS } from './fromJS'; import isPlainObject from './utils/isPlainObj'; // Functional predicates import { isImmutable } from './predicates/isImmutable'; import { isCollection } from './predicates/isCollection'; import { isKeyed } from './predicates/isKeyed'; import { isIndexed } from './predicates/isIndexed'; import { isAssociative } from './predicates/isAssociative'; import { isOrdered } from './predicates/isOrdered'; import { isValueObject } from './predicates/isValueObject'; import { isSeq } from './predicates/isSeq'; import { isList } from './predicates/isList'; import { isMap } from './predicates/isMap'; import { isOrderedMap } from './predicates/isOrderedMap'; import { isStack } from './predicates/isStack'; import { isSet } from './predicates/isSet'; import { isOrderedSet } from './predicates/isOrderedSet'; import { isRecord } from './predicates/isRecord'; import { Collection } from './CollectionImpl'; import { hash } from './Hash'; // Functional read/write API import { get } from './functional/get'; import { getIn } from './functional/getIn'; import { has } from './functional/has'; import { hasIn } from './functional/hasIn'; import { merge, mergeDeep, mergeWith, mergeDeepWith } from './functional/merge'; import { remove } from './functional/remove'; import { removeIn } from './functional/removeIn'; import { set } from './functional/set'; import { setIn } from './functional/setIn'; import { update } from './functional/update'; import { updateIn } from './functional/updateIn'; import { version } from '../package.json'; export default { version: version, Collection: Collection, // Note: Iterable is deprecated Iterable: Collection, Seq: Seq, Map: Map, OrderedMap: OrderedMap, List: List, Stack: Stack, Set: Set, OrderedSet: OrderedSet, PairSorting: PairSorting, Record: Record, Range: Range, Repeat: Repeat, is: is, fromJS: fromJS, hash: hash, isImmutable: isImmutable, isCollection: isCollection, isKeyed: isKeyed, isIndexed: isIndexed, isAssociative: isAssociative, isOrdered: isOrdered, isValueObject: isValueObject, isPlainObject: isPlainObject, isSeq: isSeq, isList: isList, isMap: isMap, isOrderedMap: isOrderedMap, isStack: isStack, isSet: isSet, isOrderedSet: isOrderedSet, isRecord: isRecord, get: get, getIn: getIn, has: has, hasIn: hasIn, merge: merge, mergeDeep: mergeDeep, mergeWith: mergeWith, mergeDeepWith: mergeDeepWith, remove: remove, removeIn: removeIn, set: set, setIn: setIn, update: update, updateIn: updateIn, }; // Note: Iterable is deprecated const Iterable = Collection; export { version, Collection, Iterable, Seq, Map, OrderedMap, List, Stack, Set, OrderedSet, PairSorting, Record, Range, Repeat, is, fromJS, hash, isImmutable, isCollection, isKeyed, isIndexed, isAssociative, isOrdered, isPlainObject, isValueObject, isSeq, isList, isMap, isOrderedMap, isStack, isSet, isOrderedSet, isRecord, get, getIn, has, hasIn, merge, mergeDeep, mergeWith, mergeDeepWith, remove, removeIn, set, setIn, update, updateIn, }; immutable-js-immutable-js-fa7d047/src/Iterator.js000066400000000000000000000040461515165743500220460ustar00rootroot00000000000000export const ITERATE_KEYS = 0; export const ITERATE_VALUES = 1; export const ITERATE_ENTRIES = 2; const REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; const FAUX_ITERATOR_SYMBOL = '@@iterator'; export const ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL; export class Iterator { constructor(next) { this.next = next; } toString() { return '[Iterator]'; } } Iterator.KEYS = ITERATE_KEYS; Iterator.VALUES = ITERATE_VALUES; Iterator.ENTRIES = ITERATE_ENTRIES; Iterator.prototype.inspect = Iterator.prototype.toSource = function () { return this.toString(); }; Iterator.prototype[ITERATOR_SYMBOL] = function () { return this; }; export function iteratorValue(type, k, v, iteratorResult) { const value = type === 0 ? k : type === 1 ? v : [k, v]; iteratorResult ? (iteratorResult.value = value) : (iteratorResult = { value: value, done: false, }); return iteratorResult; } export function iteratorDone() { return { value: undefined, done: true }; } export function hasIterator(maybeIterable) { if (Array.isArray(maybeIterable)) { // IE11 trick as it does not support `Symbol.iterator` return true; } return !!getIteratorFn(maybeIterable); } export function isIterator(maybeIterator) { return maybeIterator && typeof maybeIterator.next === 'function'; } export function getIterator(iterable) { const iteratorFn = getIteratorFn(iterable); return iteratorFn && iteratorFn.call(iterable); } function getIteratorFn(iterable) { const iteratorFn = iterable && ((REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) || iterable[FAUX_ITERATOR_SYMBOL]); if (typeof iteratorFn === 'function') { return iteratorFn; } } export function isEntriesIterable(maybeIterable) { const iteratorFn = getIteratorFn(maybeIterable); return iteratorFn && iteratorFn === maybeIterable.entries; } export function isKeysIterable(maybeIterable) { const iteratorFn = getIteratorFn(maybeIterable); return iteratorFn && iteratorFn === maybeIterable.keys; } immutable-js-immutable-js-fa7d047/src/List.js000066400000000000000000000412511515165743500211670ustar00rootroot00000000000000import { DELETE, SHIFT, SIZE, MASK, OwnerID, MakeRef, SetRef, wrapIndex, wholeSlice, resolveBegin, resolveEnd, } from './TrieUtils'; import { IS_LIST_SYMBOL, isList } from './predicates/isList'; import { IndexedCollection } from './Collection'; import { hasIterator, Iterator, iteratorValue, iteratorDone } from './Iterator'; import { setIn } from './methods/setIn'; import { deleteIn } from './methods/deleteIn'; import { update } from './methods/update'; import { updateIn } from './methods/updateIn'; import { mergeIn } from './methods/mergeIn'; import { mergeDeepIn } from './methods/mergeDeepIn'; import { withMutations } from './methods/withMutations'; import { asMutable } from './methods/asMutable'; import { asImmutable } from './methods/asImmutable'; import { wasAltered } from './methods/wasAltered'; import assertNotInfinite from './utils/assertNotInfinite'; export class List extends IndexedCollection { // @pragma Construction constructor(value) { const empty = emptyList(); if (value === undefined || value === null) { // eslint-disable-next-line no-constructor-return return empty; } if (isList(value)) { // eslint-disable-next-line no-constructor-return return value; } const iter = IndexedCollection(value); const size = iter.size; if (size === 0) { // eslint-disable-next-line no-constructor-return return empty; } assertNotInfinite(size); if (size > 0 && size < SIZE) { // eslint-disable-next-line no-constructor-return return makeList(0, size, SHIFT, null, new VNode(iter.toArray())); } // eslint-disable-next-line no-constructor-return return empty.withMutations(list => { list.setSize(size); iter.forEach((v, i) => list.set(i, v)); }); } static of(/*...values*/) { return this(arguments); } toString() { return this.__toString('List [', ']'); } // @pragma Access get(index, notSetValue) { index = wrapIndex(this, index); if (index >= 0 && index < this.size) { index += this._origin; const node = listNodeFor(this, index); return node && node.array[index & MASK]; } return notSetValue; } // @pragma Modification set(index, value) { return updateList(this, index, value); } remove(index) { return !this.has(index) ? this : index === 0 ? this.shift() : index === this.size - 1 ? this.pop() : this.splice(index, 1); } insert(index, value) { return this.splice(index, 0, value); } clear() { if (this.size === 0) { return this; } if (this.__ownerID) { this.size = this._origin = this._capacity = 0; this._level = SHIFT; this._root = this._tail = this.__hash = undefined; this.__altered = true; return this; } return emptyList(); } push(/*...values*/) { const values = arguments; const oldSize = this.size; return this.withMutations(list => { setListBounds(list, 0, oldSize + values.length); for (let ii = 0; ii < values.length; ii++) { list.set(oldSize + ii, values[ii]); } }); } pop() { return setListBounds(this, 0, -1); } unshift(/*...values*/) { const values = arguments; return this.withMutations(list => { setListBounds(list, -values.length); for (let ii = 0; ii < values.length; ii++) { list.set(ii, values[ii]); } }); } shift() { return setListBounds(this, 1); } // @pragma Composition concat(/*...collections*/) { const seqs = []; for (let i = 0; i < arguments.length; i++) { const argument = arguments[i]; const seq = IndexedCollection( typeof argument !== 'string' && hasIterator(argument) ? argument : [argument] ); if (seq.size !== 0) { seqs.push(seq); } } if (seqs.length === 0) { return this; } if (this.size === 0 && !this.__ownerID && seqs.length === 1) { return this.constructor(seqs[0]); } return this.withMutations(list => { seqs.forEach(seq => seq.forEach(value => list.push(value))); }); } setSize(size) { return setListBounds(this, 0, size); } map(mapper, context) { return this.withMutations(list => { for (let i = 0; i < this.size; i++) { list.set(i, mapper.call(context, list.get(i), i, this)); } }); } // @pragma Iteration slice(begin, end) { const size = this.size; if (wholeSlice(begin, end, size)) { return this; } return setListBounds( this, resolveBegin(begin, size), resolveEnd(end, size) ); } __iterator(type, reverse) { let index = reverse ? this.size : 0; const values = iterateList(this, reverse); return new Iterator(() => { const value = values(); return value === DONE ? iteratorDone() : iteratorValue(type, reverse ? --index : index++, value); }); } __iterate(fn, reverse) { let index = reverse ? this.size : 0; const values = iterateList(this, reverse); let value; while ((value = values()) !== DONE) { if (fn(value, reverse ? --index : index++, this) === false) { break; } } return index; } __ensureOwner(ownerID) { if (ownerID === this.__ownerID) { return this; } if (!ownerID) { if (this.size === 0) { return emptyList(); } this.__ownerID = ownerID; this.__altered = false; return this; } return makeList( this._origin, this._capacity, this._level, this._root, this._tail, ownerID, this.__hash ); } } List.isList = isList; const ListPrototype = List.prototype; ListPrototype[IS_LIST_SYMBOL] = true; ListPrototype[DELETE] = ListPrototype.remove; ListPrototype.merge = ListPrototype.concat; ListPrototype.setIn = setIn; ListPrototype.deleteIn = ListPrototype.removeIn = deleteIn; ListPrototype.update = update; ListPrototype.updateIn = updateIn; ListPrototype.mergeIn = mergeIn; ListPrototype.mergeDeepIn = mergeDeepIn; ListPrototype.withMutations = withMutations; ListPrototype.wasAltered = wasAltered; ListPrototype.asImmutable = asImmutable; ListPrototype['@@transducer/init'] = ListPrototype.asMutable = asMutable; ListPrototype['@@transducer/step'] = function (result, arr) { return result.push(arr); }; ListPrototype['@@transducer/result'] = function (obj) { return obj.asImmutable(); }; class VNode { constructor(array, ownerID) { this.array = array; this.ownerID = ownerID; } // TODO: seems like these methods are very similar removeBefore(ownerID, level, index) { if (index === level ? 1 << level : 0 || this.array.length === 0) { return this; } const originIndex = (index >>> level) & MASK; if (originIndex >= this.array.length) { return new VNode([], ownerID); } const removingFirst = originIndex === 0; let newChild; if (level > 0) { const oldChild = this.array[originIndex]; newChild = oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index); if (newChild === oldChild && removingFirst) { return this; } } if (removingFirst && !newChild) { return this; } const editable = editableVNode(this, ownerID); if (!removingFirst) { for (let ii = 0; ii < originIndex; ii++) { editable.array[ii] = undefined; } } if (newChild) { editable.array[originIndex] = newChild; } return editable; } removeAfter(ownerID, level, index) { if (index === (level ? 1 << level : 0) || this.array.length === 0) { return this; } const sizeIndex = ((index - 1) >>> level) & MASK; if (sizeIndex >= this.array.length) { return this; } let newChild; if (level > 0) { const oldChild = this.array[sizeIndex]; newChild = oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index); if (newChild === oldChild && sizeIndex === this.array.length - 1) { return this; } } const editable = editableVNode(this, ownerID); editable.array.splice(sizeIndex + 1); if (newChild) { editable.array[sizeIndex] = newChild; } return editable; } } const DONE = {}; function iterateList(list, reverse) { const left = list._origin; const right = list._capacity; const tailPos = getTailOffset(right); const tail = list._tail; return iterateNodeOrLeaf(list._root, list._level, 0); function iterateNodeOrLeaf(node, level, offset) { return level === 0 ? iterateLeaf(node, offset) : iterateNode(node, level, offset); } function iterateLeaf(node, offset) { const array = offset === tailPos ? tail && tail.array : node && node.array; let from = offset > left ? 0 : left - offset; let to = right - offset; if (to > SIZE) { to = SIZE; } return () => { if (from === to) { return DONE; } const idx = reverse ? --to : from++; return array && array[idx]; }; } function iterateNode(node, level, offset) { let values; const array = node && node.array; let from = offset > left ? 0 : (left - offset) >> level; let to = ((right - offset) >> level) + 1; if (to > SIZE) { to = SIZE; } return () => { while (true) { if (values) { const value = values(); if (value !== DONE) { return value; } values = null; } if (from === to) { return DONE; } const idx = reverse ? --to : from++; values = iterateNodeOrLeaf( array && array[idx], level - SHIFT, offset + (idx << level) ); } }; } } function makeList(origin, capacity, level, root, tail, ownerID, hash) { const list = Object.create(ListPrototype); list.size = capacity - origin; list._origin = origin; list._capacity = capacity; list._level = level; list._root = root; list._tail = tail; list.__ownerID = ownerID; list.__hash = hash; list.__altered = false; return list; } let EMPTY_LIST; export function emptyList() { return EMPTY_LIST || (EMPTY_LIST = makeList(0, 0, SHIFT)); } function updateList(list, index, value) { index = wrapIndex(list, index); if (index !== index) { return list; } if (index >= list.size || index < 0) { return list.withMutations(list => { index < 0 ? setListBounds(list, index).set(0, value) : setListBounds(list, 0, index + 1).set(index, value); }); } index += list._origin; let newTail = list._tail; let newRoot = list._root; const didAlter = MakeRef(); if (index >= getTailOffset(list._capacity)) { newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter); } else { newRoot = updateVNode( newRoot, list.__ownerID, list._level, index, value, didAlter ); } if (!didAlter.value) { return list; } if (list.__ownerID) { list._root = newRoot; list._tail = newTail; list.__hash = undefined; list.__altered = true; return list; } return makeList(list._origin, list._capacity, list._level, newRoot, newTail); } function updateVNode(node, ownerID, level, index, value, didAlter) { const idx = (index >>> level) & MASK; const nodeHas = node && idx < node.array.length; if (!nodeHas && value === undefined) { return node; } let newNode; if (level > 0) { const lowerNode = node && node.array[idx]; const newLowerNode = updateVNode( lowerNode, ownerID, level - SHIFT, index, value, didAlter ); if (newLowerNode === lowerNode) { return node; } newNode = editableVNode(node, ownerID); newNode.array[idx] = newLowerNode; return newNode; } if (nodeHas && node.array[idx] === value) { return node; } if (didAlter) { SetRef(didAlter); } newNode = editableVNode(node, ownerID); if (value === undefined && idx === newNode.array.length - 1) { newNode.array.pop(); } else { newNode.array[idx] = value; } return newNode; } function editableVNode(node, ownerID) { if (ownerID && node && ownerID === node.ownerID) { return node; } return new VNode(node ? node.array.slice() : [], ownerID); } function listNodeFor(list, rawIndex) { if (rawIndex >= getTailOffset(list._capacity)) { return list._tail; } if (rawIndex < 1 << (list._level + SHIFT)) { let node = list._root; let level = list._level; while (node && level > 0) { node = node.array[(rawIndex >>> level) & MASK]; level -= SHIFT; } return node; } } function setListBounds(list, begin, end) { // Sanitize begin & end using this shorthand for ToInt32(argument) // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 if (begin !== undefined) { begin |= 0; } if (end !== undefined) { end |= 0; } const owner = list.__ownerID || new OwnerID(); let oldOrigin = list._origin; let oldCapacity = list._capacity; let newOrigin = oldOrigin + begin; let newCapacity = end === undefined ? oldCapacity : end < 0 ? oldCapacity + end : oldOrigin + end; if (newOrigin === oldOrigin && newCapacity === oldCapacity) { return list; } // If it's going to end after it starts, it's empty. if (newOrigin >= newCapacity) { return list.clear(); } let newLevel = list._level; let newRoot = list._root; // New origin might need creating a higher root. let offsetShift = 0; while (newOrigin + offsetShift < 0) { newRoot = new VNode( newRoot && newRoot.array.length ? [undefined, newRoot] : [], owner ); newLevel += SHIFT; offsetShift += 1 << newLevel; } if (offsetShift) { newOrigin += offsetShift; oldOrigin += offsetShift; newCapacity += offsetShift; oldCapacity += offsetShift; } const oldTailOffset = getTailOffset(oldCapacity); const newTailOffset = getTailOffset(newCapacity); // New size might need creating a higher root. while (newTailOffset >= 1 << (newLevel + SHIFT)) { newRoot = new VNode( newRoot && newRoot.array.length ? [newRoot] : [], owner ); newLevel += SHIFT; } // Locate or create the new tail. const oldTail = list._tail; let newTail = newTailOffset < oldTailOffset ? listNodeFor(list, newCapacity - 1) : newTailOffset > oldTailOffset ? new VNode([], owner) : oldTail; // Merge Tail into tree. if ( oldTail && newTailOffset > oldTailOffset && newOrigin < oldCapacity && oldTail.array.length ) { newRoot = editableVNode(newRoot, owner); let node = newRoot; for (let level = newLevel; level > SHIFT; level -= SHIFT) { const idx = (oldTailOffset >>> level) & MASK; node = node.array[idx] = editableVNode(node.array[idx], owner); } node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail; } // If the size has been reduced, there's a chance the tail needs to be trimmed. if (newCapacity < oldCapacity) { newTail = newTail && newTail.removeAfter(owner, 0, newCapacity); } // If the new origin is within the tail, then we do not need a root. if (newOrigin >= newTailOffset) { newOrigin -= newTailOffset; newCapacity -= newTailOffset; newLevel = SHIFT; newRoot = null; newTail = newTail && newTail.removeBefore(owner, 0, newOrigin); // Otherwise, if the root has been trimmed, garbage collect. } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) { offsetShift = 0; // Identify the new top root node of the subtree of the old root. while (newRoot) { const beginIndex = (newOrigin >>> newLevel) & MASK; if ((beginIndex !== newTailOffset >>> newLevel) & MASK) { break; } if (beginIndex) { offsetShift += (1 << newLevel) * beginIndex; } newLevel -= SHIFT; newRoot = newRoot.array[beginIndex]; } // Trim the new sides of the new root. if (newRoot && newOrigin > oldOrigin) { newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift); } if (newRoot && newTailOffset < oldTailOffset) { newRoot = newRoot.removeAfter( owner, newLevel, newTailOffset - offsetShift ); } if (offsetShift) { newOrigin -= offsetShift; newCapacity -= offsetShift; } } if (list.__ownerID) { list.size = newCapacity - newOrigin; list._origin = newOrigin; list._capacity = newCapacity; list._level = newLevel; list._root = newRoot; list._tail = newTail; list.__hash = undefined; list.__altered = true; return list; } return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail); } function getTailOffset(size) { return size < SIZE ? 0 : ((size - 1) >>> SHIFT) << SHIFT; } immutable-js-immutable-js-fa7d047/src/Map.js000066400000000000000000000465301515165743500207760ustar00rootroot00000000000000import { is } from './is'; import { Collection, KeyedCollection } from './Collection'; import { IS_MAP_SYMBOL, isMap } from './predicates/isMap'; import { isOrdered } from './predicates/isOrdered'; import { DELETE, SHIFT, SIZE, MASK, NOT_SET, OwnerID, MakeRef, SetRef, } from './TrieUtils'; import { hash } from './Hash'; import { Iterator, iteratorValue, iteratorDone } from './Iterator'; import { sortFactory } from './Operations'; import arrCopy from './utils/arrCopy'; import assertNotInfinite from './utils/assertNotInfinite'; import { setIn } from './methods/setIn'; import { deleteIn } from './methods/deleteIn'; import { update } from './methods/update'; import { updateIn } from './methods/updateIn'; import { merge, mergeWith } from './methods/merge'; import { mergeDeep, mergeDeepWith } from './methods/mergeDeep'; import { mergeIn } from './methods/mergeIn'; import { mergeDeepIn } from './methods/mergeDeepIn'; import { withMutations } from './methods/withMutations'; import { asMutable } from './methods/asMutable'; import { asImmutable } from './methods/asImmutable'; import { wasAltered } from './methods/wasAltered'; import { OrderedMap } from './OrderedMap'; export class Map extends KeyedCollection { // @pragma Construction constructor(value) { // eslint-disable-next-line no-constructor-return return value === undefined || value === null ? emptyMap() : isMap(value) && !isOrdered(value) ? value : emptyMap().withMutations(map => { const iter = KeyedCollection(value); assertNotInfinite(iter.size); iter.forEach((v, k) => map.set(k, v)); }); } static of(...keyValues) { return emptyMap().withMutations(map => { for (let i = 0; i < keyValues.length; i += 2) { if (i + 1 >= keyValues.length) { throw new Error('Missing value for key: ' + keyValues[i]); } map.set(keyValues[i], keyValues[i + 1]); } }); } toString() { return this.__toString('Map {', '}'); } // @pragma Access get(k, notSetValue) { return this._root ? this._root.get(0, undefined, k, notSetValue) : notSetValue; } // @pragma Modification set(k, v) { return updateMap(this, k, v); } remove(k) { return updateMap(this, k, NOT_SET); } deleteAll(keys) { const collection = Collection(keys); if (collection.size === 0) { return this; } return this.withMutations(map => { collection.forEach(key => map.remove(key)); }); } clear() { if (this.size === 0) { return this; } if (this.__ownerID) { this.size = 0; this._root = null; this.__hash = undefined; this.__altered = true; return this; } return emptyMap(); } // @pragma Composition sort(comparator) { // Late binding return OrderedMap(sortFactory(this, comparator)); } sortBy(mapper, comparator) { // Late binding return OrderedMap(sortFactory(this, comparator, mapper)); } map(mapper, context) { return this.withMutations(map => { map.forEach((value, key) => { map.set(key, mapper.call(context, value, key, this)); }); }); } // @pragma Mutability __iterator(type, reverse) { return new MapIterator(this, type, reverse); } __iterate(fn, reverse) { let iterations = 0; this._root && this._root.iterate(entry => { iterations++; return fn(entry[1], entry[0], this); }, reverse); return iterations; } __ensureOwner(ownerID) { if (ownerID === this.__ownerID) { return this; } if (!ownerID) { if (this.size === 0) { return emptyMap(); } this.__ownerID = ownerID; this.__altered = false; return this; } return makeMap(this.size, this._root, ownerID, this.__hash); } } Map.isMap = isMap; const MapPrototype = Map.prototype; MapPrototype[IS_MAP_SYMBOL] = true; MapPrototype[DELETE] = MapPrototype.remove; MapPrototype.removeAll = MapPrototype.deleteAll; MapPrototype.setIn = setIn; MapPrototype.removeIn = MapPrototype.deleteIn = deleteIn; MapPrototype.update = update; MapPrototype.updateIn = updateIn; MapPrototype.merge = MapPrototype.concat = merge; MapPrototype.mergeWith = mergeWith; MapPrototype.mergeDeep = mergeDeep; MapPrototype.mergeDeepWith = mergeDeepWith; MapPrototype.mergeIn = mergeIn; MapPrototype.mergeDeepIn = mergeDeepIn; MapPrototype.withMutations = withMutations; MapPrototype.wasAltered = wasAltered; MapPrototype.asImmutable = asImmutable; MapPrototype['@@transducer/init'] = MapPrototype.asMutable = asMutable; MapPrototype['@@transducer/step'] = function (result, arr) { return result.set(arr[0], arr[1]); }; MapPrototype['@@transducer/result'] = function (obj) { return obj.asImmutable(); }; // #pragma Trie Nodes class ArrayMapNode { constructor(ownerID, entries) { this.ownerID = ownerID; this.entries = entries; } get(shift, keyHash, key, notSetValue) { const entries = this.entries; for (let ii = 0, len = entries.length; ii < len; ii++) { if (is(key, entries[ii][0])) { return entries[ii][1]; } } return notSetValue; } update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { const removed = value === NOT_SET; const entries = this.entries; let idx = 0; const len = entries.length; for (; idx < len; idx++) { if (is(key, entries[idx][0])) { break; } } const exists = idx < len; if (exists ? entries[idx][1] === value : removed) { return this; } SetRef(didAlter); (removed || !exists) && SetRef(didChangeSize); if (removed && entries.length === 1) { return; // undefined } if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) { return createNodes(ownerID, entries, key, value); } const isEditable = ownerID && ownerID === this.ownerID; const newEntries = isEditable ? entries : arrCopy(entries); if (exists) { if (removed) { idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop()); } else { newEntries[idx] = [key, value]; } } else { newEntries.push([key, value]); } if (isEditable) { this.entries = newEntries; return this; } return new ArrayMapNode(ownerID, newEntries); } } class BitmapIndexedNode { constructor(ownerID, bitmap, nodes) { this.ownerID = ownerID; this.bitmap = bitmap; this.nodes = nodes; } get(shift, keyHash, key, notSetValue) { if (keyHash === undefined) { keyHash = hash(key); } const bit = 1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK); const bitmap = this.bitmap; return (bitmap & bit) === 0 ? notSetValue : this.nodes[popCount(bitmap & (bit - 1))].get( shift + SHIFT, keyHash, key, notSetValue ); } update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { if (keyHash === undefined) { keyHash = hash(key); } const keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; const bit = 1 << keyHashFrag; const bitmap = this.bitmap; const exists = (bitmap & bit) !== 0; if (!exists && value === NOT_SET) { return this; } const idx = popCount(bitmap & (bit - 1)); const nodes = this.nodes; const node = exists ? nodes[idx] : undefined; const newNode = updateNode( node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter ); if (newNode === node) { return this; } if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) { return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode); } if ( exists && !newNode && nodes.length === 2 && isLeafNode(nodes[idx ^ 1]) ) { return nodes[idx ^ 1]; } if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) { return newNode; } const isEditable = ownerID && ownerID === this.ownerID; const newBitmap = exists ? (newNode ? bitmap : bitmap ^ bit) : bitmap | bit; const newNodes = exists ? newNode ? setAt(nodes, idx, newNode, isEditable) : spliceOut(nodes, idx, isEditable) : spliceIn(nodes, idx, newNode, isEditable); if (isEditable) { this.bitmap = newBitmap; this.nodes = newNodes; return this; } return new BitmapIndexedNode(ownerID, newBitmap, newNodes); } } class HashArrayMapNode { constructor(ownerID, count, nodes) { this.ownerID = ownerID; this.count = count; this.nodes = nodes; } get(shift, keyHash, key, notSetValue) { if (keyHash === undefined) { keyHash = hash(key); } const idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; const node = this.nodes[idx]; return node ? node.get(shift + SHIFT, keyHash, key, notSetValue) : notSetValue; } update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { if (keyHash === undefined) { keyHash = hash(key); } const idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; const removed = value === NOT_SET; const nodes = this.nodes; const node = nodes[idx]; if (removed && !node) { return this; } const newNode = updateNode( node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter ); if (newNode === node) { return this; } let newCount = this.count; if (!node) { newCount++; } else if (!newNode) { newCount--; if (newCount < MIN_HASH_ARRAY_MAP_SIZE) { return packNodes(ownerID, nodes, newCount, idx); } } const isEditable = ownerID && ownerID === this.ownerID; const newNodes = setAt(nodes, idx, newNode, isEditable); if (isEditable) { this.count = newCount; this.nodes = newNodes; return this; } return new HashArrayMapNode(ownerID, newCount, newNodes); } } class HashCollisionNode { constructor(ownerID, keyHash, entries) { this.ownerID = ownerID; this.keyHash = keyHash; this.entries = entries; } get(shift, keyHash, key, notSetValue) { const entries = this.entries; for (let ii = 0, len = entries.length; ii < len; ii++) { if (is(key, entries[ii][0])) { return entries[ii][1]; } } return notSetValue; } update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { if (keyHash === undefined) { keyHash = hash(key); } const removed = value === NOT_SET; if (keyHash !== this.keyHash) { if (removed) { return this; } SetRef(didAlter); SetRef(didChangeSize); return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]); } const entries = this.entries; let idx = 0; const len = entries.length; for (; idx < len; idx++) { if (is(key, entries[idx][0])) { break; } } const exists = idx < len; if (exists ? entries[idx][1] === value : removed) { return this; } SetRef(didAlter); (removed || !exists) && SetRef(didChangeSize); if (removed && len === 2) { return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]); } const isEditable = ownerID && ownerID === this.ownerID; const newEntries = isEditable ? entries : arrCopy(entries); if (exists) { if (removed) { idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop()); } else { newEntries[idx] = [key, value]; } } else { newEntries.push([key, value]); } if (isEditable) { this.entries = newEntries; return this; } return new HashCollisionNode(ownerID, this.keyHash, newEntries); } } class ValueNode { constructor(ownerID, keyHash, entry) { this.ownerID = ownerID; this.keyHash = keyHash; this.entry = entry; } get(shift, keyHash, key, notSetValue) { return is(key, this.entry[0]) ? this.entry[1] : notSetValue; } update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) { const removed = value === NOT_SET; const keyMatch = is(key, this.entry[0]); if (keyMatch ? value === this.entry[1] : removed) { return this; } SetRef(didAlter); if (removed) { SetRef(didChangeSize); return; // undefined } if (keyMatch) { if (ownerID && ownerID === this.ownerID) { this.entry[1] = value; return this; } return new ValueNode(ownerID, this.keyHash, [key, value]); } SetRef(didChangeSize); return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]); } } // #pragma Iterators ArrayMapNode.prototype.iterate = HashCollisionNode.prototype.iterate = function (fn, reverse) { const entries = this.entries; for (let ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) { if (fn(entries[reverse ? maxIndex - ii : ii]) === false) { return false; } } }; BitmapIndexedNode.prototype.iterate = HashArrayMapNode.prototype.iterate = function (fn, reverse) { const nodes = this.nodes; for (let ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) { const node = nodes[reverse ? maxIndex - ii : ii]; if (node && node.iterate(fn, reverse) === false) { return false; } } }; // eslint-disable-next-line no-unused-vars ValueNode.prototype.iterate = function (fn, reverse) { return fn(this.entry); }; class MapIterator extends Iterator { constructor(map, type, reverse) { this._type = type; this._reverse = reverse; this._stack = map._root && mapIteratorFrame(map._root); } next() { const type = this._type; let stack = this._stack; while (stack) { const node = stack.node; const index = stack.index++; let maxIndex; if (node.entry) { if (index === 0) { return mapIteratorValue(type, node.entry); } } else if (node.entries) { maxIndex = node.entries.length - 1; if (index <= maxIndex) { return mapIteratorValue( type, node.entries[this._reverse ? maxIndex - index : index] ); } } else { maxIndex = node.nodes.length - 1; if (index <= maxIndex) { const subNode = node.nodes[this._reverse ? maxIndex - index : index]; if (subNode) { if (subNode.entry) { return mapIteratorValue(type, subNode.entry); } stack = this._stack = mapIteratorFrame(subNode, stack); } continue; } } stack = this._stack = this._stack.__prev; } return iteratorDone(); } } function mapIteratorValue(type, entry) { return iteratorValue(type, entry[0], entry[1]); } function mapIteratorFrame(node, prev) { return { node: node, index: 0, __prev: prev, }; } function makeMap(size, root, ownerID, hash) { const map = Object.create(MapPrototype); map.size = size; map._root = root; map.__ownerID = ownerID; map.__hash = hash; map.__altered = false; return map; } let EMPTY_MAP; export function emptyMap() { return EMPTY_MAP || (EMPTY_MAP = makeMap(0)); } function updateMap(map, k, v) { let newRoot; let newSize; if (!map._root) { if (v === NOT_SET) { return map; } newSize = 1; newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]); } else { const didChangeSize = MakeRef(); const didAlter = MakeRef(); newRoot = updateNode( map._root, map.__ownerID, 0, undefined, k, v, didChangeSize, didAlter ); if (!didAlter.value) { return map; } newSize = map.size + (didChangeSize.value ? (v === NOT_SET ? -1 : 1) : 0); } if (map.__ownerID) { map.size = newSize; map._root = newRoot; map.__hash = undefined; map.__altered = true; return map; } return newRoot ? makeMap(newSize, newRoot) : emptyMap(); } function updateNode( node, ownerID, shift, keyHash, key, value, didChangeSize, didAlter ) { if (!node) { if (value === NOT_SET) { return node; } SetRef(didAlter); SetRef(didChangeSize); return new ValueNode(ownerID, keyHash, [key, value]); } return node.update( ownerID, shift, keyHash, key, value, didChangeSize, didAlter ); } function isLeafNode(node) { return ( node.constructor === ValueNode || node.constructor === HashCollisionNode ); } function mergeIntoNode(node, ownerID, shift, keyHash, entry) { if (node.keyHash === keyHash) { return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]); } const idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK; const idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK; let newNode; const nodes = idx1 === idx2 ? [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] : ((newNode = new ValueNode(ownerID, keyHash, entry)), idx1 < idx2 ? [node, newNode] : [newNode, node]); return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes); } function createNodes(ownerID, entries, key, value) { if (!ownerID) { ownerID = new OwnerID(); } let node = new ValueNode(ownerID, hash(key), [key, value]); for (let ii = 0; ii < entries.length; ii++) { const entry = entries[ii]; node = node.update(ownerID, 0, undefined, entry[0], entry[1]); } return node; } function packNodes(ownerID, nodes, count, excluding) { let bitmap = 0; let packedII = 0; const packedNodes = new Array(count); for (let ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) { const node = nodes[ii]; if (node !== undefined && ii !== excluding) { bitmap |= bit; packedNodes[packedII++] = node; } } return new BitmapIndexedNode(ownerID, bitmap, packedNodes); } function expandNodes(ownerID, nodes, bitmap, including, node) { let count = 0; const expandedNodes = new Array(SIZE); for (let ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) { expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined; } expandedNodes[including] = node; return new HashArrayMapNode(ownerID, count + 1, expandedNodes); } function popCount(x) { x -= (x >> 1) & 0x55555555; x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0f0f0f0f; x += x >> 8; x += x >> 16; return x & 0x7f; } function setAt(array, idx, val, canEdit) { const newArray = canEdit ? array : arrCopy(array); newArray[idx] = val; return newArray; } function spliceIn(array, idx, val, canEdit) { const newLen = array.length + 1; if (canEdit && idx + 1 === newLen) { array[idx] = val; return array; } const newArray = new Array(newLen); let after = 0; for (let ii = 0; ii < newLen; ii++) { if (ii === idx) { newArray[ii] = val; after = -1; } else { newArray[ii] = array[ii + after]; } } return newArray; } function spliceOut(array, idx, canEdit) { const newLen = array.length - 1; if (canEdit && idx === newLen) { array.pop(); return array; } const newArray = new Array(newLen); let after = 0; for (let ii = 0; ii < newLen; ii++) { if (ii === idx) { after = 1; } newArray[ii] = array[ii + after]; } return newArray; } const MAX_ARRAY_MAP_SIZE = SIZE / 4; const MAX_BITMAP_INDEXED_SIZE = SIZE / 2; const MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4; immutable-js-immutable-js-fa7d047/src/Math.js000066400000000000000000000012761515165743500211500ustar00rootroot00000000000000export const imul = typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 ? Math.imul : function imul(a, b) { a |= 0; // int b |= 0; // int const c = a & 0xffff; const d = b & 0xffff; // Shift by 0 fixes the sign on the high part. return (c * d + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0)) | 0; // int }; // v8 has an optimization for storing 31-bit signed numbers. // Values which have either 00 or 11 as the high order bits qualify. // This function drops the highest order bit in a signed number, maintaining // the sign bit. export function smi(i32) { return ((i32 >>> 1) & 0x40000000) | (i32 & 0xbfffffff); } immutable-js-immutable-js-fa7d047/src/Operations.js000066400000000000000000000614041515165743500224010ustar00rootroot00000000000000import { NOT_SET, ensureSize, wrapIndex, wholeSlice, resolveBegin, resolveEnd, } from './TrieUtils'; import { Collection, KeyedCollection, SetCollection, IndexedCollection, } from './Collection'; import { isCollection } from './predicates/isCollection'; import { isKeyed } from './predicates/isKeyed'; import { isIndexed } from './predicates/isIndexed'; import { isOrdered, IS_ORDERED_SYMBOL } from './predicates/isOrdered'; import { isSeq } from './predicates/isSeq'; import { getIterator, Iterator, iteratorValue, iteratorDone, ITERATE_KEYS, ITERATE_VALUES, ITERATE_ENTRIES, } from './Iterator'; import { Seq, KeyedSeq, SetSeq, IndexedSeq, keyedSeqFromValue, indexedSeqFromValue, ArraySeq, } from './Seq'; import { Map } from './Map'; import { OrderedMap } from './OrderedMap'; export class ToKeyedSequence extends KeyedSeq { constructor(indexed, useKeys) { this._iter = indexed; this._useKeys = useKeys; this.size = indexed.size; } get(key, notSetValue) { return this._iter.get(key, notSetValue); } has(key) { return this._iter.has(key); } valueSeq() { return this._iter.valueSeq(); } reverse() { const reversedSequence = reverseFactory(this, true); if (!this._useKeys) { reversedSequence.valueSeq = () => this._iter.toSeq().reverse(); } return reversedSequence; } map(mapper, context) { const mappedSequence = mapFactory(this, mapper, context); if (!this._useKeys) { mappedSequence.valueSeq = () => this._iter.toSeq().map(mapper, context); } return mappedSequence; } __iterate(fn, reverse) { return this._iter.__iterate((v, k) => fn(v, k, this), reverse); } __iterator(type, reverse) { return this._iter.__iterator(type, reverse); } } ToKeyedSequence.prototype[IS_ORDERED_SYMBOL] = true; export class ToIndexedSequence extends IndexedSeq { constructor(iter) { this._iter = iter; this.size = iter.size; } includes(value) { return this._iter.includes(value); } __iterate(fn, reverse) { let i = 0; reverse && ensureSize(this); return this._iter.__iterate( v => fn(v, reverse ? this.size - ++i : i++, this), reverse ); } __iterator(type, reverse) { const iterator = this._iter.__iterator(ITERATE_VALUES, reverse); let i = 0; reverse && ensureSize(this); return new Iterator(() => { const step = iterator.next(); return step.done ? step : iteratorValue( type, reverse ? this.size - ++i : i++, step.value, step ); }); } } export class ToSetSequence extends SetSeq { constructor(iter) { this._iter = iter; this.size = iter.size; } has(key) { return this._iter.includes(key); } __iterate(fn, reverse) { return this._iter.__iterate(v => fn(v, v, this), reverse); } __iterator(type, reverse) { const iterator = this._iter.__iterator(ITERATE_VALUES, reverse); return new Iterator(() => { const step = iterator.next(); return step.done ? step : iteratorValue(type, step.value, step.value, step); }); } } export class FromEntriesSequence extends KeyedSeq { constructor(entries) { this._iter = entries; this.size = entries.size; } entrySeq() { return this._iter.toSeq(); } __iterate(fn, reverse) { return this._iter.__iterate(entry => { // Check if entry exists first so array access doesn't throw for holes // in the parent iteration. if (entry) { validateEntry(entry); const indexedCollection = isCollection(entry); return fn( indexedCollection ? entry.get(1) : entry[1], indexedCollection ? entry.get(0) : entry[0], this ); } }, reverse); } __iterator(type, reverse) { const iterator = this._iter.__iterator(ITERATE_VALUES, reverse); return new Iterator(() => { while (true) { const step = iterator.next(); if (step.done) { return step; } const entry = step.value; // Check if entry exists first so array access doesn't throw for holes // in the parent iteration. if (entry) { validateEntry(entry); const indexedCollection = isCollection(entry); return iteratorValue( type, indexedCollection ? entry.get(0) : entry[0], indexedCollection ? entry.get(1) : entry[1], step ); } } }); } } ToIndexedSequence.prototype.cacheResult = ToKeyedSequence.prototype.cacheResult = ToSetSequence.prototype.cacheResult = FromEntriesSequence.prototype.cacheResult = cacheResultThrough; export function flipFactory(collection) { const flipSequence = makeSequence(collection); flipSequence._iter = collection; flipSequence.size = collection.size; flipSequence.flip = () => collection; flipSequence.reverse = function () { const reversedSequence = collection.reverse.apply(this); // super.reverse() reversedSequence.flip = () => collection.reverse(); return reversedSequence; }; flipSequence.has = key => collection.includes(key); flipSequence.includes = key => collection.has(key); flipSequence.cacheResult = cacheResultThrough; flipSequence.__iterateUncached = function (fn, reverse) { return collection.__iterate((v, k) => fn(k, v, this) !== false, reverse); }; flipSequence.__iteratorUncached = function (type, reverse) { if (type === ITERATE_ENTRIES) { const iterator = collection.__iterator(type, reverse); return new Iterator(() => { const step = iterator.next(); if (!step.done) { const k = step.value[0]; step.value[0] = step.value[1]; step.value[1] = k; } return step; }); } return collection.__iterator( type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES, reverse ); }; return flipSequence; } export function mapFactory(collection, mapper, context) { const mappedSequence = makeSequence(collection); mappedSequence.size = collection.size; mappedSequence.has = key => collection.has(key); mappedSequence.get = (key, notSetValue) => { const v = collection.get(key, NOT_SET); return v === NOT_SET ? notSetValue : mapper.call(context, v, key, collection); }; mappedSequence.__iterateUncached = function (fn, reverse) { return collection.__iterate( (v, k, c) => fn(mapper.call(context, v, k, c), k, this) !== false, reverse ); }; mappedSequence.__iteratorUncached = function (type, reverse) { const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); return new Iterator(() => { const step = iterator.next(); if (step.done) { return step; } const entry = step.value; const key = entry[0]; return iteratorValue( type, key, mapper.call(context, entry[1], key, collection), step ); }); }; return mappedSequence; } export function reverseFactory(collection, useKeys) { const reversedSequence = makeSequence(collection); reversedSequence._iter = collection; reversedSequence.size = collection.size; reversedSequence.reverse = () => collection; if (collection.flip) { reversedSequence.flip = function () { const flipSequence = flipFactory(collection); flipSequence.reverse = () => collection.flip(); return flipSequence; }; } reversedSequence.get = (key, notSetValue) => collection.get(useKeys ? key : -1 - key, notSetValue); reversedSequence.has = key => collection.has(useKeys ? key : -1 - key); reversedSequence.includes = value => collection.includes(value); reversedSequence.cacheResult = cacheResultThrough; reversedSequence.__iterate = function (fn, reverse) { let i = 0; reverse && ensureSize(collection); return collection.__iterate( (v, k) => fn(v, useKeys ? k : reverse ? this.size - ++i : i++, this), !reverse ); }; reversedSequence.__iterator = (type, reverse) => { let i = 0; reverse && ensureSize(collection); const iterator = collection.__iterator(ITERATE_ENTRIES, !reverse); return new Iterator(() => { const step = iterator.next(); if (step.done) { return step; } const entry = step.value; return iteratorValue( type, useKeys ? entry[0] : reverse ? this.size - ++i : i++, entry[1], step ); }); }; return reversedSequence; } export function filterFactory(collection, predicate, context, useKeys) { const filterSequence = makeSequence(collection); if (useKeys) { filterSequence.has = key => { const v = collection.get(key, NOT_SET); return v !== NOT_SET && !!predicate.call(context, v, key, collection); }; filterSequence.get = (key, notSetValue) => { const v = collection.get(key, NOT_SET); return v !== NOT_SET && predicate.call(context, v, key, collection) ? v : notSetValue; }; } filterSequence.__iterateUncached = function (fn, reverse) { let iterations = 0; collection.__iterate((v, k, c) => { if (predicate.call(context, v, k, c)) { iterations++; return fn(v, useKeys ? k : iterations - 1, this); } }, reverse); return iterations; }; filterSequence.__iteratorUncached = function (type, reverse) { const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); let iterations = 0; return new Iterator(() => { while (true) { const step = iterator.next(); if (step.done) { return step; } const entry = step.value; const key = entry[0]; const value = entry[1]; if (predicate.call(context, value, key, collection)) { return iteratorValue(type, useKeys ? key : iterations++, value, step); } } }); }; return filterSequence; } export function countByFactory(collection, grouper, context) { const groups = Map().asMutable(); collection.__iterate((v, k) => { groups.update(grouper.call(context, v, k, collection), 0, a => a + 1); }); return groups.asImmutable(); } export function groupByFactory(collection, grouper, context) { const isKeyedIter = isKeyed(collection); const groups = (isOrdered(collection) ? OrderedMap() : Map()).asMutable(); collection.__iterate((v, k) => { groups.update( grouper.call(context, v, k, collection), a => ((a = a || []), a.push(isKeyedIter ? [k, v] : v), a) ); }); const coerce = collectionClass(collection); return groups.map(arr => reify(collection, coerce(arr))).asImmutable(); } export function partitionFactory(collection, predicate, context) { const isKeyedIter = isKeyed(collection); const groups = [[], []]; collection.__iterate((v, k) => { groups[predicate.call(context, v, k, collection) ? 1 : 0].push( isKeyedIter ? [k, v] : v ); }); const coerce = collectionClass(collection); return groups.map(arr => reify(collection, coerce(arr))); } export function sliceFactory(collection, begin, end, useKeys) { const originalSize = collection.size; if (wholeSlice(begin, end, originalSize)) { return collection; } // begin or end can not be resolved if they were provided as negative numbers and // this collection's size is unknown. In that case, cache first so there is // a known size and these do not resolve to NaN. if (typeof originalSize === 'undefined' && (begin < 0 || end < 0)) { return sliceFactory(collection.toSeq().cacheResult(), begin, end, useKeys); } const resolvedBegin = resolveBegin(begin, originalSize); const resolvedEnd = resolveEnd(end, originalSize); // Note: resolvedEnd is undefined when the original sequence's length is // unknown and this slice did not supply an end and should contain all // elements after resolvedBegin. // In that case, resolvedSize will be NaN and sliceSize will remain undefined. const resolvedSize = resolvedEnd - resolvedBegin; let sliceSize; if (resolvedSize === resolvedSize) { sliceSize = resolvedSize < 0 ? 0 : resolvedSize; } const sliceSeq = makeSequence(collection); // If collection.size is undefined, the size of the realized sliceSeq is // unknown at this point unless the number of items to slice is 0 sliceSeq.size = sliceSize === 0 ? sliceSize : (collection.size && sliceSize) || undefined; if (!useKeys && isSeq(collection) && sliceSize >= 0) { sliceSeq.get = function (index, notSetValue) { index = wrapIndex(this, index); return index >= 0 && index < sliceSize ? collection.get(index + resolvedBegin, notSetValue) : notSetValue; }; } sliceSeq.__iterateUncached = function (fn, reverse) { if (sliceSize === 0) { return 0; } if (reverse) { return this.cacheResult().__iterate(fn, reverse); } let skipped = 0; let isSkipping = true; let iterations = 0; collection.__iterate((v, k) => { if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) { iterations++; return ( fn(v, useKeys ? k : iterations - 1, this) !== false && iterations !== sliceSize ); } }); return iterations; }; sliceSeq.__iteratorUncached = function (type, reverse) { if (sliceSize !== 0 && reverse) { return this.cacheResult().__iterator(type, reverse); } // Don't bother instantiating parent iterator if taking 0. if (sliceSize === 0) { return new Iterator(iteratorDone); } const iterator = collection.__iterator(type, reverse); let skipped = 0; let iterations = 0; return new Iterator(() => { while (skipped++ < resolvedBegin) { iterator.next(); } if (++iterations > sliceSize) { return iteratorDone(); } const step = iterator.next(); if (useKeys || type === ITERATE_VALUES || step.done) { return step; } if (type === ITERATE_KEYS) { return iteratorValue(type, iterations - 1, undefined, step); } return iteratorValue(type, iterations - 1, step.value[1], step); }); }; return sliceSeq; } export function takeWhileFactory(collection, predicate, context) { const takeSequence = makeSequence(collection); takeSequence.__iterateUncached = function (fn, reverse) { if (reverse) { return this.cacheResult().__iterate(fn, reverse); } let iterations = 0; collection.__iterate( (v, k, c) => predicate.call(context, v, k, c) && ++iterations && fn(v, k, this) ); return iterations; }; takeSequence.__iteratorUncached = function (type, reverse) { if (reverse) { return this.cacheResult().__iterator(type, reverse); } const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); let iterating = true; return new Iterator(() => { if (!iterating) { return iteratorDone(); } const step = iterator.next(); if (step.done) { return step; } const entry = step.value; const k = entry[0]; const v = entry[1]; if (!predicate.call(context, v, k, this)) { iterating = false; return iteratorDone(); } return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); }); }; return takeSequence; } export function skipWhileFactory(collection, predicate, context, useKeys) { const skipSequence = makeSequence(collection); skipSequence.__iterateUncached = function (fn, reverse) { if (reverse) { return this.cacheResult().__iterate(fn, reverse); } let isSkipping = true; let iterations = 0; collection.__iterate((v, k, c) => { if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) { iterations++; return fn(v, useKeys ? k : iterations - 1, this); } }); return iterations; }; skipSequence.__iteratorUncached = function (type, reverse) { if (reverse) { return this.cacheResult().__iterator(type, reverse); } const iterator = collection.__iterator(ITERATE_ENTRIES, reverse); let skipping = true; let iterations = 0; return new Iterator(() => { let step; let k; let v; do { step = iterator.next(); if (step.done) { if (useKeys || type === ITERATE_VALUES) { return step; } if (type === ITERATE_KEYS) { return iteratorValue(type, iterations++, undefined, step); } return iteratorValue(type, iterations++, step.value[1], step); } const entry = step.value; k = entry[0]; v = entry[1]; skipping && (skipping = predicate.call(context, v, k, this)); } while (skipping); return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step); }); }; return skipSequence; } export function concatFactory(collection, values) { const isKeyedCollection = isKeyed(collection); const iters = [collection] .concat(values) .map(v => { if (!isCollection(v)) { v = isKeyedCollection ? keyedSeqFromValue(v) : indexedSeqFromValue(Array.isArray(v) ? v : [v]); } else if (isKeyedCollection) { v = KeyedCollection(v); } return v; }) .filter(v => v.size !== 0); if (iters.length === 0) { return collection; } if (iters.length === 1) { const singleton = iters[0]; if ( singleton === collection || (isKeyedCollection && isKeyed(singleton)) || (isIndexed(collection) && isIndexed(singleton)) ) { return singleton; } } let concatSeq = new ArraySeq(iters); if (isKeyedCollection) { concatSeq = concatSeq.toKeyedSeq(); } else if (!isIndexed(collection)) { concatSeq = concatSeq.toSetSeq(); } concatSeq = concatSeq.flatten(true); concatSeq.size = iters.reduce((sum, seq) => { if (sum !== undefined) { const size = seq.size; if (size !== undefined) { return sum + size; } } }, 0); return concatSeq; } export function flattenFactory(collection, depth, useKeys) { const flatSequence = makeSequence(collection); flatSequence.__iterateUncached = function (fn, reverse) { if (reverse) { return this.cacheResult().__iterate(fn, reverse); } let iterations = 0; let stopped = false; function flatDeep(iter, currentDepth) { iter.__iterate((v, k) => { if ((!depth || currentDepth < depth) && isCollection(v)) { flatDeep(v, currentDepth + 1); } else { iterations++; if (fn(v, useKeys ? k : iterations - 1, flatSequence) === false) { stopped = true; } } return !stopped; }, reverse); } flatDeep(collection, 0); return iterations; }; flatSequence.__iteratorUncached = function (type, reverse) { if (reverse) { return this.cacheResult().__iterator(type, reverse); } let iterator = collection.__iterator(type, reverse); const stack = []; let iterations = 0; return new Iterator(() => { while (iterator) { const step = iterator.next(); if (step.done !== false) { iterator = stack.pop(); continue; } let v = step.value; if (type === ITERATE_ENTRIES) { v = v[1]; } if ((!depth || stack.length < depth) && isCollection(v)) { stack.push(iterator); iterator = v.__iterator(type, reverse); } else { return useKeys ? step : iteratorValue(type, iterations++, v, step); } } return iteratorDone(); }); }; return flatSequence; } export function flatMapFactory(collection, mapper, context) { const coerce = collectionClass(collection); return collection .toSeq() .map((v, k) => coerce(mapper.call(context, v, k, collection))) .flatten(true); } export function interposeFactory(collection, separator) { const interposedSequence = makeSequence(collection); interposedSequence.size = collection.size && collection.size * 2 - 1; interposedSequence.__iterateUncached = function (fn, reverse) { let iterations = 0; collection.__iterate( v => (!iterations || fn(separator, iterations++, this) !== false) && fn(v, iterations++, this) !== false, reverse ); return iterations; }; interposedSequence.__iteratorUncached = function (type, reverse) { const iterator = collection.__iterator(ITERATE_VALUES, reverse); let iterations = 0; let step; return new Iterator(() => { if (!step || iterations % 2) { step = iterator.next(); if (step.done) { return step; } } return iterations % 2 ? iteratorValue(type, iterations++, separator) : iteratorValue(type, iterations++, step.value, step); }); }; return interposedSequence; } export function sortFactory(collection, comparator, mapper) { if (!comparator) { comparator = defaultComparator; } const isKeyedCollection = isKeyed(collection); let index = 0; const entries = collection .toSeq() .map((v, k) => [k, v, index++, mapper ? mapper(v, k, collection) : v]) .valueSeq() .toArray(); entries .sort((a, b) => comparator(a[3], b[3]) || a[2] - b[2]) .forEach( isKeyedCollection ? (v, i) => { entries[i].length = 2; } : (v, i) => { entries[i] = v[1]; } ); return isKeyedCollection ? KeyedSeq(entries) : isIndexed(collection) ? IndexedSeq(entries) : SetSeq(entries); } export function maxFactory(collection, comparator, mapper) { if (!comparator) { comparator = defaultComparator; } if (mapper) { const entry = collection .toSeq() .map((v, k) => [v, mapper(v, k, collection)]) .reduce((a, b) => (maxCompare(comparator, a[1], b[1]) ? b : a)); return entry && entry[0]; } return collection.reduce((a, b) => (maxCompare(comparator, a, b) ? b : a)); } function maxCompare(comparator, a, b) { const comp = comparator(b, a); // b is considered the new max if the comparator declares them equal, but // they are not equal and b is in fact a nullish value. return ( (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) || comp > 0 ); } export function zipWithFactory(keyIter, zipper, iters, zipAll) { const zipSequence = makeSequence(keyIter); const sizes = new ArraySeq(iters).map(i => i.size); zipSequence.size = zipAll ? sizes.max() : sizes.min(); // Note: this a generic base implementation of __iterate in terms of // __iterator which may be more generically useful in the future. zipSequence.__iterate = function (fn, reverse) { /* generic: var iterator = this.__iterator(ITERATE_ENTRIES, reverse); var step; var iterations = 0; while (!(step = iterator.next()).done) { iterations++; if (fn(step.value[1], step.value[0], this) === false) { break; } } return iterations; */ // indexed: const iterator = this.__iterator(ITERATE_VALUES, reverse); let step; let iterations = 0; while (!(step = iterator.next()).done) { if (fn(step.value, iterations++, this) === false) { break; } } return iterations; }; zipSequence.__iteratorUncached = function (type, reverse) { const iterators = iters.map( i => ((i = Collection(i)), getIterator(reverse ? i.reverse() : i)) ); let iterations = 0; let isDone = false; return new Iterator(() => { let steps; if (!isDone) { steps = iterators.map(i => i.next()); isDone = zipAll ? steps.every(s => s.done) : steps.some(s => s.done); } if (isDone) { return iteratorDone(); } return iteratorValue( type, iterations++, zipper.apply( null, steps.map(s => s.value) ) ); }); }; return zipSequence; } // #pragma Helper Functions export function reify(iter, seq) { return iter === seq ? iter : isSeq(iter) ? seq : iter.constructor(seq); } function validateEntry(entry) { if (entry !== Object(entry)) { throw new TypeError('Expected [K, V] tuple: ' + entry); } } function collectionClass(collection) { return isKeyed(collection) ? KeyedCollection : isIndexed(collection) ? IndexedCollection : SetCollection; } function makeSequence(collection) { return Object.create( (isKeyed(collection) ? KeyedSeq : isIndexed(collection) ? IndexedSeq : SetSeq ).prototype ); } function cacheResultThrough() { if (this._iter.cacheResult) { this._iter.cacheResult(); this.size = this._iter.size; return this; } return Seq.prototype.cacheResult.call(this); } function defaultComparator(a, b) { if (a === undefined && b === undefined) { return 0; } if (a === undefined) { return 1; } if (b === undefined) { return -1; } return a > b ? 1 : a < b ? -1 : 0; } immutable-js-immutable-js-fa7d047/src/OrderedMap.js000066400000000000000000000076601515165743500223040ustar00rootroot00000000000000import { KeyedCollection } from './Collection'; import { IS_ORDERED_SYMBOL } from './predicates/isOrdered'; import { isOrderedMap } from './predicates/isOrderedMap'; import { Map, emptyMap } from './Map'; import { emptyList } from './List'; import { DELETE, NOT_SET, SIZE } from './TrieUtils'; import assertNotInfinite from './utils/assertNotInfinite'; export class OrderedMap extends Map { // @pragma Construction constructor(value) { // eslint-disable-next-line no-constructor-return return value === undefined || value === null ? emptyOrderedMap() : isOrderedMap(value) ? value : emptyOrderedMap().withMutations(map => { const iter = KeyedCollection(value); assertNotInfinite(iter.size); iter.forEach((v, k) => map.set(k, v)); }); } static of(/*...values*/) { return this(arguments); } toString() { return this.__toString('OrderedMap {', '}'); } // @pragma Access get(k, notSetValue) { const index = this._map.get(k); return index !== undefined ? this._list.get(index)[1] : notSetValue; } // @pragma Modification clear() { if (this.size === 0) { return this; } if (this.__ownerID) { this.size = 0; this._map.clear(); this._list.clear(); this.__altered = true; return this; } return emptyOrderedMap(); } set(k, v) { return updateOrderedMap(this, k, v); } remove(k) { return updateOrderedMap(this, k, NOT_SET); } __iterate(fn, reverse) { return this._list.__iterate( entry => entry && fn(entry[1], entry[0], this), reverse ); } __iterator(type, reverse) { return this._list.fromEntrySeq().__iterator(type, reverse); } __ensureOwner(ownerID) { if (ownerID === this.__ownerID) { return this; } const newMap = this._map.__ensureOwner(ownerID); const newList = this._list.__ensureOwner(ownerID); if (!ownerID) { if (this.size === 0) { return emptyOrderedMap(); } this.__ownerID = ownerID; this.__altered = false; this._map = newMap; this._list = newList; return this; } return makeOrderedMap(newMap, newList, ownerID, this.__hash); } } OrderedMap.isOrderedMap = isOrderedMap; OrderedMap.prototype[IS_ORDERED_SYMBOL] = true; OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove; function makeOrderedMap(map, list, ownerID, hash) { const omap = Object.create(OrderedMap.prototype); omap.size = map ? map.size : 0; omap._map = map; omap._list = list; omap.__ownerID = ownerID; omap.__hash = hash; omap.__altered = false; return omap; } let EMPTY_ORDERED_MAP; export function emptyOrderedMap() { return ( EMPTY_ORDERED_MAP || (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList())) ); } function updateOrderedMap(omap, k, v) { const map = omap._map; const list = omap._list; const i = map.get(k); const has = i !== undefined; let newMap; let newList; if (v === NOT_SET) { // removed if (!has) { return omap; } if (list.size >= SIZE && list.size >= map.size * 2) { newList = list.filter((entry, idx) => entry !== undefined && i !== idx); newMap = newList .toKeyedSeq() .map(entry => entry[0]) .flip() .toMap(); if (omap.__ownerID) { newMap.__ownerID = newList.__ownerID = omap.__ownerID; } } else { newMap = map.remove(k); newList = i === list.size - 1 ? list.pop() : list.set(i, undefined); } } else if (has) { if (v === list.get(i)[1]) { return omap; } newMap = map; newList = list.set(i, [k, v]); } else { newMap = map.set(k, list.size); newList = list.set(list.size, [k, v]); } if (omap.__ownerID) { omap.size = newMap.size; omap._map = newMap; omap._list = newList; omap.__hash = undefined; omap.__altered = true; return omap; } return makeOrderedMap(newMap, newList); } immutable-js-immutable-js-fa7d047/src/OrderedSet.js000066400000000000000000000034131515165743500223120ustar00rootroot00000000000000import { SetCollection, KeyedCollection } from './Collection'; import { IS_ORDERED_SYMBOL } from './predicates/isOrdered'; import { isOrderedSet } from './predicates/isOrderedSet'; import { IndexedCollectionPrototype } from './CollectionImpl'; import { Set } from './Set'; import { emptyOrderedMap } from './OrderedMap'; import assertNotInfinite from './utils/assertNotInfinite'; export class OrderedSet extends Set { // @pragma Construction constructor(value) { // eslint-disable-next-line no-constructor-return return value === undefined || value === null ? emptyOrderedSet() : isOrderedSet(value) ? value : emptyOrderedSet().withMutations(set => { const iter = SetCollection(value); assertNotInfinite(iter.size); iter.forEach(v => set.add(v)); }); } static of(/*...values*/) { return this(arguments); } static fromKeys(value) { return this(KeyedCollection(value).keySeq()); } toString() { return this.__toString('OrderedSet {', '}'); } } OrderedSet.isOrderedSet = isOrderedSet; const OrderedSetPrototype = OrderedSet.prototype; OrderedSetPrototype[IS_ORDERED_SYMBOL] = true; OrderedSetPrototype.zip = IndexedCollectionPrototype.zip; OrderedSetPrototype.zipWith = IndexedCollectionPrototype.zipWith; OrderedSetPrototype.zipAll = IndexedCollectionPrototype.zipAll; OrderedSetPrototype.__empty = emptyOrderedSet; OrderedSetPrototype.__make = makeOrderedSet; function makeOrderedSet(map, ownerID) { const set = Object.create(OrderedSetPrototype); set.size = map ? map.size : 0; set._map = map; set.__ownerID = ownerID; return set; } let EMPTY_ORDERED_SET; function emptyOrderedSet() { return ( EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap())) ); } immutable-js-immutable-js-fa7d047/src/PairSorting.js000066400000000000000000000001121515165743500225040ustar00rootroot00000000000000export const PairSorting = { LeftThenRight: -1, RightThenLeft: +1, }; immutable-js-immutable-js-fa7d047/src/Range.js000066400000000000000000000067041515165743500213140ustar00rootroot00000000000000import { wrapIndex, wholeSlice, resolveBegin, resolveEnd } from './TrieUtils'; import { IndexedSeq } from './Seq'; import { Iterator, iteratorValue, iteratorDone } from './Iterator'; import invariant from './utils/invariant'; import deepEqual from './utils/deepEqual'; /** * Returns a lazy seq of nums from start (inclusive) to end * (exclusive), by step, where start defaults to 0, step to 1, and end to * infinity. When start is equal to end, returns empty list. */ export class Range extends IndexedSeq { constructor(start, end, step) { if (!(this instanceof Range)) { // eslint-disable-next-line no-constructor-return return new Range(start, end, step); } invariant(step !== 0, 'Cannot step a Range by 0'); start = start || 0; if (end === undefined) { end = Infinity; } step = step === undefined ? 1 : Math.abs(step); if (end < start) { step = -step; } this._start = start; this._end = end; this._step = step; this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1); if (this.size === 0) { if (EMPTY_RANGE) { // eslint-disable-next-line no-constructor-return return EMPTY_RANGE; } EMPTY_RANGE = this; } } toString() { if (this.size === 0) { return 'Range []'; } return ( 'Range [ ' + this._start + '...' + this._end + (this._step !== 1 ? ' by ' + this._step : '') + ' ]' ); } get(index, notSetValue) { return this.has(index) ? this._start + wrapIndex(this, index) * this._step : notSetValue; } includes(searchValue) { const possibleIndex = (searchValue - this._start) / this._step; return ( possibleIndex >= 0 && possibleIndex < this.size && possibleIndex === Math.floor(possibleIndex) ); } slice(begin, end) { if (wholeSlice(begin, end, this.size)) { return this; } begin = resolveBegin(begin, this.size); end = resolveEnd(end, this.size); if (end <= begin) { return new Range(0, 0); } return new Range( this.get(begin, this._end), this.get(end, this._end), this._step ); } indexOf(searchValue) { const offsetValue = searchValue - this._start; if (offsetValue % this._step === 0) { const index = offsetValue / this._step; if (index >= 0 && index < this.size) { return index; } } return -1; } lastIndexOf(searchValue) { return this.indexOf(searchValue); } __iterate(fn, reverse) { const size = this.size; const step = this._step; let value = reverse ? this._start + (size - 1) * step : this._start; let i = 0; while (i !== size) { if (fn(value, reverse ? size - ++i : i++, this) === false) { break; } value += reverse ? -step : step; } return i; } __iterator(type, reverse) { const size = this.size; const step = this._step; let value = reverse ? this._start + (size - 1) * step : this._start; let i = 0; return new Iterator(() => { if (i === size) { return iteratorDone(); } const v = value; value += reverse ? -step : step; return iteratorValue(type, reverse ? size - ++i : i++, v); }); } equals(other) { return other instanceof Range ? this._start === other._start && this._end === other._end && this._step === other._step : deepEqual(this, other); } } let EMPTY_RANGE; immutable-js-immutable-js-fa7d047/src/Record.js000066400000000000000000000170471515165743500215000ustar00rootroot00000000000000import { toJS } from './toJS'; import { KeyedCollection } from './Collection'; import { keyedSeqFromValue } from './Seq'; import { List } from './List'; import { ITERATE_ENTRIES, ITERATOR_SYMBOL } from './Iterator'; import { isRecord, IS_RECORD_SYMBOL } from './predicates/isRecord'; import { CollectionPrototype } from './CollectionImpl'; import { DELETE } from './TrieUtils'; import { getIn } from './methods/getIn'; import { setIn } from './methods/setIn'; import { deleteIn } from './methods/deleteIn'; import { update } from './methods/update'; import { updateIn } from './methods/updateIn'; import { merge, mergeWith } from './methods/merge'; import { mergeDeep, mergeDeepWith } from './methods/mergeDeep'; import { mergeIn } from './methods/mergeIn'; import { mergeDeepIn } from './methods/mergeDeepIn'; import { withMutations } from './methods/withMutations'; import { asMutable } from './methods/asMutable'; import { asImmutable } from './methods/asImmutable'; import invariant from './utils/invariant'; import quoteString from './utils/quoteString'; import { isImmutable } from './predicates/isImmutable'; function throwOnInvalidDefaultValues(defaultValues) { if (isRecord(defaultValues)) { throw new Error( 'Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.' ); } if (isImmutable(defaultValues)) { throw new Error( 'Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.' ); } if (defaultValues === null || typeof defaultValues !== 'object') { throw new Error( 'Can not call `Record` with a non-object as default values. Use a plain javascript object instead.' ); } } export class Record { constructor(defaultValues, name) { let hasInitialized; throwOnInvalidDefaultValues(defaultValues); const RecordType = function Record(values) { if (values instanceof RecordType) { return values; } if (!(this instanceof RecordType)) { return new RecordType(values); } if (!hasInitialized) { hasInitialized = true; const keys = Object.keys(defaultValues); const indices = (RecordTypePrototype._indices = {}); // Deprecated: left to attempt not to break any external code which // relies on a ._name property existing on record instances. // Use Record.getDescriptiveName() instead RecordTypePrototype._name = name; RecordTypePrototype._keys = keys; RecordTypePrototype._defaultValues = defaultValues; for (let i = 0; i < keys.length; i++) { const propName = keys[i]; indices[propName] = i; if (RecordTypePrototype[propName]) { /* eslint-disable no-console */ typeof console === 'object' && console.warn && console.warn( 'Cannot define ' + recordName(this) + ' with property "' + propName + '" since that property name is part of the Record API.' ); /* eslint-enable no-console */ } else { setProp(RecordTypePrototype, propName); } } } this.__ownerID = undefined; this._values = List().withMutations(l => { l.setSize(this._keys.length); KeyedCollection(values).forEach((v, k) => { l.set(this._indices[k], v === this._defaultValues[k] ? undefined : v); }); }); return this; }; const RecordTypePrototype = (RecordType.prototype = Object.create(RecordPrototype)); RecordTypePrototype.constructor = RecordType; if (name) { RecordType.displayName = name; } // eslint-disable-next-line no-constructor-return return RecordType; } toString() { let str = recordName(this) + ' { '; const keys = this._keys; let k; for (let i = 0, l = keys.length; i !== l; i++) { k = keys[i]; str += (i ? ', ' : '') + k + ': ' + quoteString(this.get(k)); } return str + ' }'; } equals(other) { return ( this === other || (isRecord(other) && recordSeq(this).equals(recordSeq(other))) ); } hashCode() { return recordSeq(this).hashCode(); } // @pragma Access has(k) { return this._indices.hasOwnProperty(k); } get(k, notSetValue) { if (!this.has(k)) { return notSetValue; } const index = this._indices[k]; const value = this._values.get(index); return value === undefined ? this._defaultValues[k] : value; } // @pragma Modification set(k, v) { if (this.has(k)) { const newValues = this._values.set( this._indices[k], v === this._defaultValues[k] ? undefined : v ); if (newValues !== this._values && !this.__ownerID) { return makeRecord(this, newValues); } } return this; } remove(k) { return this.set(k); } clear() { const newValues = this._values.clear().setSize(this._keys.length); return this.__ownerID ? this : makeRecord(this, newValues); } wasAltered() { return this._values.wasAltered(); } toSeq() { return recordSeq(this); } toJS() { return toJS(this); } entries() { return this.__iterator(ITERATE_ENTRIES); } __iterator(type, reverse) { return recordSeq(this).__iterator(type, reverse); } __iterate(fn, reverse) { return recordSeq(this).__iterate(fn, reverse); } __ensureOwner(ownerID) { if (ownerID === this.__ownerID) { return this; } const newValues = this._values.__ensureOwner(ownerID); if (!ownerID) { this.__ownerID = ownerID; this._values = newValues; return this; } return makeRecord(this, newValues, ownerID); } } Record.isRecord = isRecord; Record.getDescriptiveName = recordName; const RecordPrototype = Record.prototype; RecordPrototype[IS_RECORD_SYMBOL] = true; RecordPrototype[DELETE] = RecordPrototype.remove; RecordPrototype.deleteIn = RecordPrototype.removeIn = deleteIn; RecordPrototype.getIn = getIn; RecordPrototype.hasIn = CollectionPrototype.hasIn; RecordPrototype.merge = merge; RecordPrototype.mergeWith = mergeWith; RecordPrototype.mergeIn = mergeIn; RecordPrototype.mergeDeep = mergeDeep; RecordPrototype.mergeDeepWith = mergeDeepWith; RecordPrototype.mergeDeepIn = mergeDeepIn; RecordPrototype.setIn = setIn; RecordPrototype.update = update; RecordPrototype.updateIn = updateIn; RecordPrototype.withMutations = withMutations; RecordPrototype.asMutable = asMutable; RecordPrototype.asImmutable = asImmutable; RecordPrototype[ITERATOR_SYMBOL] = RecordPrototype.entries; RecordPrototype.toJSON = RecordPrototype.toObject = CollectionPrototype.toObject; RecordPrototype.inspect = RecordPrototype.toSource = function () { return this.toString(); }; function makeRecord(likeRecord, values, ownerID) { const record = Object.create(Object.getPrototypeOf(likeRecord)); record._values = values; record.__ownerID = ownerID; return record; } function recordName(record) { return record.constructor.displayName || record.constructor.name || 'Record'; } function recordSeq(record) { return keyedSeqFromValue(record._keys.map(k => [k, record.get(k)])); } function setProp(prototype, name) { try { Object.defineProperty(prototype, name, { get: function () { return this.get(name); }, set: function (value) { invariant(this.__ownerID, 'Cannot set on an immutable record.'); this.set(name, value); }, }); } catch (error) { // Object.defineProperty failed. Probably IE8. } } immutable-js-immutable-js-fa7d047/src/Repeat.js000066400000000000000000000043161515165743500214750ustar00rootroot00000000000000import { wholeSlice, resolveBegin, resolveEnd } from './TrieUtils'; import { IndexedSeq } from './Seq'; import { is } from './is'; import { Iterator, iteratorValue, iteratorDone } from './Iterator'; import deepEqual from './utils/deepEqual'; /** * Returns a lazy Seq of `value` repeated `times` times. When `times` is * undefined, returns an infinite sequence of `value`. */ export class Repeat extends IndexedSeq { constructor(value, times) { if (!(this instanceof Repeat)) { // eslint-disable-next-line no-constructor-return return new Repeat(value, times); } this._value = value; this.size = times === undefined ? Infinity : Math.max(0, times); if (this.size === 0) { if (EMPTY_REPEAT) { // eslint-disable-next-line no-constructor-return return EMPTY_REPEAT; } EMPTY_REPEAT = this; } } toString() { if (this.size === 0) { return 'Repeat []'; } return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]'; } get(index, notSetValue) { return this.has(index) ? this._value : notSetValue; } includes(searchValue) { return is(this._value, searchValue); } slice(begin, end) { const size = this.size; return wholeSlice(begin, end, size) ? this : new Repeat( this._value, resolveEnd(end, size) - resolveBegin(begin, size) ); } reverse() { return this; } indexOf(searchValue) { if (is(this._value, searchValue)) { return 0; } return -1; } lastIndexOf(searchValue) { if (is(this._value, searchValue)) { return this.size; } return -1; } __iterate(fn, reverse) { const size = this.size; let i = 0; while (i !== size) { if (fn(this._value, reverse ? size - ++i : i++, this) === false) { break; } } return i; } __iterator(type, reverse) { const size = this.size; let i = 0; return new Iterator(() => i === size ? iteratorDone() : iteratorValue(type, reverse ? size - ++i : i++, this._value) ); } equals(other) { return other instanceof Repeat ? is(this._value, other._value) : deepEqual(this, other); } } let EMPTY_REPEAT; immutable-js-immutable-js-fa7d047/src/Seq.js000066400000000000000000000175161515165743500210130ustar00rootroot00000000000000import { wrapIndex } from './TrieUtils'; import { Collection } from './Collection'; import { IS_SEQ_SYMBOL, isSeq } from './predicates/isSeq'; import { isImmutable } from './predicates/isImmutable'; import { isCollection } from './predicates/isCollection'; import { isKeyed } from './predicates/isKeyed'; import { isAssociative } from './predicates/isAssociative'; import { isRecord } from './predicates/isRecord'; import { IS_ORDERED_SYMBOL } from './predicates/isOrdered'; import { Iterator, iteratorValue, iteratorDone, hasIterator, isIterator, getIterator, isEntriesIterable, isKeysIterable, } from './Iterator'; import hasOwnProperty from './utils/hasOwnProperty'; import isArrayLike from './utils/isArrayLike'; export class Seq extends Collection { constructor(value) { // eslint-disable-next-line no-constructor-return return value === undefined || value === null ? emptySequence() : isImmutable(value) ? value.toSeq() : seqFromValue(value); } toSeq() { return this; } toString() { return this.__toString('Seq {', '}'); } cacheResult() { if (!this._cache && this.__iterateUncached) { this._cache = this.entrySeq().toArray(); this.size = this._cache.length; } return this; } // abstract __iterateUncached(fn, reverse) __iterate(fn, reverse) { const cache = this._cache; if (cache) { const size = cache.length; let i = 0; while (i !== size) { const entry = cache[reverse ? size - ++i : i++]; if (fn(entry[1], entry[0], this) === false) { break; } } return i; } return this.__iterateUncached(fn, reverse); } // abstract __iteratorUncached(type, reverse) __iterator(type, reverse) { const cache = this._cache; if (cache) { const size = cache.length; let i = 0; return new Iterator(() => { if (i === size) { return iteratorDone(); } const entry = cache[reverse ? size - ++i : i++]; return iteratorValue(type, entry[0], entry[1]); }); } return this.__iteratorUncached(type, reverse); } } export class KeyedSeq extends Seq { constructor(value) { // eslint-disable-next-line no-constructor-return return value === undefined || value === null ? emptySequence().toKeyedSeq() : isCollection(value) ? isKeyed(value) ? value.toSeq() : value.fromEntrySeq() : isRecord(value) ? value.toSeq() : keyedSeqFromValue(value); } toKeyedSeq() { return this; } } export class IndexedSeq extends Seq { constructor(value) { // eslint-disable-next-line no-constructor-return return value === undefined || value === null ? emptySequence() : isCollection(value) ? isKeyed(value) ? value.entrySeq() : value.toIndexedSeq() : isRecord(value) ? value.toSeq().entrySeq() : indexedSeqFromValue(value); } static of(/*...values*/) { return IndexedSeq(arguments); } toIndexedSeq() { return this; } toString() { return this.__toString('Seq [', ']'); } } export class SetSeq extends Seq { constructor(value) { // eslint-disable-next-line no-constructor-return return ( isCollection(value) && !isAssociative(value) ? value : IndexedSeq(value) ).toSetSeq(); } static of(/*...values*/) { return SetSeq(arguments); } toSetSeq() { return this; } } Seq.isSeq = isSeq; Seq.Keyed = KeyedSeq; Seq.Set = SetSeq; Seq.Indexed = IndexedSeq; Seq.prototype[IS_SEQ_SYMBOL] = true; // #pragma Root Sequences export class ArraySeq extends IndexedSeq { constructor(array) { this._array = array; this.size = array.length; } get(index, notSetValue) { return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue; } __iterate(fn, reverse) { const array = this._array; const size = array.length; let i = 0; while (i !== size) { const ii = reverse ? size - ++i : i++; if (fn(array[ii], ii, this) === false) { break; } } return i; } __iterator(type, reverse) { const array = this._array; const size = array.length; let i = 0; return new Iterator(() => { if (i === size) { return iteratorDone(); } const ii = reverse ? size - ++i : i++; return iteratorValue(type, ii, array[ii]); }); } } class ObjectSeq extends KeyedSeq { constructor(object) { const keys = Object.keys(object).concat( Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : [] ); this._object = object; this._keys = keys; this.size = keys.length; } get(key, notSetValue) { if (notSetValue !== undefined && !this.has(key)) { return notSetValue; } return this._object[key]; } has(key) { return hasOwnProperty.call(this._object, key); } __iterate(fn, reverse) { const object = this._object; const keys = this._keys; const size = keys.length; let i = 0; while (i !== size) { const key = keys[reverse ? size - ++i : i++]; if (fn(object[key], key, this) === false) { break; } } return i; } __iterator(type, reverse) { const object = this._object; const keys = this._keys; const size = keys.length; let i = 0; return new Iterator(() => { if (i === size) { return iteratorDone(); } const key = keys[reverse ? size - ++i : i++]; return iteratorValue(type, key, object[key]); }); } } ObjectSeq.prototype[IS_ORDERED_SYMBOL] = true; class CollectionSeq extends IndexedSeq { constructor(collection) { this._collection = collection; this.size = collection.length || collection.size; } __iterateUncached(fn, reverse) { if (reverse) { return this.cacheResult().__iterate(fn, reverse); } const collection = this._collection; const iterator = getIterator(collection); let iterations = 0; if (isIterator(iterator)) { let step; while (!(step = iterator.next()).done) { if (fn(step.value, iterations++, this) === false) { break; } } } return iterations; } __iteratorUncached(type, reverse) { if (reverse) { return this.cacheResult().__iterator(type, reverse); } const collection = this._collection; const iterator = getIterator(collection); if (!isIterator(iterator)) { return new Iterator(iteratorDone); } let iterations = 0; return new Iterator(() => { const step = iterator.next(); return step.done ? step : iteratorValue(type, iterations++, step.value); }); } } // # pragma Helper functions let EMPTY_SEQ; function emptySequence() { return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([])); } export function keyedSeqFromValue(value) { const seq = maybeIndexedSeqFromValue(value); if (seq) { return seq.fromEntrySeq(); } if (typeof value === 'object') { return new ObjectSeq(value); } throw new TypeError( 'Expected Array or collection object of [k, v] entries, or keyed object: ' + value ); } export function indexedSeqFromValue(value) { const seq = maybeIndexedSeqFromValue(value); if (seq) { return seq; } throw new TypeError( 'Expected Array or collection object of values: ' + value ); } function seqFromValue(value) { const seq = maybeIndexedSeqFromValue(value); if (seq) { return isEntriesIterable(value) ? seq.fromEntrySeq() : isKeysIterable(value) ? seq.toSetSeq() : seq; } if (typeof value === 'object') { return new ObjectSeq(value); } throw new TypeError( 'Expected Array or collection object of values, or keyed object: ' + value ); } function maybeIndexedSeqFromValue(value) { return isArrayLike(value) ? new ArraySeq(value) : hasIterator(value) ? new CollectionSeq(value) : undefined; } immutable-js-immutable-js-fa7d047/src/Set.js000066400000000000000000000127171515165743500210140ustar00rootroot00000000000000import { Collection, SetCollection, KeyedCollection } from './Collection'; import { isOrdered } from './predicates/isOrdered'; import { IS_SET_SYMBOL, isSet } from './predicates/isSet'; import { emptyMap } from './Map'; import { DELETE } from './TrieUtils'; import { sortFactory } from './Operations'; import assertNotInfinite from './utils/assertNotInfinite'; import { asImmutable } from './methods/asImmutable'; import { asMutable } from './methods/asMutable'; import { withMutations } from './methods/withMutations'; import { OrderedSet } from './OrderedSet'; export class Set extends SetCollection { // @pragma Construction constructor(value) { // eslint-disable-next-line no-constructor-return return value === undefined || value === null ? emptySet() : isSet(value) && !isOrdered(value) ? value : emptySet().withMutations(set => { const iter = SetCollection(value); assertNotInfinite(iter.size); iter.forEach(v => set.add(v)); }); } static of(/*...values*/) { return this(arguments); } static fromKeys(value) { return this(KeyedCollection(value).keySeq()); } static intersect(sets) { sets = Collection(sets).toArray(); return sets.length ? SetPrototype.intersect.apply(Set(sets.pop()), sets) : emptySet(); } static union(sets) { sets = Collection(sets).toArray(); return sets.length ? SetPrototype.union.apply(Set(sets.pop()), sets) : emptySet(); } toString() { return this.__toString('Set {', '}'); } // @pragma Access has(value) { return this._map.has(value); } // @pragma Modification add(value) { return updateSet(this, this._map.set(value, value)); } remove(value) { return updateSet(this, this._map.remove(value)); } clear() { return updateSet(this, this._map.clear()); } // @pragma Composition map(mapper, context) { // keep track if the set is altered by the map function let didChanges = false; const newMap = updateSet( this, this._map.mapEntries(([, v]) => { const mapped = mapper.call(context, v, v, this); if (mapped !== v) { didChanges = true; } return [mapped, mapped]; }, context) ); return didChanges ? newMap : this; } union(...iters) { iters = iters.filter(x => x.size !== 0); if (iters.length === 0) { return this; } if (this.size === 0 && !this.__ownerID && iters.length === 1) { return this.constructor(iters[0]); } return this.withMutations(set => { for (let ii = 0; ii < iters.length; ii++) { if (typeof iters[ii] === 'string') { set.add(iters[ii]); } else { SetCollection(iters[ii]).forEach(value => set.add(value)); } } }); } intersect(...iters) { if (iters.length === 0) { return this; } iters = iters.map(iter => SetCollection(iter)); const toRemove = []; this.forEach(value => { if (!iters.every(iter => iter.includes(value))) { toRemove.push(value); } }); return this.withMutations(set => { toRemove.forEach(value => { set.remove(value); }); }); } subtract(...iters) { if (iters.length === 0) { return this; } iters = iters.map(iter => SetCollection(iter)); const toRemove = []; this.forEach(value => { if (iters.some(iter => iter.includes(value))) { toRemove.push(value); } }); return this.withMutations(set => { toRemove.forEach(value => { set.remove(value); }); }); } sort(comparator) { // Late binding return OrderedSet(sortFactory(this, comparator)); } sortBy(mapper, comparator) { // Late binding return OrderedSet(sortFactory(this, comparator, mapper)); } wasAltered() { return this._map.wasAltered(); } __iterate(fn, reverse) { return this._map.__iterate(k => fn(k, k, this), reverse); } __iterator(type, reverse) { return this._map.__iterator(type, reverse); } __ensureOwner(ownerID) { if (ownerID === this.__ownerID) { return this; } const newMap = this._map.__ensureOwner(ownerID); if (!ownerID) { if (this.size === 0) { return this.__empty(); } this.__ownerID = ownerID; this._map = newMap; return this; } return this.__make(newMap, ownerID); } } Set.isSet = isSet; const SetPrototype = Set.prototype; SetPrototype[IS_SET_SYMBOL] = true; SetPrototype[DELETE] = SetPrototype.remove; SetPrototype.merge = SetPrototype.concat = SetPrototype.union; SetPrototype.withMutations = withMutations; SetPrototype.asImmutable = asImmutable; SetPrototype['@@transducer/init'] = SetPrototype.asMutable = asMutable; SetPrototype['@@transducer/step'] = function (result, arr) { return result.add(arr); }; SetPrototype['@@transducer/result'] = function (obj) { return obj.asImmutable(); }; SetPrototype.__empty = emptySet; SetPrototype.__make = makeSet; function updateSet(set, newMap) { if (set.__ownerID) { set.size = newMap.size; set._map = newMap; return set; } return newMap === set._map ? set : newMap.size === 0 ? set.__empty() : set.__make(newMap); } function makeSet(map, ownerID) { const set = Object.create(SetPrototype); set.size = map ? map.size : 0; set._map = map; set.__ownerID = ownerID; return set; } let EMPTY_SET; function emptySet() { return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap())); } immutable-js-immutable-js-fa7d047/src/Stack.js000066400000000000000000000125761515165743500213310ustar00rootroot00000000000000import { wholeSlice, resolveBegin, resolveEnd, wrapIndex } from './TrieUtils'; import { IndexedCollection } from './Collection'; import { ArraySeq } from './Seq'; import { Iterator, iteratorValue, iteratorDone } from './Iterator'; import { IS_STACK_SYMBOL, isStack } from './predicates/isStack'; import assertNotInfinite from './utils/assertNotInfinite'; import { asImmutable } from './methods/asImmutable'; import { asMutable } from './methods/asMutable'; import { wasAltered } from './methods/wasAltered'; import { withMutations } from './methods/withMutations'; export class Stack extends IndexedCollection { // @pragma Construction constructor(value) { // eslint-disable-next-line no-constructor-return return value === undefined || value === null ? emptyStack() : isStack(value) ? value : emptyStack().pushAll(value); } static of(/*...values*/) { return this(arguments); } toString() { return this.__toString('Stack [', ']'); } // @pragma Access get(index, notSetValue) { let head = this._head; index = wrapIndex(this, index); while (head && index--) { head = head.next; } return head ? head.value : notSetValue; } peek() { return this._head && this._head.value; } // @pragma Modification push(/*...values*/) { if (arguments.length === 0) { return this; } const newSize = this.size + arguments.length; let head = this._head; for (let ii = arguments.length - 1; ii >= 0; ii--) { head = { value: arguments[ii], next: head, }; } if (this.__ownerID) { this.size = newSize; this._head = head; this.__hash = undefined; this.__altered = true; return this; } return makeStack(newSize, head); } pushAll(iter) { iter = IndexedCollection(iter); if (iter.size === 0) { return this; } if (this.size === 0 && isStack(iter)) { return iter; } assertNotInfinite(iter.size); let newSize = this.size; let head = this._head; iter.__iterate(value => { newSize++; head = { value: value, next: head, }; }, /* reverse */ true); if (this.__ownerID) { this.size = newSize; this._head = head; this.__hash = undefined; this.__altered = true; return this; } return makeStack(newSize, head); } pop() { return this.slice(1); } clear() { if (this.size === 0) { return this; } if (this.__ownerID) { this.size = 0; this._head = undefined; this.__hash = undefined; this.__altered = true; return this; } return emptyStack(); } slice(begin, end) { if (wholeSlice(begin, end, this.size)) { return this; } let resolvedBegin = resolveBegin(begin, this.size); const resolvedEnd = resolveEnd(end, this.size); if (resolvedEnd !== this.size) { // super.slice(begin, end); return IndexedCollection.prototype.slice.call(this, begin, end); } const newSize = this.size - resolvedBegin; let head = this._head; while (resolvedBegin--) { head = head.next; } if (this.__ownerID) { this.size = newSize; this._head = head; this.__hash = undefined; this.__altered = true; return this; } return makeStack(newSize, head); } // @pragma Mutability __ensureOwner(ownerID) { if (ownerID === this.__ownerID) { return this; } if (!ownerID) { if (this.size === 0) { return emptyStack(); } this.__ownerID = ownerID; this.__altered = false; return this; } return makeStack(this.size, this._head, ownerID, this.__hash); } // @pragma Iteration __iterate(fn, reverse) { if (reverse) { return new ArraySeq(this.toArray()).__iterate( (v, k) => fn(v, k, this), reverse ); } let iterations = 0; let node = this._head; while (node) { if (fn(node.value, iterations++, this) === false) { break; } node = node.next; } return iterations; } __iterator(type, reverse) { if (reverse) { return new ArraySeq(this.toArray()).__iterator(type, reverse); } let iterations = 0; let node = this._head; return new Iterator(() => { if (node) { const value = node.value; node = node.next; return iteratorValue(type, iterations++, value); } return iteratorDone(); }); } } Stack.isStack = isStack; const StackPrototype = Stack.prototype; StackPrototype[IS_STACK_SYMBOL] = true; StackPrototype.shift = StackPrototype.pop; StackPrototype.unshift = StackPrototype.push; StackPrototype.unshiftAll = StackPrototype.pushAll; StackPrototype.withMutations = withMutations; StackPrototype.wasAltered = wasAltered; StackPrototype.asImmutable = asImmutable; StackPrototype['@@transducer/init'] = StackPrototype.asMutable = asMutable; StackPrototype['@@transducer/step'] = function (result, arr) { return result.unshift(arr); }; StackPrototype['@@transducer/result'] = function (obj) { return obj.asImmutable(); }; function makeStack(size, head, ownerID, hash) { const map = Object.create(StackPrototype); map.size = size; map._head = head; map.__ownerID = ownerID; map.__hash = hash; map.__altered = false; return map; } let EMPTY_STACK; function emptyStack() { return EMPTY_STACK || (EMPTY_STACK = makeStack(0)); } immutable-js-immutable-js-fa7d047/src/TrieUtils.js000066400000000000000000000051471515165743500222040ustar00rootroot00000000000000// Used for setting prototype methods that IE8 chokes on. export const DELETE = 'delete'; // Constants describing the size of trie nodes. export const SHIFT = 5; // Resulted in best performance after ______? export const SIZE = 1 << SHIFT; export const MASK = SIZE - 1; // A consistent shared value representing "not set" which equals nothing other // than itself, and nothing that could be provided externally. export const NOT_SET = {}; // Boolean references, Rough equivalent of `bool &`. export function MakeRef() { return { value: false }; } export function SetRef(ref) { if (ref) { ref.value = true; } } // A function which returns a value representing an "owner" for transient writes // to tries. The return value will only ever equal itself, and will not equal // the return of any subsequent call of this function. export function OwnerID() {} export function ensureSize(iter) { if (iter.size === undefined) { iter.size = iter.__iterate(returnTrue); } return iter.size; } export function wrapIndex(iter, index) { // This implements "is array index" which the ECMAString spec defines as: // // A String property name P is an array index if and only if // ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal // to 2^32−1. // // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects if (typeof index !== 'number') { const uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32 if ('' + uint32Index !== index || uint32Index === 4294967295) { return NaN; } index = uint32Index; } return index < 0 ? ensureSize(iter) + index : index; } export function returnTrue() { return true; } export function wholeSlice(begin, end, size) { return ( ((begin === 0 && !isNeg(begin)) || (size !== undefined && begin <= -size)) && (end === undefined || (size !== undefined && end >= size)) ); } export function resolveBegin(begin, size) { return resolveIndex(begin, size, 0); } export function resolveEnd(end, size) { return resolveIndex(end, size, size); } function resolveIndex(index, size, defaultIndex) { // Sanitize indices using this shorthand for ToInt32(argument) // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32 return index === undefined ? defaultIndex : isNeg(index) ? size === Infinity ? size : Math.max(0, size + index) | 0 : size === undefined || size === index ? index : Math.min(size, index) | 0; } function isNeg(value) { // Account for -0 which is negative, but not less than 0. return value < 0 || (value === 0 && 1 / value === -Infinity); } immutable-js-immutable-js-fa7d047/src/fromJS.js000066400000000000000000000025601515165743500214540ustar00rootroot00000000000000import { Seq } from './Seq'; import { hasIterator } from './Iterator'; import { isImmutable } from './predicates/isImmutable'; import { isIndexed } from './predicates/isIndexed'; import { isKeyed } from './predicates/isKeyed'; import isArrayLike from './utils/isArrayLike'; import isPlainObj from './utils/isPlainObj'; export function fromJS(value, converter) { return fromJSWith( [], converter || defaultConverter, value, '', converter && converter.length > 2 ? [] : undefined, { '': value } ); } function fromJSWith(stack, converter, value, key, keyPath, parentValue) { if ( typeof value !== 'string' && !isImmutable(value) && (isArrayLike(value) || hasIterator(value) || isPlainObj(value)) ) { if (~stack.indexOf(value)) { throw new TypeError('Cannot convert circular structure to Immutable'); } stack.push(value); keyPath && key !== '' && keyPath.push(key); const converted = converter.call( parentValue, key, Seq(value).map((v, k) => fromJSWith(stack, converter, v, k, keyPath, value) ), keyPath && keyPath.slice() ); stack.pop(); keyPath && keyPath.pop(); return converted; } return value; } function defaultConverter(k, v) { // Effectively the opposite of "Collection.toSeq()" return isIndexed(v) ? v.toList() : isKeyed(v) ? v.toMap() : v.toSet(); } immutable-js-immutable-js-fa7d047/src/functional/000077500000000000000000000000001515165743500220555ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/src/functional/get.js000066400000000000000000000005371515165743500231770ustar00rootroot00000000000000import { isImmutable } from '../predicates/isImmutable'; import { has } from './has'; export function get(collection, key, notSetValue) { return isImmutable(collection) ? collection.get(key, notSetValue) : !has(collection, key) ? notSetValue : typeof collection.get === 'function' ? collection.get(key) : collection[key]; } immutable-js-immutable-js-fa7d047/src/functional/getIn.js000066400000000000000000000006561515165743500234700ustar00rootroot00000000000000import coerceKeyPath from '../utils/coerceKeyPath'; import { NOT_SET } from '../TrieUtils'; import { get } from './get'; export function getIn(collection, searchKeyPath, notSetValue) { const keyPath = coerceKeyPath(searchKeyPath); let i = 0; while (i !== keyPath.length) { collection = get(collection, keyPath[i++], NOT_SET); if (collection === NOT_SET) { return notSetValue; } } return collection; } immutable-js-immutable-js-fa7d047/src/functional/has.js000066400000000000000000000005271515165743500231720ustar00rootroot00000000000000import { isImmutable } from '../predicates/isImmutable'; import hasOwnProperty from '../utils/hasOwnProperty'; import isDataStructure from '../utils/isDataStructure'; export function has(collection, key) { return isImmutable(collection) ? collection.has(key) : isDataStructure(collection) && hasOwnProperty.call(collection, key); } immutable-js-immutable-js-fa7d047/src/functional/hasIn.js000066400000000000000000000002631515165743500234560ustar00rootroot00000000000000import { getIn } from './getIn'; import { NOT_SET } from '../TrieUtils'; export function hasIn(collection, keyPath) { return getIn(collection, keyPath, NOT_SET) !== NOT_SET; } immutable-js-immutable-js-fa7d047/src/functional/merge.js000066400000000000000000000065201515165743500235150ustar00rootroot00000000000000import { isImmutable } from '../predicates/isImmutable'; import { isIndexed } from '../predicates/isIndexed'; import { isKeyed } from '../predicates/isKeyed'; import { IndexedCollection, KeyedCollection } from '../Collection'; import { Seq } from '../Seq'; import hasOwnProperty from '../utils/hasOwnProperty'; import isDataStructure from '../utils/isDataStructure'; import { isProtoKey } from '../utils/protoInjection'; import shallowCopy from '../utils/shallowCopy'; export function merge(collection, ...sources) { return mergeWithSources(collection, sources); } export function mergeWith(merger, collection, ...sources) { return mergeWithSources(collection, sources, merger); } export function mergeDeep(collection, ...sources) { return mergeDeepWithSources(collection, sources); } export function mergeDeepWith(merger, collection, ...sources) { return mergeDeepWithSources(collection, sources, merger); } export function mergeDeepWithSources(collection, sources, merger) { return mergeWithSources(collection, sources, deepMergerWith(merger)); } export function mergeWithSources(collection, sources, merger) { if (!isDataStructure(collection)) { throw new TypeError( 'Cannot merge into non-data-structure value: ' + collection ); } if (isImmutable(collection)) { return typeof merger === 'function' && collection.mergeWith ? collection.mergeWith(merger, ...sources) : collection.merge ? collection.merge(...sources) : collection.concat(...sources); } const isArray = Array.isArray(collection); let merged = collection; const Collection = isArray ? IndexedCollection : KeyedCollection; const mergeItem = isArray ? value => { // Copy on write if (merged === collection) { merged = shallowCopy(merged); } merged.push(value); } : (value, key) => { if (isProtoKey(key)) { return; } const hasVal = hasOwnProperty.call(merged, key); const nextVal = hasVal && merger ? merger(merged[key], value, key) : value; if (!hasVal || nextVal !== merged[key]) { // Copy on write if (merged === collection) { merged = shallowCopy(merged); } merged[key] = nextVal; } }; for (let i = 0; i < sources.length; i++) { Collection(sources[i]).forEach(mergeItem); } return merged; } function deepMergerWith(merger) { function deepMerger(oldValue, newValue, key) { return isDataStructure(oldValue) && isDataStructure(newValue) && areMergeable(oldValue, newValue) ? mergeWithSources(oldValue, [newValue], deepMerger) : merger ? merger(oldValue, newValue, key) : newValue; } return deepMerger; } /** * It's unclear what the desired behavior is for merging two collections that * fall into separate categories between keyed, indexed, or set-like, so we only * consider them mergeable if they fall into the same category. */ function areMergeable(oldDataStructure, newDataStructure) { const oldSeq = Seq(oldDataStructure); const newSeq = Seq(newDataStructure); // This logic assumes that a sequence can only fall into one of the three // categories mentioned above (since there's no `isSetLike()` method). return ( isIndexed(oldSeq) === isIndexed(newSeq) && isKeyed(oldSeq) === isKeyed(newSeq) ); } immutable-js-immutable-js-fa7d047/src/functional/remove.js000066400000000000000000000015721515165743500237150ustar00rootroot00000000000000import { isImmutable } from '../predicates/isImmutable'; import hasOwnProperty from '../utils/hasOwnProperty'; import isDataStructure from '../utils/isDataStructure'; import shallowCopy from '../utils/shallowCopy'; export function remove(collection, key) { if (!isDataStructure(collection)) { throw new TypeError( 'Cannot update non-data-structure value: ' + collection ); } if (isImmutable(collection)) { if (!collection.remove) { throw new TypeError( 'Cannot update immutable value without .remove() method: ' + collection ); } return collection.remove(key); } if (!hasOwnProperty.call(collection, key)) { return collection; } const collectionCopy = shallowCopy(collection); if (Array.isArray(collectionCopy)) { collectionCopy.splice(key, 1); } else { delete collectionCopy[key]; } return collectionCopy; } immutable-js-immutable-js-fa7d047/src/functional/removeIn.js000066400000000000000000000002711515165743500241770ustar00rootroot00000000000000import { updateIn } from './updateIn'; import { NOT_SET } from '../TrieUtils'; export function removeIn(collection, keyPath) { return updateIn(collection, keyPath, () => NOT_SET); } immutable-js-immutable-js-fa7d047/src/functional/set.js000066400000000000000000000016511515165743500232110ustar00rootroot00000000000000import { isImmutable } from '../predicates/isImmutable'; import hasOwnProperty from '../utils/hasOwnProperty'; import isDataStructure from '../utils/isDataStructure'; import { isProtoKey } from '../utils/protoInjection'; import shallowCopy from '../utils/shallowCopy'; export function set(collection, key, value) { if (isProtoKey(key)) { return collection; } if (!isDataStructure(collection)) { throw new TypeError( 'Cannot update non-data-structure value: ' + collection ); } if (isImmutable(collection)) { if (!collection.set) { throw new TypeError( 'Cannot update immutable value without .set() method: ' + collection ); } return collection.set(key, value); } if (hasOwnProperty.call(collection, key) && value === collection[key]) { return collection; } const collectionCopy = shallowCopy(collection); collectionCopy[key] = value; return collectionCopy; } immutable-js-immutable-js-fa7d047/src/functional/setIn.js000066400000000000000000000003041515165743500234720ustar00rootroot00000000000000import { updateIn } from './updateIn'; import { NOT_SET } from '../TrieUtils'; export function setIn(collection, keyPath, value) { return updateIn(collection, keyPath, NOT_SET, () => value); } immutable-js-immutable-js-fa7d047/src/functional/update.js000066400000000000000000000002461515165743500236770ustar00rootroot00000000000000import { updateIn } from './updateIn'; export function update(collection, key, notSetValue, updater) { return updateIn(collection, [key], notSetValue, updater); } immutable-js-immutable-js-fa7d047/src/functional/updateIn.js000066400000000000000000000034571515165743500241750ustar00rootroot00000000000000import { isImmutable } from '../predicates/isImmutable'; import coerceKeyPath from '../utils/coerceKeyPath'; import isDataStructure from '../utils/isDataStructure'; import quoteString from '../utils/quoteString'; import { NOT_SET } from '../TrieUtils'; import { emptyMap } from '../Map'; import { get } from './get'; import { remove } from './remove'; import { set } from './set'; export function updateIn(collection, keyPath, notSetValue, updater) { if (!updater) { updater = notSetValue; notSetValue = undefined; } const updatedValue = updateInDeeply( isImmutable(collection), collection, coerceKeyPath(keyPath), 0, notSetValue, updater ); return updatedValue === NOT_SET ? notSetValue : updatedValue; } function updateInDeeply( inImmutable, existing, keyPath, i, notSetValue, updater ) { const wasNotSet = existing === NOT_SET; if (i === keyPath.length) { const existingValue = wasNotSet ? notSetValue : existing; const newValue = updater(existingValue); return newValue === existingValue ? existing : newValue; } if (!wasNotSet && !isDataStructure(existing)) { throw new TypeError( 'Cannot update within non-data-structure value in path [' + keyPath.slice(0, i).map(quoteString) + ']: ' + existing ); } const key = keyPath[i]; const nextExisting = wasNotSet ? NOT_SET : get(existing, key, NOT_SET); const nextUpdated = updateInDeeply( nextExisting === NOT_SET ? inImmutable : isImmutable(nextExisting), nextExisting, keyPath, i + 1, notSetValue, updater ); return nextUpdated === nextExisting ? existing : nextUpdated === NOT_SET ? remove(existing, key) : set( wasNotSet ? (inImmutable ? emptyMap() : {}) : existing, key, nextUpdated ); } immutable-js-immutable-js-fa7d047/src/is.js000066400000000000000000000061321515165743500206660ustar00rootroot00000000000000import { isValueObject } from './predicates/isValueObject'; /** * An extension of the "same-value" algorithm as [described for use by ES6 Map * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality) * * NaN is considered the same as NaN, however -0 and 0 are considered the same * value, which is different from the algorithm described by * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). * * This is extended further to allow Objects to describe the values they * represent, by way of `valueOf` or `equals` (and `hashCode`). * * Note: because of this extension, the key equality of Immutable.Map and the * value equality of Immutable.Set will differ from ES6 Map and Set. * * ### Defining custom values * * The easiest way to describe the value an object represents is by implementing * `valueOf`. For example, `Date` represents a value by returning a unix * timestamp for `valueOf`: * * var date1 = new Date(1234567890000); // Fri Feb 13 2009 ... * var date2 = new Date(1234567890000); * date1.valueOf(); // 1234567890000 * assert( date1 !== date2 ); * assert( Immutable.is( date1, date2 ) ); * * Note: overriding `valueOf` may have other implications if you use this object * where JavaScript expects a primitive, such as implicit string coercion. * * For more complex types, especially collections, implementing `valueOf` may * not be performant. An alternative is to implement `equals` and `hashCode`. * * `equals` takes another object, presumably of similar type, and returns true * if it is equal. Equality is symmetrical, so the same result should be * returned if this and the argument are flipped. * * assert( a.equals(b) === b.equals(a) ); * * `hashCode` returns a 32bit integer number representing the object which will * be used to determine how to store the value object in a Map or Set. You must * provide both or neither methods, one must not exist without the other. * * Also, an important relationship between these methods must be upheld: if two * values are equal, they *must* return the same hashCode. If the values are not * equal, they might have the same hashCode; this is called a hash collision, * and while undesirable for performance reasons, it is acceptable. * * if (a.equals(b)) { * assert( a.hashCode() === b.hashCode() ); * } * * All Immutable collections are Value Objects: they implement `equals()` * and `hashCode()`. */ export function is(valueA, valueB) { if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { return true; } if (!valueA || !valueB) { return false; } if ( typeof valueA.valueOf === 'function' && typeof valueB.valueOf === 'function' ) { valueA = valueA.valueOf(); valueB = valueB.valueOf(); if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) { return true; } if (!valueA || !valueB) { return false; } } return !!( isValueObject(valueA) && isValueObject(valueB) && valueA.equals(valueB) ); } immutable-js-immutable-js-fa7d047/src/methods/000077500000000000000000000000001515165743500213565ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/src/methods/README.md000066400000000000000000000004441515165743500226370ustar00rootroot00000000000000These files represent common methods on Collection types, each will contain references to "this" - expecting to be called as a prototypal method. They are separated into individual files to avoid circular dependencies when possible, and to allow their use in multiple different Collections. immutable-js-immutable-js-fa7d047/src/methods/asImmutable.js000066400000000000000000000001011515165743500241470ustar00rootroot00000000000000export function asImmutable() { return this.__ensureOwner(); } immutable-js-immutable-js-fa7d047/src/methods/asMutable.js000066400000000000000000000002151515165743500236270ustar00rootroot00000000000000import { OwnerID } from '../TrieUtils'; export function asMutable() { return this.__ownerID ? this : this.__ensureOwner(new OwnerID()); } immutable-js-immutable-js-fa7d047/src/methods/deleteIn.js000066400000000000000000000001741515165743500234470ustar00rootroot00000000000000import { removeIn } from '../functional/removeIn'; export function deleteIn(keyPath) { return removeIn(this, keyPath); } immutable-js-immutable-js-fa7d047/src/methods/getIn.js000066400000000000000000000002411515165743500227570ustar00rootroot00000000000000import { getIn as _getIn } from '../functional/getIn'; export function getIn(searchKeyPath, notSetValue) { return _getIn(this, searchKeyPath, notSetValue); } immutable-js-immutable-js-fa7d047/src/methods/hasIn.js000066400000000000000000000002071515165743500227550ustar00rootroot00000000000000import { hasIn as _hasIn } from '../functional/hasIn'; export function hasIn(searchKeyPath) { return _hasIn(this, searchKeyPath); } immutable-js-immutable-js-fa7d047/src/methods/merge.js000066400000000000000000000024651515165743500230220ustar00rootroot00000000000000import { KeyedCollection } from '../Collection'; import { NOT_SET } from '../TrieUtils'; import { update } from '../functional/update'; export function merge(...iters) { return mergeIntoKeyedWith(this, iters); } export function mergeWith(merger, ...iters) { if (typeof merger !== 'function') { throw new TypeError('Invalid merger function: ' + merger); } return mergeIntoKeyedWith(this, iters, merger); } function mergeIntoKeyedWith(collection, collections, merger) { const iters = []; for (let ii = 0; ii < collections.length; ii++) { const collection = KeyedCollection(collections[ii]); if (collection.size !== 0) { iters.push(collection); } } if (iters.length === 0) { return collection; } if ( collection.toSeq().size === 0 && !collection.__ownerID && iters.length === 1 ) { return collection.constructor(iters[0]); } return collection.withMutations(collection => { const mergeIntoCollection = merger ? (value, key) => { update(collection, key, NOT_SET, oldVal => oldVal === NOT_SET ? value : merger(oldVal, value, key) ); } : (value, key) => { collection.set(key, value); }; for (let ii = 0; ii < iters.length; ii++) { iters[ii].forEach(mergeIntoCollection); } }); } immutable-js-immutable-js-fa7d047/src/methods/mergeDeep.js000066400000000000000000000003721515165743500236130ustar00rootroot00000000000000import { mergeDeepWithSources } from '../functional/merge'; export function mergeDeep(...iters) { return mergeDeepWithSources(this, iters); } export function mergeDeepWith(merger, ...iters) { return mergeDeepWithSources(this, iters, merger); } immutable-js-immutable-js-fa7d047/src/methods/mergeDeepIn.js000066400000000000000000000004401515165743500240760ustar00rootroot00000000000000import { mergeDeepWithSources } from '../functional/merge'; import { updateIn } from '../functional/updateIn'; import { emptyMap } from '../Map'; export function mergeDeepIn(keyPath, ...iters) { return updateIn(this, keyPath, emptyMap(), m => mergeDeepWithSources(m, iters) ); } immutable-js-immutable-js-fa7d047/src/methods/mergeIn.js000066400000000000000000000004151515165743500233020ustar00rootroot00000000000000import { mergeWithSources } from '../functional/merge'; import { updateIn } from '../functional/updateIn'; import { emptyMap } from '../Map'; export function mergeIn(keyPath, ...iters) { return updateIn(this, keyPath, emptyMap(), m => mergeWithSources(m, iters)); } immutable-js-immutable-js-fa7d047/src/methods/setIn.js000066400000000000000000000002011515165743500227670ustar00rootroot00000000000000import { setIn as _setIn } from '../functional/setIn'; export function setIn(keyPath, v) { return _setIn(this, keyPath, v); } immutable-js-immutable-js-fa7d047/src/methods/toObject.js000066400000000000000000000004741515165743500234720ustar00rootroot00000000000000import assertNotInfinite from '../utils/assertNotInfinite'; import { isProtoKey } from '../utils/protoInjection'; export function toObject() { assertNotInfinite(this.size); const object = {}; this.__iterate((v, k) => { if (isProtoKey(k)) { return; } object[k] = v; }); return object; } immutable-js-immutable-js-fa7d047/src/methods/update.js000066400000000000000000000003211515165743500231720ustar00rootroot00000000000000import { update as _update } from '../functional/update'; export function update(key, notSetValue, updater) { return arguments.length === 1 ? key(this) : _update(this, key, notSetValue, updater); } immutable-js-immutable-js-fa7d047/src/methods/updateIn.js000066400000000000000000000002661515165743500234710ustar00rootroot00000000000000import { updateIn as _updateIn } from '../functional/updateIn'; export function updateIn(keyPath, notSetValue, updater) { return _updateIn(this, keyPath, notSetValue, updater); } immutable-js-immutable-js-fa7d047/src/methods/wasAltered.js000066400000000000000000000000721515165743500240060ustar00rootroot00000000000000export function wasAltered() { return this.__altered; } immutable-js-immutable-js-fa7d047/src/methods/withMutations.js000066400000000000000000000002471515165743500245760ustar00rootroot00000000000000export function withMutations(fn) { const mutable = this.asMutable(); fn(mutable); return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this; } immutable-js-immutable-js-fa7d047/src/predicates/000077500000000000000000000000001515165743500220365ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/src/predicates/isAssociative.js000066400000000000000000000003061515165743500252010ustar00rootroot00000000000000import { isKeyed } from './isKeyed'; import { isIndexed } from './isIndexed'; export function isAssociative(maybeAssociative) { return isKeyed(maybeAssociative) || isIndexed(maybeAssociative); } immutable-js-immutable-js-fa7d047/src/predicates/isCollection.js000066400000000000000000000003761515165743500250310ustar00rootroot00000000000000// Note: value is unchanged to not break immutable-devtools. export const IS_COLLECTION_SYMBOL = '@@__IMMUTABLE_ITERABLE__@@'; export function isCollection(maybeCollection) { return Boolean(maybeCollection && maybeCollection[IS_COLLECTION_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isImmutable.js000066400000000000000000000003121515165743500246430ustar00rootroot00000000000000import { isCollection } from './isCollection'; import { isRecord } from './isRecord'; export function isImmutable(maybeImmutable) { return isCollection(maybeImmutable) || isRecord(maybeImmutable); } immutable-js-immutable-js-fa7d047/src/predicates/isIndexed.js000066400000000000000000000002561515165743500243130ustar00rootroot00000000000000export const IS_INDEXED_SYMBOL = '@@__IMMUTABLE_INDEXED__@@'; export function isIndexed(maybeIndexed) { return Boolean(maybeIndexed && maybeIndexed[IS_INDEXED_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isKeyed.js000066400000000000000000000002401515165743500237650ustar00rootroot00000000000000export const IS_KEYED_SYMBOL = '@@__IMMUTABLE_KEYED__@@'; export function isKeyed(maybeKeyed) { return Boolean(maybeKeyed && maybeKeyed[IS_KEYED_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isList.js000066400000000000000000000002311515165743500236370ustar00rootroot00000000000000export const IS_LIST_SYMBOL = '@@__IMMUTABLE_LIST__@@'; export function isList(maybeList) { return Boolean(maybeList && maybeList[IS_LIST_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isMap.js000066400000000000000000000002221515165743500234410ustar00rootroot00000000000000export const IS_MAP_SYMBOL = '@@__IMMUTABLE_MAP__@@'; export function isMap(maybeMap) { return Boolean(maybeMap && maybeMap[IS_MAP_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isOrdered.js000066400000000000000000000002561515165743500243170ustar00rootroot00000000000000export const IS_ORDERED_SYMBOL = '@@__IMMUTABLE_ORDERED__@@'; export function isOrdered(maybeOrdered) { return Boolean(maybeOrdered && maybeOrdered[IS_ORDERED_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isOrderedMap.js000066400000000000000000000002741515165743500247550ustar00rootroot00000000000000import { isMap } from './isMap'; import { isOrdered } from './isOrdered'; export function isOrderedMap(maybeOrderedMap) { return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap); } immutable-js-immutable-js-fa7d047/src/predicates/isOrderedSet.js000066400000000000000000000002741515165743500247730ustar00rootroot00000000000000import { isSet } from './isSet'; import { isOrdered } from './isOrdered'; export function isOrderedSet(maybeOrderedSet) { return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet); } immutable-js-immutable-js-fa7d047/src/predicates/isRecord.js000066400000000000000000000002471515165743500241510ustar00rootroot00000000000000export const IS_RECORD_SYMBOL = '@@__IMMUTABLE_RECORD__@@'; export function isRecord(maybeRecord) { return Boolean(maybeRecord && maybeRecord[IS_RECORD_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isSeq.js000066400000000000000000000002221515165743500234540ustar00rootroot00000000000000export const IS_SEQ_SYMBOL = '@@__IMMUTABLE_SEQ__@@'; export function isSeq(maybeSeq) { return Boolean(maybeSeq && maybeSeq[IS_SEQ_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isSet.js000066400000000000000000000002221515165743500234570ustar00rootroot00000000000000export const IS_SET_SYMBOL = '@@__IMMUTABLE_SET__@@'; export function isSet(maybeSet) { return Boolean(maybeSet && maybeSet[IS_SET_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isStack.js000066400000000000000000000002401515165743500237710ustar00rootroot00000000000000export const IS_STACK_SYMBOL = '@@__IMMUTABLE_STACK__@@'; export function isStack(maybeStack) { return Boolean(maybeStack && maybeStack[IS_STACK_SYMBOL]); } immutable-js-immutable-js-fa7d047/src/predicates/isValueObject.js000066400000000000000000000002701515165743500251320ustar00rootroot00000000000000export function isValueObject(maybeValue) { return Boolean( maybeValue && typeof maybeValue.equals === 'function' && typeof maybeValue.hashCode === 'function' ); } immutable-js-immutable-js-fa7d047/src/toJS.js000066400000000000000000000013521515165743500211310ustar00rootroot00000000000000import { Seq } from './Seq'; import { isCollection } from './predicates/isCollection'; import { isKeyed } from './predicates/isKeyed'; import isDataStructure from './utils/isDataStructure'; import { isProtoKey } from './utils/protoInjection'; export function toJS(value) { if (!value || typeof value !== 'object') { return value; } if (!isCollection(value)) { if (!isDataStructure(value)) { return value; } value = Seq(value); } if (isKeyed(value)) { const result = {}; value.__iterate((v, k) => { if (isProtoKey(k)) { return; } result[k] = toJS(v); }); return result; } const result = []; value.__iterate(v => { result.push(toJS(v)); }); return result; } immutable-js-immutable-js-fa7d047/src/utils/000077500000000000000000000000001515165743500210535ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/src/utils/arrCopy.js000066400000000000000000000004361515165743500230330ustar00rootroot00000000000000// http://jsperf.com/copy-array-inline export default function arrCopy(arr, offset) { offset = offset || 0; const len = Math.max(0, arr.length - offset); const newArr = new Array(len); for (let ii = 0; ii < len; ii++) { newArr[ii] = arr[ii + offset]; } return newArr; } immutable-js-immutable-js-fa7d047/src/utils/assertNotInfinite.js000066400000000000000000000002731515165743500250630ustar00rootroot00000000000000import invariant from './invariant'; export default function assertNotInfinite(size) { invariant( size !== Infinity, 'Cannot perform this action with an infinite size.' ); } immutable-js-immutable-js-fa7d047/src/utils/coerceKeyPath.js000066400000000000000000000006111515165743500241350ustar00rootroot00000000000000import { isOrdered } from '../predicates/isOrdered'; import isArrayLike from './isArrayLike'; export default function coerceKeyPath(keyPath) { if (isArrayLike(keyPath) && typeof keyPath !== 'string') { return keyPath; } if (isOrdered(keyPath)) { return keyPath.toArray(); } throw new TypeError( 'Invalid keyPath: expected Ordered Collection or Array: ' + keyPath ); } immutable-js-immutable-js-fa7d047/src/utils/deepEqual.js000066400000000000000000000032361515165743500233220ustar00rootroot00000000000000import { is } from '../is'; import { NOT_SET } from '../TrieUtils'; import { isCollection } from '../predicates/isCollection'; import { isKeyed } from '../predicates/isKeyed'; import { isIndexed } from '../predicates/isIndexed'; import { isAssociative } from '../predicates/isAssociative'; import { isOrdered } from '../predicates/isOrdered'; export default function deepEqual(a, b) { if (a === b) { return true; } if ( !isCollection(b) || (a.size !== undefined && b.size !== undefined && a.size !== b.size) || (a.__hash !== undefined && b.__hash !== undefined && a.__hash !== b.__hash) || isKeyed(a) !== isKeyed(b) || isIndexed(a) !== isIndexed(b) || isOrdered(a) !== isOrdered(b) ) { return false; } if (a.size === 0 && b.size === 0) { return true; } const notAssociative = !isAssociative(a); if (isOrdered(a)) { const entries = a.entries(); return ( b.every((v, k) => { const entry = entries.next().value; return entry && is(entry[1], v) && (notAssociative || is(entry[0], k)); }) && entries.next().done ); } let flipped = false; if (a.size === undefined) { if (b.size === undefined) { if (typeof a.cacheResult === 'function') { a.cacheResult(); } } else { flipped = true; const _ = a; a = b; b = _; } } let allEqual = true; const bSize = b.__iterate((v, k) => { if ( notAssociative ? !a.has(v) : flipped ? !is(v, a.get(k, NOT_SET)) : !is(a.get(k, NOT_SET), v) ) { allEqual = false; return false; } }); return allEqual && a.size === bSize; } immutable-js-immutable-js-fa7d047/src/utils/hasOwnProperty.js000066400000000000000000000000601515165743500244110ustar00rootroot00000000000000export default Object.prototype.hasOwnProperty; immutable-js-immutable-js-fa7d047/src/utils/invariant.js000066400000000000000000000001421515165743500234010ustar00rootroot00000000000000export default function invariant(condition, error) { if (!condition) throw new Error(error); } immutable-js-immutable-js-fa7d047/src/utils/isArrayLike.js000066400000000000000000000010731515165743500236310ustar00rootroot00000000000000export default function isArrayLike(value) { if (Array.isArray(value) || typeof value === 'string') { return true; } return ( value && typeof value === 'object' && Number.isInteger(value.length) && value.length >= 0 && (value.length === 0 ? // Only {length: 0} is considered Array-like. Object.keys(value).length === 1 : // An object is only Array-like if it has a property where the last value // in the array-like may be found (which could be undefined). value.hasOwnProperty(value.length - 1)) ); } immutable-js-immutable-js-fa7d047/src/utils/isDataStructure.js000066400000000000000000000006331515165743500245410ustar00rootroot00000000000000import { isImmutable } from '../predicates/isImmutable'; import isPlainObj from './isPlainObj'; /** * Returns true if the value is a potentially-persistent data structure, either * provided by Immutable.js or a plain Array or Object. */ export default function isDataStructure(value) { return ( typeof value === 'object' && (isImmutable(value) || Array.isArray(value) || isPlainObj(value)) ); } immutable-js-immutable-js-fa7d047/src/utils/isPlainObj.js000066400000000000000000000013621515165743500234450ustar00rootroot00000000000000const toString = Object.prototype.toString; export default function isPlainObject(value) { // The base prototype's toString deals with Argument objects and native namespaces like Math if ( !value || typeof value !== 'object' || toString.call(value) !== '[object Object]' ) { return false; } const proto = Object.getPrototypeOf(value); if (proto === null) { return true; } // Iteratively going up the prototype chain is needed for cross-realm environments (differing contexts, iframes, etc) let parentProto = proto; let nextProto = Object.getPrototypeOf(proto); while (nextProto !== null) { parentProto = nextProto; nextProto = Object.getPrototypeOf(parentProto); } return parentProto === proto; } immutable-js-immutable-js-fa7d047/src/utils/mixin.js000066400000000000000000000005201515165743500225320ustar00rootroot00000000000000/** * Contributes additional methods to a constructor */ export default function mixin(ctor, methods) { const keyCopier = key => { ctor.prototype[key] = methods[key]; }; Object.keys(methods).forEach(keyCopier); Object.getOwnPropertySymbols && Object.getOwnPropertySymbols(methods).forEach(keyCopier); return ctor; } immutable-js-immutable-js-fa7d047/src/utils/protoInjection.js000066400000000000000000000002021515165743500244110ustar00rootroot00000000000000export function isProtoKey(key) { return ( typeof key === 'string' && (key === '__proto__' || key === 'constructor') ); } immutable-js-immutable-js-fa7d047/src/utils/quoteString.js000066400000000000000000000004271515165743500237400ustar00rootroot00000000000000/** * Converts a value to a string, adding quotes if a string was provided. */ export default function quoteString(value) { try { return typeof value === 'string' ? JSON.stringify(value) : String(value); } catch (_ignoreError) { return JSON.stringify(value); } } immutable-js-immutable-js-fa7d047/src/utils/shallowCopy.js000066400000000000000000000006441515165743500237210ustar00rootroot00000000000000import arrCopy from './arrCopy'; import hasOwnProperty from './hasOwnProperty'; import { isProtoKey } from './protoInjection'; export default function shallowCopy(from) { if (Array.isArray(from)) { return arrCopy(from); } const to = {}; for (const key in from) { if (isProtoKey(key)) { continue; } if (hasOwnProperty.call(from, key)) { to[key] = from[key]; } } return to; } immutable-js-immutable-js-fa7d047/tslint.json000066400000000000000000000013741515165743500213410ustar00rootroot00000000000000{ "extends": ["tslint:recommended", "tslint-config-prettier"], "rules": { "array-type": [true, "generic"], "quotemark": false, "no-reference": false, "no-namespace": false, "member-access": false, "interface-name": false, "member-ordering": false, "only-arrow-functions": false, "object-literal-sort-keys": false, "no-conditional-assignment": false, "one-variable-per-declaration": false, "max-classes-per-file": false, "space-before-function-paren": false, "trailing-comma": [ true, { "multiline": { "objects": "always", "arrays": "always", "typeLiterals": "always", "functions": "never" } } ], "no-console": false } } immutable-js-immutable-js-fa7d047/type-definitions/000077500000000000000000000000001515165743500224165ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/type-definitions/flow-tests/000077500000000000000000000000001515165743500245255ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/type-definitions/flow-tests/.flowconfig000066400000000000000000000003131515165743500266600ustar00rootroot00000000000000[include] ../../ [options] module.name_mapper='^immutable$' -> '../../type-definitions/immutable.js.flow' [ignore] 💩 Only interested in testing these files directly in this repo. .*/node_modules/.* immutable-js-immutable-js-fa7d047/type-definitions/flow-tests/covariance.js000066400000000000000000000026711515165743500272030ustar00rootroot00000000000000//@flow import { List, Map, Set, Stack, OrderedMap, OrderedSet } from 'immutable'; class A { x: number; } class B extends A { y: string; } class C { z: string; } // List covariance declare var listOfB: List; var listOfA: List = listOfB; listOfA = List([new B()]); // $FlowExpectedError[incompatible-type-arg] var listOfC: List = listOfB; // Map covariance declare var mapOfB: Map; var mapOfA: Map = mapOfB; mapOfA = Map({ b: new B() }); // $FlowExpectedError[incompatible-type-arg] var mapOfC: Map = mapOfB; // Set covariance declare var setOfB: Set; var setOfA: Set = setOfB; setOfA = Set([new B()]); // $FlowExpectedError[incompatible-type-arg] var setOfC: Set = setOfB; // Stack covariance declare var stackOfB: Stack; var stackOfA: Stack = stackOfB; stackOfA = Stack([new B()]); // $FlowExpectedError[incompatible-type-arg] var stackOfC: Stack = stackOfB; // OrderedMap covariance declare var orderedMapOfB: OrderedMap; var orderedMapOfA: OrderedMap = orderedMapOfB; orderedMapOfA = OrderedMap({ b: new B() }); // $FlowExpectedError[incompatible-type-arg] var orderedMapOfC: OrderedMap = orderedMapOfB; // OrderedSet covariance declare var orderedSetOfB: OrderedSet; var orderedSetOfA: OrderedSet = orderedSetOfB; orderedSetOfA = OrderedSet([new B()]); // $FlowExpectedError[incompatible-type-arg] var orderedSetOfC: OrderedSet = orderedSetOfB; immutable-js-immutable-js-fa7d047/type-definitions/flow-tests/es6-collections.js000066400000000000000000000007341515165743500301000ustar00rootroot00000000000000// @flow import { Map as ImmutableMap, Set as ImmutableSet } from 'immutable'; // Immutable.js collections var mapImmutable: ImmutableMap = ImmutableMap(); var setImmutable: ImmutableSet = ImmutableSet(); var deleteResultImmutable: ImmutableMap = mapImmutable.delete( 'foo' ); // ES6 collections var mapES6: Map = new Map(); var setES6: Set = new Set(); var deleteResultES6: boolean = mapES6.delete('foo'); immutable-js-immutable-js-fa7d047/type-definitions/flow-tests/immutable-flow.js000066400000000000000000001332241515165743500300140ustar00rootroot00000000000000// @flow // Some tests look like they are repeated in order to avoid false positives. // Flow might not complain about an instance of (what it thinks is) T to be assigned to T import Immutable, { List, Map, Stack, Set, Seq, Range, Repeat, Record, OrderedMap, OrderedSet, get, getIn, has, hasIn, merge, mergeDeep, mergeWith, mergeDeepWith, remove, removeIn, set, setIn, update, updateIn, } from 'immutable'; import * as Immutable2 from 'immutable'; import type { KeyedCollection, IndexedCollection, SetCollection, KeyedSeq, IndexedSeq, SetSeq, RecordFactory, RecordOf, } from 'immutable'; /** * Although this looks like dead code, importing `Immutable` and * `Immutable2` tests: * * 1. that default import works -- `import Immutable, {...} from 'immutable' * 2. that importing everything works -- `import * as X from 'immutable'` * 3. that individual imports are supported */ const ImmutableList = Immutable.List; const ImmutableMap = Immutable.Map; const ImmutableStack = Immutable.Stack; const ImmutableSet = Immutable.Set; const ImmutableKeyedCollection: KeyedCollection< *, * > = Immutable.Collection.Keyed(); const ImmutableRange = Immutable.Range; const ImmutableRepeat = Immutable.Repeat; const ImmutableIndexedSeq: IndexedSeq<*> = Immutable.Seq.Indexed(); const Immutable2List = Immutable2.List; const Immutable2Map = Immutable2.Map; const Immutable2Stack = Immutable2.Stack; const Immutable2Set = Immutable2.Set; const Immutable2KeyedCollection: Immutable2.KeyedCollection< *, * > = Immutable2.Collection.Keyed(); const Immutable2Range = Immutable2.Range; const Immutable2Repeat = Immutable2.Repeat; const Immutable2IndexedSeq: Immutable2.IndexedSeq<*> = Immutable2.Seq.Indexed(); var defaultExport: List<*> = Immutable.List(); var moduleExport: List<*> = Immutable2.List(); var numberList: List = List(); var numberOrStringList: List = List(); var nullableNumberList: List = List(); var stringToNumber: Map = Map(); var orderedStringToNumber: OrderedMap = OrderedMap(); var orderedStringToString: OrderedMap = OrderedMap(); var orderedStringToNumberOrString: OrderedMap< string, string | number > = OrderedMap(); var orderedNumberToString: OrderedMap = OrderedMap(); var orderedNumberToNumber: OrderedMap = OrderedMap(); var stringToNumberOrString: Map = Map(); var numberToString: Map = Map(); var stringOrNumberToNumberOrString: Map< string | number, string | number > = Map(); var anyMap: Map = Map(); var numberSet: Set = Set(); var orderedStringSet: OrderedSet = OrderedSet(); var orderedNumberSet: OrderedSet = OrderedSet(); var orderedNumberOrStringSet: OrderedSet = OrderedSet(); var numberOrStringSet: Set = Set(); var stringSet: Set = Set(); var numberStack: Stack = Stack(); var numberOrStringStack: Stack = Stack(); var number: number = 0; var stringToNumberCollection: KeyedCollection = stringToNumber; var numberToStringCollection: KeyedCollection = numberToString; var partitions: [List, List]; numberList = List([1, 2]); var numberListSize: number = numberList.size; numberOrStringList = List(['a', 1]); // $FlowExpectedError[incompatible-call] numberList = List(['a', 'b']); numberList = List.of(1, 2); numberOrStringList = List.of('a', 1); // $FlowExpectedError[incompatible-call] numberList = List.of('a', 1); numberList = List().set(0, 0); numberOrStringList = List.of(0).set(1, 'a'); // $FlowExpectedError[incompatible-call] numberList = List().set(0, 'a'); numberList = List.of(1, 2, 3); // $FlowExpectedError[incompatible-type] var item: number = numberList.get(4); var nullableItem: ?number = numberList.get(4); var itemOrDefault: number = numberList.get(4, 10); numberList = List().insert(0, 0); numberOrStringList = List.of(0).insert(1, 'a'); // $FlowExpectedError[incompatible-call] numberList = List().insert(0, 'a'); numberList = List().push(1, 1); numberOrStringList = List().push(1, 'a'); // $FlowExpectedError[incompatible-call] numberList = List().push(0, 'a'); numberList = List().unshift(1, 1); numberOrStringList = List().unshift(1, 'a'); // $FlowExpectedError[incompatible-call] numberList = List().unshift(0, 'a'); numberList = List.of(1).delete(0); // $FlowExpectedError[incompatible-call] numberList = List.of('a').delete(0); numberList = List.of(1).remove(0); // $FlowExpectedError[incompatible-call] numberList = List.of('a').remove(0); numberList = List.of(1).clear(); // $FlowExpectedError[incompatible-call] numberList = List.of('a').clear(); numberList = List.of(1).pop(); // $FlowExpectedError[incompatible-call] numberList = List.of('a').pop(); numberList = List.of(1).shift(); // $FlowExpectedError[incompatible-call] numberList = List.of('a').shift(); numberList = List.of('a').update((value) => List.of(1)); // $FlowExpectedError[incompatible-call] numberList = List.of(1).update((value) => List.of('a')); numberOrStringList = List.of('a').update(0, (value) => 1); // $FlowExpectedError[incompatible-call] numberList = List.of(1).update(0, (value) => 'a'); numberOrStringList = List.of(1).update(1, 0, (value) => 'a'); // $FlowExpectedError[incompatible-call] numberList = List.of(1).update(1, 0, (value) => 'a'); numberList = List.of(1).merge(List.of(2)); numberOrStringList = List.of('a').merge(List.of(1)); // $FlowExpectedError[incompatible-call] numberList = List.of('a').merge(List.of(1)); // Functional API numberList = merge(List([1]), List([2])); numberOrStringList = merge>(List(['a']), List([1])); // $FlowExpectedError[incompatible-call] numberList = merge(List(['a']), List([1])); nullableNumberList = List.of(1).setSize(2); // $FlowExpectedError[incompatible-type] setIn [] replaces the top-most value. number ~> List numberList = List([1]).setIn([], 0); { const x: number = List([1]).setIn([], 0); } // $FlowExpectedError[incompatible-call] "a" is not a valid key for List. numberList = List([1]).setIn(['a'], 0); // $FlowExpectedError[incompatible-type-arg] "a" is not a valid value for List of number. numberList = List([1]).setIn([0], 'a'); numberList = List([1]).setIn([0], 0); // $FlowExpectedError[incompatible-call] "a" is not a valid key for List. List([List([List([1])])]).setIn([0, 0, 'a'], 'a'); // $FlowExpectedError[incompatible-call] "a" is not a valid value for List of number. List([List([List([1])])]).setIn([0, 0, 0], 'a'); List([List([List([1])])]).setIn([0, 0, 0], 123); // $FlowExpectedError[incompatible-type] deleteIn [] replaces the top-most value. void ~> List numberList = List([1]).deleteIn([]); { const x: void = List([1]).deleteIn([]); } // $FlowExpectedError[incompatible-type] numberList = List([1]).removeIn([]); // $FlowExpectedError[incompatible-call] "a" is not a valid key for List. numberList = List([1]).deleteIn(['a']); // $FlowExpectedError[incompatible-call] numberList = List([1]).removeIn(['a']); numberList = List([1]).deleteIn([0]); numberList = List([1]).removeIn([0]); // Functional API // $FlowExpectedError[incompatible-type] deleteIn [] replaces the top-most value. void ~> List numberList = removeIn(List([1]), []); { const x: void = removeIn(List([1]), []); } // $FlowExpectedError[incompatible-call] "a" is not a valid key for List. numberList = removeIn(List([1]), ['a']); numberList = removeIn(List([1]), [0]); // $FlowExpectedError[incompatible-type] updateIn [] replaces the top-most value. number ~> List numberList = List([1]).updateIn([], () => 123); { const x: number = List([1]).updateIn([], () => 123); } // $FlowExpectedError[incompatible-call] - 'a' is not a number numberList = List([1]).updateIn([0], (val) => 'a'); // $FlowExpectedError[incompatible-call] numberList = List([1]).updateIn([0], 0, (val) => 'a'); // $FlowExpectedError[incompatible-call] - 'a' in an invalid argument numberList = List([1]).updateIn([0], 'a'); // $FlowExpectedError[incompatible-call] numberList = List([1]).updateIn([0], 0, 'a'); numberList = List([1]).updateIn([0], (val) => val + 1); numberList = List([1]).updateIn([0], 0, (val) => val + 1); numberList = List.of(1).mergeIn([], []); numberList = List.of(1).mergeDeepIn([], []); numberList = List.of(1).withMutations((mutable) => mutable); numberList = List.of(1).asMutable(); numberList = List.of(1).asImmutable(); numberList = List.of(1).map((value, index, iter) => 1); // $FlowExpectedError[incompatible-call] numberList = List.of(1).map((value, index, iter) => 'a'); numberList = List.of(1).flatMap((value, index, iter) => [1]); // $FlowExpectedError[incompatible-call] numberList = List.of(1).flatMap((value, index, iter) => ['a']); numberList = List.of(1).flatten(); // Specific type for filter(Boolean) which removes nullability. numberList = nullableNumberList.filter(Boolean); partitions = List([1,2,3]).partition(value => value % 2); /* Map */ stringToNumber = Map(); let stringToNumberSize: number = stringToNumber.size; stringToNumberOrString = Map(); numberToString = Map(); stringToNumber = Map({ a: 1 }); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 'a' }); stringToNumber = Map([['a', 1]]); stringToNumber = Map(List([['a', 1]])); // $FlowExpectedError[incompatible-call] stringToNumber = Map([['a', 'b']]); // $FlowExpectedError[incompatible-call] -- this is actually a Map stringToNumber = Map(List([['a', 'a']])); // $FlowFixMe[incompatible-call] - This is Iterable>, ideally it could be interpreted as Iterable<[string, string]> stringToNumber = Map(List([List(['a', 'a'])])); stringOrNumberToNumberOrString = Map({ a: 'a' }).set('b', 1).set(2, 'c'); // $FlowExpectedError[incompatible-call] stringToNumber = Map({ a: 0 }).set('b', ''); // $FlowExpectedError[incompatible-call] stringToNumber = Map().set(1, ''); // Functional API stringToNumber = set(set(Map({ a: 0 }), 'b', 1), 'c', 2); // $FlowExpectedError[incompatible-call] - Functional API currently requires arguments to have the same value types. stringOrNumberToNumberOrString = set(set(Map({ a: 'a' }), 'b', 1), 2, 'c'); // $FlowExpectedError[incompatible-call] stringToNumber = set(Map({ a: 0 }), 'b', ''); // $FlowExpectedError[incompatible-call] stringToNumber = set(Map(), 1, ''); stringToNumber = Map({ a: 0 }).delete('a'); stringToNumber = Map({ a: 0 }).remove('a'); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 0 }).delete(1); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 0 }).remove(1); stringToNumber = Map({ a: 0 }).deleteAll(['a']); stringToNumber = Map({ a: 0 }).removeAll(['a']); // $FlowExpectedError[prop-missing] stringToNumber = Map({ a: 0 }).deleteAll(1); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 0 }).deleteAll([1]); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 0 }).removeAll([1]); stringToNumber = Map({ a: 0 }).clear(); stringToNumber = Map({ a: 1 }).update((value) => Map({ a: 1 })); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 1 }).update((value) => Map({ '1': 'a' })); stringToNumberOrString = Map({ a: 1 }).update('a', (value) => 'a'); // $FlowExpectedError[incompatible-call] stringToNumber = Map({ a: 1 }).update('a', (value) => 'a'); stringToNumberOrString = Map({ a: 1 }).update('a', 'b', (value) => 'a'); // $FlowExpectedError[incompatible-type-arg] // $FlowExpectedError[incompatible-call] stringToNumber = Map({ a: 1 }).update('a', 'b', (value) => 'a'); // $FlowExpectedError[incompatible-type-arg] stringToNumberOrString = Map({ a: 1 }).merge({ a: { a: '1' } }); // $FlowExpectedError[incompatible-type-arg] stringToNumberOrString = Map({ a: 1 }).update('a', 'b', (value) => { a: '1'; }); stringToNumber = Map({ a: 1 }).merge(Map({ a: 1 })); stringToNumberOrString = Map({ a: 1 }).merge({ a: 'b' }); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 1 }).merge({ a: 'b' }); // $FlowExpectedError[incompatible-call] stringToNumber = Map({ a: 1 }).merge([[1, 'a']]); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 1 }).merge(numberToString); // Functional API stringToNumber = merge(Map({ a: 1 }), Map({ a: 1 })); // $FlowExpectedError[incompatible-call] - Functional API currently requires arguments to have the same value types. stringToNumberOrString = merge(Map({ a: 1 }), { a: 'b' }); // $FlowExpectedError[incompatible-call] stringToNumber = merge(Map({ a: 1 }), { a: 'b' }); // $FlowExpectedError[incompatible-call] stringToNumber = merge(Map({ a: 1 }), [[1, 'a']]); // $FlowExpectedError[incompatible-call] stringToNumber = merge(Map({ a: 1 }), numberToString); stringToNumber = Map({ a: 1 }).mergeWith((previous, next, key) => 1, { a: 2, b: 2, }); stringToNumber = Map({ a: 1 }).mergeWith( // $FlowExpectedError[incompatible-call] (previous, next, key) => previous + next, // $FlowExpectedError[incompatible-type-arg] { a: '2', b: '2' } ); stringToNumberOrString = Map({ a: 1 }).mergeWith( (previous, next, key) => previous + next, { a: '2', b: '2' } ); // $FlowExpectedError[incompatible-call] - the array [1] is not a valid argument stringToNumber = Map({ a: 1 }).mergeWith((previous, next, key) => 1, [1]); stringToNumberOrString = Map({ a: 1 }).mergeDeep({ a: 'b' }); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 1 }).mergeDeep({ a: 'b' }); stringToNumber = Map({ a: 1 }).mergeDeepWith((previous, next, key) => 1, { a: 2, b: 2, }); stringToNumber = Map({ a: 1 }).mergeDeepWith( (previous, next, key) => 1, // $FlowExpectedError[incompatible-type-arg] { a: '2', b: '2' } ); stringToNumberOrString = Map({ a: 1 }).mergeDeepWith( (previous, next, key) => 1, { a: '2', b: '2' } ); // $FlowExpectedError[incompatible-call] - the array [1] is not a valid argument stringToNumber = Map({ a: 1 }).mergeDeepWith((previous, next, key) => 1, [1]); // KeyedSeq can merge into Map var stringToStringSeq: KeyedSeq = Seq({ b: 'B' }); stringToNumberOrString = Map({ a: 1 }).merge(stringToStringSeq); // $FlowExpectedError[incompatible-type] stringToNumber = Map({ a: 1 }).setIn([], 0); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 1 }).setIn(['a'], 'a'); stringToNumber = Map({ a: 1 }).setIn(['a'], 0); // $FlowExpectedError[incompatible-type] stringToNumber = Map({ a: 1 }).deleteIn([]); // $FlowExpectedError[incompatible-type] stringToNumber = Map({ a: 1 }).removeIn([]); stringToNumber = Map({ a: 1 }).deleteIn(['a']); stringToNumber = Map({ a: 1 }).removeIn(['a']); // $FlowExpectedError[incompatible-type] Map({ a: 1 }).updateIn([], (v) => v + 1); // $FlowExpectedError[incompatible-call] stringToNumber = Map({ a: 1 }).updateIn(['a'], (v) => 'a'); stringToNumber = Map({ a: 1 }).updateIn(['a'], (v) => v + 1); stringToNumber = Map({ a: 1 }).updateIn(['a'], 0, (v) => v + 1); Map({ x: Map({ y: Map({ z: 1 }) }) }).updateIn(['x', 'y', 'z'], (v) => v + 1); Map({ x: Map({ y: Map({ z: 1 }) }) }).updateIn( ['x', 'y', 'z'], 0, (v) => v + 1 ); // $FlowExpectedError[incompatible-call] Map({ x: Map({ y: Map({ z: 1 }) }) }).updateIn(['x', 'y', 1], (v) => v + 1); // $FlowExpectedError[incompatible-call] Map({ x: Map({ y: Map({ z: 1 }) }) }).updateIn(['x', 'y', 'z'], (v) => 'a'); stringToNumber = Map({ a: 1 }).mergeIn([], []); stringToNumber = Map({ a: 1 }).mergeDeepIn([], []); anyMap = Map({ a: {} }).mergeIn(['a'], Map({ b: 2 })); anyMap = Map({ a: {} }).mergeDeepIn(['a'], Map({ b: 2 })); anyMap = Map({ a: {} }).mergeIn(['a'], List([1, 2])); anyMap = Map({ a: {} }).mergeDeepIn(['a'], List([1, 2])); anyMap = Map({ a: {} }).mergeIn(['a'], { b: 2 }); anyMap = Map({ a: {} }).mergeDeepIn(['a'], { b: 2 }); // $FlowExpectedError[incompatible-call]: not iterable / object anyMap = Map({ a: {} }).mergeIn(['a'], 1); // $FlowExpectedError[incompatible-call]: not iterable / object anyMap = Map({ a: {} }).mergeDeepIn(['a'], 1); // $FlowExpectedError[incompatible-type-arg]: bad key type stringToNumber = Map({ a: {} }).mergeIn([1], { b: 2 }); // $FlowExpectedError[incompatible-type-arg]: bad key type stringToNumber = Map({ a: {} }).mergeDeepIn([1], { b: 2 }); stringToNumber = Map({ a: 1 }).withMutations((mutable) => mutable); stringToNumber = Map({ a: 1 }).asMutable(); stringToNumber = Map({ a: 1 }).asImmutable(); stringToNumber = Map({ a: 1 }).map((value, index, iter) => 1); // $FlowExpectedError[incompatible-call] stringToNumber = Map({ a: 1 }).map((value, index, iter) => 'a'); stringToNumber = Map({ a: 1 }).flatMap((value, index, iter) => [['b', 1]]); // $FlowExpectedError[incompatible-call] stringToNumber = Map({ a: 1 }).flatMap((value, index, iter) => [['a', 'a']]); // $FlowExpectedError[incompatible-call] stringToNumber = Map({ a: 1 }).flatMap((value, index, iter) => Map({ a: 'a' })); numberToString = Map({ a: 1 }).flip(); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 1 }).flip(); numberToString = Map({ a: 'a' }).mapKeys((key, value, iter) => 1); // $FlowExpectedError[incompatible-type-arg] stringToNumber = Map({ a: 1 }).mapKeys((key, value, iter) => 1); anyMap = Map({ a: 1 }).flatten(); var stringToNullableNumber = Map({ a: 1, b: null }); // $FlowExpectedError[incompatible-type-arg] stringToNumber = stringToNullableNumber; // Specific type for filter(Boolean) which removes nullability. stringToNumber = stringToNullableNumber.filter(Boolean); [anyMap, ] = Map({ "a": 1, "b": 2}).partition((key, index, iter) => key % 2) /* OrderedMap */ orderedStringToNumber = Map({ a: 1 }).toOrderedMap(); // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap orderedStringToNumber = Map({ a: 'b' }).toOrderedMap(); orderedStringToString = Map({ a: 'b' }).toOrderedMap(); orderedStringToNumber = OrderedMap({ a: 1 }); // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap orderedStringToNumber = OrderedMap({ a: '1' }); orderedStringToString = OrderedMap({ a: '1' }); orderedStringToNumber = OrderedMap(Map({ a: 1 })); // $FlowExpectedError[incompatible-type-arg] - it's actually an OrderedMap orderedStringToNumber = OrderedMap(Map({ a: '1' })); orderedStringToNumber = OrderedMap(); orderedStringToNumber = OrderedMap().set('b', 2); // $FlowExpectedError[incompatible-call] - this is actually an OrderedMap orderedStringToNumber = OrderedMap().set('b', '2'); orderedStringToString = OrderedMap().set('b', '2'); orderedStringToNumber = OrderedMap({ a: 1 }).delete('a'); orderedStringToNumber = OrderedMap({ a: 1 }).remove('a'); orderedStringToNumber = OrderedMap({ a: 1 }).clear(); orderedStringToNumber = OrderedMap({ a: 1 }).update(() => OrderedMap({ b: 1 })); /** * TODO: the following is valid but I question if it should be valid: * * ``` * const x: OrderedMap = OrderedMap({'a': 1}) * .update(() => OrderedMap({'b': '1'})) * ``` * * In the above example, `update` is changing an OrderedMap to an OrderedMap * This seems inconsistent with the typescript signature of * * ``` * update(updater: (value: Map) => Map): Map * ``` */ orderedStringToNumber = OrderedMap({ a: 1 }).update(() => // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap OrderedMap({ b: '1' }) ); orderedStringToString = OrderedMap({ a: 1 }).update(() => OrderedMap({ b: '1' }) ); orderedStringToNumber = OrderedMap({ a: 1 }).update('a', (value) => value + 1); /** * TODO: is the below the intended functionality? The typescript signature looks like * * ``` * update(key: K, updater: (value: V) => V): Map; * ``` * * so it seems like in this case the updater should only be able to return numbers. * This comment applies to all of the update / merge functions in Map and OrderedMap */ // $FlowExpectedError[incompatible-call] - this is actually an OrderedMap orderedStringToNumber = OrderedMap({ a: 1 }).update('a', () => 'b'); orderedStringToNumberOrString = OrderedMap({ a: 1 }).update('a', () => 'b'); orderedStringToNumber = OrderedMap({ a: 1 }).update( 'a', 0, (value) => value + 1 ); // $FlowExpectedError[incompatible-call] - this is actually an OrderedMap orderedStringToNumber = OrderedMap({ a: 1 }).update('a', 0, () => 'b'); orderedStringToNumberOrString = OrderedMap({ a: 1 }).update('a', 0, () => 'b'); orderedStringToNumber = OrderedMap({ a: 1 }).merge({ b: 2 }); // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap orderedStringToNumber = OrderedMap({ a: 1 }).merge({ b: '2' }); orderedStringToNumberOrString = OrderedMap({ a: 1 }).merge({ b: '2' }); orderedStringToNumber = OrderedMap({ a: 1 }).mergeWith( (prev, next) => next, { a: 2, b: 3 } ); orderedStringToNumber = OrderedMap({ a: 1 }).mergeWith( // $FlowExpectedError[incompatible-call] (prev, next) => next, // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap { a: '2', b: '3' } ); orderedStringToNumberOrString = OrderedMap({ a: 1 }).mergeWith( (prev, next) => next, { a: '2', b: '3' } ); // $FlowExpectedError[incompatible-call] - the array [1] is not a valid argument orderedStringToNumber = OrderedMap({ a: 1 }).mergeWith((prev, next) => next, [ 1, ]); orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeep({ a: 2 }); // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeep({ a: '2' }); orderedStringToNumberOrString = OrderedMap({ a: 1 }).mergeDeep({ a: '2' }); orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeepWith( (prev, next) => next, { a: 2, b: 3 } ); orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeepWith( (prev, next) => next, // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap { a: '2', b: '3' } ); orderedStringToNumberOrString = OrderedMap({ a: 1 }).mergeDeepWith( (prev, next) => next, { a: '2', b: '3' } ); orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeepWith( (prev, next) => next, // $FlowExpectedError[incompatible-call] - the array [1] is an invalid argument [1] ); // $FlowExpectedError[incompatible-type] orderedStringToNumber = OrderedMap({ a: 1 }).setIn([], 3); // $FlowExpectedError[incompatible-type-arg] orderedStringToNumber = OrderedMap({ a: 1 }).setIn([1], 3); orderedStringToNumber = OrderedMap({ a: 1 }).setIn(['a'], 3); // $FlowExpectedError[incompatible-type] orderedStringToNumber = OrderedMap({ a: 1 }).deleteIn([]); // $FlowExpectedError[incompatible-type] orderedStringToNumber = OrderedMap({ a: 1 }).removeIn([]); // $FlowExpectedError[incompatible-type-arg] orderedStringToNumber = OrderedMap({ a: 1 }).deleteIn([1]); // $FlowExpectedError[incompatible-type-arg] orderedStringToNumber = OrderedMap({ a: 1 }).removeIn([1]); orderedStringToNumber = OrderedMap({ a: 1 }).deleteIn(['b']); orderedStringToNumber = OrderedMap({ a: 1 }).removeIn(['b']); // $FlowExpectedError[incompatible-type] orderedStringToNumber = OrderedMap({ a: 1 }).updateIn([], (v) => v + 1); // $FlowExpectedError[incompatible-type-arg] orderedStringToNumber = OrderedMap({ a: 1 }).updateIn([1], (v) => v + 1); // $FlowExpectedError[incompatible-call] orderedStringToNumber = OrderedMap({ a: 1 }).updateIn(['a'], (v) => 'a'); orderedStringToNumber = OrderedMap({ a: 1 }).updateIn(['a'], (v) => v + 1); orderedStringToNumber = OrderedMap({ a: 1 }).updateIn(['a'], 0, (v) => v + 1); // $FlowExpectedError[incompatible-call] OrderedMap({ x: OrderedMap({ y: 1 }) }).updateIn(['x', 1], (v) => v + 1); // $FlowExpectedError[incompatible-call] OrderedMap({ x: OrderedMap({ y: 1 }) }).updateIn(['x', 'y'], (v) => 'a'); OrderedMap({ x: OrderedMap({ y: 1 }) }).updateIn(['x', 'y'], (v) => v + 1); OrderedMap({ x: OrderedMap({ y: 1 }) }).updateIn(['x', 'y'], 0, (v) => v + 1); orderedStringToNumber = OrderedMap({ a: 1 }).mergeIn([], { b: 2 }); orderedStringToNumber = OrderedMap({ a: 1 }).mergeDeepIn([], { b: 2 }); orderedStringToNumber = OrderedMap({ a: 1 }).withMutations((mutable) => mutable.set('b', 2) ); orderedStringToNumber = OrderedMap({ a: 1 }).asMutable(); orderedStringToNumber = OrderedMap({ a: 1 }).asImmutable(); orderedStringToNumber = OrderedMap({ a: 1 }).map((v) => v + 1); // $FlowExpectedError[incompatible-call] - this is actually an OrderedMap orderedStringToNumber = OrderedMap({ a: 1 }).map(() => 'a'); orderedStringToString = OrderedMap({ a: 1 }).map(() => 'a'); orderedStringToNumber = OrderedMap({ a: 1 }).flatMap((v, k) => OrderedMap({ [k]: v + 1 }) ); orderedStringToNumber = OrderedMap({ a: 1 }).flatMap((v, k) => // $FlowExpectedError[incompatible-call] - string "a" is not a number OrderedMap({ [k]: 'a' }) ); // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap orderedStringToNumber = OrderedMap({ a: 1 }).flip(); orderedNumberToString = OrderedMap({ a: 1 }).flip(); orderedStringToNumber = OrderedMap({ a: 1 }).mapKeys((x) => x); // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedMap orderedStringToNumber = OrderedMap({ a: 1 }).mapKeys((x) => 1); orderedNumberToNumber = OrderedMap({ a: 1 }).mapKeys((x) => 1); orderedStringToNumber = OrderedMap({ a: 1 }).flatten(); orderedStringToNumber = OrderedMap({ a: 1 }).flatten(1); orderedStringToNumber = OrderedMap({ a: 1 }).flatten(true); // $FlowExpectedError[incompatible-call] - 'a' is an invalid argument orderedStringToNumber = OrderedMap({ a: 1 }).flatten('a'); /* Set */ numberSet = Set(); numberOrStringSet = Set(); stringSet = Set(); numberSet = Set([1, 2, 3]); // $FlowExpectedError[incompatible-call] numberSet = Set(['a', 'b']); numberSet = Set.of(1, 2); // $FlowExpectedError[incompatible-call] numberSet = Set.of('a', 'b'); numberSet = Set.fromKeys(Map().set(1, '')); stringSet = Set.fromKeys({ a: '' }); // $FlowExpectedError[incompatible-type-arg] numberSet = Set.fromKeys(Map({ a: 1 })); // $FlowExpectedError[incompatible-type-arg] numberSet = Set.fromKeys({ a: 1 }); numberOrStringSet = Set([1]).add('a'); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).add('s'); numberSet = Set([1]).delete(1); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).delete('a'); // $FlowExpectedError[incompatible-call] numberSet = Set(['a']).delete('a'); numberSet = Set([1]).remove(1); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).remove('a'); // $FlowExpectedError[incompatible-call] numberSet = Set(['a']).remove('a'); numberSet = Set([1]).clear(); // $FlowExpectedError[incompatible-call] numberSet = Set(['a']).clear(); numberOrStringSet = Set(['a']).union([1]); numberOrStringSet = Set(['a']).union(Set([1])); numberSet = Set([1]).union([1]); numberSet = Set([1]).union(Set([1])); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).union(['a']); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).union(Set(['a'])); numberOrStringSet = Set(['a']).merge([1]); numberOrStringSet = Set(['a']).merge(Set([1])); numberSet = Set([1]).merge([1]); numberSet = Set([1]).merge(Set([1])); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).merge(['a']); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).merge(Set(['a'])); numberSet = Set([1]).intersect(Set([1])); numberSet = Set([1]).intersect([1]); numberSet = Set([1]).intersect(Set(['a'])); numberSet = Set([1]).intersect(['a']); numberSet = Set([1]).subtract(Set([1])); numberSet = Set([1]).subtract([1]); numberSet = Set([1]).subtract(Set(['a'])); numberSet = Set([1]).subtract(['a']); numberSet = Set([1]).withMutations((mutable) => mutable); // $FlowExpectedError[incompatible-call] stringSet = Set([1]).withMutations((mutable) => mutable); numberSet = Set([1]).asMutable(); // $FlowExpectedError[incompatible-call] stringSet = Set([1]).asMutable(); numberSet = Set([1]).asImmutable(); // $FlowExpectedError[incompatible-call] stringSet = Set([1]).asImmutable(); stringSet = Set([1]).map((value, index, iter) => 'a'); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).map((value, index, iter) => 'a'); stringSet = Set([1]).flatMap((value, index, iter) => ['a']); // $FlowExpectedError[incompatible-call] numberSet = Set([1]).flatMap((value, index, iter) => ['a']); numberSet = Set([1]).flatten(); /* OrderedSet */ orderedStringSet = Set(['a']).toOrderedSet(); // $FlowExpectedError[incompatible-call] - this is actually an OrderedSet orderedStringSet = Set([1]).toOrderedSet(); orderedNumberSet = Set([1]).toOrderedSet(); orderedStringSet = OrderedSet(['a']); // $FlowExpectedError[incompatible-call] - this is actually an OrderedSet orderedStringSet = OrderedSet([1]); orderedNumberSet = OrderedSet([1]); orderedStringSet = OrderedSet(List.of('a')); // $FlowExpectedError[incompatible-call] - this is actually an OrderedSet orderedStringSet = OrderedSet(List.of(1)); orderedNumberSet = OrderedSet(List.of(1)); orderedStringSet = OrderedSet.of('a', 'b', 'c'); // $FlowExpectedError[incompatible-call] - this is actually an OrderedSet orderedStringSet = OrderedSet.of(1); orderedNumberSet = OrderedSet.of(1); orderedStringSet = OrderedSet.fromKeys(Map({ a: 1 })); // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedSet orderedNumberSet = OrderedSet.fromKeys(Map({ a: 1 })); orderedStringSet = OrderedSet.fromKeys({ a: 1 }); // $FlowExpectedError[incompatible-type-arg] - this is actually an OrderedSet orderedNumberSet = OrderedSet.fromKeys({ a: 1 }); orderedStringSet = OrderedSet(); orderedStringSet = OrderedSet.of('a').add('b'); /** * TODO: in typescript definitions, add looks like * * ``` * add(value: T): Set * ``` * * so we shouldn't be able to add a number to a set of strings */ // $FlowExpectedError[incompatible-call] - this is actually an OrderedSet orderedStringSet = OrderedSet('a').add(1); orderedNumberOrStringSet = OrderedSet('a').add(1); orderedStringSet = OrderedSet.of('a').delete('a'); // $FlowExpectedError[incompatible-call] - 1 is an invalid arg orderedStringSet = OrderedSet.of('a').delete(1); orderedStringSet = OrderedSet.of('a').remove('a'); // $FlowExpectedError[incompatible-call] - 1 is an invalid arg orderedStringSet = OrderedSet.of('a').remove(1); orderedStringSet = OrderedSet.of('a').clear(); orderedStringSet = OrderedSet.of('a').union(OrderedSet.of('b')); /** * TODO: typescript def looks like * * ``` * union(...iterables: Array[]): Set * ``` * * so we shouldn't be able to merge strings and numbers */ // $FlowExpectedError[incompatible-call] - this is actually an OrderedSet orderedStringSet = OrderedSet.of('a').union(OrderedSet.of(1)); orderedNumberOrStringSet = OrderedSet.of('a').union(OrderedSet.of(1)); orderedStringSet = OrderedSet.of('a').merge(OrderedSet.of('b')); /** * TODO: typescript def looks like * * ``` * merge(...iterables: Array[]): Set * ``` * * so we shouldn't be able to merge strings and numbers */ // $FlowExpectedError[incompatible-call] - this is actually an OrderedSet orderedStringSet = OrderedSet.of('a').merge(OrderedSet.of(1)); orderedNumberOrStringSet = OrderedSet.of('a').merge(OrderedSet.of(1)); orderedStringSet = OrderedSet.of('a', 'b').intersect(OrderedSet.of('a')); /** * TODO: typescript def looks like * * ``` * intersect(...iterables: Array[]): Set * ``` * * so we shouldn't be able to intersect strings and numbers */ orderedStringSet = OrderedSet.of('a', 'b').intersect(OrderedSet.of(1)); orderedStringSet = OrderedSet.of('a', 'b').subtract(OrderedSet.of('a')); /** * TODO: typescript def looks like * * ``` * subtract(...iterables: Array[]): Set * ``` * * so we shouldn't be able to intersect strings and numbers */ orderedStringSet = OrderedSet.of('a', 'b').subtract(OrderedSet.of(1)); orderedStringSet = OrderedSet().withMutations((mutable) => mutable.add('a')); orderedStringSet = OrderedSet.of('a').asMutable(); orderedStringSet = OrderedSet.of('a').asImmutable(); orderedStringSet = OrderedSet.of('a', 'b').map((m) => m); // $FlowExpectedError[incompatible-call] - this is an OrderedSet orderedStringSet = OrderedSet.of('a', 'b').map(() => 1); orderedNumberSet = OrderedSet.of('a', 'b').map(() => 1); orderedStringSet = OrderedSet.of('a', 'b').flatMap((m) => [m]); // $FlowExpectedError[incompatible-call] - this is an OrderedSet orderedStringSet = OrderedSet.of('a', 'b').flatMap((m) => [1]); orderedNumberSet = OrderedSet.of('a', 'b').flatMap((m) => [1]); orderedStringSet = OrderedSet.of('a', 'b').flatten(1); orderedStringSet = OrderedSet.of('a', 'b').flatten(false); // $FlowExpectedError[incompatible-call] - invalid arg for flatten orderedStringSet = OrderedSet.of('a', 'b').flatten('a'); /* Stack */ numberStack = Stack([1, 2]); let numberStackSize: number = numberStack.size; numberOrStringStack = Stack(['a', 1]); // $FlowExpectedError[incompatible-call] numberStack = Stack(['a', 'b']); numberStack = Stack.of(1, 2); numberOrStringStack = Stack.of('a', 1); // $FlowExpectedError[incompatible-call] numberStack = Stack.of('a', 1); number = Stack([1]).peek(); // $FlowExpectedError[incompatible-type] number = Stack(['a']).peek(); numberStack = Stack([1]).unshift(1); numberOrStringStack = Stack([1]).unshift('a'); // $FlowExpectedError[incompatible-call] numberStack = Stack([1]).unshift('a'); numberStack = Stack([1]).unshiftAll([1]); numberOrStringStack = Stack([1]).unshiftAll(['a']); // $FlowExpectedError[incompatible-call] numberStack = Stack([1]).unshiftAll(['a']); numberStack = Stack.of(1).shift(); // $FlowExpectedError[incompatible-call] numberStack = Stack.of('a').shift(); numberStack = Stack().push(1); numberOrStringStack = Stack([1]).push('a'); // $FlowExpectedError[incompatible-call] numberStack = Stack().push('a'); numberStack = Stack().pushAll([1]); numberOrStringStack = Stack([1]).pushAll(['a']); // $FlowExpectedError[incompatible-call] numberStack = Stack().push(['a']); numberStack = Stack.of(1).pop(); // $FlowExpectedError[incompatible-call] numberStack = Stack.of('a').pop(); numberStack = Stack([1]).withMutations((mutable) => mutable); // $FlowExpectedError[incompatible-call] numberStack = Stack(['a']).withMutations((mutable) => mutable); numberStack = Stack([1]).asMutable(); // $FlowExpectedError[incompatible-call] numberStack = Stack(['a']).asMutable(); numberStack = Stack([1]).asImmutable(); // $FlowExpectedError[incompatible-call] numberStack = Stack(['a']).asImmutable(); numberStack = Stack([1]).map((value, index, iter) => 1); // $FlowExpectedError[incompatible-call] numberStack = Stack([1]).map((value, index, iter) => 'a'); numberStack = Stack([1]).flatMap((value, index, iter) => [1]); // $FlowExpectedError[incompatible-call] numberStack = Stack([1]).flatMap((value, index, iter) => ['a']); numberStack = Stack([1]).flatten(); numberStack = Stack(['a']).flatten(); /* Range & Repeat */ // `{}` provide namespaces { const numberSequence: IndexedSeq = Range(0, 0, 0); } { const numberSequence: IndexedSeq = Repeat(1, 5); } { const stringSequence: IndexedSeq = Repeat('a', 5); } { // $FlowExpectedError[incompatible-call] const stringSequence: IndexedSeq = Repeat(0, 1); } { // $FlowExpectedError[incompatible-type-arg] const stringSequence: IndexedSeq = Range(0, 0, 0); } /* Seq */ let numberSeq = Seq([1, 2, 3]); // $FlowExpectedError[incompatible-type] let numberSeqSize: number = numberSeq.size; let maybeNumberSeqSize: ?number = numberSeq.size; /* Record */ type PersonRecordFields = { age: number, name: string }; type PersonRecord = RecordOf; const makePersonRecord: RecordFactory = Record({ age: 900, name: 'Yoda', }); const personRecordInstance: PersonRecord = makePersonRecord({ age: 25 }); { // $FlowExpectedError[incompatible-type] const age: string = personRecordInstance.get('age'); } { // $FlowExpectedError[incompatible-type] const age: string = personRecordInstance.age; } { const age: number = personRecordInstance.get('age'); } { const age: number = personRecordInstance.age; } // $FlowExpectedError[incompatible-call] personRecordInstance.set('invalid', 25); personRecordInstance.set('name', '25'); personRecordInstance.set('age', 33); // FixMe: The first should be FlowExpectedError[incompatible-call], and the second two should be correct, // however all three produce a hard to understand error because there is a bug // with Flow's $Call utility type. // set(personRecordInstance, 'invalid', 25) // set(personRecordInstance, 'name', '25') // set(personRecordInstance, 'age', 33) // Create a Map from a non-prototype "plain" Object let someObj = Object.create(null); someObj.x = 1; someObj.y = 2; let mapOfSomeObj: Map = Map(someObj); // $FlowExpectedError[incompatible-call] - someObj is string -> number let mapOfSomeObjMistake: Map = Map(someObj); // getIn() type // Deep nested const deepData1: List> = List([Map([['apple', 'sauce']])]); const deepNestedString1 = deepData1.getIn([0, 'apple']); { // $FlowExpectedError[incompatible-type] string is not a number const fail: ?number = deepNestedString1; } { // $FlowExpectedError[incompatible-type] getIn can return undefined const fail: string = deepNestedString1; } { const success: ?string = deepNestedString1; } const listOfListOfNumber: List> = List([List([1, 2, 3])]); const nestedNum = listOfListOfNumber.getIn([0, 1]); { // $FlowExpectedError[incompatible-type] number is not string const fail: ?string = nestedNum; } { // $FlowExpectedError[incompatible-type] getIn can return undefined const fail: number = nestedNum; } { const success: ?number = nestedNum; } // $FlowExpectedError[incompatible-call] expected a number 1st key listOfListOfNumber.getIn(['whoops', 1]); // $FlowExpectedError[incompatible-call] expected a number 2nd key listOfListOfNumber.getIn([0, 'whoops']); // $FlowExpectedError[incompatible-call] too many keys! listOfListOfNumber.getIn([0, 0, 'whoops']); // Deep nested const deepData: List>> = List([ Map([['apple', List(['sauce'])]]), ]); const deepNestedString = deepData.getIn([0, 'apple', 0]); { // $FlowExpectedError[incompatible-type] string is not a number const fail: ?number = deepNestedString; } { // $FlowExpectedError[incompatible-type] getIn can return undefined const fail: string = deepNestedString; } { const success: ?string = deepNestedString; } // $FlowExpectedError[incompatible-call] expected a string 2nd key deepData.getIn([0, 0, 0]); // $FlowExpectedError[incompatible-call] expected a number 3rd key deepData.getIn([0, 'apple', 'whoops']); // Containing Records const listOfPersonRecord: List = List([personRecordInstance]); const firstAge = listOfPersonRecord.getIn([0, 'age']); { // $FlowExpectedError[incompatible-type] expected a string key const age: string = firstAge; } { // $FlowExpectedError[incompatible-type] getIn can return undefined const age: number = firstAge; } { const age: ?number = firstAge; } // $FlowExpectedError[incompatible-call] - the first key is not an index listOfPersonRecord.getIn(['wrong', 'age']); // $FlowExpectedError[incompatible-call] - the second key is not an record key listOfPersonRecord.getIn([0, 'mispeld']); // $FlowExpectedError[incompatible-call] - the second key is not an record key listOfPersonRecord.getIn([0, 0]); // $FlowExpectedError[incompatible-call] listOfPersonRecord.setIn([0, 'age'], 'Thirteen'); listOfPersonRecord.setIn([0, 'age'], 13); // $FlowExpectedError[prop-missing] listOfPersonRecord.updateIn([0, 'age'], (value) => value.unknownFunction()); listOfPersonRecord.updateIn([0, 'age'], (value) => value + 1); listOfPersonRecord.updateIn([0, 'age'], 0, (value) => value + 1); // Recursive Records type PersonRecord2Fields = { name: string, friends: List }; type PersonRecord2 = RecordOf; const makePersonRecord2: RecordFactory = Record({ name: 'Adam', friends: List(), }); const friendly: PersonRecord2 = makePersonRecord2(); { // $FlowExpectedError[incompatible-type] string is not a number const fail: ?number = friendly.getIn(['friends', 0, 'name']); } // notSetValue provided { const success: string = friendly.getIn(['friends', 0, 'name'], 'Abbie'); } { const success: ?string = friendly.getIn(['friends', 0, 'name']); } // Functional API { // $FlowExpectedError[incompatible-type] string is not a number const fail: ?number = getIn(friendly, ['friends', 0, 'name']); } // notSetValue provided { const success: string = getIn(friendly, ['friends', 0, 'name'], 'Abbie'); } { const success: ?string = getIn(friendly, ['friends', 0, 'name']); } // Deep nested containing recursive Records const friendlies: List = List([makePersonRecord2()]); { // $FlowExpectedError[incompatible-type] string is not a number const fail: ?number = friendlies.getIn([0, 'friends', 0, 'name']); } // notSetValue provided { const success: string = friendlies.getIn([0, 'friends', 0, 'name'], 'Abbie'); } { const success: ?string = friendlies.getIn([0, 'friends', 0, 'name']); } // $FlowExpectedError[incompatible-call] friendlies.setIn([0, 'friends', 0, 'name'], 123); friendlies.setIn([0, 'friends', 0, 'name'], 'Sally'); friendlies.updateIn([0, 'friends', 0, 'name'], (value) => // $FlowExpectedError[prop-missing] value.unknownFunction() ); friendlies.updateIn([0, 'friends', 0, 'name'], (value) => value.toUpperCase()); friendlies.updateIn([0, 'friends', 0, 'name'], 'Unknown Name', (value) => value.toUpperCase() ); // Nested plain JS values type PlainPerson = { name: string, friends: Array }; const plainFriendly: PlainPerson = { name: 'Bobbie', friends: [] }; const plainFriendlies: List = List([plainFriendly]); { // $FlowExpectedError[incompatible-call] 'fraaands' is an unknown key in PlainPerson const fail: ?number = plainFriendlies.getIn([0, 'fraaands', 0, 'name']); } { // $FlowExpectedError[incompatible-call] 0 is an unknown key in PlainPerson const fail: ?number = plainFriendlies.getIn([0, 'fraaands', 0, 0]); } { // $FlowExpectedError[incompatible-type] string is not a number const fail: ?number = plainFriendlies.getIn([0, 'friends', 0, 'name']); } { // $FlowExpectedError[incompatible-type] can return undefined const fail: string = plainFriendlies.getIn([0, 'friends', 0, 'name']); } { const success: ?string = plainFriendlies.getIn([0, 'friends', 0, 'name']); } // $FlowExpectedError[incompatible-call] number is not a string plainFriendlies.setIn([0, 'friends', 0, 'name'], 123); plainFriendlies.setIn([0, 'friends', 0, 'name'], 'Morgan'); plainFriendlies.updateIn([0, 'friends', 0, 'name'], (value) => // $FlowExpectedError[prop-missing] value is a string, this is an unknown function value.unknownFunction() ); plainFriendlies.updateIn([0, 'friends', 0, 'name'], (value) => value.toUpperCase() ); // $FlowExpectedError[incompatible-call] number is not a string plainFriendlies.updateIn([0, 'friends', 0, 'name'], () => 123); plainFriendlies.updateIn([0, 'friends', 0, 'name'], () => 'Whitney'); // Functional API { // $FlowExpectedError[incompatible-call] 'fraaands' is an unknown key in PlainPerson const fail: ?number = getIn(plainFriendlies, [0, 'fraaands', 0, 'name']); } { // $FlowExpectedError[incompatible-call] 0 is an unknown key in PlainPerson const fail: ?number = getIn(plainFriendlies, [0, 'fraaands', 0, 0]); } { // $FlowExpectedError[incompatible-type] string is not a number const fail: ?number = getIn(plainFriendlies, [0, 'friends', 0, 'name']); } { // $FlowExpectedError[incompatible-type] can return undefined const fail: string = getIn(plainFriendlies, [0, 'friends', 0, 'name']); } { const success: ?string = getIn(plainFriendlies, [0, 'friends', 0, 'name']); } // $FlowExpectedError[incompatible-call] number is not a string setIn(plainFriendlies, [0, 'friends', 0, 'name'], 123); setIn(plainFriendlies, [0, 'friends', 0, 'name'], 'Morgan'); updateIn(plainFriendlies, [0, 'friends', 0, 'name'], (value) => // $FlowExpectedError[prop-missing] value is a string, this is an unknown function value.unknownFunction() ); updateIn(plainFriendlies, [0, 'friends', 0, 'name'], (value) => value.toUpperCase() ); // $FlowExpectedError[incompatible-call] number is not a string updateIn(plainFriendlies, [0, 'friends', 0, 'name'], () => 123); updateIn(plainFriendlies, [0, 'friends', 0, 'name'], () => 'Whitney'); // Plain JS values { const success: number | void = get([1, 2, 3], 0); } { const success: number | string = get([1, 2, 3], 0, 'missing'); } { // $FlowExpectedError[incompatible-call] - string is not an array index const success: number = get([1, 2, 3], 'z'); } // Note: does not return null since x is known to exist in {x,y} { const success: number = get({ x: 10, y: 10 }, 'x'); } { // $FlowExpectedError[incompatible-call] - z is not in {x,y} const success: number | void = get({ x: 10, y: 10 }, 'z'); } { const objMap: { [string]: number } = { x: 10, y: 10 }; const success: number | void = get(objMap, 'z'); } { const success: number = get({ x: 10, y: 10 }, 'x', 'missing'); } { const objMap: { [string]: number } = { x: 10, y: 10 }; const success: number | string = get(objMap, 'z', 'missing'); } // Deeply nested records type DeepNestFields = { foo: number, }; type DeepNest = RecordOf; const deepNest: RecordFactory = Record({ foo: 0, }); type NestFields = { deepNest: DeepNest, }; type Nest = RecordOf; const nest: RecordFactory = Record({ deepNest: deepNest(), }); type StateFields = { nest: Nest, }; type State = RecordOf; const initialState: RecordFactory = Record({ nest: nest(), }); const state = initialState(); (state.setIn(['nest', 'deepNest', 'foo'], 5): State); // $FlowExpectedError[incompatible-call] (state.setIn(['nest', 'deepNest', 'foo'], 'string'): State); // $FlowExpectedError[incompatible-call] (state.setIn(['nest', 'deepNest', 'unknownField'], 5): State); immutable-js-immutable-js-fa7d047/type-definitions/flow-tests/merge.js000066400000000000000000000110631515165743500261630ustar00rootroot00000000000000// @flow import { List, Map, Record, type RecordOf, type RecordFactory, get, getIn, has, hasIn, merge, mergeDeep, mergeWith, mergeDeepWith, remove, removeIn, set, setIn, update, updateIn, } from 'immutable'; // merge: Objects as Maps type ObjMap = { [key: string]: T }; const objMap: ObjMap = { x: 12, y: 34 }; (merge(objMap, { x: 321 }): ObjMap); (merge(objMap, { z: 321 }): ObjMap); // $FlowExpectedError[incompatible-call] (merge(objMap, { x: 'abc' }): ObjMap); (merge(objMap, [['x', 321]]): ObjMap); (merge(objMap, [['z', 321]]): ObjMap); // $FlowExpectedError[incompatible-call] (merge(objMap, [['x', 'abc']]): ObjMap); // $FlowExpectedError[incompatible-call] (merge(objMap, [321]): ObjMap); (merge(objMap, Map({ x: 123 })): ObjMap); (merge(objMap, Map({ z: 123 })): ObjMap); (merge(objMap, Map([['x', 123]])): ObjMap); (merge(objMap, Map([['z', 123]])): ObjMap); // $FlowExpectedError[incompatible-call] (merge(objMap, List([123])): ObjMap); // merge: Maps const map = Map({ key: 'value' }); (merge(map, { key: 'alternate' }): Map); (merge(map, { otherKey: 'value' }): Map); (merge(map, Map({ key: 'alternate' })): Map); (merge(map, Map({ otherKey: 'value' })): Map); (merge(map, [['otherKey', 'value']]): Map); // $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) (merge(map, Map({ otherKey: 123 })): Map); // $FlowExpectedError[incompatible-call] (merge(map, [4, 5, 6]): Map); // $FlowExpectedError[incompatible-call] (merge(map, 123): Map); // $FlowExpectedError[incompatible-call] (merge(map, { '0': 123 }): Map); // $FlowExpectedError[incompatible-call] (merge(map, [ [0, 4], [1, 5], [1, 6], ]): Map); // merge: Lists const list = List([1, 2, 3]); (merge(list, [4, 5, 6]): List); (merge(list, List([4, 5, 6])): List); // $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) (merge(list, ['a', 'b', 'c']): List); // $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) (merge(list, List(['a', 'b', 'c'])): List); // $FlowExpectedError[incompatible-call] (merge(list, 123): List); // $FlowExpectedError[incompatible-call] (merge(list, { '0': 123 }): List); // $FlowExpectedError[incompatible-call] (merge(list, Map({ '0': 123 })): List); // $FlowExpectedError[incompatible-call] (merge(list, [ [0, 4], [1, 5], [1, 6], ]): List); // merge: Objects as Records type XYPoint = { x: number, y: number }; const objRecord: XYPoint = { x: 12, y: 34 }; (merge(objRecord, { x: 321 }): XYPoint); (merge(objRecord, [['x', 321]]): XYPoint); (merge(objRecord, Map({ x: 123 })): XYPoint); (merge(objRecord, Map([['x', 123]])): XYPoint); const xyPointRecord = Record({ x: 0, y: 0 }); (merge(objRecord, xyPointRecord({ x: 321 })): XYPoint); // $FlowExpectedError[incompatible-call] (merge(objRecord, { x: 'abc' }): XYPoint); // $FlowExpectedError[incompatible-call] (merge({ x: 12, y: 34 }, [['x', 'abc']]): XYPoint); // $FlowExpectedError[incompatible-call] (merge(objRecord, { z: 321 }): XYPoint); // $FlowExpectedError[prop-missing]] // $FlowExpectedError[invalid-call-util]] (merge(objRecord, [['z', 321]]): XYPoint); // $FlowExpectedError[incompatible-call] (merge(objRecord, Map({ z: 123 })): XYPoint); // $FlowExpectedError[incompatible-call] (merge(objRecord, Map([['z', 123]])): XYPoint); // $FlowExpectedError[incompatible-call] (merge(objRecord, [321]): XYPoint); // $FlowExpectedError[incompatible-call] (merge(objRecord, List([123])): XYPoint); // merge: Arrays const arr = [1, 2, 3]; (merge(arr, [4, 5, 6]): Array); (merge(arr, List([4, 5, 6])): Array); // $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) (merge(arr, ['a', 'b', 'c']): Array); // $FlowExpectedError[incompatible-call] (functional merge cannot return union value types) (merge(arr, List(['a', 'b', 'c'])): Array); // $FlowExpectedError[incompatible-call] (merge(arr, 123): Array); // $FlowExpectedError[incompatible-call] (merge(arr, { '0': 123 }): Array); // $FlowExpectedError[incompatible-call] (merge(arr, Map({ '0': 123 })): Array); // $FlowExpectedError[incompatible-call] (merge(arr, [ [0, 4], [1, 5], [1, 6], ]): Array); immutable-js-immutable-js-fa7d047/type-definitions/flow-tests/predicates.js000066400000000000000000000005211515165743500272040ustar00rootroot00000000000000// @flow import { List } from 'immutable'; declare var mystery: mixed; // $FlowExpectedError[cannot-resolve-name] maybe.push('3'); if (mystery instanceof List) { maybe.push('3'); } // Note: Flow's support for %checks is still experimental. // Support this in the future. // if (List.isList(mystery)) { // mystery.push('3'); // } immutable-js-immutable-js-fa7d047/type-definitions/flow-tests/record.js000066400000000000000000000157311515165743500263500ustar00rootroot00000000000000// @flow // Some tests look like they are repeated in order to avoid false positives. // Flow might not complain about an instance of (what it thinks is) T to be assigned to T import { Record, type RecordFactory, type RecordOf, Map, List, merge } from 'immutable'; // Use the RecordFactory type to annotate const Point2: RecordFactory<{ x: number, y: number }> = Record({ x: 0, y: 0 }); const Point3: RecordFactory<{ x: number, y: number, z: number }> = Record({ x: 0, y: 0, z: 0, }); type TGeoPoint = { lat: ?number, lon: ?number }; const GeoPoint: RecordFactory = Record({ lat: null, lon: null }); // TODO: this should be FlowExpectedError - 'abc' is not a number // However, due to support for the brittle support for subclassing, Flow // cannot also type check default values in this position. const PointWhoops: RecordFactory<{ x: number, y: number }> = Record({ x: 0, y: 'abc', }); let origin2 = Point2({}); let origin3 = Point3({}); let geo = GeoPoint({ lat: 34 }); // $FlowExpectedError[incompatible-call] const mistake = Point2({ x: 'string' }); origin3 = GeoPoint({ lat: 34 }); geo = Point3({}); // Use RecordOf to type the return value of a Record factory function. let geoPointExpected1: RecordOf = GeoPoint({}); // $FlowExpectedError[prop-missing] - Point2 does not return GeoPoint. let geoPointExpected2: RecordOf = Point2({}); const px = origin2.get('x'); const px2: number = origin2.x; // $FlowExpectedError[incompatible-type] const px3: number = origin2.get('x', 'not set value'); const px4: number | string = origin2.get('x', 'not set value'); // $FlowExpectedError[incompatible-call] const pz = origin2.get('z'); // $FlowExpectedError[incompatible-use] const pz2 = origin2.z; origin2.set('x', 4); // $FlowExpectedError[incompatible-call] origin2.set('x', 'not-a-number'); // $FlowExpectedError[incompatible-call] origin2.set('z', 3); const name: string = Record.getDescriptiveName(origin2); // $FlowExpectedError[incompatible-call] const name2: string = Record.getDescriptiveName({}); // Note: need to cast through any when extending Records as if they ere classes class ABClass extends (Record({ a: 1, b: 2 }): any) { setA(a: number) { return this.set('a', a); } setB(b: number) { return this.set('b', b); } } var t1 = new ABClass({ a: 1 }); var t2 = t1.setA(3); var t3 = t2.setB(10); // Note: flow does not check extended Record classes yet var t4 = t2.setC(10); // Note: flow does not check extended Record classes yet var t1a: string = t1.a; // Note: flow does not check extended Record classes yet var t1c = t1.c; // Use of new to create record factories (supported, but discouraged) type TPointNew = { x: number, y: number }; type PointNew = RecordOf; const MakePointNew: RecordFactory = new Record({ x: 0, y: 0 }); // Not using new allows returning a record. const origin: PointNew = MakePointNew(); // Both get and prop access are supported with RecordOf { const x: number = origin.get('x'); } { const x: number = origin.x; } { // $FlowExpectedError[incompatible-type] number is not a string const x: string = origin.x; } // Can use the Record constructor type as an alternative, // it just doesn't support property access. const originAlt1: MakePointNew = MakePointNew(); // Both get and prop access are supported with RecordOf { const x: number = originAlt1.get('x'); } { // $FlowExpectedError[prop-missing] cannot use property access for this alternative annotation const x: number = originAlt1.x; } // Can also sort of use the inner Record values type as an alternative, // however it does not have the immutable record API, though useful for flowing // immutable Records where plain objects are expected. // Remember that Records are *read only*, and using the $ReadOnly helper type // can ensure correct types. const originAlt2: $ReadOnly = MakePointNew(); { // $FlowExpectedError[prop-missing] cannot use Record API for this alternative annotation const x: number = originAlt2.get('x'); } { const x: number = originAlt2.x; } // Use of new may only return a class instance, not a record // (supported but discouraged) // $FlowExpectedError[class-object-subtyping] // $FlowExpectedError[prop-missing] const mistakeOriginNew: PointNew = new MakePointNew(); // An alternative type strategy is instance based const originNew: MakePointNew = new MakePointNew(); // Only get, but not prop access are supported with class instances { const x: number = originNew.get('x'); } { // $FlowExpectedError[prop-missing] property `x`. Property not found in RecordInstance const x: number = originNew.x; } // $FlowExpectedError[incompatible-call] instantiated with invalid type const mistakeNewRecord = MakePointNew({ x: 'string' }); // $FlowExpectedError[incompatible-call] instantiated with invalid type const mistakeNewInstance = new MakePointNew({ x: 'string' }); // Subclassing // Note use of + for Read Only. type TPerson = { +name: string, +age: number }; const defaultValues: TPerson = { name: 'Aristotle', age: 2400 }; const PersonRecord = Record(defaultValues); class Person extends PersonRecord { getName(): string { return this.get('name'); } setName(name: string): this & TPerson { return this.set('name', name); } } const person = new Person(); (person.setName('Thales'): Person); (person.getName(): string); (person.setName('Thales').getName(): string); (person.setName('Thales').name: string); person.get('name'); person.set('name', 'Thales'); // $FlowExpectedError[incompatible-call] person.get('unknown'); // $FlowExpectedError[prop-missing] person.set('unknown', 'Thales'); // Note: not class PersonWithoutTypes extends PersonRecord { getName(): string { return this.get('name'); } setName(name: string): this & TPerson { return this.set('name', name); } } const person2 = new PersonWithoutTypes(); person2.get('name'); // Note: no error person2.get('unknown'); // Functional Merge type XYPoint = { x: number, y: number }; type XYPointRecord = RecordOf; const xyRecord: RecordFactory = Record({ x: 0, y: 0 }); const record = xyRecord(); (merge(record, { x: 321 }): XYPointRecord); (merge(record, xyRecord({ x: 321 })): XYPointRecord); // $FlowExpectedError[incompatible-call] (merge(record, { z: 321 }): XYPointRecord); // $FlowExpectedError[incompatible-call] (merge(record, { x: 'abc' }): XYPointRecord); (merge(record, [['x', 321]]): XYPointRecord); // $FlowExpectedError[prop-missing]] (merge(record, [['z', 321]]): XYPointRecord); // $FlowExpectedError[incompatible-call] (merge(record, [['x', 'abc']]): XYPointRecord); // $FlowExpectedError[incompatible-call] (merge(record, [321]): XYPointRecord); (merge(record, Map({ x: 123 })): XYPointRecord); // $FlowExpectedError[incompatible-call] (merge(record, Map({ z: 123 })): XYPointRecord); (merge(record, Map([['x', 123]])): XYPointRecord); // $FlowExpectedError[incompatible-call] (merge(record, Map([['z', 123]])): XYPointRecord); // $FlowExpectedError[incompatible-call] (merge(record, List([123])): XYPointRecord); immutable-js-immutable-js-fa7d047/type-definitions/immutable.d.ts000066400000000000000000005606471515165743500252110ustar00rootroot00000000000000/** * Immutable data encourages pure functions (data-in, data-out) and lends itself * to much simpler application development and enabling techniques from * functional programming such as lazy evaluation. * * While designed to bring these powerful functional concepts to JavaScript, it * presents an Object-Oriented API familiar to Javascript engineers and closely * mirroring that of Array, Map, and Set. It is easy and efficient to convert to * and from plain Javascript types. * * ## How to read these docs * * In order to better explain what kinds of values the Immutable.js API expects * and produces, this documentation is presented in a statically typed dialect of * JavaScript (like [Flow][] or [TypeScript][]). You *don't need* to use these * type checking tools in order to use Immutable.js, however becoming familiar * with their syntax will help you get a deeper understanding of this API. * * **A few examples and how to read them.** * * All methods describe the kinds of data they accept and the kinds of data * they return. For example a function which accepts two numbers and returns * a number would look like this: * * ```js * sum(first: number, second: number): number * ``` * * Sometimes, methods can accept different kinds of data or return different * kinds of data, and this is described with a *type variable*, which is * typically in all-caps. For example, a function which always returns the same * kind of data it was provided would look like this: * * ```js * identity(value: T): T * ``` * * Type variables are defined with classes and referred to in methods. For * example, a class that holds onto a value for you might look like this: * * ```js * class Box { * constructor(value: T) * getValue(): T * } * ``` * * In order to manipulate Immutable data, methods that we're used to affecting * a Collection instead return a new Collection of the same type. The type * `this` refers to the same kind of class. For example, a List which returns * new Lists when you `push` a value onto it might look like: * * ```js * class List { * push(value: T): this * } * ``` * * Many methods in Immutable.js accept values which implement the JavaScript * [Iterable][] protocol, and might appear like `Iterable` for something * which represents sequence of strings. Typically in JavaScript we use plain * Arrays (`[]`) when an Iterable is expected, but also all of the Immutable.js * collections are iterable themselves! * * For example, to get a value deep within a structure of data, we might use * `getIn` which expects an `Iterable` path: * * ``` * getIn(path: Iterable): unknown * ``` * * To use this method, we could pass an array: `data.getIn([ "key", 2 ])`. * * * Note: All examples are presented in the modern [ES2015][] version of * JavaScript. Use tools like Babel to support older browsers. * * For example: * * ```js * // ES2015 * const mappedFoo = foo.map(x => x * x); * // ES5 * var mappedFoo = foo.map(function (x) { return x * x; }); * ``` * * [ES2015]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla * [TypeScript]: https://www.typescriptlang.org/ * [Flow]: https://flowtype.org/ * [Iterable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols */ declare namespace Immutable { /** @ignore */ type OnlyObject = Extract; /** @ignore */ type ContainObject = OnlyObject extends object ? OnlyObject extends never ? false : true : false; /** * @ignore * * Used to convert deeply all immutable types to a plain TS type. * Using `unknown` on object instead of recursive call as we have a circular reference issue */ export type DeepCopy = T extends Record ? // convert Record to DeepCopy plain JS object { [key in keyof R]: ContainObject extends true ? unknown : R[key]; } : T extends Collection.Keyed ? // convert KeyedCollection to DeepCopy plain JS object { [key in KeyedKey extends string | number | symbol ? KeyedKey : string]: V extends object ? unknown : V; } : // convert IndexedCollection or Immutable.Set to DeepCopy plain JS array T extends Collection ? Array> : T extends string | number // Iterable scalar types : should be kept as is ? T : T extends Iterable // Iterable are converted to plain JS array ? Array> : T extends object // plain JS object are converted deeply ? { [ObjectKey in keyof T]: ContainObject extends true ? unknown : T[ObjectKey]; } : // other case : should be kept as is T; /** * Describes which item in a pair should be placed first when sorting * * @ignore */ export enum PairSorting { LeftThenRight = -1, RightThenLeft = +1, } /** * Function comparing two items of the same type. It can return: * * * a PairSorting value, to indicate whether the left-hand item or the right-hand item should be placed before the other * * * the traditional numeric return value - especially -1, 0, or 1 * * @ignore */ export type Comparator = (left: T, right: T) => PairSorting | number; /** * Lists are ordered indexed dense collections, much like a JavaScript * Array. * * Lists are immutable and fully persistent with O(log32 N) gets and sets, * and O(1) push and pop. * * Lists implement Deque, with efficient addition and removal from both the * end (`push`, `pop`) and beginning (`unshift`, `shift`). * * Unlike a JavaScript Array, there is no distinction between an * "unset" index and an index set to `undefined`. `List#forEach` visits all * indices from 0 to size, regardless of whether they were explicitly defined. */ namespace List { /** * True if the provided value is a List * * * ```js * const { List } = require('immutable'); * List.isList([]); // false * List.isList(List()); // true * ``` */ function isList(maybeList: unknown): maybeList is List; /** * Creates a new List containing `values`. * * * ```js * const { List } = require('immutable'); * List.of(1, 2, 3, 4) * // List [ 1, 2, 3, 4 ] * ``` * * Note: Values are not altered or converted in any way. * * * ```js * const { List } = require('immutable'); * List.of({x:1}, 2, [3], 4) * // List [ { x: 1 }, 2, [ 3 ], 4 ] * ``` */ function of(...values: Array): List; } /** * Create a new immutable List containing the values of the provided * collection-like. * * Note: `List` is a factory function and not a class, and does not use the * `new` keyword during construction. * * * ```js * const { List, Set } = require('immutable') * * const emptyList = List() * // List [] * * const plainArray = [ 1, 2, 3, 4 ] * const listFromPlainArray = List(plainArray) * // List [ 1, 2, 3, 4 ] * * const plainSet = Set([ 1, 2, 3, 4 ]) * const listFromPlainSet = List(plainSet) * // List [ 1, 2, 3, 4 ] * * const arrayIterator = plainArray[Symbol.iterator]() * const listFromCollectionArray = List(arrayIterator) * // List [ 1, 2, 3, 4 ] * * listFromPlainArray.equals(listFromCollectionArray) // true * listFromPlainSet.equals(listFromCollectionArray) // true * listFromPlainSet.equals(listFromPlainArray) // true * ``` */ function List(collection?: Iterable | ArrayLike): List; interface List extends Collection.Indexed { /** * The number of items in this List. */ readonly size: number; // Persistent changes /** * Returns a new List which includes `value` at `index`. If `index` already * exists in this List, it will be replaced. * * `index` may be a negative number, which indexes back from the end of the * List. `v.set(-1, "value")` sets the last item in the List. * * If `index` larger than `size`, the returned List's `size` will be large * enough to include the `index`. * * * ```js * const originalList = List([ 0 ]); * // List [ 0 ] * originalList.set(1, 1); * // List [ 0, 1 ] * originalList.set(0, 'overwritten'); * // List [ "overwritten" ] * originalList.set(2, 2); * // List [ 0, undefined, 2 ] * * List().set(50000, 'value').size; * // 50001 * ``` * * Note: `set` can be used in `withMutations`. */ set(index: number, value: T): List; /** * Returns a new List which excludes this `index` and with a size 1 less * than this List. Values at indices above `index` are shifted down by 1 to * fill the position. * * This is synonymous with `list.splice(index, 1)`. * * `index` may be a negative number, which indexes back from the end of the * List. `v.delete(-1)` deletes the last item in the List. * * Note: `delete` cannot be safely used in IE8 * * * ```js * List([ 0, 1, 2, 3, 4 ]).delete(0); * // List [ 1, 2, 3, 4 ] * ``` * * Since `delete()` re-indexes values, it produces a complete copy, which * has `O(N)` complexity. * * Note: `delete` *cannot* be used in `withMutations`. * * @alias remove */ delete(index: number): List; remove(index: number): List; /** * Returns a new List with `value` at `index` with a size 1 more than this * List. Values at indices above `index` are shifted over by 1. * * This is synonymous with `list.splice(index, 0, value)`. * * * ```js * List([ 0, 1, 2, 3, 4 ]).insert(6, 5) * // List [ 0, 1, 2, 3, 4, 5 ] * ``` * * Since `insert()` re-indexes values, it produces a complete copy, which * has `O(N)` complexity. * * Note: `insert` *cannot* be used in `withMutations`. */ insert(index: number, value: T): List; /** * Returns a new List with 0 size and no values in constant time. * * * ```js * List([ 1, 2, 3, 4 ]).clear() * // List [] * ``` * * Note: `clear` can be used in `withMutations`. */ clear(): List; /** * Returns a new List with the provided `values` appended, starting at this * List's `size`. * * * ```js * List([ 1, 2, 3, 4 ]).push(5) * // List [ 1, 2, 3, 4, 5 ] * ``` * * Note: `push` can be used in `withMutations`. */ push(...values: Array): List; /** * Returns a new List with a size ones less than this List, excluding * the last index in this List. * * Note: this differs from `Array#pop` because it returns a new * List rather than the removed value. Use `last()` to get the last value * in this List. * * ```js * List([ 1, 2, 3, 4 ]).pop() * // List[ 1, 2, 3 ] * ``` * * Note: `pop` can be used in `withMutations`. */ pop(): List; /** * Returns a new List with the provided `values` prepended, shifting other * values ahead to higher indices. * * * ```js * List([ 2, 3, 4]).unshift(1); * // List [ 1, 2, 3, 4 ] * ``` * * Note: `unshift` can be used in `withMutations`. */ unshift(...values: Array): List; /** * Returns a new List with a size ones less than this List, excluding * the first index in this List, shifting all other values to a lower index. * * Note: this differs from `Array#shift` because it returns a new * List rather than the removed value. Use `first()` to get the first * value in this List. * * * ```js * List([ 0, 1, 2, 3, 4 ]).shift(); * // List [ 1, 2, 3, 4 ] * ``` * * Note: `shift` can be used in `withMutations`. */ shift(): List; /** * Returns a new List with an updated value at `index` with the return * value of calling `updater` with the existing value, or `notSetValue` if * `index` was not set. If called with a single argument, `updater` is * called with the List itself. * * `index` may be a negative number, which indexes back from the end of the * List. `v.update(-1)` updates the last item in the List. * * * ```js * const list = List([ 'a', 'b', 'c' ]) * const result = list.update(2, val => val.toUpperCase()) * // List [ "a", "b", "C" ] * ``` * * This can be very useful as a way to "chain" a normal function into a * sequence of methods. RxJS calls this "let" and lodash calls it "thru". * * For example, to sum a List after mapping and filtering: * * * ```js * function sum(collection) { * return collection.reduce((sum, x) => sum + x, 0) * } * * List([ 1, 2, 3 ]) * .map(x => x + 1) * .filter(x => x % 2 === 0) * .update(sum) * // 6 * ``` * * Note: `update(index)` can be used in `withMutations`. * * @see `Map#update` */ update(index: number, notSetValue: T, updater: (value: T) => T): this; update( index: number, updater: (value: T | undefined) => T | undefined ): this; update(updater: (value: this) => R): R; /** * Returns a new List with size `size`. If `size` is less than this * List's size, the new List will exclude values at the higher indices. * If `size` is greater than this List's size, the new List will have * undefined values for the newly available indices. * * When building a new List and the final size is known up front, `setSize` * used in conjunction with `withMutations` may result in the more * performant construction. */ setSize(size: number): List; // Deep persistent changes /** * Returns a new List having set `value` at this `keyPath`. If any keys in * `keyPath` do not exist, a new immutable Map will be created at that key. * * Index numbers are used as keys to determine the path to follow in * the List. * * * ```js * const { List } = require('immutable') * const list = List([ 0, 1, 2, List([ 3, 4 ])]) * list.setIn([3, 0], 999); * // List [ 0, 1, 2, List [ 999, 4 ] ] * ``` * * Plain JavaScript Object or Arrays may be nested within an Immutable.js * Collection, and setIn() can update those values as well, treating them * immutably by creating new copies of those values with the changes applied. * * * ```js * const { List } = require('immutable') * const list = List([ 0, 1, 2, { plain: 'object' }]) * list.setIn([3, 'plain'], 'value'); * // List([ 0, 1, 2, { plain: 'value' }]) * ``` * * Note: `setIn` can be used in `withMutations`. */ setIn(keyPath: Iterable, value: unknown): this; /** * Returns a new List having removed the value at this `keyPath`. If any * keys in `keyPath` do not exist, no change will occur. * * * ```js * const { List } = require('immutable') * const list = List([ 0, 1, 2, List([ 3, 4 ])]) * list.deleteIn([3, 0]); * // List [ 0, 1, 2, List [ 4 ] ] * ``` * * Plain JavaScript Object or Arrays may be nested within an Immutable.js * Collection, and removeIn() can update those values as well, treating them * immutably by creating new copies of those values with the changes applied. * * * ```js * const { List } = require('immutable') * const list = List([ 0, 1, 2, { plain: 'object' }]) * list.removeIn([3, 'plain']); * // List([ 0, 1, 2, {}]) * ``` * * Note: `deleteIn` *cannot* be safely used in `withMutations`. * * @alias removeIn */ deleteIn(keyPath: Iterable): this; removeIn(keyPath: Iterable): this; /** * Note: `updateIn` can be used in `withMutations`. * * @see `Map#updateIn` */ updateIn( keyPath: Iterable, notSetValue: unknown, updater: (value: unknown) => unknown ): this; updateIn( keyPath: Iterable, updater: (value: unknown) => unknown ): this; /** * Note: `mergeIn` can be used in `withMutations`. * * @see `Map#mergeIn` */ mergeIn(keyPath: Iterable, ...collections: Array): this; /** * Note: `mergeDeepIn` can be used in `withMutations`. * * @see `Map#mergeDeepIn` */ mergeDeepIn( keyPath: Iterable, ...collections: Array ): this; // Transient changes /** * Note: Not all methods can be safely used on a mutable collection or within * `withMutations`! Check the documentation for each method to see if it * allows being used in `withMutations`. * * @see `Map#withMutations` */ withMutations(mutator: (mutable: this) => unknown): this; /** * An alternative API for withMutations() * * Note: Not all methods can be safely used on a mutable collection or within * `withMutations`! Check the documentation for each method to see if it * allows being used in `withMutations`. * * @see `Map#asMutable` */ asMutable(): this; /** * @see `Map#wasAltered` */ wasAltered(): boolean; /** * @see `Map#asImmutable` */ asImmutable(): this; // Sequence algorithms /** * Returns a new List with other values or collections concatenated to this one. * * Note: `concat` can be used in `withMutations`. * * @alias merge */ concat(...valuesOrCollections: Array | C>): List; merge(...collections: Array>): List; /** * Returns a new List with values passed through a * `mapper` function. * * * ```js * List([ 1, 2 ]).map(x => 10 * x) * // List [ 10, 20 ] * ``` */ map( mapper: (value: T, key: number, iter: this) => M, context?: unknown ): List; /** * Flat-maps the List, returning a new List. * * Similar to `list.map(...).flatten(true)`. */ flatMap( mapper: (value: T, key: number, iter: this) => Iterable, context?: unknown ): List; /** * Returns a new List with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: T, index: number, iter: this) => value is F, context?: unknown ): List; filter( predicate: (value: T, index: number, iter: this) => unknown, context?: unknown ): this; /** * Returns a new List with the values for which the `predicate` * function returns false and another for which is returns true. */ partition( predicate: (this: C, value: T, index: number, iter: this) => value is F, context?: C ): [List, List]; partition( predicate: (this: C, value: T, index: number, iter: this) => unknown, context?: C ): [this, this]; /** * Returns a List "zipped" with the provided collection. * * Like `zipWith`, but using the default `zipper`: creating an `Array`. * * * ```js * const a = List([ 1, 2, 3 ]); * const b = List([ 4, 5, 6 ]); * const c = a.zip(b); // List [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ] * ``` */ zip(other: Collection): List<[T, U]>; zip( other: Collection, other2: Collection ): List<[T, U, V]>; zip(...collections: Array>): List; /** * Returns a List "zipped" with the provided collections. * * Unlike `zip`, `zipAll` continues zipping until the longest collection is * exhausted. Missing values from shorter collections are filled with `undefined`. * * * ```js * const a = List([ 1, 2 ]); * const b = List([ 3, 4, 5 ]); * const c = a.zipAll(b); // List [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ] * ``` * * Note: Since zipAll will return a collection as large as the largest * input, some results may contain undefined values. TypeScript cannot * account for these without cases (as of v2.5). */ zipAll(other: Collection): List<[T, U]>; zipAll( other: Collection, other2: Collection ): List<[T, U, V]>; zipAll(...collections: Array>): List; /** * Returns a List "zipped" with the provided collections by using a * custom `zipper` function. * * * ```js * const a = List([ 1, 2, 3 ]); * const b = List([ 4, 5, 6 ]); * const c = a.zipWith((a, b) => a + b, b); * // List [ 5, 7, 9 ] * ``` */ zipWith( zipper: (value: T, otherValue: U) => Z, otherCollection: Collection ): List; zipWith( zipper: (value: T, otherValue: U, thirdValue: V) => Z, otherCollection: Collection, thirdCollection: Collection ): List; zipWith( zipper: (...values: Array) => Z, ...collections: Array> ): List; } /** * Immutable Map is an unordered Collection.Keyed of (key, value) pairs with * `O(log32 N)` gets and `O(log32 N)` persistent sets. * * Iteration order of a Map is undefined, however is stable. Multiple * iterations of the same Map will iterate in the same order. * * Map's keys can be of any type, and use `Immutable.is` to determine key * equality. This allows the use of any value (including NaN) as a key. * * Because `Immutable.is` returns equality based on value semantics, and * Immutable collections are treated as values, any Immutable collection may * be used as a key. * * * ```js * const { Map, List } = require('immutable'); * Map().set(List([ 1 ]), 'listofone').get(List([ 1 ])); * // 'listofone' * ``` * * Any JavaScript object may be used as a key, however strict identity is used * to evaluate key equality. Two similar looking objects will represent two * different keys. * * Implemented by a hash-array mapped trie. */ namespace Map { /** * True if the provided value is a Map * * * ```js * const { Map } = require('immutable') * Map.isMap({}) // false * Map.isMap(Map()) // true * ``` */ function isMap(maybeMap: unknown): maybeMap is Map; /** * Creates a new Map from alternating keys and values * * * ```js * const { Map } = require('immutable') * Map.of( * 'key', 'value', * 'numerical value', 3, * 0, 'numerical key' * ) * // Map { 0: "numerical key", "key": "value", "numerical value": 3 } * ``` * * @deprecated Use Map([ [ 'k', 'v' ] ]) or Map({ k: 'v' }) */ function of(...keyValues: Array): Map; } /** * Creates a new Immutable Map. * * Created with the same key value pairs as the provided Collection.Keyed or * JavaScript Object or expects a Collection of [K, V] tuple entries. * * Note: `Map` is a factory function and not a class, and does not use the * `new` keyword during construction. * * * ```js * const { Map } = require('immutable') * Map({ key: "value" }) * Map([ [ "key", "value" ] ]) * ``` * * Keep in mind, when using JS objects to construct Immutable Maps, that * JavaScript Object properties are always strings, even if written in a * quote-less shorthand, while Immutable Maps accept keys of any type. * * * ```js * let obj = { 1: "one" } * Object.keys(obj) // [ "1" ] * assert.equal(obj["1"], obj[1]) // "one" === "one" * * let map = Map(obj) * assert.notEqual(map.get("1"), map.get(1)) // "one" !== undefined * ``` * * Property access for JavaScript Objects first converts the key to a string, * but since Immutable Map keys can be of any type the argument to `get()` is * not altered. */ function Map(collection?: Iterable<[K, V]>): Map; function Map(obj: { [key: string]: V }): Map; function Map(obj: { [P in K]?: V }): Map; interface Map extends Collection.Keyed { /** * The number of entries in this Map. */ readonly size: number; // Persistent changes /** * Returns a new Map also containing the new key, value pair. If an equivalent * key already exists in this Map, it will be replaced. * * * ```js * const { Map } = require('immutable') * const originalMap = Map() * const newerMap = originalMap.set('key', 'value') * const newestMap = newerMap.set('key', 'newer value') * * originalMap * // Map {} * newerMap * // Map { "key": "value" } * newestMap * // Map { "key": "newer value" } * ``` * * Note: `set` can be used in `withMutations`. */ set(key: K, value: V): this; /** * Returns a new Map which excludes this `key`. * * Note: `delete` cannot be safely used in IE8, but is provided to mirror * the ES6 collection API. * * * ```js * const { Map } = require('immutable') * const originalMap = Map({ * key: 'value', * otherKey: 'other value' * }) * // Map { "key": "value", "otherKey": "other value" } * originalMap.delete('otherKey') * // Map { "key": "value" } * ``` * * Note: `delete` can be used in `withMutations`. * * @alias remove */ delete(key: K): this; remove(key: K): this; /** * Returns a new Map which excludes the provided `keys`. * * * ```js * const { Map } = require('immutable') * const names = Map({ a: "Aaron", b: "Barry", c: "Connor" }) * names.deleteAll([ 'a', 'c' ]) * // Map { "b": "Barry" } * ``` * * Note: `deleteAll` can be used in `withMutations`. * * @alias removeAll */ deleteAll(keys: Iterable): this; removeAll(keys: Iterable): this; /** * Returns a new Map containing no keys or values. * * * ```js * const { Map } = require('immutable') * Map({ key: 'value' }).clear() * // Map {} * ``` * * Note: `clear` can be used in `withMutations`. */ clear(): this; /** * Returns a new Map having updated the value at this `key` with the return * value of calling `updater` with the existing value. * * Similar to: `map.set(key, updater(map.get(key)))`. * * * ```js * const { Map } = require('immutable') * const aMap = Map({ key: 'value' }) * const newMap = aMap.update('key', value => value + value) * // Map { "key": "valuevalue" } * ``` * * This is most commonly used to call methods on collections within a * structure of data. For example, in order to `.push()` onto a nested `List`, * `update` and `push` can be used together: * * * ```js * const aMap = Map({ nestedList: List([ 1, 2, 3 ]) }) * const newMap = aMap.update('nestedList', list => list.push(4)) * // Map { "nestedList": List [ 1, 2, 3, 4 ] } * ``` * * When a `notSetValue` is provided, it is provided to the `updater` * function when the value at the key does not exist in the Map. * * * ```js * const aMap = Map({ key: 'value' }) * const newMap = aMap.update('noKey', 'no value', value => value + value) * // Map { "key": "value", "noKey": "no valueno value" } * ``` * * However, if the `updater` function returns the same value it was called * with, then no change will occur. This is still true if `notSetValue` * is provided. * * * ```js * const aMap = Map({ apples: 10 }) * const newMap = aMap.update('oranges', 0, val => val) * // Map { "apples": 10 } * assert.strictEqual(newMap, map); * ``` * * For code using ES2015 or later, using `notSetValue` is discourged in * favor of function parameter default values. This helps to avoid any * potential confusion with identify functions as described above. * * The previous example behaves differently when written with default values: * * * ```js * const aMap = Map({ apples: 10 }) * const newMap = aMap.update('oranges', (val = 0) => val) * // Map { "apples": 10, "oranges": 0 } * ``` * * If no key is provided, then the `updater` function return value is * returned as well. * * * ```js * const aMap = Map({ key: 'value' }) * const result = aMap.update(aMap => aMap.get('key')) * // "value" * ``` * * This can be very useful as a way to "chain" a normal function into a * sequence of methods. RxJS calls this "let" and lodash calls it "thru". * * For example, to sum the values in a Map * * * ```js * function sum(collection) { * return collection.reduce((sum, x) => sum + x, 0) * } * * Map({ x: 1, y: 2, z: 3 }) * .map(x => x + 1) * .filter(x => x % 2 === 0) * .update(sum) * // 6 * ``` * * Note: `update(key)` can be used in `withMutations`. */ update(key: K, notSetValue: V, updater: (value: V) => V): this; update(key: K, updater: (value: V | undefined) => V | undefined): this; update(updater: (value: this) => R): R; /** * Returns a new Map resulting from merging the provided Collections * (or JS objects) into this Map. In other words, this takes each entry of * each collection and sets it on this Map. * * Note: Values provided to `merge` are shallowly converted before being * merged. No nested values are altered. * * * ```js * const { Map } = require('immutable') * const one = Map({ a: 10, b: 20, c: 30 }) * const two = Map({ b: 40, a: 50, d: 60 }) * one.merge(two) // Map { "a": 50, "b": 40, "c": 30, "d": 60 } * two.merge(one) // Map { "b": 20, "a": 10, "d": 60, "c": 30 } * ``` * * Note: `merge` can be used in `withMutations`. * * @alias concat */ merge( ...collections: Array> ): Map; merge( ...collections: Array<{ [key: string]: C }> ): Map; concat( ...collections: Array> ): Map; concat( ...collections: Array<{ [key: string]: C }> ): Map; /** * Like `merge()`, `mergeWith()` returns a new Map resulting from merging * the provided Collections (or JS objects) into this Map, but uses the * `merger` function for dealing with conflicts. * * * ```js * const { Map } = require('immutable') * const one = Map({ a: 10, b: 20, c: 30 }) * const two = Map({ b: 40, a: 50, d: 60 }) * one.mergeWith((oldVal, newVal) => oldVal / newVal, two) * // { "a": 0.2, "b": 0.5, "c": 30, "d": 60 } * two.mergeWith((oldVal, newVal) => oldVal / newVal, one) * // { "b": 2, "a": 5, "d": 60, "c": 30 } * ``` * * Note: `mergeWith` can be used in `withMutations`. */ mergeWith( merger: (oldVal: V, newVal: V, key: K) => V, ...collections: Array | { [key: string]: V }> ): this; /** * Like `merge()`, but when two compatible collections are encountered with * the same key, it merges them as well, recursing deeply through the nested * data. Two collections are considered to be compatible (and thus will be * merged together) if they both fall into one of three categories: keyed * (e.g., `Map`s, `Record`s, and objects), indexed (e.g., `List`s and * arrays), or set-like (e.g., `Set`s). If they fall into separate * categories, `mergeDeep` will replace the existing collection with the * collection being merged in. This behavior can be customized by using * `mergeDeepWith()`. * * Note: Indexed and set-like collections are merged using * `concat()`/`union()` and therefore do not recurse. * * * ```js * const { Map } = require('immutable') * const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) }) * const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) }) * one.mergeDeep(two) * // Map { * // "a": Map { "x": 2, "y": 10 }, * // "b": Map { "x": 20, "y": 5 }, * // "c": Map { "z": 3 } * // } * ``` * * Note: `mergeDeep` can be used in `withMutations`. */ mergeDeep( ...collections: Array | { [key: string]: V }> ): this; /** * Like `mergeDeep()`, but when two non-collections or incompatible * collections are encountered at the same key, it uses the `merger` * function to determine the resulting value. Collections are considered * incompatible if they fall into separate categories between keyed, * indexed, and set-like. * * * ```js * const { Map } = require('immutable') * const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) }) * const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) }) * one.mergeDeepWith((oldVal, newVal) => oldVal / newVal, two) * // Map { * // "a": Map { "x": 5, "y": 10 }, * // "b": Map { "x": 20, "y": 10 }, * // "c": Map { "z": 3 } * // } * ``` * * Note: `mergeDeepWith` can be used in `withMutations`. */ mergeDeepWith( merger: (oldVal: unknown, newVal: unknown, key: unknown) => unknown, ...collections: Array | { [key: string]: V }> ): this; // Deep persistent changes /** * Returns a new Map having set `value` at this `keyPath`. If any keys in * `keyPath` do not exist, a new immutable Map will be created at that key. * * * ```js * const { Map } = require('immutable') * const originalMap = Map({ * subObject: Map({ * subKey: 'subvalue', * subSubObject: Map({ * subSubKey: 'subSubValue' * }) * }) * }) * * const newMap = originalMap.setIn(['subObject', 'subKey'], 'ha ha!') * // Map { * // "subObject": Map { * // "subKey": "ha ha!", * // "subSubObject": Map { "subSubKey": "subSubValue" } * // } * // } * * const newerMap = originalMap.setIn( * ['subObject', 'subSubObject', 'subSubKey'], * 'ha ha ha!' * ) * // Map { * // "subObject": Map { * // "subKey": "subvalue", * // "subSubObject": Map { "subSubKey": "ha ha ha!" } * // } * // } * ``` * * Plain JavaScript Object or Arrays may be nested within an Immutable.js * Collection, and setIn() can update those values as well, treating them * immutably by creating new copies of those values with the changes applied. * * * ```js * const { Map } = require('immutable') * const originalMap = Map({ * subObject: { * subKey: 'subvalue', * subSubObject: { * subSubKey: 'subSubValue' * } * } * }) * * originalMap.setIn(['subObject', 'subKey'], 'ha ha!') * // Map { * // "subObject": { * // subKey: "ha ha!", * // subSubObject: { subSubKey: "subSubValue" } * // } * // } * ``` * * If any key in the path exists but cannot be updated (such as a primitive * like number or a custom Object like Date), an error will be thrown. * * Note: `setIn` can be used in `withMutations`. */ setIn(keyPath: Iterable, value: unknown): this; /** * Returns a new Map having removed the value at this `keyPath`. If any keys * in `keyPath` do not exist, no change will occur. * * Note: `deleteIn` can be used in `withMutations`. * * @alias removeIn */ deleteIn(keyPath: Iterable): this; removeIn(keyPath: Iterable): this; /** * Returns a new Map having applied the `updater` to the entry found at the * keyPath. * * This is most commonly used to call methods on collections nested within a * structure of data. For example, in order to `.push()` onto a nested `List`, * `updateIn` and `push` can be used together: * * * ```js * const { Map, List } = require('immutable') * const map = Map({ inMap: Map({ inList: List([ 1, 2, 3 ]) }) }) * const newMap = map.updateIn(['inMap', 'inList'], list => list.push(4)) * // Map { "inMap": Map { "inList": List [ 1, 2, 3, 4 ] } } * ``` * * If any keys in `keyPath` do not exist, new Immutable `Map`s will * be created at those keys. If the `keyPath` does not already contain a * value, the `updater` function will be called with `notSetValue`, if * provided, otherwise `undefined`. * * * ```js * const map = Map({ a: Map({ b: Map({ c: 10 }) }) }) * const newMap = map.updateIn(['a', 'b', 'c'], val => val * 2) * // Map { "a": Map { "b": Map { "c": 20 } } } * ``` * * If the `updater` function returns the same value it was called with, then * no change will occur. This is still true if `notSetValue` is provided. * * * ```js * const map = Map({ a: Map({ b: Map({ c: 10 }) }) }) * const newMap = map.updateIn(['a', 'b', 'x'], 100, val => val) * // Map { "a": Map { "b": Map { "c": 10 } } } * assert.strictEqual(newMap, aMap) * ``` * * For code using ES2015 or later, using `notSetValue` is discourged in * favor of function parameter default values. This helps to avoid any * potential confusion with identify functions as described above. * * The previous example behaves differently when written with default values: * * * ```js * const map = Map({ a: Map({ b: Map({ c: 10 }) }) }) * const newMap = map.updateIn(['a', 'b', 'x'], (val = 100) => val) * // Map { "a": Map { "b": Map { "c": 10, "x": 100 } } } * ``` * * Plain JavaScript Object or Arrays may be nested within an Immutable.js * Collection, and updateIn() can update those values as well, treating them * immutably by creating new copies of those values with the changes applied. * * * ```js * const map = Map({ a: { b: { c: 10 } } }) * const newMap = map.updateIn(['a', 'b', 'c'], val => val * 2) * // Map { "a": { b: { c: 20 } } } * ``` * * If any key in the path exists but cannot be updated (such as a primitive * like number or a custom Object like Date), an error will be thrown. * * Note: `updateIn` can be used in `withMutations`. */ updateIn( keyPath: Iterable, notSetValue: unknown, updater: (value: unknown) => unknown ): this; updateIn( keyPath: Iterable, updater: (value: unknown) => unknown ): this; /** * A combination of `updateIn` and `merge`, returning a new Map, but * performing the merge at a point arrived at by following the keyPath. * In other words, these two lines are equivalent: * * ```js * map.updateIn(['a', 'b', 'c'], abc => abc.merge(y)) * map.mergeIn(['a', 'b', 'c'], y) * ``` * * Note: `mergeIn` can be used in `withMutations`. */ mergeIn(keyPath: Iterable, ...collections: Array): this; /** * A combination of `updateIn` and `mergeDeep`, returning a new Map, but * performing the deep merge at a point arrived at by following the keyPath. * In other words, these two lines are equivalent: * * ```js * map.updateIn(['a', 'b', 'c'], abc => abc.mergeDeep(y)) * map.mergeDeepIn(['a', 'b', 'c'], y) * ``` * * Note: `mergeDeepIn` can be used in `withMutations`. */ mergeDeepIn( keyPath: Iterable, ...collections: Array ): this; // Transient changes /** * Every time you call one of the above functions, a new immutable Map is * created. If a pure function calls a number of these to produce a final * return value, then a penalty on performance and memory has been paid by * creating all of the intermediate immutable Maps. * * If you need to apply a series of mutations to produce a new immutable * Map, `withMutations()` creates a temporary mutable copy of the Map which * can apply mutations in a highly performant manner. In fact, this is * exactly how complex mutations like `merge` are done. * * As an example, this results in the creation of 2, not 4, new Maps: * * * ```js * const { Map } = require('immutable') * const map1 = Map() * const map2 = map1.withMutations(map => { * map.set('a', 1).set('b', 2).set('c', 3) * }) * assert.equal(map1.size, 0) * assert.equal(map2.size, 3) * ``` * * Note: Not all methods can be used on a mutable collection or within * `withMutations`! Read the documentation for each method to see if it * is safe to use in `withMutations`. */ withMutations(mutator: (mutable: this) => unknown): this; /** * Another way to avoid creation of intermediate Immutable maps is to create * a mutable copy of this collection. Mutable copies *always* return `this`, * and thus shouldn't be used for equality. Your function should never return * a mutable copy of a collection, only use it internally to create a new * collection. * * If possible, use `withMutations` to work with temporary mutable copies as * it provides an easier to use API and considers many common optimizations. * * Note: if the collection is already mutable, `asMutable` returns itself. * * Note: Not all methods can be used on a mutable collection or within * `withMutations`! Read the documentation for each method to see if it * is safe to use in `withMutations`. * * @see `Map#asImmutable` */ asMutable(): this; /** * Returns true if this is a mutable copy (see `asMutable()`) and mutative * alterations have been applied. * * @see `Map#asMutable` */ wasAltered(): boolean; /** * The yin to `asMutable`'s yang. Because it applies to mutable collections, * this operation is *mutable* and may return itself (though may not * return itself, i.e. if the result is an empty collection). Once * performed, the original mutable copy must no longer be mutated since it * may be the immutable result. * * If possible, use `withMutations` to work with temporary mutable copies as * it provides an easier to use API and considers many common optimizations. * * @see `Map#asMutable` */ asImmutable(): this; // Sequence algorithms /** * Returns a new Map with values passed through a * `mapper` function. * * Map({ a: 1, b: 2 }).map(x => 10 * x) * // Map { a: 10, b: 20 } */ map( mapper: (value: V, key: K, iter: this) => M, context?: unknown ): Map; /** * @see Collection.Keyed.mapKeys */ mapKeys( mapper: (key: K, value: V, iter: this) => M, context?: unknown ): Map; /** * @see Collection.Keyed.mapEntries */ mapEntries( mapper: ( entry: [K, V], index: number, iter: this ) => [KM, VM] | undefined, context?: unknown ): Map; /** * Flat-maps the Map, returning a new Map. * * Similar to `data.map(...).flatten(true)`. */ flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: unknown ): Map; /** * Returns a new Map with only the entries for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: V, key: K, iter: this) => value is F, context?: unknown ): Map; filter( predicate: (value: V, key: K, iter: this) => unknown, context?: unknown ): this; /** * Returns a new Map with the values for which the `predicate` * function returns false and another for which is returns true. */ partition( predicate: (this: C, value: V, key: K, iter: this) => value is F, context?: C ): [Map, Map]; partition( predicate: (this: C, value: V, key: K, iter: this) => unknown, context?: C ): [this, this]; /** * @see Collection.Keyed.flip */ flip(): Map; } /** * A type of Map that has the additional guarantee that the iteration order of * entries will be the order in which they were set(). * * The iteration behavior of OrderedMap is the same as native ES6 Map and * JavaScript Object. * * Note that `OrderedMap` are more expensive than non-ordered `Map` and may * consume more memory. `OrderedMap#set` is amortized O(log32 N), but not * stable. */ namespace OrderedMap { /** * True if the provided value is an OrderedMap. */ function isOrderedMap( maybeOrderedMap: unknown ): maybeOrderedMap is OrderedMap; } /** * Creates a new Immutable OrderedMap. * * Created with the same key value pairs as the provided Collection.Keyed or * JavaScript Object or expects a Collection of [K, V] tuple entries. * * The iteration order of key-value pairs provided to this constructor will * be preserved in the OrderedMap. * * let newOrderedMap = OrderedMap({key: "value"}) * let newOrderedMap = OrderedMap([["key", "value"]]) * * Note: `OrderedMap` is a factory function and not a class, and does not use * the `new` keyword during construction. */ function OrderedMap(collection?: Iterable<[K, V]>): OrderedMap; function OrderedMap(obj: { [key: string]: V }): OrderedMap; interface OrderedMap extends Map { /** * The number of entries in this OrderedMap. */ readonly size: number; /** * Returns a new OrderedMap also containing the new key, value pair. If an * equivalent key already exists in this OrderedMap, it will be replaced * while maintaining the existing order. * * * ```js * const { OrderedMap } = require('immutable') * const originalMap = OrderedMap({a:1, b:1, c:1}) * const updatedMap = originalMap.set('b', 2) * * originalMap * // OrderedMap {a: 1, b: 1, c: 1} * updatedMap * // OrderedMap {a: 1, b: 2, c: 1} * ``` * * Note: `set` can be used in `withMutations`. */ set(key: K, value: V): this; /** * Returns a new OrderedMap resulting from merging the provided Collections * (or JS objects) into this OrderedMap. In other words, this takes each * entry of each collection and sets it on this OrderedMap. * * Note: Values provided to `merge` are shallowly converted before being * merged. No nested values are altered. * * * ```js * const { OrderedMap } = require('immutable') * const one = OrderedMap({ a: 10, b: 20, c: 30 }) * const two = OrderedMap({ b: 40, a: 50, d: 60 }) * one.merge(two) // OrderedMap { "a": 50, "b": 40, "c": 30, "d": 60 } * two.merge(one) // OrderedMap { "b": 20, "a": 10, "d": 60, "c": 30 } * ``` * * Note: `merge` can be used in `withMutations`. * * @alias concat */ merge( ...collections: Array> ): OrderedMap; merge( ...collections: Array<{ [key: string]: C }> ): OrderedMap; concat( ...collections: Array> ): OrderedMap; concat( ...collections: Array<{ [key: string]: C }> ): OrderedMap; // Sequence algorithms /** * Returns a new OrderedMap with values passed through a * `mapper` function. * * OrderedMap({ a: 1, b: 2 }).map(x => 10 * x) * // OrderedMap { "a": 10, "b": 20 } * * Note: `map()` always returns a new instance, even if it produced the same * value at every step. */ map( mapper: (value: V, key: K, iter: this) => M, context?: unknown ): OrderedMap; /** * @see Collection.Keyed.mapKeys */ mapKeys( mapper: (key: K, value: V, iter: this) => M, context?: unknown ): OrderedMap; /** * @see Collection.Keyed.mapEntries */ mapEntries( mapper: ( entry: [K, V], index: number, iter: this ) => [KM, VM] | undefined, context?: unknown ): OrderedMap; /** * Flat-maps the OrderedMap, returning a new OrderedMap. * * Similar to `data.map(...).flatten(true)`. */ flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: unknown ): OrderedMap; /** * Returns a new OrderedMap with only the entries for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: V, key: K, iter: this) => value is F, context?: unknown ): OrderedMap; filter( predicate: (value: V, key: K, iter: this) => unknown, context?: unknown ): this; /** * Returns a new OrderedMap with the values for which the `predicate` * function returns false and another for which is returns true. */ partition( predicate: (this: C, value: V, key: K, iter: this) => value is F, context?: C ): [OrderedMap, OrderedMap]; partition( predicate: (this: C, value: V, key: K, iter: this) => unknown, context?: C ): [this, this]; /** * @see Collection.Keyed.flip */ flip(): OrderedMap; } /** * A Collection of unique values with `O(log32 N)` adds and has. * * When iterating a Set, the entries will be (value, value) pairs. Iteration * order of a Set is undefined, however is stable. Multiple iterations of the * same Set will iterate in the same order. * * Set values, like Map keys, may be of any type. Equality is determined using * `Immutable.is`, enabling Sets to uniquely include other Immutable * collections, custom value types, and NaN. */ namespace Set { /** * True if the provided value is a Set */ function isSet(maybeSet: unknown): maybeSet is Set; /** * Creates a new Set containing `values`. */ function of(...values: Array): Set; /** * `Set.fromKeys()` creates a new immutable Set containing the keys from * this Collection or JavaScript Object. */ function fromKeys(iter: Collection.Keyed): Set; // tslint:disable-next-line unified-signatures function fromKeys(iter: Collection): Set; function fromKeys(obj: { [key: string]: unknown }): Set; /** * `Set.intersect()` creates a new immutable Set that is the intersection of * a collection of other sets. * * ```js * const { Set } = require('immutable') * const intersected = Set.intersect([ * Set([ 'a', 'b', 'c' ]) * Set([ 'c', 'a', 't' ]) * ]) * // Set [ "a", "c" ] * ``` */ function intersect(sets: Iterable>): Set; /** * `Set.union()` creates a new immutable Set that is the union of a * collection of other sets. * * ```js * const { Set } = require('immutable') * const unioned = Set.union([ * Set([ 'a', 'b', 'c' ]) * Set([ 'c', 'a', 't' ]) * ]) * // Set [ "a", "b", "c", "t" ] * ``` */ function union(sets: Iterable>): Set; } /** * Create a new immutable Set containing the values of the provided * collection-like. * * Note: `Set` is a factory function and not a class, and does not use the * `new` keyword during construction. */ function Set(collection?: Iterable | ArrayLike): Set; interface Set extends Collection.Set { /** * The number of items in this Set. */ readonly size: number; // Persistent changes /** * Returns a new Set which also includes this value. * * Note: `add` can be used in `withMutations`. */ add(value: T): this; /** * Returns a new Set which excludes this value. * * Note: `delete` can be used in `withMutations`. * * Note: `delete` **cannot** be safely used in IE8, use `remove` if * supporting old browsers. * * @alias remove */ delete(value: T): this; remove(value: T): this; /** * Returns a new Set containing no values. * * Note: `clear` can be used in `withMutations`. */ clear(): this; /** * Returns a Set including any value from `collections` that does not already * exist in this Set. * * Note: `union` can be used in `withMutations`. * @alias merge * @alias concat */ union(...collections: Array>): Set; merge(...collections: Array>): Set; concat(...collections: Array>): Set; /** * Returns a Set which has removed any values not also contained * within `collections`. * * Note: `intersect` can be used in `withMutations`. */ intersect(...collections: Array>): this; /** * Returns a Set excluding any values contained within `collections`. * * * ```js * const { OrderedSet } = require('immutable') * OrderedSet([ 1, 2, 3 ]).subtract([1, 3]) * // OrderedSet [2] * ``` * * Note: `subtract` can be used in `withMutations`. */ subtract(...collections: Array>): this; // Transient changes /** * Note: Not all methods can be used on a mutable collection or within * `withMutations`! Check the documentation for each method to see if it * mentions being safe to use in `withMutations`. * * @see `Map#withMutations` */ withMutations(mutator: (mutable: this) => unknown): this; /** * Note: Not all methods can be used on a mutable collection or within * `withMutations`! Check the documentation for each method to see if it * mentions being safe to use in `withMutations`. * * @see `Map#asMutable` */ asMutable(): this; /** * @see `Map#wasAltered` */ wasAltered(): boolean; /** * @see `Map#asImmutable` */ asImmutable(): this; // Sequence algorithms /** * Returns a new Set with values passed through a * `mapper` function. * * Set([1,2]).map(x => 10 * x) * // Set [10,20] */ map( mapper: (value: T, key: T, iter: this) => M, context?: unknown ): Set; /** * Flat-maps the Set, returning a new Set. * * Similar to `set.map(...).flatten(true)`. */ flatMap( mapper: (value: T, key: T, iter: this) => Iterable, context?: unknown ): Set; /** * Returns a new Set with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: T, key: T, iter: this) => value is F, context?: unknown ): Set; filter( predicate: (value: T, key: T, iter: this) => unknown, context?: unknown ): this; /** * Returns a new Set with the values for which the `predicate` function * returns false and another for which is returns true. */ partition( predicate: (this: C, value: T, key: T, iter: this) => value is F, context?: C ): [Set, Set]; partition( predicate: (this: C, value: T, key: T, iter: this) => unknown, context?: C ): [this, this]; } /** * A type of Set that has the additional guarantee that the iteration order of * values will be the order in which they were `add`ed. * * The iteration behavior of OrderedSet is the same as native ES6 Set. * * Note that `OrderedSet` are more expensive than non-ordered `Set` and may * consume more memory. `OrderedSet#add` is amortized O(log32 N), but not * stable. */ namespace OrderedSet { /** * True if the provided value is an OrderedSet. */ function isOrderedSet( maybeOrderedSet: unknown ): maybeOrderedSet is OrderedSet; /** * Creates a new OrderedSet containing `values`. */ function of(...values: Array): OrderedSet; /** * `OrderedSet.fromKeys()` creates a new immutable OrderedSet containing * the keys from this Collection or JavaScript Object. */ function fromKeys(iter: Collection.Keyed): OrderedSet; // tslint:disable-next-line unified-signatures function fromKeys(iter: Collection): OrderedSet; function fromKeys(obj: { [key: string]: unknown }): OrderedSet; } /** * Create a new immutable OrderedSet containing the values of the provided * collection-like. * * Note: `OrderedSet` is a factory function and not a class, and does not use * the `new` keyword during construction. */ function OrderedSet( collection?: Iterable | ArrayLike ): OrderedSet; interface OrderedSet extends Set { /** * The number of items in this OrderedSet. */ readonly size: number; /** * Returns an OrderedSet including any value from `collections` that does * not already exist in this OrderedSet. * * Note: `union` can be used in `withMutations`. * @alias merge * @alias concat */ union(...collections: Array>): OrderedSet; merge(...collections: Array>): OrderedSet; concat(...collections: Array>): OrderedSet; // Sequence algorithms /** * Returns a new Set with values passed through a * `mapper` function. * * OrderedSet([ 1, 2 ]).map(x => 10 * x) * // OrderedSet [10, 20] */ map( mapper: (value: T, key: T, iter: this) => M, context?: unknown ): OrderedSet; /** * Flat-maps the OrderedSet, returning a new OrderedSet. * * Similar to `set.map(...).flatten(true)`. */ flatMap( mapper: (value: T, key: T, iter: this) => Iterable, context?: unknown ): OrderedSet; /** * Returns a new OrderedSet with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: T, key: T, iter: this) => value is F, context?: unknown ): OrderedSet; filter( predicate: (value: T, key: T, iter: this) => unknown, context?: unknown ): this; /** * Returns a new OrderedSet with the values for which the `predicate` * function returns false and another for which is returns true. */ partition( predicate: (this: C, value: T, key: T, iter: this) => value is F, context?: C ): [OrderedSet, OrderedSet]; partition( predicate: (this: C, value: T, key: T, iter: this) => unknown, context?: C ): [this, this]; /** * Returns an OrderedSet of the same type "zipped" with the provided * collections. * * Like `zipWith`, but using the default `zipper`: creating an `Array`. * * ```js * const a = OrderedSet([ 1, 2, 3 ]) * const b = OrderedSet([ 4, 5, 6 ]) * const c = a.zip(b) * // OrderedSet [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ] * ``` */ zip(other: Collection): OrderedSet<[T, U]>; zip( other1: Collection, other2: Collection ): OrderedSet<[T, U, V]>; zip( ...collections: Array> ): OrderedSet; /** * Returns a OrderedSet of the same type "zipped" with the provided * collections. * * Unlike `zip`, `zipAll` continues zipping until the longest collection is * exhausted. Missing values from shorter collections are filled with `undefined`. * * ```js * const a = OrderedSet([ 1, 2 ]); * const b = OrderedSet([ 3, 4, 5 ]); * const c = a.zipAll(b); // OrderedSet [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ] * ``` * * Note: Since zipAll will return a collection as large as the largest * input, some results may contain undefined values. TypeScript cannot * account for these without cases (as of v2.5). */ zipAll(other: Collection): OrderedSet<[T, U]>; zipAll( other1: Collection, other2: Collection ): OrderedSet<[T, U, V]>; zipAll( ...collections: Array> ): OrderedSet; /** * Returns an OrderedSet of the same type "zipped" with the provided * collections by using a custom `zipper` function. * * @see Seq.Indexed.zipWith */ zipWith( zipper: (value: T, otherValue: U) => Z, otherCollection: Collection ): OrderedSet; zipWith( zipper: (value: T, otherValue: U, thirdValue: V) => Z, otherCollection: Collection, thirdCollection: Collection ): OrderedSet; zipWith( zipper: (...values: Array) => Z, ...collections: Array> ): OrderedSet; } /** * Stacks are indexed collections which support very efficient O(1) addition * and removal from the front using `unshift(v)` and `shift()`. * * For familiarity, Stack also provides `push(v)`, `pop()`, and `peek()`, but * be aware that they also operate on the front of the list, unlike List or * a JavaScript Array. * * Note: `reverse()` or any inherent reverse traversal (`reduceRight`, * `lastIndexOf`, etc.) is not efficient with a Stack. * * Stack is implemented with a Single-Linked List. */ namespace Stack { /** * True if the provided value is a Stack */ function isStack(maybeStack: unknown): maybeStack is Stack; /** * Creates a new Stack containing `values`. */ function of(...values: Array): Stack; } /** * Create a new immutable Stack containing the values of the provided * collection-like. * * The iteration order of the provided collection is preserved in the * resulting `Stack`. * * Note: `Stack` is a factory function and not a class, and does not use the * `new` keyword during construction. */ function Stack(collection?: Iterable | ArrayLike): Stack; interface Stack extends Collection.Indexed { /** * The number of items in this Stack. */ readonly size: number; // Reading values /** * Alias for `Stack.first()`. */ peek(): T | undefined; // Persistent changes /** * Returns a new Stack with 0 size and no values. * * Note: `clear` can be used in `withMutations`. */ clear(): Stack; /** * Returns a new Stack with the provided `values` prepended, shifting other * values ahead to higher indices. * * This is very efficient for Stack. * * Note: `unshift` can be used in `withMutations`. */ unshift(...values: Array): Stack; /** * Like `Stack#unshift`, but accepts a collection rather than varargs. * * Note: `unshiftAll` can be used in `withMutations`. */ unshiftAll(iter: Iterable): Stack; /** * Returns a new Stack with a size ones less than this Stack, excluding * the first item in this Stack, shifting all other values to a lower index. * * Note: this differs from `Array#shift` because it returns a new * Stack rather than the removed value. Use `first()` or `peek()` to get the * first value in this Stack. * * Note: `shift` can be used in `withMutations`. */ shift(): Stack; /** * Alias for `Stack#unshift` and is not equivalent to `List#push`. */ push(...values: Array): Stack; /** * Alias for `Stack#unshiftAll`. */ pushAll(iter: Iterable): Stack; /** * Alias for `Stack#shift` and is not equivalent to `List#pop`. */ pop(): Stack; // Transient changes /** * Note: Not all methods can be used on a mutable collection or within * `withMutations`! Check the documentation for each method to see if it * mentions being safe to use in `withMutations`. * * @see `Map#withMutations` */ withMutations(mutator: (mutable: this) => unknown): this; /** * Note: Not all methods can be used on a mutable collection or within * `withMutations`! Check the documentation for each method to see if it * mentions being safe to use in `withMutations`. * * @see `Map#asMutable` */ asMutable(): this; /** * @see `Map#wasAltered` */ wasAltered(): boolean; /** * @see `Map#asImmutable` */ asImmutable(): this; // Sequence algorithms /** * Returns a new Stack with other collections concatenated to this one. */ concat(...valuesOrCollections: Array | C>): Stack; /** * Returns a new Stack with values passed through a * `mapper` function. * * Stack([ 1, 2 ]).map(x => 10 * x) * // Stack [ 10, 20 ] * * Note: `map()` always returns a new instance, even if it produced the same * value at every step. */ map( mapper: (value: T, key: number, iter: this) => M, context?: unknown ): Stack; /** * Flat-maps the Stack, returning a new Stack. * * Similar to `stack.map(...).flatten(true)`. */ flatMap( mapper: (value: T, key: number, iter: this) => Iterable, context?: unknown ): Stack; /** * Returns a new Set with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: T, index: number, iter: this) => value is F, context?: unknown ): Set; filter( predicate: (value: T, index: number, iter: this) => unknown, context?: unknown ): this; /** * Returns a Stack "zipped" with the provided collections. * * Like `zipWith`, but using the default `zipper`: creating an `Array`. * * ```js * const a = Stack([ 1, 2, 3 ]); * const b = Stack([ 4, 5, 6 ]); * const c = a.zip(b); // Stack [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ] * ``` */ zip(other: Collection): Stack<[T, U]>; zip( other: Collection, other2: Collection ): Stack<[T, U, V]>; zip(...collections: Array>): Stack; /** * Returns a Stack "zipped" with the provided collections. * * Unlike `zip`, `zipAll` continues zipping until the longest collection is * exhausted. Missing values from shorter collections are filled with `undefined`. * * ```js * const a = Stack([ 1, 2 ]); * const b = Stack([ 3, 4, 5 ]); * const c = a.zipAll(b); // Stack [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ] * ``` * * Note: Since zipAll will return a collection as large as the largest * input, some results may contain undefined values. TypeScript cannot * account for these without cases (as of v2.5). */ zipAll(other: Collection): Stack<[T, U]>; zipAll( other: Collection, other2: Collection ): Stack<[T, U, V]>; zipAll(...collections: Array>): Stack; /** * Returns a Stack "zipped" with the provided collections by using a * custom `zipper` function. * * ```js * const a = Stack([ 1, 2, 3 ]); * const b = Stack([ 4, 5, 6 ]); * const c = a.zipWith((a, b) => a + b, b); * // Stack [ 5, 7, 9 ] * ``` */ zipWith( zipper: (value: T, otherValue: U) => Z, otherCollection: Collection ): Stack; zipWith( zipper: (value: T, otherValue: U, thirdValue: V) => Z, otherCollection: Collection, thirdCollection: Collection ): Stack; zipWith( zipper: (...values: Array) => Z, ...collections: Array> ): Stack; } /** * Returns a Seq.Indexed of numbers from `start` (inclusive) to `end` * (exclusive), by `step`, where `start` defaults to 0, `step` to 1, and `end` to * infinity. When `start` is equal to `end`, returns empty range. * * Note: `Range` is a factory function and not a class, and does not use the * `new` keyword during construction. * * ```js * const { Range } = require('immutable') * Range() // [ 0, 1, 2, 3, ... ] * Range(10) // [ 10, 11, 12, 13, ... ] * Range(10, 15) // [ 10, 11, 12, 13, 14 ] * Range(10, 30, 5) // [ 10, 15, 20, 25 ] * Range(30, 10, 5) // [ 30, 25, 20, 15 ] * Range(30, 30, 5) // [] * ``` */ function Range( start?: number, end?: number, step?: number ): Seq.Indexed; /** * Returns a Seq.Indexed of `value` repeated `times` times. When `times` is * not defined, returns an infinite `Seq` of `value`. * * Note: `Repeat` is a factory function and not a class, and does not use the * `new` keyword during construction. * * ```js * const { Repeat } = require('immutable') * Repeat('foo') // [ 'foo', 'foo', 'foo', ... ] * Repeat('bar', 4) // [ 'bar', 'bar', 'bar', 'bar' ] * ``` */ function Repeat(value: T, times?: number): Seq.Indexed; /** * A record is similar to a JS object, but enforces a specific set of allowed * string keys, and has default values. * * The `Record()` function produces new Record Factories, which when called * create Record instances. * * ```js * const { Record } = require('immutable') * const ABRecord = Record({ a: 1, b: 2 }) * const myRecord = ABRecord({ b: 3 }) * ``` * * Records always have a value for the keys they define. `remove`ing a key * from a record simply resets it to the default value for that key. * * ```js * myRecord.get('a') // 1 * myRecord.get('b') // 3 * const myRecordWithoutB = myRecord.remove('b') * myRecordWithoutB.get('b') // 2 * ``` * * Values provided to the constructor not found in the Record type will * be ignored. For example, in this case, ABRecord is provided a key "x" even * though only "a" and "b" have been defined. The value for "x" will be * ignored for this record. * * ```js * const myRecord = ABRecord({ b: 3, x: 10 }) * myRecord.get('x') // undefined * ``` * * Because Records have a known set of string keys, property get access works * as expected, however property sets will throw an Error. * * Note: IE8 does not support property access. Only use `get()` when * supporting IE8. * * ```js * myRecord.b // 3 * myRecord.b = 5 // throws Error * ``` * * Record Types can be extended as well, allowing for custom methods on your * Record. This is not a common pattern in functional environments, but is in * many JS programs. * * However Record Types are more restricted than typical JavaScript classes. * They do not use a class constructor, which also means they cannot use * class properties (since those are technically part of a constructor). * * While Record Types can be syntactically created with the JavaScript `class` * form, the resulting Record function is actually a factory function, not a * class constructor. Even though Record Types are not classes, JavaScript * currently requires the use of `new` when creating new Record instances if * they are defined as a `class`. * * ``` * class ABRecord extends Record({ a: 1, b: 2 }) { * getAB() { * return this.a + this.b; * } * } * * var myRecord = new ABRecord({b: 3}) * myRecord.getAB() // 4 * ``` * * * **Flow Typing Records:** * * Immutable.js exports two Flow types designed to make it easier to use * Records with flow typed code, `RecordOf` and `RecordFactory`. * * When defining a new kind of Record factory function, use a flow type that * describes the values the record contains along with `RecordFactory`. * To type instances of the Record (which the factory function returns), * use `RecordOf`. * * Typically, new Record definitions will export both the Record factory * function as well as the Record instance type for use in other code. * * ```js * import type { RecordFactory, RecordOf } from 'immutable'; * * // Use RecordFactory for defining new Record factory functions. * type Point3DProps = { x: number, y: number, z: number }; * const defaultValues: Point3DProps = { x: 0, y: 0, z: 0 }; * const makePoint3D: RecordFactory = Record(defaultValues); * export makePoint3D; * * // Use RecordOf for defining new instances of that Record. * export type Point3D = RecordOf; * const some3DPoint: Point3D = makePoint3D({ x: 10, y: 20, z: 30 }); * ``` * * **Flow Typing Record Subclasses:** * * Records can be subclassed as a means to add additional methods to Record * instances. This is generally discouraged in favor of a more functional API, * since Subclasses have some minor overhead. However the ability to create * a rich API on Record types can be quite valuable. * * When using Flow to type Subclasses, do not use `RecordFactory`, * instead apply the props type when subclassing: * * ```js * type PersonProps = {name: string, age: number}; * const defaultValues: PersonProps = {name: 'Aristotle', age: 2400}; * const PersonRecord = Record(defaultValues); * class Person extends PersonRecord { * getName(): string { * return this.get('name') * } * * setName(name: string): this { * return this.set('name', name); * } * } * ``` * * **Choosing Records vs plain JavaScript objects** * * Records offer a persistently immutable alternative to plain JavaScript * objects, however they're not required to be used within Immutable.js * collections. In fact, the deep-access and deep-updating functions * like `getIn()` and `setIn()` work with plain JavaScript Objects as well. * * Deciding to use Records or Objects in your application should be informed * by the tradeoffs and relative benefits of each: * * - *Runtime immutability*: plain JS objects may be carefully treated as * immutable, however Record instances will *throw* if attempted to be * mutated directly. Records provide this additional guarantee, however at * some marginal runtime cost. While JS objects are mutable by nature, the * use of type-checking tools like [Flow](https://medium.com/@gcanti/immutability-with-flow-faa050a1aef4) * can help gain confidence in code written to favor immutability. * * - *Value equality*: Records use value equality when compared with `is()` * or `record.equals()`. That is, two Records with the same keys and values * are equal. Plain objects use *reference equality*. Two objects with the * same keys and values are not equal since they are different objects. * This is important to consider when using objects as keys in a `Map` or * values in a `Set`, which use equality when retrieving values. * * - *API methods*: Records have a full featured API, with methods like * `.getIn()`, and `.equals()`. These can make working with these values * easier, but comes at the cost of not allowing keys with those names. * * - *Default values*: Records provide default values for every key, which * can be useful when constructing Records with often unchanging values. * However default values can make using Flow and TypeScript more laborious. * * - *Serialization*: Records use a custom internal representation to * efficiently store and update their values. Converting to and from this * form isn't free. If converting Records to plain objects is common, * consider sticking with plain objects to begin with. */ namespace Record { /** * True if `maybeRecord` is an instance of a Record. */ function isRecord(maybeRecord: unknown): maybeRecord is Record<{}>; /** * Records allow passing a second parameter to supply a descriptive name * that appears when converting a Record to a string or in any error * messages. A descriptive name for any record can be accessed by using this * method. If one was not provided, the string "Record" is returned. * * ```js * const { Record } = require('immutable') * const Person = Record({ * name: null * }, 'Person') * * var me = Person({ name: 'My Name' }) * me.toString() // "Person { "name": "My Name" }" * Record.getDescriptiveName(me) // "Person" * ``` */ function getDescriptiveName(record: Record): string; /** * A Record.Factory is created by the `Record()` function. Record instances * are created by passing it some of the accepted values for that Record * type: * * * ```js * // makePerson is a Record Factory function * const makePerson = Record({ name: null, favoriteColor: 'unknown' }); * * // alan is a Record instance * const alan = makePerson({ name: 'Alan' }); * ``` * * Note that Record Factories return `Record & Readonly`, * this allows use of both the Record instance API, and direct property * access on the resulting instances: * * * ```js * // Use the Record API * console.log('Record API: ' + alan.get('name')) * * // Or direct property access (Readonly) * console.log('property access: ' + alan.name) * ``` * * **Flow Typing Records:** * * Use the `RecordFactory` Flow type to get high quality type checking of * Records: * * ```js * import type { RecordFactory, RecordOf } from 'immutable'; * * // Use RecordFactory for defining new Record factory functions. * type PersonProps = { name: ?string, favoriteColor: string }; * const makePerson: RecordFactory = Record({ name: null, favoriteColor: 'unknown' }); * * // Use RecordOf for defining new instances of that Record. * type Person = RecordOf; * const alan: Person = makePerson({ name: 'Alan' }); * ``` */ namespace Factory {} interface Factory { (values?: Partial | Iterable<[string, unknown]>): Record & Readonly; new ( values?: Partial | Iterable<[string, unknown]> ): Record & Readonly; /** * The name provided to `Record(values, name)` can be accessed with * `displayName`. */ displayName: string; } function Factory( values?: Partial | Iterable<[string, unknown]> ): Record & Readonly; } /** * Unlike other types in Immutable.js, the `Record()` function creates a new * Record Factory, which is a function that creates Record instances. * * See above for examples of using `Record()`. * * Note: `Record` is a factory function and not a class, and does not use the * `new` keyword during construction. */ function Record( defaultValues: TProps, name?: string ): Record.Factory; interface Record { // Reading values has(key: string): key is keyof TProps & string; /** * Returns the value associated with the provided key, which may be the * default value defined when creating the Record factory function. * * If the requested key is not defined by this Record type, then * notSetValue will be returned if provided. Note that this scenario would * produce an error when using Flow or TypeScript. */ get(key: K, notSetValue?: unknown): TProps[K]; get(key: string, notSetValue: T): T; // Reading deep values hasIn(keyPath: Iterable): boolean; getIn(keyPath: Iterable): unknown; // Value equality equals(other: unknown): boolean; hashCode(): number; // Persistent changes set(key: K, value: TProps[K]): this; update( key: K, updater: (value: TProps[K]) => TProps[K] ): this; merge( ...collections: Array | Iterable<[string, unknown]>> ): this; mergeDeep( ...collections: Array | Iterable<[string, unknown]>> ): this; mergeWith( merger: (oldVal: unknown, newVal: unknown, key: keyof TProps) => unknown, ...collections: Array | Iterable<[string, unknown]>> ): this; mergeDeepWith( merger: (oldVal: unknown, newVal: unknown, key: unknown) => unknown, ...collections: Array | Iterable<[string, unknown]>> ): this; /** * Returns a new instance of this Record type with the value for the * specific key set to its default value. * * @alias remove */ delete(key: K): this; remove(key: K): this; /** * Returns a new instance of this Record type with all values set * to their default values. */ clear(): this; // Deep persistent changes setIn(keyPath: Iterable, value: unknown): this; updateIn( keyPath: Iterable, updater: (value: unknown) => unknown ): this; mergeIn(keyPath: Iterable, ...collections: Array): this; mergeDeepIn( keyPath: Iterable, ...collections: Array ): this; /** * @alias removeIn */ deleteIn(keyPath: Iterable): this; removeIn(keyPath: Iterable): this; // Conversion to JavaScript types /** * Deeply converts this Record to equivalent native JavaScript Object. * * Note: This method may not be overridden. Objects with custom * serialization to plain JS may override toJSON() instead. */ toJS(): DeepCopy; /** * Shallowly converts this Record to equivalent native JavaScript Object. */ toJSON(): TProps; /** * Shallowly converts this Record to equivalent JavaScript Object. */ toObject(): TProps; // Transient changes /** * Note: Not all methods can be used on a mutable collection or within * `withMutations`! Only `set` may be used mutatively. * * @see `Map#withMutations` */ withMutations(mutator: (mutable: this) => unknown): this; /** * @see `Map#asMutable` */ asMutable(): this; /** * @see `Map#wasAltered` */ wasAltered(): boolean; /** * @see `Map#asImmutable` */ asImmutable(): this; // Sequence algorithms toSeq(): Seq.Keyed; [Symbol.iterator](): IterableIterator<[keyof TProps, TProps[keyof TProps]]>; } /** * RecordOf is used in TypeScript to define interfaces expecting an * instance of record with type T. * * This is equivalent to an instance of a record created by a Record Factory. */ type RecordOf = Record & Readonly; /** * `Seq` describes a lazy operation, allowing them to efficiently chain * use of all the higher-order collection methods (such as `map` and `filter`) * by not creating intermediate collections. * * **Seq is immutable** — Once a Seq is created, it cannot be * changed, appended to, rearranged or otherwise modified. Instead, any * mutative method called on a `Seq` will return a new `Seq`. * * **Seq is lazy** — `Seq` does as little work as necessary to respond to any * method call. Values are often created during iteration, including implicit * iteration when reducing or converting to a concrete data structure such as * a `List` or JavaScript `Array`. * * For example, the following performs no work, because the resulting * `Seq`'s values are never iterated: * * ```js * const { Seq } = require('immutable') * const oddSquares = Seq([ 1, 2, 3, 4, 5, 6, 7, 8 ]) * .filter(x => x % 2 !== 0) * .map(x => x * x) * ``` * * Once the `Seq` is used, it performs only the work necessary. In this * example, no intermediate arrays are ever created, filter is called three * times, and map is only called once: * * ```js * oddSquares.get(1); // 9 * ``` * * Any collection can be converted to a lazy Seq with `Seq()`. * * * ```js * const { Map } = require('immutable') * const map = Map({ a: 1, b: 2, c: 3 }) * const lazySeq = Seq(map) * ``` * * `Seq` allows for the efficient chaining of operations, allowing for the * expression of logic that can otherwise be very tedious: * * ```js * lazySeq * .flip() * .map(key => key.toUpperCase()) * .flip() * // Seq { A: 1, B: 1, C: 1 } * ``` * * As well as expressing logic that would otherwise seem memory or time * limited, for example `Range` is a special kind of Lazy sequence. * * * ```js * const { Range } = require('immutable') * Range(1, Infinity) * .skip(1000) * .map(n => -n) * .filter(n => n % 2 === 0) * .take(2) * .reduce((r, n) => r * n, 1) * // 1006008 * ``` * * Seq is often used to provide a rich collection API to JavaScript Object. * * ```js * Seq({ x: 0, y: 1, z: 2 }).map(v => v * 2).toObject(); * // { x: 0, y: 2, z: 4 } * ``` */ namespace Seq { /** * True if `maybeSeq` is a Seq, it is not backed by a concrete * structure such as Map, List, or Set. */ function isSeq( maybeSeq: unknown ): maybeSeq is | Seq.Indexed | Seq.Keyed | Seq.Set; /** * `Seq` which represents key-value pairs. */ namespace Keyed {} /** * Always returns a Seq.Keyed, if input is not keyed, expects an * collection of [K, V] tuples. * * Note: `Seq.Keyed` is a conversion function and not a class, and does not * use the `new` keyword during construction. */ function Keyed(collection?: Iterable<[K, V]>): Seq.Keyed; function Keyed(obj: { [key: string]: V }): Seq.Keyed; interface Keyed extends Seq, Collection.Keyed { /** * Deeply converts this Keyed Seq to equivalent native JavaScript Object. * * Converts keys to Strings. */ toJS(): { [key in string | number | symbol]: DeepCopy }; /** * Shallowly converts this Keyed Seq to equivalent native JavaScript Object. * * Converts keys to Strings. */ toJSON(): { [key in string | number | symbol]: V }; /** * Shallowly converts this collection to an Array. */ toArray(): Array<[K, V]>; /** * Returns itself */ toSeq(): this; /** * Returns a new Seq with other collections concatenated to this one. * * All entries will be present in the resulting Seq, even if they * have the same key. */ concat( ...collections: Array> ): Seq.Keyed; concat( ...collections: Array<{ [key: string]: C }> ): Seq.Keyed; /** * Returns a new Seq.Keyed with values passed through a * `mapper` function. * * ```js * const { Seq } = require('immutable') * Seq.Keyed({ a: 1, b: 2 }).map(x => 10 * x) * // Seq { "a": 10, "b": 20 } * ``` * * Note: `map()` always returns a new instance, even if it produced the * same value at every step. */ map( mapper: (value: V, key: K, iter: this) => M, context?: unknown ): Seq.Keyed; /** * @see Collection.Keyed.mapKeys */ mapKeys( mapper: (key: K, value: V, iter: this) => M, context?: unknown ): Seq.Keyed; /** * @see Collection.Keyed.mapEntries */ mapEntries( mapper: ( entry: [K, V], index: number, iter: this ) => [KM, VM] | undefined, context?: unknown ): Seq.Keyed; /** * Flat-maps the Seq, returning a Seq of the same type. * * Similar to `seq.map(...).flatten(true)`. */ flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: unknown ): Seq.Keyed; /** * Returns a new Seq with only the entries for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: V, key: K, iter: this) => value is F, context?: unknown ): Seq.Keyed; filter( predicate: (value: V, key: K, iter: this) => unknown, context?: unknown ): this; /** * Returns a new keyed Seq with the values for which the `predicate` * function returns false and another for which is returns true. */ partition( predicate: (this: C, value: V, key: K, iter: this) => value is F, context?: C ): [Seq.Keyed, Seq.Keyed]; partition( predicate: (this: C, value: V, key: K, iter: this) => unknown, context?: C ): [this, this]; /** * @see Collection.Keyed.flip */ flip(): Seq.Keyed; [Symbol.iterator](): IterableIterator<[K, V]>; } /** * `Seq` which represents an ordered indexed list of values. */ namespace Indexed { /** * Provides an Seq.Indexed of the values provided. */ function of(...values: Array): Seq.Indexed; } /** * Always returns Seq.Indexed, discarding associated keys and * supplying incrementing indices. * * Note: `Seq.Indexed` is a conversion function and not a class, and does * not use the `new` keyword during construction. */ function Indexed( collection?: Iterable | ArrayLike ): Seq.Indexed; interface Indexed extends Seq, Collection.Indexed { /** * Deeply converts this Indexed Seq to equivalent native JavaScript Array. */ toJS(): Array>; /** * Shallowly converts this Indexed Seq to equivalent native JavaScript Array. */ toJSON(): Array; /** * Shallowly converts this collection to an Array. */ toArray(): Array; /** * Returns itself */ toSeq(): this; /** * Returns a new Seq with other collections concatenated to this one. */ concat( ...valuesOrCollections: Array | C> ): Seq.Indexed; /** * Returns a new Seq.Indexed with values passed through a * `mapper` function. * * ```js * const { Seq } = require('immutable') * Seq.Indexed([ 1, 2 ]).map(x => 10 * x) * // Seq [ 10, 20 ] * ``` * * Note: `map()` always returns a new instance, even if it produced the * same value at every step. */ map( mapper: (value: T, key: number, iter: this) => M, context?: unknown ): Seq.Indexed; /** * Flat-maps the Seq, returning a a Seq of the same type. * * Similar to `seq.map(...).flatten(true)`. */ flatMap( mapper: (value: T, key: number, iter: this) => Iterable, context?: unknown ): Seq.Indexed; /** * Returns a new Seq with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: T, index: number, iter: this) => value is F, context?: unknown ): Seq.Indexed; filter( predicate: (value: T, index: number, iter: this) => unknown, context?: unknown ): this; /** * Returns a new indexed Seq with the values for which the `predicate` * function returns false and another for which is returns true. */ partition( predicate: (this: C, value: T, index: number, iter: this) => value is F, context?: C ): [Seq.Indexed, Seq.Indexed]; partition( predicate: (this: C, value: T, index: number, iter: this) => unknown, context?: C ): [this, this]; /** * Returns a Seq "zipped" with the provided collections. * * Like `zipWith`, but using the default `zipper`: creating an `Array`. * * ```js * const a = Seq([ 1, 2, 3 ]); * const b = Seq([ 4, 5, 6 ]); * const c = a.zip(b); // Seq [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ] * ``` */ zip(other: Collection): Seq.Indexed<[T, U]>; zip( other: Collection, other2: Collection ): Seq.Indexed<[T, U, V]>; zip( ...collections: Array> ): Seq.Indexed; /** * Returns a Seq "zipped" with the provided collections. * * Unlike `zip`, `zipAll` continues zipping until the longest collection is * exhausted. Missing values from shorter collections are filled with `undefined`. * * ```js * const a = Seq([ 1, 2 ]); * const b = Seq([ 3, 4, 5 ]); * const c = a.zipAll(b); // Seq [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ] * ``` */ zipAll(other: Collection): Seq.Indexed<[T, U]>; zipAll( other: Collection, other2: Collection ): Seq.Indexed<[T, U, V]>; zipAll( ...collections: Array> ): Seq.Indexed; /** * Returns a Seq "zipped" with the provided collections by using a * custom `zipper` function. * * ```js * const a = Seq([ 1, 2, 3 ]); * const b = Seq([ 4, 5, 6 ]); * const c = a.zipWith((a, b) => a + b, b); * // Seq [ 5, 7, 9 ] * ``` */ zipWith( zipper: (value: T, otherValue: U) => Z, otherCollection: Collection ): Seq.Indexed; zipWith( zipper: (value: T, otherValue: U, thirdValue: V) => Z, otherCollection: Collection, thirdCollection: Collection ): Seq.Indexed; zipWith( zipper: (...values: Array) => Z, ...collections: Array> ): Seq.Indexed; [Symbol.iterator](): IterableIterator; } /** * `Seq` which represents a set of values. * * Because `Seq` are often lazy, `Seq.Set` does not provide the same guarantee * of value uniqueness as the concrete `Set`. */ namespace Set { /** * Returns a Seq.Set of the provided values */ function of(...values: Array): Seq.Set; } /** * Always returns a Seq.Set, discarding associated indices or keys. * * Note: `Seq.Set` is a conversion function and not a class, and does not * use the `new` keyword during construction. */ function Set(collection?: Iterable | ArrayLike): Seq.Set; interface Set extends Seq, Collection.Set { /** * Deeply converts this Set Seq to equivalent native JavaScript Array. */ toJS(): Array>; /** * Shallowly converts this Set Seq to equivalent native JavaScript Array. */ toJSON(): Array; /** * Shallowly converts this collection to an Array. */ toArray(): Array; /** * Returns itself */ toSeq(): this; /** * Returns a new Seq with other collections concatenated to this one. * * All entries will be present in the resulting Seq, even if they * are duplicates. */ concat(...collections: Array>): Seq.Set; /** * Returns a new Seq.Set with values passed through a * `mapper` function. * * ```js * Seq.Set([ 1, 2 ]).map(x => 10 * x) * // Seq { 10, 20 } * ``` * * Note: `map()` always returns a new instance, even if it produced the * same value at every step. */ map( mapper: (value: T, key: T, iter: this) => M, context?: unknown ): Seq.Set; /** * Flat-maps the Seq, returning a Seq of the same type. * * Similar to `seq.map(...).flatten(true)`. */ flatMap( mapper: (value: T, key: T, iter: this) => Iterable, context?: unknown ): Seq.Set; /** * Returns a new Seq with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: T, key: T, iter: this) => value is F, context?: unknown ): Seq.Set; filter( predicate: (value: T, key: T, iter: this) => unknown, context?: unknown ): this; /** * Returns a new set Seq with the values for which the `predicate` * function returns false and another for which is returns true. */ partition( predicate: (this: C, value: T, key: T, iter: this) => value is F, context?: C ): [Seq.Set, Seq.Set]; partition( predicate: (this: C, value: T, key: T, iter: this) => unknown, context?: C ): [this, this]; [Symbol.iterator](): IterableIterator; } } /** * Creates a Seq. * * Returns a particular kind of `Seq` based on the input. * * * If a `Seq`, that same `Seq`. * * If an `Collection`, a `Seq` of the same kind (Keyed, Indexed, or Set). * * If an Array-like, an `Seq.Indexed`. * * If an Iterable Object, an `Seq.Indexed`. * * If an Object, a `Seq.Keyed`. * * Note: An Iterator itself will be treated as an object, becoming a `Seq.Keyed`, * which is usually not what you want. You should turn your Iterator Object into * an iterable object by defining a Symbol.iterator (or @@iterator) method which * returns `this`. * * Note: `Seq` is a conversion function and not a class, and does not use the * `new` keyword during construction. */ function Seq>(seq: S): S; function Seq(collection: Collection.Keyed): Seq.Keyed; function Seq(collection: Collection.Set): Seq.Set; function Seq( collection: Collection.Indexed | Iterable | ArrayLike ): Seq.Indexed; function Seq(obj: { [key: string]: V }): Seq.Keyed; function Seq(): Seq; interface Seq extends Collection { /** * Some Seqs can describe their size lazily. When this is the case, * size will be an integer. Otherwise it will be undefined. * * For example, Seqs returned from `map()` or `reverse()` * preserve the size of the original `Seq` while `filter()` does not. * * Note: `Range`, `Repeat` and `Seq`s made from `Array`s and `Object`s will * always have a size. */ readonly size: number | undefined; // Force evaluation /** * Because Sequences are lazy and designed to be chained together, they do * not cache their results. For example, this map function is called a total * of 6 times, as each `join` iterates the Seq of three values. * * var squares = Seq([ 1, 2, 3 ]).map(x => x * x) * squares.join() + squares.join() * * If you know a `Seq` will be used multiple times, it may be more * efficient to first cache it in memory. Here, the map function is called * only 3 times. * * var squares = Seq([ 1, 2, 3 ]).map(x => x * x).cacheResult() * squares.join() + squares.join() * * Use this method judiciously, as it must fully evaluate a Seq which can be * a burden on memory and possibly performance. * * Note: after calling `cacheResult`, a Seq will always have a `size`. */ cacheResult(): this; // Sequence algorithms /** * Returns a new Seq with values passed through a * `mapper` function. * * ```js * const { Seq } = require('immutable') * Seq([ 1, 2 ]).map(x => 10 * x) * // Seq [ 10, 20 ] * ``` * * Note: `map()` always returns a new instance, even if it produced the same * value at every step. */ map( mapper: (value: V, key: K, iter: this) => M, context?: unknown ): Seq; /** * Returns a new Seq with values passed through a * `mapper` function. * * ```js * const { Seq } = require('immutable') * Seq([ 1, 2 ]).map(x => 10 * x) * // Seq [ 10, 20 ] * ``` * * Note: `map()` always returns a new instance, even if it produced the same * value at every step. * Note: used only for sets. */ map( mapper: (value: V, key: K, iter: this) => M, context?: unknown ): Seq; /** * Flat-maps the Seq, returning a Seq of the same type. * * Similar to `seq.map(...).flatten(true)`. */ flatMap( mapper: (value: V, key: K, iter: this) => Iterable, context?: unknown ): Seq; /** * Flat-maps the Seq, returning a Seq of the same type. * * Similar to `seq.map(...).flatten(true)`. * Note: Used only for sets. */ flatMap( mapper: (value: V, key: K, iter: this) => Iterable, context?: unknown ): Seq; /** * Returns a new Seq with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: V, key: K, iter: this) => value is F, context?: unknown ): Seq; filter( predicate: (value: V, key: K, iter: this) => unknown, context?: unknown ): this; /** * Returns a new Seq with the values for which the `predicate` function * returns false and another for which is returns true. */ partition( predicate: (this: C, value: V, key: K, iter: this) => value is F, context?: C ): [Seq, Seq]; partition( predicate: (this: C, value: V, key: K, iter: this) => unknown, context?: C ): [this, this]; } /** * The `Collection` is a set of (key, value) entries which can be iterated, and * is the base class for all collections in `immutable`, allowing them to * make use of all the Collection methods (such as `map` and `filter`). * * Note: A collection is always iterated in the same order, however that order * may not always be well defined, as is the case for the `Map` and `Set`. * * Collection is the abstract base class for concrete data structures. It * cannot be constructed directly. * * Implementations should extend one of the subclasses, `Collection.Keyed`, * `Collection.Indexed`, or `Collection.Set`. */ namespace Collection { /** * @deprecated use `const { isKeyed } = require('immutable')` */ function isKeyed( maybeKeyed: unknown ): maybeKeyed is Collection.Keyed; /** * @deprecated use `const { isIndexed } = require('immutable')` */ function isIndexed( maybeIndexed: unknown ): maybeIndexed is Collection.Indexed; /** * @deprecated use `const { isAssociative } = require('immutable')` */ function isAssociative( maybeAssociative: unknown ): maybeAssociative is | Collection.Keyed | Collection.Indexed; /** * @deprecated use `const { isOrdered } = require('immutable')` */ function isOrdered(maybeOrdered: unknown): boolean; /** * Keyed Collections have discrete keys tied to each value. * * When iterating `Collection.Keyed`, each iteration will yield a `[K, V]` * tuple, in other words, `Collection#entries` is the default iterator for * Keyed Collections. */ namespace Keyed {} /** * Creates a Collection.Keyed * * Similar to `Collection()`, however it expects collection-likes of [K, V] * tuples if not constructed from a Collection.Keyed or JS Object. * * Note: `Collection.Keyed` is a conversion function and not a class, and * does not use the `new` keyword during construction. */ function Keyed(collection?: Iterable<[K, V]>): Collection.Keyed; function Keyed(obj: { [key: string]: V }): Collection.Keyed; interface Keyed extends Collection { /** * Deeply converts this Keyed collection to equivalent native JavaScript Object. * * Converts keys to Strings. */ toJS(): { [key in string | number | symbol]: DeepCopy }; /** * Shallowly converts this Keyed collection to equivalent native JavaScript Object. * * Converts keys to Strings. */ toJSON(): { [key in string | number | symbol]: V }; /** * Shallowly converts this collection to an Array. */ toArray(): Array<[K, V]>; /** * Returns Seq.Keyed. * @override */ toSeq(): Seq.Keyed; // Sequence functions /** * Returns a new Collection.Keyed of the same type where the keys and values * have been flipped. * * * ```js * const { Map } = require('immutable') * Map({ a: 'z', b: 'y' }).flip() * // Map { "z": "a", "y": "b" } * ``` */ flip(): Collection.Keyed; /** * Returns a new Collection with other collections concatenated to this one. */ concat( ...collections: Array> ): Collection.Keyed; concat( ...collections: Array<{ [key: string]: C }> ): Collection.Keyed; /** * Returns a new Collection.Keyed with values passed through a * `mapper` function. * * ```js * const { Collection } = require('immutable') * Collection.Keyed({ a: 1, b: 2 }).map(x => 10 * x) * // Seq { "a": 10, "b": 20 } * ``` * * Note: `map()` always returns a new instance, even if it produced the * same value at every step. */ map( mapper: (value: V, key: K, iter: this) => M, context?: unknown ): Collection.Keyed; /** * Returns a new Collection.Keyed of the same type with keys passed through * a `mapper` function. * * * ```js * const { Map } = require('immutable') * Map({ a: 1, b: 2 }).mapKeys(x => x.toUpperCase()) * // Map { "A": 1, "B": 2 } * ``` * * Note: `mapKeys()` always returns a new instance, even if it produced * the same key at every step. */ mapKeys( mapper: (key: K, value: V, iter: this) => M, context?: unknown ): Collection.Keyed; /** * Returns a new Collection.Keyed of the same type with entries * ([key, value] tuples) passed through a `mapper` function. * * * ```js * const { Map } = require('immutable') * Map({ a: 1, b: 2 }) * .mapEntries(([ k, v ]) => [ k.toUpperCase(), v * 2 ]) * // Map { "A": 2, "B": 4 } * ``` * * Note: `mapEntries()` always returns a new instance, even if it produced * the same entry at every step. * * If the mapper function returns `undefined`, then the entry will be filtered */ mapEntries( mapper: ( entry: [K, V], index: number, iter: this ) => [KM, VM] | undefined, context?: unknown ): Collection.Keyed; /** * Flat-maps the Collection, returning a Collection of the same type. * * Similar to `collection.map(...).flatten(true)`. */ flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: unknown ): Collection.Keyed; /** * Returns a new Collection with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: V, key: K, iter: this) => value is F, context?: unknown ): Collection.Keyed; filter( predicate: (value: V, key: K, iter: this) => unknown, context?: unknown ): this; /** * Returns a new keyed Collection with the values for which the * `predicate` function returns false and another for which is returns * true. */ partition( predicate: (this: C, value: V, key: K, iter: this) => value is F, context?: C ): [Collection.Keyed, Collection.Keyed]; partition( predicate: (this: C, value: V, key: K, iter: this) => unknown, context?: C ): [this, this]; [Symbol.iterator](): IterableIterator<[K, V]>; } /** * Indexed Collections have incrementing numeric keys. They exhibit * slightly different behavior than `Collection.Keyed` for some methods in order * to better mirror the behavior of JavaScript's `Array`, and add methods * which do not make sense on non-indexed Collections such as `indexOf`. * * Unlike JavaScript arrays, `Collection.Indexed`s are always dense. "Unset" * indices and `undefined` indices are indistinguishable, and all indices from * 0 to `size` are visited when iterated. * * All Collection.Indexed methods return re-indexed Collections. In other words, * indices always start at 0 and increment until size. If you wish to * preserve indices, using them as keys, convert to a Collection.Keyed by * calling `toKeyedSeq`. */ namespace Indexed {} /** * Creates a new Collection.Indexed. * * Note: `Collection.Indexed` is a conversion function and not a class, and * does not use the `new` keyword during construction. */ function Indexed( collection?: Iterable | ArrayLike ): Collection.Indexed; interface Indexed extends Collection { /** * Deeply converts this Indexed collection to equivalent native JavaScript Array. */ toJS(): Array>; /** * Shallowly converts this Indexed collection to equivalent native JavaScript Array. */ toJSON(): Array; /** * Shallowly converts this collection to an Array. */ toArray(): Array; // Reading values /** * Returns the value associated with the provided index, or notSetValue if * the index is beyond the bounds of the Collection. * * `index` may be a negative number, which indexes back from the end of the * Collection. `s.get(-1)` gets the last item in the Collection. */ get(index: number, notSetValue: NSV): T | NSV; get(index: number): T | undefined; // Conversion to Seq /** * Returns Seq.Indexed. * @override */ toSeq(): Seq.Indexed; /** * If this is a collection of [key, value] entry tuples, it will return a * Seq.Keyed of those entries. */ fromEntrySeq(): Seq.Keyed; // Combination /** * Returns a Collection of the same type with `separator` between each item * in this Collection. */ interpose(separator: T): this; /** * Returns a Collection of the same type with the provided `collections` * interleaved into this collection. * * The resulting Collection includes the first item from each, then the * second from each, etc. * * * ```js * const { List } = require('immutable') * List([ 1, 2, 3 ]).interleave(List([ 'A', 'B', 'C' ])) * // List [ 1, "A", 2, "B", 3, "C" ] * ``` * * The shortest Collection stops interleave. * * * ```js * List([ 1, 2, 3 ]).interleave( * List([ 'A', 'B' ]), * List([ 'X', 'Y', 'Z' ]) * ) * // List [ 1, "A", "X", 2, "B", "Y" ] * ``` * * Since `interleave()` re-indexes values, it produces a complete copy, * which has `O(N)` complexity. * * Note: `interleave` *cannot* be used in `withMutations`. */ interleave(...collections: Array>): this; /** * Splice returns a new indexed Collection by replacing a region of this * Collection with new values. If values are not provided, it only skips the * region to be removed. * * `index` may be a negative number, which indexes back from the end of the * Collection. `s.splice(-2)` splices after the second to last item. * * * ```js * const { List } = require('immutable') * List([ 'a', 'b', 'c', 'd' ]).splice(1, 2, 'q', 'r', 's') * // List [ "a", "q", "r", "s", "d" ] * ``` * * Since `splice()` re-indexes values, it produces a complete copy, which * has `O(N)` complexity. * * Note: `splice` *cannot* be used in `withMutations`. */ splice(index: number, removeNum: number, ...values: Array): this; /** * Returns a Collection of the same type "zipped" with the provided * collections. * * Like `zipWith`, but using the default `zipper`: creating an `Array`. * * * * ```js * const a = List([ 1, 2, 3 ]); * const b = List([ 4, 5, 6 ]); * const c = a.zip(b); // List [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ] * ``` */ zip(other: Collection): Collection.Indexed<[T, U]>; zip( other: Collection, other2: Collection ): Collection.Indexed<[T, U, V]>; zip( ...collections: Array> ): Collection.Indexed; /** * Returns a Collection "zipped" with the provided collections. * * Unlike `zip`, `zipAll` continues zipping until the longest collection is * exhausted. Missing values from shorter collections are filled with `undefined`. * * ```js * const a = List([ 1, 2 ]); * const b = List([ 3, 4, 5 ]); * const c = a.zipAll(b); // List [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ] * ``` */ zipAll(other: Collection): Collection.Indexed<[T, U]>; zipAll( other: Collection, other2: Collection ): Collection.Indexed<[T, U, V]>; zipAll( ...collections: Array> ): Collection.Indexed; /** * Returns a Collection of the same type "zipped" with the provided * collections by using a custom `zipper` function. * * * ```js * const a = List([ 1, 2, 3 ]); * const b = List([ 4, 5, 6 ]); * const c = a.zipWith((a, b) => a + b, b); * // List [ 5, 7, 9 ] * ``` */ zipWith( zipper: (value: T, otherValue: U) => Z, otherCollection: Collection ): Collection.Indexed; zipWith( zipper: (value: T, otherValue: U, thirdValue: V) => Z, otherCollection: Collection, thirdCollection: Collection ): Collection.Indexed; zipWith( zipper: (...values: Array) => Z, ...collections: Array> ): Collection.Indexed; // Search for value /** * Returns the first index at which a given value can be found in the * Collection, or -1 if it is not present. */ indexOf(searchValue: T): number; /** * Returns the last index at which a given value can be found in the * Collection, or -1 if it is not present. */ lastIndexOf(searchValue: T): number; /** * Returns the first index in the Collection where a value satisfies the * provided predicate function. Otherwise -1 is returned. */ findIndex( predicate: (value: T, index: number, iter: this) => boolean, context?: unknown ): number; /** * Returns the last index in the Collection where a value satisfies the * provided predicate function. Otherwise -1 is returned. */ findLastIndex( predicate: (value: T, index: number, iter: this) => boolean, context?: unknown ): number; // Sequence algorithms /** * Returns a new Collection with other collections concatenated to this one. */ concat( ...valuesOrCollections: Array | C> ): Collection.Indexed; /** * Returns a new Collection.Indexed with values passed through a * `mapper` function. * * ```js * const { Collection } = require('immutable') * Collection.Indexed([1,2]).map(x => 10 * x) * // Seq [ 1, 2 ] * ``` * * Note: `map()` always returns a new instance, even if it produced the * same value at every step. */ map( mapper: (value: T, key: number, iter: this) => M, context?: unknown ): Collection.Indexed; /** * Flat-maps the Collection, returning a Collection of the same type. * * Similar to `collection.map(...).flatten(true)`. */ flatMap( mapper: (value: T, key: number, iter: this) => Iterable, context?: unknown ): Collection.Indexed; /** * Returns a new Collection with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: T, index: number, iter: this) => value is F, context?: unknown ): Collection.Indexed; filter( predicate: (value: T, index: number, iter: this) => unknown, context?: unknown ): this; /** * Returns a new indexed Collection with the values for which the * `predicate` function returns false and another for which is returns * true. */ partition( predicate: (this: C, value: T, index: number, iter: this) => value is F, context?: C ): [Collection.Indexed, Collection.Indexed]; partition( predicate: (this: C, value: T, index: number, iter: this) => unknown, context?: C ): [this, this]; [Symbol.iterator](): IterableIterator; } /** * Set Collections only represent values. They have no associated keys or * indices. Duplicate values are possible in the lazy `Seq.Set`s, however * the concrete `Set` Collection does not allow duplicate values. * * Collection methods on Collection.Set such as `map` and `forEach` will provide * the value as both the first and second arguments to the provided function. * * ```js * const { Collection } = require('immutable') * const seq = Collection.Set([ 'A', 'B', 'C' ]) * // Seq { "A", "B", "C" } * seq.forEach((v, k) => * assert.equal(v, k) * ) * ``` */ namespace Set {} /** * Similar to `Collection()`, but always returns a Collection.Set. * * Note: `Collection.Set` is a factory function and not a class, and does * not use the `new` keyword during construction. */ function Set(collection?: Iterable | ArrayLike): Collection.Set; interface Set extends Collection { /** * Deeply converts this Set collection to equivalent native JavaScript Array. */ toJS(): Array>; /** * Shallowly converts this Set collection to equivalent native JavaScript Array. */ toJSON(): Array; /** * Shallowly converts this collection to an Array. */ toArray(): Array; /** * Returns Seq.Set. * @override */ toSeq(): Seq.Set; // Sequence algorithms /** * Returns a new Collection with other collections concatenated to this one. */ concat(...collections: Array>): Collection.Set; /** * Returns a new Collection.Set with values passed through a * `mapper` function. * * ``` * Collection.Set([ 1, 2 ]).map(x => 10 * x) * // Seq { 1, 2 } * ``` * * Note: `map()` always returns a new instance, even if it produced the * same value at every step. */ map( mapper: (value: T, key: T, iter: this) => M, context?: unknown ): Collection.Set; /** * Flat-maps the Collection, returning a Collection of the same type. * * Similar to `collection.map(...).flatten(true)`. */ flatMap( mapper: (value: T, key: T, iter: this) => Iterable, context?: unknown ): Collection.Set; /** * Returns a new Collection with only the values for which the `predicate` * function returns true. * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: T, key: T, iter: this) => value is F, context?: unknown ): Collection.Set; filter( predicate: (value: T, key: T, iter: this) => unknown, context?: unknown ): this; /** * Returns a new set Collection with the values for which the * `predicate` function returns false and another for which is returns * true. */ partition( predicate: (this: C, value: T, key: T, iter: this) => value is F, context?: C ): [Collection.Set, Collection.Set]; partition( predicate: (this: C, value: T, key: T, iter: this) => unknown, context?: C ): [this, this]; [Symbol.iterator](): IterableIterator; } } /** * Creates a Collection. * * The type of Collection created is based on the input. * * * If an `Collection`, that same `Collection`. * * If an Array-like, an `Collection.Indexed`. * * If an Object with an Iterator defined, an `Collection.Indexed`. * * If an Object, an `Collection.Keyed`. * * This methods forces the conversion of Objects and Strings to Collections. * If you want to ensure that a Collection of one item is returned, use * `Seq.of`. * * Note: An Iterator itself will be treated as an object, becoming a `Seq.Keyed`, * which is usually not what you want. You should turn your Iterator Object into * an iterable object by defining a Symbol.iterator (or @@iterator) method which * returns `this`. * * Note: `Collection` is a conversion function and not a class, and does not * use the `new` keyword during construction. */ function Collection>(collection: I): I; function Collection( collection: Iterable | ArrayLike ): Collection.Indexed; function Collection(obj: { [key: string]: V; }): Collection.Keyed; function Collection(): Collection; interface Collection extends ValueObject { // Value equality /** * True if this and the other Collection have value equality, as defined * by `Immutable.is()`. * * Note: This is equivalent to `Immutable.is(this, other)`, but provided to * allow for chained expressions. */ equals(other: unknown): boolean; /** * Computes and returns the hashed identity for this Collection. * * The `hashCode` of a Collection is used to determine potential equality, * and is used when adding this to a `Set` or as a key in a `Map`, enabling * lookup via a different instance. * * * ```js * const a = List([ 1, 2, 3 ]); * const b = List([ 1, 2, 3 ]); * assert.notStrictEqual(a, b); // different instances * const set = Set([ a ]); * assert.equal(set.has(b), true); * ``` * * If two values have the same `hashCode`, they are [not guaranteed * to be equal][Hash Collision]. If two values have different `hashCode`s, * they must not be equal. * * [Hash Collision]: https://en.wikipedia.org/wiki/Collision_(computer_science) */ hashCode(): number; // Reading values /** * Returns the value associated with the provided key, or notSetValue if * the Collection does not contain this key. * * Note: it is possible a key may be associated with an `undefined` value, * so if `notSetValue` is not provided and this method returns `undefined`, * that does not guarantee the key was not found. */ get(key: K, notSetValue: NSV): V | NSV; get(key: K): V | undefined; /** * True if a key exists within this `Collection`, using `Immutable.is` * to determine equality */ has(key: K): boolean; /** * True if a value exists within this `Collection`, using `Immutable.is` * to determine equality * @alias contains */ includes(value: V): boolean; contains(value: V): boolean; /** * In case the `Collection` is not empty returns the first element of the * `Collection`. * In case the `Collection` is empty returns the optional default * value if provided, if no default value is provided returns undefined. */ first(notSetValue?: NSV): V | NSV; /** * In case the `Collection` is not empty returns the last element of the * `Collection`. * In case the `Collection` is empty returns the optional default * value if provided, if no default value is provided returns undefined. */ last(notSetValue?: NSV): V | NSV; // Reading deep values /** * Returns the value found by following a path of keys or indices through * nested Collections. * * * ```js * const { Map, List } = require('immutable') * const deepData = Map({ x: List([ Map({ y: 123 }) ]) }); * deepData.getIn(['x', 0, 'y']) // 123 * ``` * * Plain JavaScript Object or Arrays may be nested within an Immutable.js * Collection, and getIn() can access those values as well: * * * ```js * const { Map, List } = require('immutable') * const deepData = Map({ x: [ { y: 123 } ] }); * deepData.getIn(['x', 0, 'y']) // 123 * ``` */ getIn(searchKeyPath: Iterable, notSetValue?: unknown): unknown; /** * True if the result of following a path of keys or indices through nested * Collections results in a set value. */ hasIn(searchKeyPath: Iterable): boolean; // Persistent changes /** * This can be very useful as a way to "chain" a normal function into a * sequence of methods. RxJS calls this "let" and lodash calls it "thru". * * For example, to sum a Seq after mapping and filtering: * * * ```js * const { Seq } = require('immutable') * * function sum(collection) { * return collection.reduce((sum, x) => sum + x, 0) * } * * Seq([ 1, 2, 3 ]) * .map(x => x + 1) * .filter(x => x % 2 === 0) * .update(sum) * // 6 * ``` */ update(updater: (value: this) => R): R; // Conversion to JavaScript types /** * Deeply converts this Collection to equivalent native JavaScript Array or Object. * * `Collection.Indexed`, and `Collection.Set` become `Array`, while * `Collection.Keyed` become `Object`, converting keys to Strings. */ toJS(): | Array> | { [key in string | number | symbol]: DeepCopy }; /** * Shallowly converts this Collection to equivalent native JavaScript Array or Object. * * `Collection.Indexed`, and `Collection.Set` become `Array`, while * `Collection.Keyed` become `Object`, converting keys to Strings. */ toJSON(): Array | { [key in string | number | symbol]: V }; /** * Shallowly converts this collection to an Array. * * `Collection.Indexed`, and `Collection.Set` produce an Array of values. * `Collection.Keyed` produce an Array of [key, value] tuples. */ toArray(): Array | Array<[K, V]>; /** * Shallowly converts this Collection to an Object. * * Converts keys to Strings. */ toObject(): { [key: string]: V }; // Conversion to Collections /** * Converts this Collection to a Map, Throws if keys are not hashable. * * Note: This is equivalent to `Map(this.toKeyedSeq())`, but provided * for convenience and to allow for chained expressions. */ toMap(): Map; /** * Converts this Collection to a Map, maintaining the order of iteration. * * Note: This is equivalent to `OrderedMap(this.toKeyedSeq())`, but * provided for convenience and to allow for chained expressions. */ toOrderedMap(): OrderedMap; /** * Converts this Collection to a Set, discarding keys. Throws if values * are not hashable. * * Note: This is equivalent to `Set(this)`, but provided to allow for * chained expressions. */ toSet(): Set; /** * Converts this Collection to a Set, maintaining the order of iteration and * discarding keys. * * Note: This is equivalent to `OrderedSet(this.valueSeq())`, but provided * for convenience and to allow for chained expressions. */ toOrderedSet(): OrderedSet; /** * Converts this Collection to a List, discarding keys. * * This is similar to `List(collection)`, but provided to allow for chained * expressions. However, when called on `Map` or other keyed collections, * `collection.toList()` discards the keys and creates a list of only the * values, whereas `List(collection)` creates a list of entry tuples. * * * ```js * const { Map, List } = require('immutable') * var myMap = Map({ a: 'Apple', b: 'Banana' }) * List(myMap) // List [ [ "a", "Apple" ], [ "b", "Banana" ] ] * myMap.toList() // List [ "Apple", "Banana" ] * ``` */ toList(): List; /** * Converts this Collection to a Stack, discarding keys. Throws if values * are not hashable. * * Note: This is equivalent to `Stack(this)`, but provided to allow for * chained expressions. */ toStack(): Stack; // Conversion to Seq /** * Converts this Collection to a Seq of the same kind (indexed, * keyed, or set). */ toSeq(): Seq; /** * Returns a Seq.Keyed from this Collection where indices are treated as keys. * * This is useful if you want to operate on an * Collection.Indexed and preserve the [index, value] pairs. * * The returned Seq will have identical iteration order as * this Collection. * * * ```js * const { Seq } = require('immutable') * const indexedSeq = Seq([ 'A', 'B', 'C' ]) * // Seq [ "A", "B", "C" ] * indexedSeq.filter(v => v === 'B') * // Seq [ "B" ] * const keyedSeq = indexedSeq.toKeyedSeq() * // Seq { 0: "A", 1: "B", 2: "C" } * keyedSeq.filter(v => v === 'B') * // Seq { 1: "B" } * ``` */ toKeyedSeq(): Seq.Keyed; /** * Returns an Seq.Indexed of the values of this Collection, discarding keys. */ toIndexedSeq(): Seq.Indexed; /** * Returns a Seq.Set of the values of this Collection, discarding keys. */ toSetSeq(): Seq.Set; // Iterators /** * An iterator of this `Collection`'s keys. * * Note: this will return an ES6 iterator which does not support * Immutable.js sequence algorithms. Use `keySeq` instead, if this is * what you want. */ keys(): IterableIterator; /** * An iterator of this `Collection`'s values. * * Note: this will return an ES6 iterator which does not support * Immutable.js sequence algorithms. Use `valueSeq` instead, if this is * what you want. */ values(): IterableIterator; /** * An iterator of this `Collection`'s entries as `[ key, value ]` tuples. * * Note: this will return an ES6 iterator which does not support * Immutable.js sequence algorithms. Use `entrySeq` instead, if this is * what you want. */ entries(): IterableIterator<[K, V]>; [Symbol.iterator](): IterableIterator; // Collections (Seq) /** * Returns a new Seq.Indexed of the keys of this Collection, * discarding values. */ keySeq(): Seq.Indexed; /** * Returns an Seq.Indexed of the values of this Collection, discarding keys. */ valueSeq(): Seq.Indexed; /** * Returns a new Seq.Indexed of [key, value] tuples. */ entrySeq(): Seq.Indexed<[K, V]>; // Sequence algorithms /** * Returns a new Collection of the same type with values passed through a * `mapper` function. * * * ```js * const { Collection } = require('immutable') * Collection({ a: 1, b: 2 }).map(x => 10 * x) * // Seq { "a": 10, "b": 20 } * ``` * * Note: `map()` always returns a new instance, even if it produced the same * value at every step. */ map( mapper: (value: V, key: K, iter: this) => M, context?: unknown ): Collection; /** * Note: used only for sets, which return Collection but are otherwise * identical to normal `map()`. * * @ignore */ map(...args: Array): unknown; /** * Returns a new Collection of the same type with only the entries for which * the `predicate` function returns true. * * * ```js * const { Map } = require('immutable') * Map({ a: 1, b: 2, c: 3, d: 4}).filter(x => x % 2 === 0) * // Map { "b": 2, "d": 4 } * ``` * * Note: `filter()` always returns a new instance, even if it results in * not filtering out any values. */ filter( predicate: (value: V, key: K, iter: this) => value is F, context?: unknown ): Collection; filter( predicate: (value: V, key: K, iter: this) => unknown, context?: unknown ): this; /** * Returns a new Collection of the same type with only the entries for which * the `predicate` function returns false. * * * ```js * const { Map } = require('immutable') * Map({ a: 1, b: 2, c: 3, d: 4}).filterNot(x => x % 2 === 0) * // Map { "a": 1, "c": 3 } * ``` * * Note: `filterNot()` always returns a new instance, even if it results in * not filtering out any values. */ filterNot( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): this; /** * Returns a new Collection with the values for which the `predicate` * function returns false and another for which is returns true. */ partition( predicate: (this: C, value: V, key: K, iter: this) => value is F, context?: C ): [Collection, Collection]; partition( predicate: (this: C, value: V, key: K, iter: this) => unknown, context?: C ): [this, this]; /** * Returns a new Collection of the same type in reverse order. */ reverse(): this; /** * Returns a new Collection of the same type which includes the same entries, * stably sorted by using a `comparator`. * * If a `comparator` is not provided, a default comparator uses `<` and `>`. * * `comparator(valueA, valueB)`: * * * Returns `0` if the elements should not be swapped. * * Returns `-1` (or any negative number) if `valueA` comes before `valueB` * * Returns `1` (or any positive number) if `valueA` comes after `valueB` * * Alternatively, can return a value of the `PairSorting` enum type * * Is pure, i.e. it must always return the same value for the same pair * of values. * * When sorting collections which have no defined order, their ordered * equivalents will be returned. e.g. `map.sort()` returns OrderedMap. * * * ```js * const { Map } = require('immutable') * Map({ "c": 3, "a": 1, "b": 2 }).sort((a, b) => { * if (a < b) { return -1; } * if (a > b) { return 1; } * if (a === b) { return 0; } * }); * // OrderedMap { "a": 1, "b": 2, "c": 3 } * ``` * * Note: `sort()` Always returns a new instance, even if the original was * already sorted. * * Note: This is always an eager operation. */ sort(comparator?: Comparator): this; /** * Like `sort`, but also accepts a `comparatorValueMapper` which allows for * sorting by more sophisticated means: * * * ```js * const { Map } = require('immutable') * const beattles = Map({ * John: { name: "Lennon" }, * Paul: { name: "McCartney" }, * George: { name: "Harrison" }, * Ringo: { name: "Starr" }, * }); * beattles.sortBy(member => member.name); * ``` * * Note: `sortBy()` Always returns a new instance, even if the original was * already sorted. * * Note: This is always an eager operation. */ sortBy( comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: Comparator ): this; /** * Returns a `Map` of `Collection`, grouped by the return * value of the `grouper` function. * * Note: This is always an eager operation. * * * ```js * const { List, Map } = require('immutable') * const listOfMaps = List([ * Map({ v: 0 }), * Map({ v: 1 }), * Map({ v: 1 }), * Map({ v: 0 }), * Map({ v: 2 }) * ]) * const groupsOfMaps = listOfMaps.groupBy(x => x.get('v')) * // Map { * // 0: List [ Map{ "v": 0 }, Map { "v": 0 } ], * // 1: List [ Map{ "v": 1 }, Map { "v": 1 } ], * // 2: List [ Map{ "v": 2 } ], * // } * ``` */ groupBy( grouper: (value: V, key: K, iter: this) => G, context?: unknown ): Map; // Side effects /** * The `sideEffect` is executed for every entry in the Collection. * * Unlike `Array#forEach`, if any call of `sideEffect` returns * `false`, the iteration will stop. Returns the number of entries iterated * (including the last iteration which returned false). */ forEach( sideEffect: (value: V, key: K, iter: this) => unknown, context?: unknown ): number; // Creating subsets /** * Returns a new Collection of the same type representing a portion of this * Collection from start up to but not including end. * * If begin is negative, it is offset from the end of the Collection. e.g. * `slice(-2)` returns a Collection of the last two entries. If it is not * provided the new Collection will begin at the beginning of this Collection. * * If end is negative, it is offset from the end of the Collection. e.g. * `slice(0, -1)` returns a Collection of everything but the last entry. If * it is not provided, the new Collection will continue through the end of * this Collection. * * If the requested slice is equivalent to the current Collection, then it * will return itself. */ slice(begin?: number, end?: number): this; /** * Returns a new Collection of the same type containing all entries except * the first. */ rest(): this; /** * Returns a new Collection of the same type containing all entries except * the last. */ butLast(): this; /** * Returns a new Collection of the same type which excludes the first `amount` * entries from this Collection. */ skip(amount: number): this; /** * Returns a new Collection of the same type which excludes the last `amount` * entries from this Collection. */ skipLast(amount: number): this; /** * Returns a new Collection of the same type which includes entries starting * from when `predicate` first returns false. * * * ```js * const { List } = require('immutable') * List([ 'dog', 'frog', 'cat', 'hat', 'god' ]) * .skipWhile(x => x.match(/g/)) * // List [ "cat", "hat", "god" ] * ``` */ skipWhile( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): this; /** * Returns a new Collection of the same type which includes entries starting * from when `predicate` first returns true. * * * ```js * const { List } = require('immutable') * List([ 'dog', 'frog', 'cat', 'hat', 'god' ]) * .skipUntil(x => x.match(/hat/)) * // List [ "hat", "god" ] * ``` */ skipUntil( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): this; /** * Returns a new Collection of the same type which includes the first `amount` * entries from this Collection. */ take(amount: number): this; /** * Returns a new Collection of the same type which includes the last `amount` * entries from this Collection. */ takeLast(amount: number): this; /** * Returns a new Collection of the same type which includes entries from this * Collection as long as the `predicate` returns true. * * * ```js * const { List } = require('immutable') * List([ 'dog', 'frog', 'cat', 'hat', 'god' ]) * .takeWhile(x => x.match(/o/)) * // List [ "dog", "frog" ] * ``` */ takeWhile( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): this; /** * Returns a new Collection of the same type which includes entries from this * Collection as long as the `predicate` returns false. * * * ```js * const { List } = require('immutable') * List([ 'dog', 'frog', 'cat', 'hat', 'god' ]) * .takeUntil(x => x.match(/at/)) * // List [ "dog", "frog" ] * ``` */ takeUntil( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): this; // Combination /** * Returns a new Collection of the same type with other values and * collection-like concatenated to this one. * * For Seqs, all entries will be present in the resulting Seq, even if they * have the same key. */ concat( ...valuesOrCollections: Array ): Collection; /** * Flattens nested Collections. * * Will deeply flatten the Collection by default, returning a Collection of the * same type, but a `depth` can be provided in the form of a number or * boolean (where true means to shallowly flatten one level). A depth of 0 * (or shallow: false) will deeply flatten. * * Flattens only others Collection, not Arrays or Objects. * * Note: `flatten(true)` operates on Collection> and * returns Collection */ flatten(depth?: number): Collection; // tslint:disable-next-line unified-signatures flatten(shallow?: boolean): Collection; /** * Flat-maps the Collection, returning a Collection of the same type. * * Similar to `collection.map(...).flatten(true)`. */ flatMap( mapper: (value: V, key: K, iter: this) => Iterable, context?: unknown ): Collection; /** * Flat-maps the Collection, returning a Collection of the same type. * * Similar to `collection.map(...).flatten(true)`. * Used for Dictionaries only. */ flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: unknown ): Collection; // Reducing a value /** * Reduces the Collection to a value by calling the `reducer` for every entry * in the Collection and passing along the reduced value. * * If `initialReduction` is not provided, the first item in the * Collection will be used. * * @see `Array#reduce`. */ reduce( reducer: (reduction: R, value: V, key: K, iter: this) => R, initialReduction: R, context?: unknown ): R; reduce( reducer: (reduction: V | R, value: V, key: K, iter: this) => R ): R; /** * Reduces the Collection in reverse (from the right side). * * Note: Similar to this.reverse().reduce(), and provided for parity * with `Array#reduceRight`. */ reduceRight( reducer: (reduction: R, value: V, key: K, iter: this) => R, initialReduction: R, context?: unknown ): R; reduceRight( reducer: (reduction: V | R, value: V, key: K, iter: this) => R ): R; /** * True if `predicate` returns true for all entries in the Collection. */ every( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): boolean; /** * True if `predicate` returns true for any entry in the Collection. */ some( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): boolean; /** * Joins values together as a string, inserting a separator between each. * The default separator is `","`. */ join(separator?: string): string; /** * Returns true if this Collection includes no values. * * For some lazy `Seq`, `isEmpty` might need to iterate to determine * emptiness. At most one iteration will occur. */ isEmpty(): boolean; /** * Returns the size of this Collection. * * Regardless of if this Collection can describe its size lazily (some Seqs * cannot), this method will always return the correct size. E.g. it * evaluates a lazy `Seq` if necessary. * * If `predicate` is provided, then this returns the count of entries in the * Collection for which the `predicate` returns true. */ count(): number; count( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): number; /** * Returns a `Seq.Keyed` of counts, grouped by the return value of * the `grouper` function. * * Note: This is not a lazy operation. */ countBy( grouper: (value: V, key: K, iter: this) => G, context?: unknown ): Map; // Search for value /** * Returns the first value for which the `predicate` returns true. */ find( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown, notSetValue?: V ): V | undefined; /** * Returns the last value for which the `predicate` returns true. * * Note: `predicate` will be called for each entry in reverse. */ findLast( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown, notSetValue?: V ): V | undefined; /** * Returns the first [key, value] entry for which the `predicate` returns true. */ findEntry( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown, notSetValue?: V ): [K, V] | undefined; /** * Returns the last [key, value] entry for which the `predicate` * returns true. * * Note: `predicate` will be called for each entry in reverse. */ findLastEntry( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown, notSetValue?: V ): [K, V] | undefined; /** * Returns the key for which the `predicate` returns true. */ findKey( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): K | undefined; /** * Returns the last key for which the `predicate` returns true. * * Note: `predicate` will be called for each entry in reverse. */ findLastKey( predicate: (value: V, key: K, iter: this) => boolean, context?: unknown ): K | undefined; /** * Returns the key associated with the search value, or undefined. */ keyOf(searchValue: V): K | undefined; /** * Returns the last key associated with the search value, or undefined. */ lastKeyOf(searchValue: V): K | undefined; /** * Returns the maximum value in this collection. If any values are * comparatively equivalent, the first one found will be returned. * * The `comparator` is used in the same way as `Collection#sort`. If it is not * provided, the default comparator is `>`. * * When two values are considered equivalent, the first encountered will be * returned. Otherwise, `max` will operate independent of the order of input * as long as the comparator is commutative. The default comparator `>` is * commutative *only* when types do not differ. * * If `comparator` returns 0 and either value is NaN, undefined, or null, * that value will be returned. */ max(comparator?: Comparator): V | undefined; /** * Like `max`, but also accepts a `comparatorValueMapper` which allows for * comparing by more sophisticated means: * * * ```js * const { List, } = require('immutable'); * const l = List([ * { name: 'Bob', avgHit: 1 }, * { name: 'Max', avgHit: 3 }, * { name: 'Lili', avgHit: 2 } , * ]); * l.maxBy(i => i.avgHit); // will output { name: 'Max', avgHit: 3 } * ``` */ maxBy( comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: Comparator ): V | undefined; /** * Returns the minimum value in this collection. If any values are * comparatively equivalent, the first one found will be returned. * * The `comparator` is used in the same way as `Collection#sort`. If it is not * provided, the default comparator is `<`. * * When two values are considered equivalent, the first encountered will be * returned. Otherwise, `min` will operate independent of the order of input * as long as the comparator is commutative. The default comparator `<` is * commutative *only* when types do not differ. * * If `comparator` returns 0 and either value is NaN, undefined, or null, * that value will be returned. */ min(comparator?: Comparator): V | undefined; /** * Like `min`, but also accepts a `comparatorValueMapper` which allows for * comparing by more sophisticated means: * * * ```js * const { List, } = require('immutable'); * const l = List([ * { name: 'Bob', avgHit: 1 }, * { name: 'Max', avgHit: 3 }, * { name: 'Lili', avgHit: 2 } , * ]); * l.minBy(i => i.avgHit); // will output { name: 'Bob', avgHit: 1 } * ``` */ minBy( comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: Comparator ): V | undefined; // Comparison /** * True if `iter` includes every value in this Collection. */ isSubset(iter: Iterable): boolean; /** * True if this Collection includes every value in `iter`. */ isSuperset(iter: Iterable): boolean; } /** * The interface to fulfill to qualify as a Value Object. */ interface ValueObject { /** * True if this and the other Collection have value equality, as defined * by `Immutable.is()`. * * Note: This is equivalent to `Immutable.is(this, other)`, but provided to * allow for chained expressions. */ equals(other: unknown): boolean; /** * Computes and returns the hashed identity for this Collection. * * The `hashCode` of a Collection is used to determine potential equality, * and is used when adding this to a `Set` or as a key in a `Map`, enabling * lookup via a different instance. * * * ```js * const { List, Set } = require('immutable'); * const a = List([ 1, 2, 3 ]); * const b = List([ 1, 2, 3 ]); * assert.notStrictEqual(a, b); // different instances * const set = Set([ a ]); * assert.equal(set.has(b), true); * ``` * * Note: hashCode() MUST return a Uint32 number. The easiest way to * guarantee this is to return `myHash | 0` from a custom implementation. * * If two values have the same `hashCode`, they are [not guaranteed * to be equal][Hash Collision]. If two values have different `hashCode`s, * they must not be equal. * * Note: `hashCode()` is not guaranteed to always be called before * `equals()`. Most but not all Immutable.js collections use hash codes to * organize their internal data structures, while all Immutable.js * collections use equality during lookups. * * [Hash Collision]: https://en.wikipedia.org/wiki/Collision_(computer_science) */ hashCode(): number; } /** * Deeply converts plain JS objects and arrays to Immutable Maps and Lists. * * `fromJS` will convert Arrays and [array-like objects][2] to a List, and * plain objects (without a custom prototype) to a Map. [Iterable objects][3] * may be converted to List, Map, or Set. * * If a `reviver` is optionally provided, it will be called with every * collection as a Seq (beginning with the most nested collections * and proceeding to the top-level collection itself), along with the key * referring to each collection and the parent JS object provided as `this`. * For the top level, object, the key will be `""`. This `reviver` is expected * to return a new Immutable Collection, allowing for custom conversions from * deep JS objects. Finally, a `path` is provided which is the sequence of * keys to this value from the starting value. * * `reviver` acts similarly to the [same parameter in `JSON.parse`][1]. * * If `reviver` is not provided, the default behavior will convert Objects * into Maps and Arrays into Lists like so: * * * ```js * const { fromJS, isKeyed } = require('immutable') * function (key, value) { * return isKeyed(value) ? value.toMap() : value.toList() * } * ``` * * Accordingly, this example converts native JS data to OrderedMap and List: * * * ```js * const { fromJS, isKeyed } = require('immutable') * fromJS({ a: {b: [10, 20, 30]}, c: 40}, function (key, value, path) { * console.log(key, value, path) * return isKeyed(value) ? value.toOrderedMap() : value.toList() * }) * * > "b", [ 10, 20, 30 ], [ "a", "b" ] * > "a", {b: [10, 20, 30]}, [ "a" ] * > "", {a: {b: [10, 20, 30]}, c: 40}, [] * ``` * * Keep in mind, when using JS objects to construct Immutable Maps, that * JavaScript Object properties are always strings, even if written in a * quote-less shorthand, while Immutable Maps accept keys of any type. * * * ```js * const { Map } = require('immutable') * let obj = { 1: "one" }; * Object.keys(obj); // [ "1" ] * assert.equal(obj["1"], obj[1]); // "one" === "one" * * let map = Map(obj); * assert.notEqual(map.get("1"), map.get(1)); // "one" !== undefined * ``` * * Property access for JavaScript Objects first converts the key to a string, * but since Immutable Map keys can be of any type the argument to `get()` is * not altered. * * [1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter * "Using the reviver parameter" * [2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Indexed_collections#working_with_array-like_objects * "Working with array-like objects" * [3]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol * "The iterable protocol" */ function fromJS( jsValue: JSValue, reviver?: undefined ): FromJS; function fromJS( jsValue: unknown, reviver?: ( key: string | number, sequence: Collection.Keyed | Collection.Indexed, path?: Array ) => unknown ): Collection; type FromJS = JSValue extends FromJSNoTransform ? JSValue : JSValue extends Array ? FromJSArray : JSValue extends {} ? FromJSObject : any; type FromJSNoTransform = | Collection | number | string | null | undefined; type FromJSArray = JSValue extends Array ? List> : never; type FromJSObject = JSValue extends {} ? Map> : never; /** * Value equality check with semantics similar to `Object.is`, but treats * Immutable `Collection`s as values, equal if the second `Collection` includes * equivalent values. * * It's used throughout Immutable when checking for equality, including `Map` * key equality and `Set` membership. * * * ```js * const { Map, is } = require('immutable') * const map1 = Map({ a: 1, b: 1, c: 1 }) * const map2 = Map({ a: 1, b: 1, c: 1 }) * assert.equal(map1 !== map2, true) * assert.equal(Object.is(map1, map2), false) * assert.equal(is(map1, map2), true) * ``` * * `is()` compares primitive types like strings and numbers, Immutable.js * collections like `Map` and `List`, but also any custom object which * implements `ValueObject` by providing `equals()` and `hashCode()` methods. * * Note: Unlike `Object.is`, `Immutable.is` assumes `0` and `-0` are the same * value, matching the behavior of ES6 Map key equality. */ function is(first: unknown, second: unknown): boolean; /** * The `hash()` function is an important part of how Immutable determines if * two values are equivalent and is used to determine how to store those * values. Provided with any value, `hash()` will return a 31-bit integer. * * When designing Objects which may be equal, it's important that when a * `.equals()` method returns true, that both values `.hashCode()` method * return the same value. `hash()` may be used to produce those values. * * For non-Immutable Objects that do not provide a `.hashCode()` functions * (including plain Objects, plain Arrays, Date objects, etc), a unique hash * value will be created for each *instance*. That is, the create hash * represents referential equality, and not value equality for Objects. This * ensures that if that Object is mutated over time that its hash code will * remain consistent, allowing Objects to be used as keys and values in * Immutable.js collections. * * Note that `hash()` attempts to balance between speed and avoiding * collisions, however it makes no attempt to produce secure hashes. * * *New in Version 4.0* */ function hash(value: unknown): number; /** * True if `maybeImmutable` is an Immutable Collection or Record. * * Note: Still returns true even if the collections is within a `withMutations()`. * * * ```js * const { isImmutable, Map, List, Stack } = require('immutable'); * isImmutable([]); // false * isImmutable({}); // false * isImmutable(Map()); // true * isImmutable(List()); // true * isImmutable(Stack()); // true * isImmutable(Map().asMutable()); // true * ``` */ function isImmutable( maybeImmutable: unknown ): maybeImmutable is Collection; /** * True if `maybeCollection` is a Collection, or any of its subclasses. * * * ```js * const { isCollection, Map, List, Stack } = require('immutable'); * isCollection([]); // false * isCollection({}); // false * isCollection(Map()); // true * isCollection(List()); // true * isCollection(Stack()); // true * ``` */ function isCollection( maybeCollection: unknown ): maybeCollection is Collection; /** * True if `maybeKeyed` is a Collection.Keyed, or any of its subclasses. * * * ```js * const { isKeyed, Map, List, Stack } = require('immutable'); * isKeyed([]); // false * isKeyed({}); // false * isKeyed(Map()); // true * isKeyed(List()); // false * isKeyed(Stack()); // false * ``` */ function isKeyed( maybeKeyed: unknown ): maybeKeyed is Collection.Keyed; /** * True if `maybeIndexed` is a Collection.Indexed, or any of its subclasses. * * * ```js * const { isIndexed, Map, List, Stack, Set } = require('immutable'); * isIndexed([]); // false * isIndexed({}); // false * isIndexed(Map()); // false * isIndexed(List()); // true * isIndexed(Stack()); // true * isIndexed(Set()); // false * ``` */ function isIndexed( maybeIndexed: unknown ): maybeIndexed is Collection.Indexed; /** * True if `maybeAssociative` is either a Keyed or Indexed Collection. * * * ```js * const { isAssociative, Map, List, Stack, Set } = require('immutable'); * isAssociative([]); // false * isAssociative({}); // false * isAssociative(Map()); // true * isAssociative(List()); // true * isAssociative(Stack()); // true * isAssociative(Set()); // false * ``` */ function isAssociative( maybeAssociative: unknown ): maybeAssociative is | Collection.Keyed | Collection.Indexed; /** * True if `maybeOrdered` is a Collection where iteration order is well * defined. True for Collection.Indexed as well as OrderedMap and OrderedSet. * * * ```js * const { isOrdered, Map, OrderedMap, List, Set } = require('immutable'); * isOrdered([]); // false * isOrdered({}); // false * isOrdered(Map()); // false * isOrdered(OrderedMap()); // true * isOrdered(List()); // true * isOrdered(Set()); // false * ``` */ function isOrdered(maybeOrdered: unknown): boolean; /** * True if `maybeValue` is a JavaScript Object which has *both* `equals()` * and `hashCode()` methods. * * Any two instances of *value objects* can be compared for value equality with * `Immutable.is()` and can be used as keys in a `Map` or members in a `Set`. */ function isValueObject(maybeValue: unknown): maybeValue is ValueObject; /** * True if `maybeSeq` is a Seq. */ function isSeq( maybeSeq: unknown ): maybeSeq is | Seq.Indexed | Seq.Keyed | Seq.Set; /** * True if `maybeList` is a List. */ function isList(maybeList: unknown): maybeList is List; /** * True if `maybeMap` is a Map. * * Also true for OrderedMaps. */ function isMap(maybeMap: unknown): maybeMap is Map; /** * True if `maybeOrderedMap` is an OrderedMap. */ function isOrderedMap( maybeOrderedMap: unknown ): maybeOrderedMap is OrderedMap; /** * True if `maybeStack` is a Stack. */ function isStack(maybeStack: unknown): maybeStack is Stack; /** * True if `maybeSet` is a Set. * * Also true for OrderedSets. */ function isSet(maybeSet: unknown): maybeSet is Set; /** * True if `maybeOrderedSet` is an OrderedSet. */ function isOrderedSet( maybeOrderedSet: unknown ): maybeOrderedSet is OrderedSet; /** * True if `maybeRecord` is a Record. */ function isRecord(maybeRecord: unknown): maybeRecord is Record<{}>; /** * Returns the value within the provided collection associated with the * provided key, or notSetValue if the key is not defined in the collection. * * A functional alternative to `collection.get(key)` which will also work on * plain Objects and Arrays as an alternative for `collection[key]`. * * * ```js * const { get } = require('immutable') * get([ 'dog', 'frog', 'cat' ], 2) // 'frog' * get({ x: 123, y: 456 }, 'x') // 123 * get({ x: 123, y: 456 }, 'z', 'ifNotSet') // 'ifNotSet' * ``` */ function get(collection: Collection, key: K): V | undefined; function get( collection: Collection, key: K, notSetValue: NSV ): V | NSV; function get( record: Record, key: K, notSetValue: unknown ): TProps[K]; function get(collection: Array, key: number): V | undefined; function get( collection: Array, key: number, notSetValue: NSV ): V | NSV; function get( object: C, key: K, notSetValue: unknown ): C[K]; function get(collection: { [key: string]: V }, key: string): V | undefined; function get( collection: { [key: string]: V }, key: string, notSetValue: NSV ): V | NSV; /** * Returns true if the key is defined in the provided collection. * * A functional alternative to `collection.has(key)` which will also work with * plain Objects and Arrays as an alternative for * `collection.hasOwnProperty(key)`. * * * ```js * const { has } = require('immutable') * has([ 'dog', 'frog', 'cat' ], 2) // true * has([ 'dog', 'frog', 'cat' ], 5) // false * has({ x: 123, y: 456 }, 'x') // true * has({ x: 123, y: 456 }, 'z') // false * ``` */ function has(collection: object, key: unknown): boolean; /** * Returns a copy of the collection with the value at key removed. * * A functional alternative to `collection.remove(key)` which will also work * with plain Objects and Arrays as an alternative for * `delete collectionCopy[key]`. * * * ```js * const { remove } = require('immutable') * const originalArray = [ 'dog', 'frog', 'cat' ] * remove(originalArray, 1) // [ 'dog', 'cat' ] * console.log(originalArray) // [ 'dog', 'frog', 'cat' ] * const originalObject = { x: 123, y: 456 } * remove(originalObject, 'x') // { y: 456 } * console.log(originalObject) // { x: 123, y: 456 } * ``` */ function remove>( collection: C, key: K ): C; function remove< TProps extends object, C extends Record, K extends keyof TProps >(collection: C, key: K): C; function remove>(collection: C, key: number): C; function remove(collection: C, key: K): C; function remove( collection: C, key: K ): C; /** * Returns a copy of the collection with the value at key set to the provided * value. * * A functional alternative to `collection.set(key, value)` which will also * work with plain Objects and Arrays as an alternative for * `collectionCopy[key] = value`. * * * ```js * const { set } = require('immutable') * const originalArray = [ 'dog', 'frog', 'cat' ] * set(originalArray, 1, 'cow') // [ 'dog', 'cow', 'cat' ] * console.log(originalArray) // [ 'dog', 'frog', 'cat' ] * const originalObject = { x: 123, y: 456 } * set(originalObject, 'x', 789) // { x: 789, y: 456 } * console.log(originalObject) // { x: 123, y: 456 } * ``` */ function set>( collection: C, key: K, value: V ): C; function set< TProps extends object, C extends Record, K extends keyof TProps >(record: C, key: K, value: TProps[K]): C; function set>(collection: C, key: number, value: V): C; function set(object: C, key: K, value: C[K]): C; function set( collection: C, key: string, value: V ): C; /** * Returns a copy of the collection with the value at key set to the result of * providing the existing value to the updating function. * * A functional alternative to `collection.update(key, fn)` which will also * work with plain Objects and Arrays as an alternative for * `collectionCopy[key] = fn(collection[key])`. * * * ```js * const { update } = require('immutable') * const originalArray = [ 'dog', 'frog', 'cat' ] * update(originalArray, 1, val => val.toUpperCase()) // [ 'dog', 'FROG', 'cat' ] * console.log(originalArray) // [ 'dog', 'frog', 'cat' ] * const originalObject = { x: 123, y: 456 } * update(originalObject, 'x', val => val * 6) // { x: 738, y: 456 } * console.log(originalObject) // { x: 123, y: 456 } * ``` */ function update>( collection: C, key: K, updater: (value: V | undefined) => V | undefined ): C; function update, NSV>( collection: C, key: K, notSetValue: NSV, updater: (value: V | NSV) => V ): C; function update< TProps extends object, C extends Record, K extends keyof TProps >(record: C, key: K, updater: (value: TProps[K]) => TProps[K]): C; function update< TProps extends object, C extends Record, K extends keyof TProps, NSV >( record: C, key: K, notSetValue: NSV, updater: (value: TProps[K] | NSV) => TProps[K] ): C; function update( collection: Array, key: number, updater: (value: V | undefined) => V | undefined ): Array; function update( collection: Array, key: number, notSetValue: NSV, updater: (value: V | NSV) => V ): Array; function update( object: C, key: K, updater: (value: C[K]) => C[K] ): C; function update( object: C, key: K, notSetValue: NSV, updater: (value: C[K] | NSV) => C[K] ): C; function update( collection: C, key: K, updater: (value: V) => V ): { [key: string]: V }; function update( collection: C, key: K, notSetValue: NSV, updater: (value: V | NSV) => V ): { [key: string]: V }; /** * Returns the value at the provided key path starting at the provided * collection, or notSetValue if the key path is not defined. * * A functional alternative to `collection.getIn(keypath)` which will also * work with plain Objects and Arrays. * * * ```js * const { getIn } = require('immutable') * getIn({ x: { y: { z: 123 }}}, ['x', 'y', 'z']) // 123 * getIn({ x: { y: { z: 123 }}}, ['x', 'q', 'p'], 'ifNotSet') // 'ifNotSet' * ``` */ function getIn( collection: unknown, keyPath: Iterable, notSetValue?: unknown ): unknown; /** * Returns true if the key path is defined in the provided collection. * * A functional alternative to `collection.hasIn(keypath)` which will also * work with plain Objects and Arrays. * * * ```js * const { hasIn } = require('immutable') * hasIn({ x: { y: { z: 123 }}}, ['x', 'y', 'z']) // true * hasIn({ x: { y: { z: 123 }}}, ['x', 'q', 'p']) // false * ``` */ function hasIn(collection: unknown, keyPath: Iterable): boolean; /** * Returns a copy of the collection with the value at the key path removed. * * A functional alternative to `collection.removeIn(keypath)` which will also * work with plain Objects and Arrays. * * * ```js * const { removeIn } = require('immutable') * const original = { x: { y: { z: 123 }}} * removeIn(original, ['x', 'y', 'z']) // { x: { y: {}}} * console.log(original) // { x: { y: { z: 123 }}} * ``` */ function removeIn(collection: C, keyPath: Iterable): C; /** * Returns a copy of the collection with the value at the key path set to the * provided value. * * A functional alternative to `collection.setIn(keypath)` which will also * work with plain Objects and Arrays. * * * ```js * const { setIn } = require('immutable') * const original = { x: { y: { z: 123 }}} * setIn(original, ['x', 'y', 'z'], 456) // { x: { y: { z: 456 }}} * console.log(original) // { x: { y: { z: 123 }}} * ``` */ function setIn( collection: C, keyPath: Iterable, value: unknown ): C; /** * Returns a copy of the collection with the value at key path set to the * result of providing the existing value to the updating function. * * A functional alternative to `collection.updateIn(keypath)` which will also * work with plain Objects and Arrays. * * * ```js * const { updateIn } = require('immutable') * const original = { x: { y: { z: 123 }}} * updateIn(original, ['x', 'y', 'z'], val => val * 6) // { x: { y: { z: 738 }}} * console.log(original) // { x: { y: { z: 123 }}} * ``` */ function updateIn( collection: C, keyPath: Iterable, updater: (value: unknown) => unknown ): C; function updateIn( collection: C, keyPath: Iterable, notSetValue: unknown, updater: (value: unknown) => unknown ): C; /** * Returns a copy of the collection with the remaining collections merged in. * * A functional alternative to `collection.merge()` which will also work with * plain Objects and Arrays. * * * ```js * const { merge } = require('immutable') * const original = { x: 123, y: 456 } * merge(original, { y: 789, z: 'abc' }) // { x: 123, y: 789, z: 'abc' } * console.log(original) // { x: 123, y: 456 } * ``` */ function merge( collection: C, ...collections: Array< | Iterable | Iterable<[unknown, unknown]> | { [key: string]: unknown } > ): C; /** * Returns a copy of the collection with the remaining collections merged in, * calling the `merger` function whenever an existing value is encountered. * * A functional alternative to `collection.mergeWith()` which will also work * with plain Objects and Arrays. * * * ```js * const { mergeWith } = require('immutable') * const original = { x: 123, y: 456 } * mergeWith( * (oldVal, newVal) => oldVal + newVal, * original, * { y: 789, z: 'abc' } * ) // { x: 123, y: 1245, z: 'abc' } * console.log(original) // { x: 123, y: 456 } * ``` */ function mergeWith( merger: (oldVal: unknown, newVal: unknown, key: unknown) => unknown, collection: C, ...collections: Array< | Iterable | Iterable<[unknown, unknown]> | { [key: string]: unknown } > ): C; /** * Like `merge()`, but when two compatible collections are encountered with * the same key, it merges them as well, recursing deeply through the nested * data. Two collections are considered to be compatible (and thus will be * merged together) if they both fall into one of three categories: keyed * (e.g., `Map`s, `Record`s, and objects), indexed (e.g., `List`s and * arrays), or set-like (e.g., `Set`s). If they fall into separate * categories, `mergeDeep` will replace the existing collection with the * collection being merged in. This behavior can be customized by using * `mergeDeepWith()`. * * Note: Indexed and set-like collections are merged using * `concat()`/`union()` and therefore do not recurse. * * A functional alternative to `collection.mergeDeep()` which will also work * with plain Objects and Arrays. * * * ```js * const { mergeDeep } = require('immutable') * const original = { x: { y: 123 }} * mergeDeep(original, { x: { z: 456 }}) // { x: { y: 123, z: 456 }} * console.log(original) // { x: { y: 123 }} * ``` */ function mergeDeep( collection: C, ...collections: Array< | Iterable | Iterable<[unknown, unknown]> | { [key: string]: unknown } > ): C; /** * Like `mergeDeep()`, but when two non-collections or incompatible * collections are encountered at the same key, it uses the `merger` function * to determine the resulting value. Collections are considered incompatible * if they fall into separate categories between keyed, indexed, and set-like. * * A functional alternative to `collection.mergeDeepWith()` which will also * work with plain Objects and Arrays. * * * ```js * const { mergeDeepWith } = require('immutable') * const original = { x: { y: 123 }} * mergeDeepWith( * (oldVal, newVal) => oldVal + newVal, * original, * { x: { y: 456 }} * ) // { x: { y: 579 }} * console.log(original) // { x: { y: 123 }} * ``` */ function mergeDeepWith( merger: (oldVal: unknown, newVal: unknown, key: unknown) => unknown, collection: C, ...collections: Array< | Iterable | Iterable<[unknown, unknown]> | { [key: string]: unknown } > ): C; } /** * Defines the main export of the immutable module to be the Immutable namespace * This supports many common module import patterns: * * const Immutable = require("immutable"); * const { List } = require("immutable"); * import Immutable from "immutable"; * import * as Immutable from "immutable"; * import { List } from "immutable"; * */ export = Immutable; /** * A global "Immutable" namespace used by UMD modules which allows the use of * the full Immutable API. * * If using Immutable as an imported module, prefer using: * * import Immutable from 'immutable' * */ export as namespace Immutable; immutable-js-immutable-js-fa7d047/type-definitions/immutable.js.flow000066400000000000000000001724571515165743500257210ustar00rootroot00000000000000/** * This file provides type definitions for use with the Flow type checker. * * An important caveat when using these definitions is that the types for * `Collection.Keyed`, `Collection.Indexed`, `Seq.Keyed`, and so on are stubs. * When referring to those types, you can get the proper definitions by * importing the types `KeyedCollection`, `IndexedCollection`, `KeyedSeq`, etc. * For example, * * import { Seq } from 'immutable' * import type { IndexedCollection, IndexedSeq } from 'immutable' * * const someSeq: IndexedSeq = Seq.Indexed.of(1, 2, 3) * * function takesASeq>(iter: TS): TS { * return iter.butLast() * } * * takesASeq(someSeq) * * @flow strict */ // Helper type that represents plain objects allowed as arguments to // some constructors and functions. type PlainObjInput = { +[key: K]: V, __proto__: null }; type K = $Keys; // Helper types to extract the "keys" and "values" use by the *In() methods. type $KeyOf = $Call< ((?_Collection) => K) & ((?$ReadOnlyArray) => number) & ((?RecordInstance | T) => $Keys) & ((T) => $Keys), C >; type $ValOf> = $Call< ((?_Collection) => V) & ((?$ReadOnlyArray) => T) & (>(?RecordInstance | T, K) => $ElementType) & ((T) => $Values), C, K >; type $IterableOf = $Call< ( | IndexedCollection | SetCollection>( V ) => Iterable<$ValOf>) & (< V: | KeyedCollection | RecordInstance | PlainObjInput >( V ) => Iterable<[$KeyOf, $ValOf]>), C >; const PairSorting: $ReadOnly<{ LeftThenRight: number, RightThenLeft: number }> = { LeftThenRight: -1, RightThenLeft: +1, }; type Comparator = (left: T, right: T) => number; declare class _Collection implements ValueObject { equals(other: mixed): boolean; hashCode(): number; get(key: K, ..._: []): V | void; get(key: K, notSetValue: NSV): V | NSV; has(key: K): boolean; includes(value: V): boolean; contains(value: V): boolean; first(notSetValue?: NSV): V | NSV; last(notSetValue?: NSV): V | NSV; hasIn(keyPath: Iterable): boolean; getIn(keyPath: [], notSetValue?: mixed): this; getIn(keyPath: [K], notSetValue: NSV): V | NSV; getIn>( keyPath: [K, K2], notSetValue: NSV ): $ValOf | NSV; getIn, K3: $KeyOf<$ValOf>>( keyPath: [K, K2, K3], notSetValue: NSV ): $ValOf<$ValOf, K3> | NSV; getIn< NSV, K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>> >( keyPath: [K, K2, K3, K4], notSetValue: NSV ): $ValOf<$ValOf<$ValOf, K3>, K4> | NSV; getIn< NSV, K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf, K3>, K4>> >( keyPath: [K, K2, K3, K4, K5], notSetValue: NSV ): $ValOf<$ValOf<$ValOf<$ValOf, K3>, K4>, K5> | NSV; update(updater: (value: this) => U): U; toJS(): Array | { [key: string]: mixed }; toJSON(): Array | { [key: string]: V }; toArray(): Array | Array<[K, V]>; toObject(): { [key: string]: V }; toMap(): Map; toOrderedMap(): OrderedMap; toSet(): Set; toOrderedSet(): OrderedSet; toList(): List; toStack(): Stack; toSeq(): Seq; toKeyedSeq(): KeyedSeq; toIndexedSeq(): IndexedSeq; toSetSeq(): SetSeq; keys(): Iterator; values(): Iterator; entries(): Iterator<[K, V]>; keySeq(): IndexedSeq; valueSeq(): IndexedSeq; entrySeq(): IndexedSeq<[K, V]>; reverse(): this; sort(comparator?: Comparator): this; sortBy( comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: Comparator ): this; groupBy( grouper: (value: V, key: K, iter: this) => G, context?: mixed ): KeyedSeq; forEach( sideEffect: (value: V, key: K, iter: this) => any, context?: mixed ): number; slice(begin?: number, end?: number): this; rest(): this; butLast(): this; skip(amount: number): this; skipLast(amount: number): this; skipWhile( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): this; skipUntil( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): this; take(amount: number): this; takeLast(amount: number): this; takeWhile( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): this; takeUntil( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): this; filterNot( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): this; reduce( reducer: (reduction: R, value: V, key: K, iter: this) => R, initialReduction: R, context?: mixed ): R; reduce(reducer: (reduction: V | R, value: V, key: K, iter: this) => R): R; reduceRight( reducer: (reduction: R, value: V, key: K, iter: this) => R, initialReduction: R, context?: mixed ): R; reduceRight( reducer: (reduction: V | R, value: V, key: K, iter: this) => R ): R; every( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): boolean; some( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): boolean; join(separator?: string): string; isEmpty(): boolean; count( predicate?: (value: V, key: K, iter: this) => mixed, context?: mixed ): number; countBy( grouper: (value: V, key: K, iter: this) => G, context?: mixed ): Map; find( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed, notSetValue?: NSV ): V | NSV; findLast( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed, notSetValue?: NSV ): V | NSV; findEntry(predicate: (value: V, key: K, iter: this) => mixed): [K, V] | void; findLastEntry( predicate: (value: V, key: K, iter: this) => mixed ): [K, V] | void; findKey( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): K | void; findLastKey( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): K | void; keyOf(searchValue: V): K | void; lastKeyOf(searchValue: V): K | void; max(comparator?: Comparator): V; maxBy( comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: Comparator ): V; min(comparator?: Comparator): V; minBy( comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: Comparator ): V; isSubset(iter: Iterable): boolean; isSuperset(iter: Iterable): boolean; } declare function isImmutable( maybeImmutable: mixed ): boolean %checks(maybeImmutable instanceof Collection); declare function isCollection( maybeCollection: mixed ): boolean %checks(maybeCollection instanceof Collection); declare function isKeyed( maybeKeyed: mixed ): boolean %checks(maybeKeyed instanceof KeyedCollection); declare function isIndexed( maybeIndexed: mixed ): boolean %checks(maybeIndexed instanceof IndexedCollection); declare function isAssociative( maybeAssociative: mixed ): boolean %checks(maybeAssociative instanceof KeyedCollection || maybeAssociative instanceof IndexedCollection); declare function isOrdered( maybeOrdered: mixed ): boolean %checks(maybeOrdered instanceof IndexedCollection || maybeOrdered instanceof OrderedMap || maybeOrdered instanceof OrderedSet); declare function isValueObject(maybeValue: mixed): boolean; declare function isSeq(maybeSeq: any): boolean %checks(maybeSeq instanceof Seq); declare function isList(maybeList: any): boolean %checks(maybeList instanceof List); declare function isMap(maybeMap: any): boolean %checks(maybeMap instanceof Map); declare function isOrderedMap( maybeOrderedMap: any ): boolean %checks(maybeOrderedMap instanceof OrderedMap); declare function isStack(maybeStack: any): boolean %checks(maybeStack instanceof Stack); declare function isSet(maybeSet: any): boolean %checks(maybeSet instanceof Set); declare function isOrderedSet( maybeOrderedSet: any ): boolean %checks(maybeOrderedSet instanceof OrderedSet); declare function isRecord( maybeRecord: any ): boolean %checks(maybeRecord instanceof Record); declare interface ValueObject { equals(other: mixed): boolean; hashCode(): number; } declare class Collection extends _Collection { static Keyed: typeof KeyedCollection; static Indexed: typeof IndexedCollection; static Set: typeof SetCollection; static isCollection: typeof isCollection; static isKeyed: typeof isKeyed; static isIndexed: typeof isIndexed; static isAssociative: typeof isAssociative; static isOrdered: typeof isOrdered; } declare class KeyedCollection extends Collection { static ( values?: Iterable<[K, V]> | PlainObjInput ): KeyedCollection; toJS(): { [key: string]: mixed }; toJSON(): { [key: string]: V }; toArray(): Array<[K, V]>; @@iterator(): Iterator<[K, V]>; toSeq(): KeyedSeq; flip(): KeyedCollection; concat( ...iters: Array | PlainObjInput> ): KeyedCollection; filter(predicate: typeof Boolean): KeyedCollection>; filter( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): KeyedCollection; partition( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: V, key: K, iter: this) => M, context?: mixed ): KeyedCollection; mapKeys( mapper: (key: K, value: V, iter: this) => M, context?: mixed ): KeyedCollection; mapEntries( mapper: (entry: [K, V], index: number, iter: this) => [KM, VM], context?: mixed ): KeyedCollection; flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: mixed ): KeyedCollection; flatten(depth?: number): KeyedCollection; flatten(shallow?: boolean): KeyedCollection; } Collection.Keyed = KeyedCollection; declare class IndexedCollection<+T> extends Collection { static (iter?: Iterable): IndexedCollection; toJS(): Array; toJSON(): Array; toArray(): Array; @@iterator(): Iterator; toSeq(): IndexedSeq; fromEntrySeq(): KeyedSeq; interpose(separator: T): this; interleave(...collections: Iterable[]): this; splice(index: number, removeNum: number, ...values: T[]): this; zip(a: Iterable, ..._: []): IndexedCollection<[T, A]>; zip( a: Iterable, b: Iterable, ..._: [] ): IndexedCollection<[T, A, B]>; zip( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): IndexedCollection<[T, A, B, C]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): IndexedCollection<[T, A, B, C, D]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): IndexedCollection<[T, A, B, C, D, E]>; zipAll(a: Iterable, ..._: []): IndexedCollection<[T | void, A | void]>; zipAll( a: Iterable, b: Iterable, ..._: [] ): IndexedCollection<[T | void, A | void, B | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): IndexedCollection<[T | void, A | void, B | void, C | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): IndexedCollection<[T | void, A | void, B | void, C | void, D | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): IndexedCollection< [T | void, A | void, B | void, C | void, D | void, E | void] >; zipWith( zipper: (value: T, a: A) => R, a: Iterable, ..._: [] ): IndexedCollection; zipWith( zipper: (value: T, a: A, b: B) => R, a: Iterable, b: Iterable, ..._: [] ): IndexedCollection; zipWith( zipper: (value: T, a: A, b: B, c: C) => R, a: Iterable, b: Iterable, c: Iterable, ..._: [] ): IndexedCollection; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): IndexedCollection; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): IndexedCollection; indexOf(searchValue: T): number; lastIndexOf(searchValue: T): number; findIndex( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): number; findLastIndex( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): number; concat(...iters: Array | C>): IndexedCollection; filter(predicate: typeof Boolean): IndexedCollection<$NonMaybeType>; filter( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): IndexedCollection; partition( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: T, index: number, iter: this) => M, context?: mixed ): IndexedCollection; flatMap( mapper: (value: T, index: number, iter: this) => Iterable, context?: mixed ): IndexedCollection; flatten(depth?: number): IndexedCollection; flatten(shallow?: boolean): IndexedCollection; } declare class SetCollection<+T> extends Collection { static (iter?: Iterable): SetCollection; toJS(): Array; toJSON(): Array; toArray(): Array; @@iterator(): Iterator; toSeq(): SetSeq; concat(...collections: Iterable[]): SetCollection; // `filter`, `map` and `flatMap` cannot be defined further up the hierarchy, // because the implementation for `KeyedCollection` allows the value type to // change without constraining the key type. That does not work for // `SetCollection` - the value and key types *must* match. filter(predicate: typeof Boolean): SetCollection<$NonMaybeType>; filter( predicate: (value: T, value: T, iter: this) => mixed, context?: mixed ): SetCollection; partition( predicate: (value: T, value: T, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: T, value: T, iter: this) => M, context?: mixed ): SetCollection; flatMap( mapper: (value: T, value: T, iter: this) => Iterable, context?: mixed ): SetCollection; flatten(depth?: number): SetCollection; flatten(shallow?: boolean): SetCollection; } declare function isSeq(maybeSeq: mixed): boolean %checks(maybeSeq instanceof Seq); declare class Seq extends _Collection { static Keyed: typeof KeyedSeq; static Indexed: typeof IndexedSeq; static Set: typeof SetSeq; static (values: KeyedSeq): KeyedSeq; static (values: SetSeq): SetSeq; static (values: Iterable): IndexedSeq; static (values?: PlainObjInput): KeyedSeq; static isSeq: typeof isSeq; size: number | void; cacheResult(): this; toSeq(): this; } declare class KeyedSeq extends Seq mixins KeyedCollection { static ( values?: Iterable<[K, V]> | PlainObjInput ): KeyedSeq; // Override specialized return types flip(): KeyedSeq; concat( ...iters: Array | PlainObjInput> ): KeyedSeq; filter(predicate: typeof Boolean): KeyedSeq>; filter( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): KeyedSeq; partition( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: V, key: K, iter: this) => M, context?: mixed ): KeyedSeq; mapKeys( mapper: (key: K, value: V, iter: this) => M, context?: mixed ): KeyedSeq; mapEntries( mapper: (entry: [K, V], index: number, iter: this) => [KM, VM], context?: mixed ): KeyedSeq; flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: mixed ): KeyedSeq; flatten(depth?: number): KeyedSeq; flatten(shallow?: boolean): KeyedSeq; } declare class IndexedSeq<+T> extends Seq mixins IndexedCollection { static (values?: Iterable): IndexedSeq; static of(...values: T[]): IndexedSeq; // Override specialized return types concat(...iters: Array | C>): IndexedSeq; filter(predicate: typeof Boolean): IndexedSeq<$NonMaybeType>; filter( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): IndexedSeq; partition( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: T, index: number, iter: this) => M, context?: mixed ): IndexedSeq; flatMap( mapper: (value: T, index: number, iter: this) => Iterable, context?: mixed ): IndexedSeq; flatten(depth?: number): IndexedSeq; flatten(shallow?: boolean): IndexedSeq; zip(a: Iterable, ..._: []): IndexedSeq<[T, A]>; zip(a: Iterable, b: Iterable, ..._: []): IndexedSeq<[T, A, B]>; zip( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): IndexedSeq<[T, A, B, C]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): IndexedSeq<[T, A, B, C, D]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): IndexedSeq<[T, A, B, C, D, E]>; zipAll(a: Iterable, ..._: []): IndexedSeq<[T | void, A | void]>; zipAll( a: Iterable, b: Iterable, ..._: [] ): IndexedSeq<[T | void, A | void, B | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): IndexedSeq<[T | void, A | void, B | void, C | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): IndexedSeq<[T | void, A | void, B | void, C | void, D | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): IndexedSeq<[T | void, A | void, B | void, C | void, D | void, E | void]>; zipWith( zipper: (value: T, a: A) => R, a: Iterable, ..._: [] ): IndexedSeq; zipWith( zipper: (value: T, a: A, b: B) => R, a: Iterable, b: Iterable, ..._: [] ): IndexedSeq; zipWith( zipper: (value: T, a: A, b: B, c: C) => R, a: Iterable, b: Iterable, c: Iterable, ..._: [] ): IndexedSeq; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): IndexedSeq; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): IndexedSeq; } declare class SetSeq<+T> extends Seq mixins SetCollection { static (values?: Iterable): SetSeq; static of(...values: T[]): SetSeq; // Override specialized return types concat(...collections: Iterable[]): SetSeq; filter(predicate: typeof Boolean): SetSeq<$NonMaybeType>; filter( predicate: (value: T, value: T, iter: this) => mixed, context?: mixed ): SetSeq; partition( predicate: (value: T, value: T, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: T, value: T, iter: this) => M, context?: mixed ): SetSeq; flatMap( mapper: (value: T, value: T, iter: this) => Iterable, context?: mixed ): SetSeq; flatten(depth?: number): SetSeq; flatten(shallow?: boolean): SetSeq; } declare class UpdatableInCollection { setIn(keyPath: [], value: S): S; setIn(keyPath: [K], value: V): this; setIn, S: $ValOf>(keyPath: [K, K2], value: S): this; setIn, K3: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K3>>( keyPath: [K, K2, K3], value: S ): this; setIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, S: $ValOf<$ValOf<$ValOf, K3>, K4> >( keyPath: [K, K2, K3, K4], value: S ): this; setIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K3>, K4>, K5> >( keyPath: [K, K2, K3, K4, K5], value: S ): this; deleteIn(keyPath: []): void; deleteIn(keyPath: [K]): this; deleteIn>(keyPath: [K, K2]): this; deleteIn, K3: $KeyOf<$ValOf>>( keyPath: [K, K2, K3] ): this; deleteIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>> >( keyPath: [K, K2, K3, K4] ): this; deleteIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf, K3>, K4>> >( keyPath: [K, K2, K3, K4, K5] ): this; removeIn(keyPath: []): void; removeIn(keyPath: [K]): this; removeIn>(keyPath: [K, K2]): this; removeIn, K3: $KeyOf<$ValOf>>( keyPath: [K, K2, K3] ): this; removeIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>> >( keyPath: [K, K2, K3, K4] ): this; removeIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf, K3>, K4>> >( keyPath: [K, K2, K3, K4, K5] ): this; updateIn(keyPath: [], notSetValue: mixed, updater: (value: this) => U): U; updateIn(keyPath: [], updater: (value: this) => U): U; updateIn(keyPath: [K], notSetValue: NSV, updater: (value: V) => V): this; updateIn(keyPath: [K], updater: (value: V) => V): this; updateIn, S: $ValOf>( keyPath: [K, K2], notSetValue: NSV, updater: (value: $ValOf | NSV) => S ): this; updateIn, S: $ValOf>( keyPath: [K, K2], updater: (value: $ValOf) => S ): this; updateIn< NSV, K2: $KeyOf, K3: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K3> >( keyPath: [K, K2, K3], notSetValue: NSV, updater: (value: $ValOf<$ValOf, K3> | NSV) => S ): this; updateIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K3> >( keyPath: [K, K2, K3], updater: (value: $ValOf<$ValOf, K3>) => S ): this; updateIn< NSV, K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, S: $ValOf<$ValOf<$ValOf, K3>, K4> >( keyPath: [K, K2, K3, K4], notSetValue: NSV, updater: (value: $ValOf<$ValOf<$ValOf, K3>, K4> | NSV) => S ): this; updateIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, S: $ValOf<$ValOf<$ValOf, K3>, K4> >( keyPath: [K, K2, K3, K4], updater: (value: $ValOf<$ValOf<$ValOf, K3>, K4>) => S ): this; updateIn< NSV, K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K3>, K4>, K5> >( keyPath: [K, K2, K3, K4, K5], notSetValue: NSV, updater: ( value: $ValOf<$ValOf<$ValOf<$ValOf, K3>, K4>, K5> | NSV ) => S ): this; updateIn< K2: $KeyOf, K3: $KeyOf<$ValOf>, K4: $KeyOf<$ValOf<$ValOf, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K3>, K4>, K5> >( keyPath: [K, K2, K3, K4, K5], updater: (value: $ValOf<$ValOf<$ValOf<$ValOf, K3>, K4>, K5>) => S ): this; } declare function isList(maybeList: mixed): boolean %checks(maybeList instanceof List); declare class List<+T> extends IndexedCollection mixins UpdatableInCollection { static (collection?: Iterable): List; static of(...values: T[]): List; static isList: typeof isList; size: number; set(index: number, value: U): List; delete(index: number): this; remove(index: number): this; insert(index: number, value: U): List; clear(): this; push(...values: U[]): List; pop(): this; unshift(...values: U[]): List; shift(): this; update(updater: (value: this) => U): U; update(index: number, updater: (value: T) => U): List; update( index: number, notSetValue: U, updater: (value: T) => U ): List; merge(...collections: Iterable[]): List; setSize(size: number): this; mergeIn(keyPath: Iterable, ...collections: Iterable[]): this; mergeDeepIn( keyPath: Iterable, ...collections: Iterable[] ): this; withMutations(mutator: (mutable: this) => mixed): this; asMutable(): this; wasAltered(): boolean; asImmutable(): this; // Override specialized return types concat(...iters: Array | C>): List; filter(predicate: typeof Boolean): List<$NonMaybeType>; filter( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): List; partition( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: T, index: number, iter: this) => M, context?: mixed ): List; flatMap( mapper: (value: T, index: number, iter: this) => Iterable, context?: mixed ): List; flatten(depth?: number): List; flatten(shallow?: boolean): List; zip(a: Iterable, ..._: []): List<[T, A]>; zip(a: Iterable, b: Iterable, ..._: []): List<[T, A, B]>; zip( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): List<[T, A, B, C]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): List<[T, A, B, C, D]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): List<[T, A, B, C, D, E]>; zipAll(a: Iterable, ..._: []): List<[T | void, A | void]>; zipAll( a: Iterable, b: Iterable, ..._: [] ): List<[T | void, A | void, B | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): List<[T | void, A | void, B | void, C | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): List<[T | void, A | void, B | void, C | void, D | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): List<[T | void, A | void, B | void, C | void, D | void, E | void]>; zipWith( zipper: (value: T, a: A) => R, a: Iterable, ..._: [] ): List; zipWith( zipper: (value: T, a: A, b: B) => R, a: Iterable, b: Iterable, ..._: [] ): List; zipWith( zipper: (value: T, a: A, b: B, c: C) => R, a: Iterable, b: Iterable, c: Iterable, ..._: [] ): List; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): List; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): List; } declare function isMap(maybeMap: mixed): boolean %checks(maybeMap instanceof Map); declare class Map extends KeyedCollection mixins UpdatableInCollection { static (values?: Iterable<[K, V]> | PlainObjInput): Map; static isMap: typeof isMap; size: number; set(key: K_, value: V_): Map; delete(key: K): this; remove(key: K): this; clear(): this; deleteAll(keys: Iterable): Map; removeAll(keys: Iterable): Map; update(updater: (value: this) => U): U; update(key: K, updater: (value: V) => V_): Map; update( key: K, notSetValue: V_, updater: (value: V) => V_ ): Map; merge( ...collections: (Iterable<[K_, V_]> | PlainObjInput)[] ): Map; concat( ...collections: (Iterable<[K_, V_]> | PlainObjInput)[] ): Map; mergeWith( merger: (oldVal: V, newVal: W, key: K) => X, ...collections: (Iterable<[K_, W]> | PlainObjInput)[] ): Map; mergeDeep( ...collections: (Iterable<[K_, V_]> | PlainObjInput)[] ): Map; mergeDeepWith( merger: (oldVal: any, newVal: any, key: any) => mixed, ...collections: (Iterable<[K_, V_]> | PlainObjInput)[] ): Map; mergeIn( keyPath: Iterable, ...collections: (Iterable | PlainObjInput)[] ): this; mergeDeepIn( keyPath: Iterable, ...collections: (Iterable | PlainObjInput)[] ): this; withMutations(mutator: (mutable: this) => mixed): this; asMutable(): this; wasAltered(): boolean; asImmutable(): this; // Override specialized return types flip(): Map; filter(predicate: typeof Boolean): Map>; filter( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): Map; partition( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: V, key: K, iter: this) => M, context?: mixed ): Map; mapKeys( mapper: (key: K, value: V, iter: this) => M, context?: mixed ): Map; mapEntries( mapper: (entry: [K, V], index: number, iter: this) => [KM, VM], context?: mixed ): Map; flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: mixed ): Map; flatten(depth?: number): Map; flatten(shallow?: boolean): Map; } declare function isOrderedMap( maybeOrderedMap: mixed ): boolean %checks(maybeOrderedMap instanceof OrderedMap); declare class OrderedMap extends Map mixins UpdatableInCollection { static ( values?: Iterable<[K, V]> | PlainObjInput ): OrderedMap; static isOrderedMap: typeof isOrderedMap; size: number; set(key: K_, value: V_): OrderedMap; delete(key: K): this; remove(key: K): this; clear(): this; update(updater: (value: this) => U): U; update(key: K, updater: (value: V) => V_): OrderedMap; update( key: K, notSetValue: V_, updater: (value: V) => V_ ): OrderedMap; merge( ...collections: (Iterable<[K_, V_]> | PlainObjInput)[] ): OrderedMap; concat( ...collections: (Iterable<[K_, V_]> | PlainObjInput)[] ): OrderedMap; mergeWith( merger: (oldVal: V, newVal: W, key: K) => X, ...collections: (Iterable<[K_, W]> | PlainObjInput)[] ): OrderedMap; mergeDeep( ...collections: (Iterable<[K_, V_]> | PlainObjInput)[] ): OrderedMap; mergeDeepWith( merger: (oldVal: any, newVal: any, key: any) => mixed, ...collections: (Iterable<[K_, V_]> | PlainObjInput)[] ): OrderedMap; mergeIn( keyPath: Iterable, ...collections: (Iterable | PlainObjInput)[] ): this; mergeDeepIn( keyPath: Iterable, ...collections: (Iterable | PlainObjInput)[] ): this; withMutations(mutator: (mutable: this) => mixed): this; asMutable(): this; wasAltered(): boolean; asImmutable(): this; // Override specialized return types flip(): OrderedMap; filter(predicate: typeof Boolean): OrderedMap>; filter( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): OrderedMap; partition( predicate: (value: V, key: K, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: V, key: K, iter: this) => M, context?: mixed ): OrderedMap; mapKeys( mapper: (key: K, value: V, iter: this) => M, context?: mixed ): OrderedMap; mapEntries( mapper: (entry: [K, V], index: number, iter: this) => [KM, VM], context?: mixed ): OrderedMap; flatMap( mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>, context?: mixed ): OrderedMap; flatten(depth?: number): OrderedMap; flatten(shallow?: boolean): OrderedMap; } declare function isSet(maybeSet: mixed): boolean %checks(maybeSet instanceof Set); declare class Set<+T> extends SetCollection { static (values?: Iterable): Set; static of(...values: T[]): Set; static fromKeys( values: Iterable<[T, mixed]> | PlainObjInput ): Set; static intersect(sets: Iterable>): Set; static union(sets: Iterable>): Set; static isSet: typeof isSet; size: number; add(value: U): Set; delete(value: T): this; remove(value: T): this; clear(): this; union(...collections: Iterable[]): Set; merge(...collections: Iterable[]): Set; concat(...collections: Iterable[]): Set; intersect(...collections: Iterable[]): Set; subtract(...collections: Iterable[]): this; withMutations(mutator: (mutable: this) => mixed): this; asMutable(): this; wasAltered(): boolean; asImmutable(): this; // Override specialized return types filter(predicate: typeof Boolean): Set<$NonMaybeType>; filter( predicate: (value: T, value: T, iter: this) => mixed, context?: mixed ): Set; partition( predicate: (value: T, value: T, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: T, value: T, iter: this) => M, context?: mixed ): Set; flatMap( mapper: (value: T, value: T, iter: this) => Iterable, context?: mixed ): Set; flatten(depth?: number): Set; flatten(shallow?: boolean): Set; } // Overrides except for `isOrderedSet` are for specialized return types declare function isOrderedSet( maybeOrderedSet: mixed ): boolean %checks(maybeOrderedSet instanceof OrderedSet); declare class OrderedSet<+T> extends Set { static (values?: Iterable): OrderedSet; static of(...values: T[]): OrderedSet; static fromKeys( values: Iterable<[T, mixed]> | PlainObjInput ): OrderedSet; static isOrderedSet: typeof isOrderedSet; size: number; add(value: U): OrderedSet; union(...collections: Iterable[]): OrderedSet; merge(...collections: Iterable[]): OrderedSet; concat(...collections: Iterable[]): OrderedSet; intersect(...collections: Iterable[]): OrderedSet; filter(predicate: typeof Boolean): OrderedSet<$NonMaybeType>; filter( predicate: (value: T, value: T, iter: this) => mixed, context?: mixed ): OrderedSet; partition( predicate: (value: T, value: T, iter: this) => mixed, context?: mixed ): [this, this]; map( mapper: (value: T, value: T, iter: this) => M, context?: mixed ): OrderedSet; flatMap( mapper: (value: T, value: T, iter: this) => Iterable, context?: mixed ): OrderedSet; flatten(depth?: number): OrderedSet; flatten(shallow?: boolean): OrderedSet; zip(a: Iterable, ..._: []): OrderedSet<[T, A]>; zip(a: Iterable, b: Iterable, ..._: []): OrderedSet<[T, A, B]>; zip( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): OrderedSet<[T, A, B, C]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): OrderedSet<[T, A, B, C, D]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): OrderedSet<[T, A, B, C, D, E]>; zipAll(a: Iterable, ..._: []): OrderedSet<[T | void, A | void]>; zipAll( a: Iterable, b: Iterable, ..._: [] ): OrderedSet<[T | void, A | void, B | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): OrderedSet<[T | void, A | void, B | void, C | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): OrderedSet<[T | void, A | void, B | void, C | void, D | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): OrderedSet<[T | void, A | void, B | void, C | void, D | void, E | void]>; zipWith( zipper: (value: T, a: A) => R, a: Iterable, ..._: [] ): OrderedSet; zipWith( zipper: (value: T, a: A, b: B) => R, a: Iterable, b: Iterable, ..._: [] ): OrderedSet; zipWith( zipper: (value: T, a: A, b: B, c: C) => R, a: Iterable, b: Iterable, c: Iterable, ..._: [] ): OrderedSet; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): OrderedSet; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): OrderedSet; } declare function isStack( maybeStack: mixed ): boolean %checks(maybeStack instanceof Stack); declare class Stack<+T> extends IndexedCollection { static (collection?: Iterable): Stack; static isStack(maybeStack: mixed): boolean; static of(...values: T[]): Stack; static isStack: typeof isStack; size: number; peek(): T; clear(): this; unshift(...values: U[]): Stack; unshiftAll(iter: Iterable): Stack; shift(): this; push(...values: U[]): Stack; pushAll(iter: Iterable): Stack; pop(): this; withMutations(mutator: (mutable: this) => mixed): this; asMutable(): this; wasAltered(): boolean; asImmutable(): this; // Override specialized return types concat(...iters: Array | C>): Stack; filter(predicate: typeof Boolean): Stack<$NonMaybeType>; filter( predicate: (value: T, index: number, iter: this) => mixed, context?: mixed ): Stack; map( mapper: (value: T, index: number, iter: this) => M, context?: mixed ): Stack; flatMap( mapper: (value: T, index: number, iter: this) => Iterable, context?: mixed ): Stack; flatten(depth?: number): Stack; flatten(shallow?: boolean): Stack; zip(a: Iterable, ..._: []): Stack<[T, A]>; zip(a: Iterable, b: Iterable, ..._: []): Stack<[T, A, B]>; zip( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): Stack<[T, A, B, C]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): Stack<[T, A, B, C, D]>; zip( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): Stack<[T, A, B, C, D, E]>; zipAll(a: Iterable, ..._: []): Stack<[T | void, A | void]>; zipAll( a: Iterable, b: Iterable, ..._: [] ): Stack<[T | void, A | void, B | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, ..._: [] ): Stack<[T | void, A | void, B | void, C | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): Stack<[T | void, A | void, B | void, C | void, D | void]>; zipAll( a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): Stack<[T | void, A | void, B | void, C | void, D | void, E | void]>; zipWith( zipper: (value: T, a: A) => R, a: Iterable, ..._: [] ): Stack; zipWith( zipper: (value: T, a: A, b: B) => R, a: Iterable, b: Iterable, ..._: [] ): Stack; zipWith( zipper: (value: T, a: A, b: B, c: C) => R, a: Iterable, b: Iterable, c: Iterable, ..._: [] ): Stack; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, ..._: [] ): Stack; zipWith( zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R, a: Iterable, b: Iterable, c: Iterable, d: Iterable, e: Iterable, ..._: [] ): Stack; } declare function Range( start?: number, end?: number, step?: number ): IndexedSeq; declare function Repeat(value: T, times?: number): IndexedSeq; // The type of a Record factory function. type RecordFactory = Class>; // The type of runtime Record instances. type RecordOf = RecordInstance & $ReadOnly; // The values of a Record instance. type _RecordValues | T> = R; type RecordValues = _RecordValues<*, R>; declare function isRecord( maybeRecord: any ): boolean %checks(maybeRecord instanceof RecordInstance); declare class Record { static (spec: Values, name?: string): typeof RecordInstance; constructor( spec: Values, name?: string ): typeof RecordInstance; static isRecord: typeof isRecord; static getDescriptiveName(record: RecordInstance): string; } declare class RecordInstance { static (values?: Iterable<[$Keys, $ValOf]> | $Shape): RecordOf; // Note: a constructor can only create an instance of RecordInstance, // it's encouraged to not use `new` when creating Records. constructor(values?: Iterable<[$Keys, $ValOf]> | $Shape): void; size: number; has(key: string): boolean; get>(key: K, ..._: []): $ElementType; get, NSV>(key: K, notSetValue: NSV): $ElementType | NSV; hasIn(keyPath: Iterable): boolean; getIn(keyPath: [], notSetValue?: mixed): this & $ReadOnly; getIn>(keyPath: [K], notSetValue?: mixed): $ElementType; getIn, K2: $KeyOf<$ValOf>>( keyPath: [K, K2], notSetValue: NSV ): $ValOf<$ValOf, K2> | NSV; getIn< NSV, K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>> >( keyPath: [K, K2, K3], notSetValue: NSV ): $ValOf<$ValOf<$ValOf, K2>, K3> | NSV; getIn< NSV, K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>> >( keyPath: [K, K2, K3, K4], notSetValue: NSV ): $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> | NSV; getIn< NSV, K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>> >( keyPath: [K, K2, K3, K4, K5], notSetValue: NSV ): $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> | NSV; equals(other: any): boolean; hashCode(): number; set>(key: K, value: $ElementType): this & $ReadOnly; update>( key: K, updater: (value: $ElementType) => $ElementType ): this & $ReadOnly; merge( ...collections: Array, $ValOf]> | $Shape> ): this & $ReadOnly; mergeDeep( ...collections: Array, $ValOf]> | $Shape> ): this & $ReadOnly; mergeWith( merger: (oldVal: $ValOf, newVal: $ValOf, key: $Keys) => $ValOf, ...collections: Array, $ValOf]> | $Shape> ): this & $ReadOnly; mergeDeepWith( merger: (oldVal: any, newVal: any, key: any) => any, ...collections: Array, $ValOf]> | $Shape> ): this & $ReadOnly; delete>(key: K): this & $ReadOnly; remove>(key: K): this & $ReadOnly; clear(): this & $ReadOnly; setIn(keyPath: [], value: S): S; setIn, S: $ValOf>( keyPath: [K], value: S ): this & $ReadOnly; setIn, K2: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K2>>( keyPath: [K, K2], value: S ): this & $ReadOnly; setIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, S: $ValOf<$ValOf<$ValOf, K2>, K3> >( keyPath: [K, K2, K3], value: S ): this & $ReadOnly; setIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> >( keyPath: [K, K2, K3, K4], value: S ): this & $ReadOnly; setIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> >( keyPath: [K, K2, K3, K4, K5], value: S ): this & $ReadOnly; deleteIn(keyPath: []): void; deleteIn>(keyPath: [K]): this & $ReadOnly; deleteIn, K2: $KeyOf<$ValOf>>( keyPath: [K, K2] ): this & $ReadOnly; deleteIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>> >( keyPath: [K, K2, K3] ): this & $ReadOnly; deleteIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>> >( keyPath: [K, K2, K3, K4] ): this & $ReadOnly; deleteIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>> >( keyPath: [K, K2, K3, K4, K5] ): this & $ReadOnly; removeIn(keyPath: []): void; removeIn>(keyPath: [K]): this & $ReadOnly; removeIn, K2: $KeyOf<$ValOf>>( keyPath: [K, K2] ): this & $ReadOnly; removeIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>> >( keyPath: [K, K2, K3] ): this & $ReadOnly; removeIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>> >( keyPath: [K, K2, K3, K4] ): this & $ReadOnly; removeIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>> >( keyPath: [K, K2, K3, K4, K5] ): this & $ReadOnly; updateIn( keyPath: [], notSetValue: mixed, updater: (value: this & T) => U ): U; updateIn(keyPath: [], updater: (value: this & T) => U): U; updateIn, S: $ValOf>( keyPath: [K], notSetValue: NSV, updater: (value: $ValOf) => S ): this & $ReadOnly; updateIn, S: $ValOf>( keyPath: [K], updater: (value: $ValOf) => S ): this & $ReadOnly; updateIn< NSV, K: $Keys, K2: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K2> >( keyPath: [K, K2], notSetValue: NSV, updater: (value: $ValOf<$ValOf, K2> | NSV) => S ): this & $ReadOnly; updateIn, K2: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K2>>( keyPath: [K, K2], updater: (value: $ValOf<$ValOf, K2>) => S ): this & $ReadOnly; updateIn< NSV, K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, S: $ValOf<$ValOf<$ValOf, K2>, K3> >( keyPath: [K, K2, K3], notSetValue: NSV, updater: (value: $ValOf<$ValOf<$ValOf, K2>, K3> | NSV) => S ): this & $ReadOnly; updateIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, S: $ValOf<$ValOf<$ValOf, K2>, K3> >( keyPath: [K, K2, K3], updater: (value: $ValOf<$ValOf<$ValOf, K2>, K3>) => S ): this & $ReadOnly; updateIn< NSV, K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> >( keyPath: [K, K2, K3, K4], notSetValue: NSV, updater: ( value: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> | NSV ) => S ): this & $ReadOnly; updateIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> >( keyPath: [K, K2, K3, K4], updater: (value: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>) => S ): this & $ReadOnly; updateIn< NSV, K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> >( keyPath: [K, K2, K3, K4, K5], notSetValue: NSV, updater: ( value: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> | NSV ) => S ): this & $ReadOnly; updateIn< K: $Keys, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> >( keyPath: [K, K2, K3, K4, K5], updater: ( value: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> ) => S ): this & $ReadOnly; mergeIn( keyPath: Iterable, ...collections: Array ): this & $ReadOnly; mergeDeepIn( keyPath: Iterable, ...collections: Array ): this & $ReadOnly; toSeq(): KeyedSeq<$Keys, any>; toJS(): { [key: $Keys]: mixed }; toJSON(): T; toObject(): T; withMutations(mutator: (mutable: this & T) => mixed): this & $ReadOnly; asMutable(): this & $ReadOnly; wasAltered(): boolean; asImmutable(): this & $ReadOnly; @@iterator(): Iterator<[$Keys, $ValOf]>; } declare function fromJS( jsValue: mixed, reviver?: ( key: string | number, sequence: KeyedCollection | IndexedCollection, path?: Array ) => mixed ): Collection; declare function is(first: mixed, second: mixed): boolean; declare function hash(value: mixed): number; declare function get>( collection: C, key: K, notSetValue: mixed ): $ValOf; declare function get, NSV>( collection: C, key: K, notSetValue: NSV ): $ValOf | NSV; declare function has(collection: Object, key: mixed): boolean; declare function remove(collection: C, key: $KeyOf): C; declare function set, V: $ValOf>( collection: C, key: K, value: V ): C; declare function update, V: $ValOf, NSV>( collection: C, key: K, notSetValue: NSV, updater: ($ValOf | NSV) => V ): C; declare function update, V: $ValOf>( collection: C, key: K, updater: ($ValOf) => V ): C; declare function getIn(collection: C, keyPath: [], notSetValue?: mixed): C; declare function getIn, NSV>( collection: C, keyPath: [K], notSetValue: NSV ): $ValOf | NSV; declare function getIn, K2: $KeyOf<$ValOf>, NSV>( collection: C, keyPath: [K, K2], notSetValue: NSV ): $ValOf<$ValOf, K2> | NSV; declare function getIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, NSV >( collection: C, keyPath: [K, K2, K3], notSetValue: NSV ): $ValOf<$ValOf<$ValOf, K2>, K3> | NSV; declare function getIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, NSV >( collection: C, keyPath: [K, K2, K3, K4], notSetValue: NSV ): $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> | NSV; declare function getIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>>, NSV >( collection: C, keyPath: [K, K2, K3, K4, K5], notSetValue: NSV ): $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> | NSV; declare function hasIn(collection: Object, keyPath: Iterable): boolean; declare function removeIn(collection: C, keyPath: []): void; declare function removeIn>(collection: C, keyPath: [K]): C; declare function removeIn, K2: $KeyOf<$ValOf>>( collection: C, keyPath: [K, K2] ): C; declare function removeIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>> >( collection: C, keyPath: [K, K2, K3] ): C; declare function removeIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>> >( collection: C, keyPath: [K, K2, K3, K4] ): C; declare function removeIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>> >( collection: C, keyPath: [K, K2, K3, K4, K5] ): C; declare function setIn(collection: Object, keyPath: [], value: S): S; declare function setIn, S: $ValOf>( collection: C, keyPath: [K], value: S ): C; declare function setIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K2> >( collection: C, keyPath: [K, K2], value: S ): C; declare function setIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, S: $ValOf<$ValOf<$ValOf, K2>, K3> >( collection: C, keyPath: [K, K2, K3], value: S ): C; declare function setIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> >( collection: C, keyPath: [K, K2, K3, K4], value: S ): C; declare function setIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> >( collection: C, keyPath: [K, K2, K3, K4, K5], value: S ): C; declare function updateIn( collection: C, keyPath: [], notSetValue: mixed, updater: (value: C) => S ): S; declare function updateIn( collection: C, keyPath: [], updater: (value: C) => S ): S; declare function updateIn, S: $ValOf, NSV>( collection: C, keyPath: [K], notSetValue: NSV, updater: (value: $ValOf | NSV) => S ): C; declare function updateIn, S: $ValOf>( collection: C, keyPath: [K], updater: (value: $ValOf) => S ): C; declare function updateIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K2>, NSV >( collection: C, keyPath: [K, K2], notSetValue: NSV, updater: (value: $ValOf<$ValOf, K2> | NSV) => S ): C; declare function updateIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, S: $ValOf<$ValOf, K2> >( collection: C, keyPath: [K, K2], updater: (value: $ValOf<$ValOf, K2>) => S ): C; declare function updateIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, S: $ValOf<$ValOf<$ValOf, K2>, K3>, NSV >( collection: C, keyPath: [K, K2, K3], notSetValue: NSV, updater: (value: $ValOf<$ValOf<$ValOf, K2>, K3> | NSV) => S ): C; declare function updateIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, S: $ValOf<$ValOf<$ValOf, K2>, K3> >( collection: C, keyPath: [K, K2, K3], updater: (value: $ValOf<$ValOf<$ValOf, K2>, K3>) => S ): C; declare function updateIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, NSV >( collection: C, keyPath: [K, K2, K3, K4], notSetValue: NSV, updater: (value: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> | NSV) => S ): C; declare function updateIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, S: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4> >( collection: C, keyPath: [K, K2, K3, K4], updater: (value: $ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>) => S ): C; declare function updateIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5>, NSV >( collection: C, keyPath: [K, K2, K3, K4, K5], notSetValue: NSV, updater: ( value: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> | NSV ) => S ): C; declare function updateIn< C, K: $KeyOf, K2: $KeyOf<$ValOf>, K3: $KeyOf<$ValOf<$ValOf, K2>>, K4: $KeyOf<$ValOf<$ValOf<$ValOf, K2>, K3>>, K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>>, S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> >( collection: C, keyPath: [K, K2, K3, K4, K5], updater: ( value: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf, K2>, K3>, K4>, K5> ) => S ): C; declare function merge( collection: C, ...collections: Array< | $IterableOf | $Shape> | PlainObjInput<$KeyOf, $ValOf> > ): C; declare function mergeWith( merger: (oldVal: $ValOf, newVal: $ValOf, key: $KeyOf) => $ValOf, collection: C, ...collections: Array< | $IterableOf | $Shape> | PlainObjInput<$KeyOf, $ValOf> > ): C; declare function mergeDeep( collection: C, ...collections: Array< | $IterableOf | $Shape> | PlainObjInput<$KeyOf, $ValOf> > ): C; declare function mergeDeepWith( merger: (oldVal: any, newVal: any, key: any) => mixed, collection: C, ...collections: Array< | $IterableOf | $Shape> | PlainObjInput<$KeyOf, $ValOf> > ): C; export { Collection, Seq, List, Map, OrderedMap, OrderedSet, Range, Repeat, Record, Set, Stack, fromJS, is, hash, isImmutable, isCollection, isKeyed, isIndexed, isAssociative, isOrdered, isRecord, isValueObject, get, has, remove, set, update, getIn, hasIn, removeIn, setIn, updateIn, merge, mergeWith, mergeDeep, mergeDeepWith, }; export default { Collection, Seq, List, Map, OrderedMap, OrderedSet, PairSorting, Range, Repeat, Record, Set, Stack, fromJS, is, hash, isImmutable, isCollection, isKeyed, isIndexed, isAssociative, isOrdered, isRecord, isValueObject, get, has, remove, set, update, getIn, hasIn, removeIn, setIn, updateIn, merge, mergeWith, mergeDeep, mergeDeepWith, }; export type { Comparator, KeyedCollection, IndexedCollection, SetCollection, KeyedSeq, IndexedSeq, SetSeq, RecordFactory, RecordOf, RecordInstance, ValueObject, $KeyOf, $ValOf, }; immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/000077500000000000000000000000001515165743500242045ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/covariance.ts000066400000000000000000000030631515165743500266700ustar00rootroot00000000000000import { List, Map, OrderedMap, OrderedSet, Set, Stack } from 'immutable'; class A { x: number; constructor() { this.x = 1; } } class B extends A { y: string; constructor() { super(); this.y = 'B'; } } class C { z: string; constructor() { this.z = 'C'; } } // List covariance let listOfB: List = List(); let listOfA: List = listOfB; // $ExpectType List listOfA = List([new B()]); // $ExpectError let listOfC: List = listOfB; // Map covariance declare var mapOfB: Map; let mapOfA: Map = mapOfB; // $ExpectType Map mapOfA = Map({ b: new B() }); // $ExpectError let mapOfC: Map = mapOfB; // Set covariance declare var setOfB: Set; let setOfA: Set = setOfB; // $ExpectType Set setOfA = Set([new B()]); // $ExpectError let setOfC: Set = setOfB; // Stack covariance declare var stackOfB: Stack; let stackOfA: Stack = stackOfB; // $ExpectType Stack stackOfA = Stack([new B()]); // $ExpectError let stackOfC: Stack = stackOfB; // OrderedMap covariance declare var orderedMapOfB: OrderedMap; let orderedMapOfA: OrderedMap = orderedMapOfB; // $ExpectType OrderedMap orderedMapOfA = OrderedMap({ b: new B() }); // $ExpectError let orderedMapOfC: OrderedMap = orderedMapOfB; // OrderedSet covariance declare var orderedSetOfB: OrderedSet; let orderedSetOfA: OrderedSet = orderedSetOfB; // $ExpectType OrderedSet orderedSetOfA = OrderedSet([new B()]); // $ExpectError let orderedSetOfC: OrderedSet = orderedSetOfB; immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/deepCopy.ts000066400000000000000000000057661515165743500263420ustar00rootroot00000000000000import { List, Map, Record, Set, Seq, DeepCopy, Collection } from 'immutable'; { // Basic types // $ExpectType { a: number; b: number; } type Test = DeepCopy<{ a: number; b: number }>; } { // Iterables // $ExpectType string[] type Test = DeepCopy; // $ExpectType number[] type Keyed = DeepCopy>; } { // Immutable first-level types // $ExpectType { [x: string]: string; } type StringKey = DeepCopy>; // should be `{ [x: string]: object; }` but there is an issue with circular references // $ExpectType { [x: string]: unknown; } type ObjectKey = DeepCopy>; // should be `{ [x: string]: object; [x: number]: object; }` but there is an issue with circular references // $ExpectType { [x: string]: unknown; [x: number]: unknown; } type MixedKey = DeepCopy>; // $ExpectType string[] type ListDeepCopy = DeepCopy>; // $ExpectType string[] type SetDeepCopy = DeepCopy>; } { // Keyed // $ExpectType { [x: string]: number; } type Keyed = DeepCopy>; // $ExpectType { [x: string]: number; [x: number]: number; } type KeyedMixed = DeepCopy>; // $ExpectType { [x: string]: number; [x: number]: number; } type KeyedSeqMixed = DeepCopy>; // $ExpectType { [x: string]: number; [x: number]: number; } type MapMixed = DeepCopy>; } { // Nested // should be `{ map: { [x: string]: string; }; list: string[]; set: string[]; }` but there is an issue with circular references // $ExpectType { map: unknown; list: unknown; set: unknown; } type NestedObject = DeepCopy<{ map: Map; list: List; set: Set; }>; // should be `{ map: { [x: string]: string; }; }`, but there is an issue with circular references // $ExpectType { map: unknown; } type NestedMap = DeepCopy>>; } { // Circular references type Article = Record<{ title: string; tag: Tag; }>; type Tag = Record<{ name: string; article: Article; }>; // should handle circular references here somehow // $ExpectType { title: string; tag: unknown; } type Circular = DeepCopy
; } { // Circular references #1957 class Foo1 extends Record<{ foo: undefined | Foo1; }>({ foo: undefined }) { } class Foo2 extends Record<{ foo?: Foo2; }>({ foo: undefined }) { } class Foo3 extends Record<{ foo: null | Foo3; }>({ foo: null }) { } // $ExpectType { foo: unknown; } type DeepFoo1 = DeepCopy; // $ExpectType { foo?: unknown; } type DeepFoo2 = DeepCopy; // $ExpectType { foo: unknown; } type DeepFoo3 = DeepCopy; class FooWithList extends Record<{ foos: undefined | List; }>({ foos: undefined }) { } // $ExpectType { foos: unknown; } type DeepFooList = DeepCopy; } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/empty.ts000066400000000000000000000020531515165743500257120ustar00rootroot00000000000000import { Seq, Collection } from 'immutable'; { // Typed empty seqs // $ExpectType Seq Seq(); // $ExpectType Seq Seq(); // $ExpectType Indexed Seq.Indexed(); // $ExpectType Indexed Seq.Indexed(); // $ExpectType Keyed Seq.Keyed(); // $ExpectType Keyed Seq.Keyed(); // $ExpectType Set Seq.Set(); // $ExpectType Set Seq.Set(); } { // Typed empty collection // $ExpectType Collection Collection(); // $ExpectType Collection Collection(); // $ExpectType Indexed Collection.Indexed(); // $ExpectType Indexed Collection.Indexed(); // $ExpectType Keyed Collection.Keyed(); // $ExpectType Keyed Collection.Keyed(); // $ExpectType Set Collection.Set(); // $ExpectType Set Collection.Set(); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/es6-collections.ts000066400000000000000000000007561515165743500275750ustar00rootroot00000000000000import { Map as ImmutableMap, Set as ImmutableSet, } from 'immutable'; // Immutable.js collections const mapImmutable: ImmutableMap = ImmutableMap(); const setImmutable: ImmutableSet = ImmutableSet(); // $ExpectType Map mapImmutable.delete('foo'); // ES6 collections const mapES6: Map = new Map(); const setES6: Set = new Set(); // $ExpectType boolean mapES6.delete('foo'); immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/exports.ts000066400000000000000000000042621515165743500262640ustar00rootroot00000000000000// Some tests look like they are repeated in order to avoid false positives. import * as Immutable from 'immutable'; import { List, Map, OrderedMap, OrderedSet, Range, Repeat, Seq, Set, Stack, Collection, } from 'immutable'; List; // $ExpectType typeof List Map; // $ExpectType typeof Map OrderedMap; // $ExpectType typeof OrderedMap OrderedSet; // $ExpectType typeof OrderedSet // TODO: Turn on once https://github.com/Microsoft/dtslint/issues/19 is resolved. Range; // $ ExpectType (start?: number | undefined, end?: number | undefined, step?: number | undefined) => Indexed Repeat; // $ExpectType (value: T, times?: number | undefined) => Indexed Seq; // $ExpectType typeof Seq Set; // $ExpectType typeof Set Stack; // $ExpectType typeof Stack Collection; // $ExpectType typeof Collection Collection.Set; // $ExpectType (collection?: Iterable | ArrayLike | undefined) => Set Collection.Keyed; // $ ExpectType { (collection: Iterable<[K, V]>): Keyed; (obj: { [key: string]: V; }): Keyed } Collection.Indexed; // $ExpectType (collection?: Iterable | ArrayLike | undefined) => Indexed Immutable.List; // $ExpectType typeof List Immutable.Map; // $ExpectType typeof Map Immutable.OrderedMap; // $ExpectType typeof OrderedMap Immutable.OrderedSet; // $ExpectType typeof OrderedSet // TODO: Turn on once https://github.com/Microsoft/dtslint/issues/19 is resolved. Immutable.Range; // $ ExpectType (start?: number | undefined, end?: number | undefined, step?: number | undefined) => Indexed Immutable.Repeat; // $ExpectType (value: T, times?: number | undefined) => Indexed Immutable.Seq; // $ExpectType typeof Seq Immutable.Set; // $ExpectType typeof Set Immutable.Stack; // $ExpectType typeof Stack Immutable.Collection; // $ExpectType typeof Collection Immutable.Collection.Set; // $ExpectType (collection?: Iterable | ArrayLike | undefined) => Set Immutable.Collection.Keyed; // $ ExpectType { (collection: Iterable<[K, V]>): Keyed; (obj: { [key: string]: V; }): Keyed } Immutable.Collection.Indexed; // $ExpectType (collection?: Iterable | ArrayLike | undefined) => Indexed immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/from-js.ts000066400000000000000000000017301515165743500261320ustar00rootroot00000000000000import { fromJS, List, Map } from 'immutable'; { // fromJS // $ExpectType Collection fromJS({}, (a: any, b: any) => b); // $ExpectType string fromJS('abc'); // $ExpectType List fromJS([0, 1, 2]); // $ExpectType List fromJS(List([0, 1, 2])); // $ExpectType Map<"b" | "a" | "c", number> fromJS({a: 0, b: 1, c: 2}); // $ExpectType Map fromJS(Map({a: 0, b: 1, c: 2})); // $ExpectType List> fromJS([{a: 0}]); // $ExpectType Map<"a", List> fromJS({a: [0]}); // $ExpectType List>> fromJS([[[0]]]); // $ExpectType Map<"a", Map<"b", Map<"c", number>>> fromJS({a: {b: {c: 0}}}); } { // fromJS in an array of function const create = [(data: any) => data, fromJS][1]; // $ExpectType any create({ a: 'A' }); const createConst = ([(data: any) => data, fromJS] as const)[1]; // $ExpectType Map<"a", string> createConst({ a: 'A' }); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/functional.ts000066400000000000000000000024741515165743500267250ustar00rootroot00000000000000import { get, has, set, remove, update, } from 'immutable'; { // get // $ExpectType number | undefined get([1, 2, 3], 0); // $ExpectType number | "a" get([1, 2, 3], 0, 'a'); // $ExpectType number | undefined get({ x: 10, y: 20 }, 'x'); // $ExpectType number | "missing" get({ x: 10, y: 20 }, 'z', 'missing'); } { // has // $ExpectType boolean has([1, 2, 3], 0); // $ExpectType boolean has({ x: 10, y: 20 }, 'x'); } { // set // $ExpectType number[] set([1, 2, 3], 0, 10); // $ExpectError set([1, 2, 3], 0, 'a'); // $ExpectError set([1, 2, 3], 'a', 0); // $ExpectType { x: number; y: number; } set({ x: 10, y: 20 }, 'x', 100); // $ExpectError set({ x: 10, y: 20 }, 'x', 'a'); } { // remove // $ExpectType number[] remove([1, 2, 3], 0); // $ExpectType { x: number; y: number; } remove({ x: 10, y: 20 }, 'x'); } { // update // $ExpectType number[] update([1, 2, 3], 0, (v: number) => v + 1); // $ExpectError update([1, 2, 3], 0, 1); // $ExpectError update([1, 2, 3], 0, (v: string) => v + 'a'); // $ExpectError update([1, 2, 3], 'a', (v: number) => v + 1); // $ExpectType { x: number; y: number; } update({ x: 10, y: 20 }, 'x', (v: number) => v + 1); // $ExpectError update({ x: 10, y: 20 }, 'x', (v: string) => v + 'a'); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/groupBy.ts000066400000000000000000000022421515165743500262030ustar00rootroot00000000000000import { List, Map, OrderedMap, Record, Set, Seq, Stack, OrderedSet, DeepCopy, Collection } from 'immutable'; { // $ExpectType Map> Collection(['a', 'b', 'c', 'a']).groupBy(v => v); // $ExpectType Map> Collection({ a: 1, b: 2, c: 3, d: 1 }).groupBy(v => `key-${v}`); // $ExpectType Map> List(['a', 'b', 'c', 'a']).groupBy(v => v); // $ExpectType Map> Seq(['a', 'b', 'c', 'a']).groupBy(v => v); // $ExpectType Map> Seq({ a: 1, b: 2, c: 3, d: 1 }).groupBy(v => `key-${v}`); // $ExpectType Map> Set(['a', 'b', 'c', 'a']).groupBy(v => v); // $ExpectType Map> Stack(['a', 'b', 'c', 'a']).groupBy(v => v); // $ExpectType Map> OrderedSet(['a', 'b', 'c', 'a']).groupBy(v => v); // $ExpectType Map> Map({ a: 1, b: 2, c: 3, d: 1 }).groupBy(v => `key-${v}`); // $ExpectType Map> OrderedMap({ a: 1, b: 2, c: 3, d: 1 }).groupBy(v => `key-${v}`); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/index.d.ts000066400000000000000000000001111515165743500260760ustar00rootroot00000000000000// Minimum TypeScript Version: 4.5 /* tslint:disable:no-useless-files */ immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/list.ts000066400000000000000000000200411515165743500255240ustar00rootroot00000000000000import { List, get, has, set, remove, update, setIn, removeIn, updateIn, merge, } from 'immutable'; { // #constructor // $ExpectType List List(); const numberList: List = List(); const numberOrStringList: List = List([1, 'a']); // $ExpectError const invalidNumberList: List = List([1, 'a']); } { // #size // $ExpectType number List().size; // $ExpectError List().size = 10; } { // #setSize // $ExpectType List List().setSize(10); // $ExpectError List().setSize('foo'); } { // .of // $ExpectType List List.of(1, 2, 3); // $ExpectError List.of('a', 1); // $ExpectType List List.of('a', 1); } { // #get // $ExpectType number | undefined List().get(4); // $ExpectType number | "a" List().get(4, 'a'); // $ExpectError List().get(4, 'a'); // $ExpectType number | undefined get(List(), 4); // $ExpectType number | "a" get(List(), 4, 'a'); } { // #set // $ExpectType List List().set(0, 0); // $ExpectError List().set(1, 'a'); // $ExpectError List().set('a', 1); // $ExpectType List List().set(0, 1); // $ExpectType List List().set(0, 'a'); // $ExpectType List set(List(), 0, 0); // $ExpectError set(List(), 1, 'a'); // $ExpectError set(List(), 'a', 1); } { // #setIn // $ExpectType List List().setIn([], 0); // $ExpectType List setIn(List(), [], 0); } { // #insert // $ExpectType List List().insert(0, 0); // $ExpectError List().insert(1, 'a'); // $ExpectError List().insert('a', 1); // $ExpectType List List().insert(0, 1); // $ExpectType List List().insert(0, 'a'); } { // #push // $ExpectType List List().push(0, 0); // $ExpectError List().push(1, 'a'); // $ExpectError List().push('a', 1); // $ExpectType List List().push(0, 1); // $ExpectType List List().push(0, 'a'); } { // #unshift // $ExpectType List List().unshift(0, 0); // $ExpectError List().unshift(1, 'a'); // $ExpectError List().unshift('a', 1); // $ExpectType List List().unshift(0, 1); // $ExpectType List List().unshift(0, 'a'); } { // #delete // $ExpectType List List().delete(0); // $ExpectError List().delete('a'); } { // #deleteIn // $ExpectType List List().deleteIn([]); } { // #remove // $ExpectType List List().remove(0); // $ExpectError List().remove('a'); // $ExpectType List remove(List(), 0); } { // #removeIn // $ExpectType List List().removeIn([]); // $ExpectType List removeIn(List(), []); } { // #clear // $ExpectType List List().clear(); // $ExpectError List().clear(10); } { // #pop // $ExpectType List List().pop(); // $ExpectError List().pop(10); } { // #shift // $ExpectType List List().shift(); // $ExpectError List().shift(10); } { // #update // $ExpectType number List().update((v) => 1); // $ExpectError List().update((v: List | undefined) => v); // $ExpectType List List().update(0, (v: number | undefined) => 0); // $ExpectError List().update(0, (v: number | undefined) => v + 'a'); // $ExpectType List List().update(1, 10, (v: number | undefined) => 0); // $ExpectError List().update(1, 'a', (v: number | undefined) => 0); // $ExpectError List().update(1, 10, (v: number | undefined) => v + 'a'); // $ExpectType List List().update(1, (v) => v?.toUpperCase()); // $ExpectType List update(List(), 0, (v: number | undefined) => 0); // $ExpectError update(List(), 1, 10, (v: number) => v + 'a'); } { // #updateIn // $ExpectType List List().updateIn([], (v) => v); // $ExpectError List().updateIn([], 10); // $ExpectType List updateIn(List(), [], (v) => v); } { // #map // $ExpectType List List().map((value: number, key: number, iter: List) => 1); // $ExpectType List List().map((value: number, key: number, iter: List) => 'a'); // $ExpectType List List().map( (value: number, key: number, iter: List) => 1 ); List().map( // $ExpectError (value: number, key: number, iter: List) => 1 ); List().map( // $ExpectError (value: string, key: number, iter: List) => 1 ); List().map( // $ExpectError (value: number, key: string, iter: List) => 1 ); List().map( // $ExpectError (value: number, key: number, iter: List) => 1 ); List().map( // $ExpectError (value: number, key: number, iter: List) => 'a' ); } { // #flatMap // $ExpectType List List().flatMap((value: number, key: number, iter: List) => [ 1, ]); // $ExpectType List List().flatMap((value: number, key: number, iter: List) => [ 'a', ]); // $ExpectType List List>().flatMap((list) => list); // $ExpectType List List().flatMap( (value: number, key: number, iter: List) => [1] ); List().flatMap( // $ExpectError (value: number, key: number, iter: List) => [1] ); List().flatMap( // $ExpectError (value: string, key: number, iter: List) => [1] ); List().flatMap( // $ExpectError (value: number, key: string, iter: List) => [1] ); List().flatMap( // $ExpectError (value: number, key: number, iter: List) => [1] ); List().flatMap( // $ExpectError (value: number, key: number, iter: List) => ['a'] ); } { // #merge // $ExpectType List List().merge(List()); // $ExpectType List List().merge(List()); // $ExpectType List List().merge(List()); // $ExpectType List List().merge(List()); // $ExpectType List merge(List(), List()); } { // #mergeIn // $ExpectType List List().mergeIn([], []); } { // #mergeDeepIn // $ExpectType List List().mergeDeepIn([], []); } { // #flatten // $ExpectType Collection List().flatten(); // $ExpectType Collection List().flatten(10); // $ExpectType Collection List().flatten(false); // $ExpectError List().flatten('a'); } { // #withMutations // $ExpectType List List().withMutations((mutable) => mutable); // $ExpectError List().withMutations((mutable: List) => mutable); } { // #asMutable // $ExpectType List List().asMutable(); } { // #asImmutable // $ExpectType List List().asImmutable(); } { // #toJS / #toJSON // $ExpectType number[][] List>().toJS(); // $ExpectType List[] List>().toJSON(); } { // # for of loops const list = List([1, 2, 3, 4]); for (const val of list) { const v: number = val; } } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/map.ts000066400000000000000000000255211515165743500253360ustar00rootroot00000000000000import { Map, List } from 'immutable'; { // #constructor // $ExpectType Map Map(); // $ExpectType Map Map(); // $ExpectType Map Map([[1, 'a']]); // $ExpectType Map Map([['a', 'a']]); // $ExpectType Map Map( List<[number, string]>([[1, 'a']]) ); // $ExpectType Map Map({ a: 1 }); // No longer works in typescript@>=3.9 // // $ExpectError - TypeScript does not support Lists as tuples // Map(List([List(['a', 'b'])])); // $ExpectType Map const numberMap: Map = Map(); // $ExpectType Map<"status", string> Map<'status', string>({ status: 'paid' }); // $ExpectType Map<"status" | "amount", string> Map<'status' | 'amount', string>({ status: 'paid' }); // $ExpectError Map<'status', string>({ status: 'paid', amount: 10 }); } { // #size // $ExpectType number Map().size; // $ExpectError Map().size = 10; } { // #get // $ExpectType number | undefined Map().get(4); // $ExpectType number | "a" Map().get(4, 'a'); // $ExpectError Map().get(4, 'a'); } { // #set // $ExpectType Map Map().set(0, 0); // $ExpectError Map().set(1, 'a'); // $ExpectError Map().set('a', 1); // $ExpectType Map Map().set(0, 1); // $ExpectType Map Map().set(0, 'a'); } { // #setIn // $ExpectType Map Map().setIn([], 0); } { // #delete // $ExpectType Map Map().delete(0); // $ExpectError Map().delete('a'); } { // #deleteAll // $ExpectType Map Map().deleteAll([0]); // $ExpectError Map().deleteAll([0, 'a']); } { // #deleteIn // $ExpectType Map Map().deleteIn([]); } { // #remove // $ExpectType Map Map().remove(0); // $ExpectError Map().remove('a'); } { // #removeAll // $ExpectType Map Map().removeAll([0]); // $ExpectError Map().removeAll([0, 'a']); } { // #removeIn // $ExpectType Map Map().removeIn([]); } { // #clear // $ExpectType Map Map().clear(); // $ExpectError Map().clear(10); } { // #update // $ExpectType number Map().update((v) => 1); // $ExpectError Map().update((v: Map | undefined) => v); // $ExpectType Map Map().update(0, (v: number | undefined) => 0); // $ExpectError Map().update(0, (v: number | undefined) => v + 'a'); // $ExpectType Map Map().update(1, 10, (v: number | undefined) => 0); // $ExpectError Map().update(1, 'a', (v: number | undefined) => 0); // $ExpectError Map().update(1, 10, (v: number | undefined) => v + 'a'); // $ExpectType Map Map().update("noKey", ls => ls?.toUpperCase()); } { // #updateIn // $ExpectType Map Map().updateIn([], (v) => v); // $ExpectError Map().updateIn([], 10); } { // #map // $ExpectType Map Map().map( (value: number, key: number, iter: Map) => 1 ); // $ExpectType Map Map().map( (value: number, key: number, iter: Map) => 'a' ); // $ExpectType Map Map().map( (value: number, key: number, iter: Map) => 1 ); Map().map( // $ExpectError (value: number, key: number, iter: Map) => 1 ); Map().map( // $ExpectError (value: string, key: number, iter: Map) => 1 ); Map().map( // $ExpectError (value: number, key: string, iter: Map) => 1 ); Map().map( // $ExpectError (value: number, key: number, iter: Map) => 1 ); Map().map( // $ExpectError (value: number, key: number, iter: Map) => 'a' ); } { // #mapKeys // $ExpectType Map Map().mapKeys( (value: number, key: number, iter: Map) => 1 ); // $ExpectType Map Map().mapKeys( (value: number, key: number, iter: Map) => 'a' ); // $ExpectType Map Map().mapKeys( (value: number, key: number, iter: Map) => 1 ); Map().mapKeys( // $ExpectError (value: number, key: number, iter: Map) => 1 ); Map().mapKeys( // $ExpectError (value: string, key: number, iter: Map) => 1 ); Map().mapKeys( // $ExpectError (value: number, key: string, iter: Map) => 1 ); Map().mapKeys( // $ExpectError (value: number, key: number, iter: Map) => 1 ); Map().mapKeys( // $ExpectError (value: number, key: number, iter: Map) => 'a' ); } { // #flatMap // $ExpectType Map Map< number, number >().flatMap((value: number, key: number, iter: Map) => [ [0, 1], ]); // $ExpectType Map Map< number, number >().flatMap((value: number, key: number, iter: Map) => [ ['a', 'b'], ]); // $ExpectType Map Map().flatMap( (value: number, key: number, iter: Map) => [[0, 1]] ); Map().flatMap( // $ExpectError (value: number, key: number, iter: Map) => [[0, 1]] ); Map().flatMap( // $ExpectError (value: string, key: number, iter: Map) => [[0, 1]] ); Map().flatMap( // $ExpectError (value: number, key: string, iter: Map) => [[0, 1]] ); Map().flatMap( // $ExpectError (value: number, key: number, iter: Map) => [[0, 1]] ); Map().flatMap( // $ExpectError (value: number, key: number, iter: Map) => [[0, 'a']] ); } { // #merge // $ExpectType Map Map().merge({ a: 1 }); // $ExpectType Map Map().merge({ a: { b: 1 } }); // $ExpectType Map Map().merge(Map()); // $ExpectType Map Map().merge(Map()); // $ExpectType Map Map().merge(Map()); // $ExpectType Map Map().merge(Map()); } { // #mergeIn // $ExpectType Map Map().mergeIn([], []); } { // #mergeWith // $ExpectType Map Map().mergeWith( (prev: number, next: number, key: number) => 1, Map() ); Map().mergeWith( // $ExpectError (prev: string, next: number, key: number) => 1, Map() ); Map().mergeWith( // $ExpectError (prev: number, next: string, key: number) => 1, Map() ); Map().mergeWith( // $ExpectError (prev: number, next: number, key: string) => 1, Map() ); Map().mergeWith( // $ExpectError (prev: number, next: number, key: number) => 'a', Map() ); Map().mergeWith( (prev: number, next: number, key: number) => 1, // $ExpectError Map() ); // $ExpectType Map Map().mergeWith( (prev: number, next: number, key: string) => 1, { a: 1 } ); Map().mergeWith( (prev: number, next: number, key: string) => 1, // $ExpectError { a: 'a' } ); // $ExpectType Map Map().mergeWith((prev: number | string, next: number | string, key: number) => 1, Map()); } { // #mergeDeep // $ExpectType Map Map().mergeDeep({ a: 1 }); // $ExpectError Map().mergeDeep({ a: { b: 1 } }); // $ExpectType Map Map().mergeDeep(Map()); // $ExpectError Map().mergeDeep(Map()); // $ExpectType Map Map().mergeDeep(Map()); // $ExpectType Map Map().mergeDeep(Map()); } { // #mergeDeepIn // $ExpectType Map Map().mergeDeepIn([], []); } { // #mergeDeepWith // $ExpectType Map Map().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, Map()); // $ExpectError Map().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, Map()); // $ExpectType Map Map().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, { a: 1 }); // $ExpectError Map().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, { a: 'a' }); // $ExpectType Map Map().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, Map()); } { // #flip // $ExpectType Map Map().flip(); } { // #withMutations // $ExpectType Map Map().withMutations((mutable) => mutable); // $ExpectError Map().withMutations((mutable: Map) => mutable); } { // #asMutable // $ExpectType Map Map().asMutable(); } { // #asImmutable // $ExpectType Map Map().asImmutable(); } { // #toJS // $ExpectType { [x: string]: number; [x: number]: number; [x: symbol]: number; } Map().toJS(); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/ordered-map.ts000066400000000000000000000270161515165743500267610ustar00rootroot00000000000000import { OrderedMap, List } from 'immutable'; { // #constructor // $ExpectType OrderedMap OrderedMap(); // $ExpectType OrderedMap OrderedMap(); // $ExpectType OrderedMap OrderedMap([[1, 'a']]); // $ExpectType OrderedMap OrderedMap( List<[number, string]>([[1, 'a']]) ); // $ExpectType OrderedMap OrderedMap({ a: 1 }); // No longer works in typescript@>=3.9 // // $ExpectError - TypeScript does not support Lists as tuples // OrderedMap(List([List(['a', 'b'])])); } { // #size // $ExpectType number OrderedMap().size; // $ExpectError OrderedMap().size = 10; } { // #get // $ExpectType number | undefined OrderedMap().get(4); // $ExpectType number | "a" OrderedMap().get(4, 'a'); // $ExpectError OrderedMap().get(4, 'a'); } { // #set // $ExpectType OrderedMap OrderedMap().set(0, 0); // $ExpectError OrderedMap().set(1, 'a'); // $ExpectError OrderedMap().set('a', 1); // $ExpectType OrderedMap OrderedMap().set(0, 1); // $ExpectType OrderedMap OrderedMap().set(0, 'a'); } { // #setIn // $ExpectType OrderedMap OrderedMap().setIn([], 0); } { // #delete // $ExpectType OrderedMap OrderedMap().delete(0); // $ExpectError OrderedMap().delete('a'); } { // #deleteAll // $ExpectType OrderedMap OrderedMap().deleteAll([0]); // $ExpectError OrderedMap().deleteAll([0, 'a']); } { // #deleteIn // $ExpectType OrderedMap OrderedMap().deleteIn([]); } { // #remove // $ExpectType OrderedMap OrderedMap().remove(0); // $ExpectError OrderedMap().remove('a'); } { // #removeAll // $ExpectType OrderedMap OrderedMap().removeAll([0]); // $ExpectError OrderedMap().removeAll([0, 'a']); } { // #removeIn // $ExpectType OrderedMap OrderedMap().removeIn([]); } { // #clear // $ExpectType OrderedMap OrderedMap().clear(); // $ExpectError OrderedMap().clear(10); } { // #update // $ExpectType number OrderedMap().update((v) => 1); // $ExpectError OrderedMap().update((v: OrderedMap | undefined) => v); // $ExpectType OrderedMap OrderedMap().update(0, (v: number | undefined) => 0); // $ExpectError OrderedMap().update(0, (v: number | undefined) => v + 'a'); // $ExpectType OrderedMap OrderedMap().update(1, 10, (v: number | undefined) => 0); // $ExpectError OrderedMap().update(1, 'a', (v: number | undefined) => 0); // $ExpectError OrderedMap().update(1, 10, (v: number | undefined) => v + 'a'); } { // #updateIn // $ExpectType OrderedMap OrderedMap().updateIn([], (v) => v); // $ExpectError OrderedMap().updateIn([], 10); } { // #map // $ExpectType OrderedMap OrderedMap().map( (value: number, key: number, iter: OrderedMap) => 1 ); // $ExpectType OrderedMap OrderedMap().map( (value: number, key: number, iter: OrderedMap) => 'a' ); // $ExpectType OrderedMap OrderedMap().map( (value: number, key: number, iter: OrderedMap) => 1 ); OrderedMap().map( // $ExpectError (value: number, key: number, iter: OrderedMap) => 1 ); OrderedMap().map( // $ExpectError (value: string, key: number, iter: OrderedMap) => 1 ); OrderedMap().map( // $ExpectError (value: number, key: string, iter: OrderedMap) => 1 ); OrderedMap().map( // $ExpectError (value: number, key: number, iter: OrderedMap) => 1 ); OrderedMap().map( // $ExpectError (value: number, key: number, iter: OrderedMap) => 'a' ); } { // #mapKeys // $ExpectType OrderedMap OrderedMap().mapKeys( (value: number, key: number, iter: OrderedMap) => 1 ); // $ExpectType OrderedMap OrderedMap().mapKeys( (value: number, key: number, iter: OrderedMap) => 'a' ); // $ExpectType OrderedMap OrderedMap().mapKeys( (value: number, key: number, iter: OrderedMap) => 1 ); OrderedMap().mapKeys( // $ExpectError (value: number, key: number, iter: OrderedMap) => 1 ); OrderedMap().mapKeys( // $ExpectError (value: string, key: number, iter: OrderedMap) => 1 ); OrderedMap().mapKeys( // $ExpectError (value: number, key: string, iter: OrderedMap) => 1 ); OrderedMap().mapKeys( // $ExpectError (value: number, key: number, iter: OrderedMap) => 1 ); OrderedMap().mapKeys( // $ExpectError (value: number, key: number, iter: OrderedMap) => 'a' ); } { // #flatMap // $ExpectType OrderedMap OrderedMap< number, number >().flatMap( (value: number, key: number, iter: OrderedMap) => [[0, 1]] ); // $ExpectType OrderedMap OrderedMap< number, number >().flatMap( (value: number, key: number, iter: OrderedMap) => [ ['a', 'b'], ] ); // $ExpectType OrderedMap OrderedMap().flatMap( (value: number, key: number, iter: OrderedMap) => [[0, 1]] ); OrderedMap().flatMap( // $ExpectError (value: number, key: number, iter: OrderedMap) => [[0, 1]] ); OrderedMap().flatMap( // $ExpectError (value: string, key: number, iter: OrderedMap) => [[0, 1]] ); OrderedMap().flatMap( // $ExpectError (value: number, key: string, iter: OrderedMap) => [[0, 1]] ); OrderedMap().flatMap( // $ExpectError (value: number, key: number, iter: OrderedMap) => [[0, 1]] ); OrderedMap().flatMap( // $ExpectError (value: number, key: number, iter: OrderedMap) => [[0, 'a']] ); } { // #merge // $ExpectType OrderedMap OrderedMap().merge({ a: 1 }); // $ExpectType OrderedMap OrderedMap().merge({ a: { b: 1 } }); // $ExpectType OrderedMap OrderedMap().merge(OrderedMap()); // $ExpectType OrderedMap OrderedMap().merge(OrderedMap()); // $ExpectType OrderedMap OrderedMap().merge(OrderedMap()); // $ExpectType OrderedMap OrderedMap().merge(OrderedMap()); } { // #mergeIn // $ExpectType OrderedMap OrderedMap().mergeIn([], []); } { // #mergeWith // $ExpectType OrderedMap OrderedMap().mergeWith( (prev: number, next: number, key: number) => 1, OrderedMap() ); OrderedMap().mergeWith( // $ExpectError (prev: string, next: number, key: number) => 1, OrderedMap() ); OrderedMap().mergeWith( // $ExpectError (prev: number, next: string, key: number) => 1, OrderedMap() ); OrderedMap().mergeWith( // $ExpectError (prev: number, next: number, key: string) => 1, OrderedMap() ); OrderedMap().mergeWith( // $ExpectError (prev: number, next: number, key: number) => 'a', OrderedMap() ); OrderedMap().mergeWith( (prev: number, next: number, key: number) => 1, // $ExpectError OrderedMap() ); // $ExpectType OrderedMap OrderedMap().mergeWith( (prev: number, next: number, key: string) => 1, { a: 1 } ); OrderedMap().mergeWith( (prev: number, next: number, key: string) => 1, // $ExpectError { a: 'a' } ); // $ExpectType OrderedMap OrderedMap().mergeWith((prev: number | string, next: number | string, key: number) => 1, OrderedMap()); } { // #mergeDeep // $ExpectType OrderedMap OrderedMap().mergeDeep({ a: 1 }); // $ExpectError OrderedMap().mergeDeep({ a: { b: 1 } }); // $ExpectType OrderedMap OrderedMap().mergeDeep(OrderedMap()); // $ExpectError OrderedMap().mergeDeep(OrderedMap()); // $ExpectType OrderedMap OrderedMap().mergeDeep(OrderedMap()); // $ExpectType OrderedMap OrderedMap().mergeDeep(OrderedMap()); } { // #mergeDeepIn // $ExpectType OrderedMap OrderedMap().mergeDeepIn([], []); } { // #mergeDeepWith // $ExpectType OrderedMap OrderedMap().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, OrderedMap()); // $ExpectError OrderedMap().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, OrderedMap()); // $ExpectType OrderedMap OrderedMap().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, { a: 1 }); // $ExpectError OrderedMap().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, { a: 'a' }); // $ExpectType OrderedMap OrderedMap().mergeDeepWith((prev: unknown, next: unknown, key: unknown) => 1, OrderedMap()); } { // #flip // $ExpectType OrderedMap OrderedMap().flip(); } { // #withMutations // $ExpectType OrderedMap OrderedMap().withMutations((mutable) => mutable); OrderedMap().withMutations( // $ExpectError (mutable: OrderedMap) => mutable ); } { // #asMutable // $ExpectType OrderedMap OrderedMap().asMutable(); } { // #asImmutable // $ExpectType OrderedMap OrderedMap().asImmutable(); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/ordered-set.ts000066400000000000000000000143251515165743500267760ustar00rootroot00000000000000import { OrderedSet, Map } from 'immutable'; { // #constructor // $ExpectType OrderedSet OrderedSet(); const numberOrderedSet: OrderedSet = OrderedSet(); const numberOrStringOrderedSet: OrderedSet = OrderedSet([ 1, 'a', ]); // $ExpectError const invalidNumberOrderedSet: OrderedSet = OrderedSet([1, 'a']); } { // #size // $ExpectType number OrderedSet().size; // $ExpectError OrderedSet().size = 10; } { // .of // $ExpectType OrderedSet OrderedSet.of(1, 2, 3); // $ExpectError OrderedSet.of('a', 1); // $ExpectType OrderedSet OrderedSet.of('a', 1); } { // .fromKeys // $ExpectType OrderedSet OrderedSet.fromKeys(Map()); // $ExpectType OrderedSet OrderedSet.fromKeys(Map()); // $ExpectType OrderedSet OrderedSet.fromKeys({ a: 1 }); // $ExpectError OrderedSet.fromKeys(Map()); // $ExpectType OrderedSet OrderedSet.fromKeys(Map()); } { // #get // $ExpectType number | undefined OrderedSet().get(4); // $ExpectType number | "a" OrderedSet().get(4, 'a'); // $ExpectError OrderedSet().get(4, 'a'); } { // #delete // $ExpectType OrderedSet OrderedSet().delete(0); // $ExpectError OrderedSet().delete('a'); } { // #remove // $ExpectType OrderedSet OrderedSet().remove(0); // $ExpectError OrderedSet().remove('a'); } { // #clear // $ExpectType OrderedSet OrderedSet().clear(); // $ExpectError OrderedSet().clear(10); } { // #map // $ExpectType OrderedSet OrderedSet().map( (value: number, key: number, iter: OrderedSet) => 1 ); // $ExpectType OrderedSet OrderedSet().map( (value: number, key: number, iter: OrderedSet) => 'a' ); // $ExpectType OrderedSet OrderedSet().map( (value: number, key: number, iter: OrderedSet) => 1 ); OrderedSet().map( // $ExpectError (value: number, key: number, iter: OrderedSet) => 1 ); OrderedSet().map( // $ExpectError (value: string, key: number, iter: OrderedSet) => 1 ); OrderedSet().map( // $ExpectError (value: number, key: string, iter: OrderedSet) => 1 ); OrderedSet().map( // $ExpectError (value: number, key: number, iter: OrderedSet) => 1 ); OrderedSet().map( // $ExpectError (value: number, key: number, iter: OrderedSet) => 'a' ); } { // #flatMap // $ExpectType OrderedSet OrderedSet< number >().flatMap((value: number, key: number, iter: OrderedSet) => [1]); // $ExpectType OrderedSet OrderedSet< number >().flatMap((value: number, key: number, iter: OrderedSet) => ['a']); // $ExpectType OrderedSet OrderedSet().flatMap( (value: number, key: number, iter: OrderedSet) => [1] ); OrderedSet().flatMap( // $ExpectError (value: number, key: number, iter: OrderedSet) => [1] ); OrderedSet().flatMap( // $ExpectError (value: string, key: number, iter: OrderedSet) => [1] ); OrderedSet().flatMap( // $ExpectError (value: number, key: string, iter: OrderedSet) => [1] ); OrderedSet().flatMap( // $ExpectError (value: number, key: number, iter: OrderedSet) => [1] ); OrderedSet().flatMap( // $ExpectError (value: number, key: number, iter: OrderedSet) => ['a'] ); } { // #union // $ExpectType OrderedSet OrderedSet().union(OrderedSet()); // $ExpectType OrderedSet OrderedSet().union(OrderedSet()); // $ExpectType OrderedSet OrderedSet().union(OrderedSet()); // $ExpectType OrderedSet OrderedSet().union(OrderedSet()); } { // #merge // $ExpectType OrderedSet OrderedSet().merge(OrderedSet()); // $ExpectType OrderedSet OrderedSet().merge(OrderedSet()); // $ExpectType OrderedSet OrderedSet().merge(OrderedSet()); // $ExpectType OrderedSet OrderedSet().merge(OrderedSet()); } { // #intersect // $ExpectType OrderedSet OrderedSet().intersect(OrderedSet()); // $ExpectError OrderedSet().intersect(OrderedSet()); // $ExpectType OrderedSet OrderedSet().intersect(OrderedSet()); // $ExpectType OrderedSet OrderedSet().intersect(OrderedSet()); } { // #subtract // $ExpectType OrderedSet OrderedSet().subtract(OrderedSet()); // $ExpectError OrderedSet().subtract(OrderedSet()); // $ExpectType OrderedSet OrderedSet().subtract(OrderedSet()); // $ExpectType OrderedSet OrderedSet().subtract(OrderedSet()); } { // #flatten // $ExpectType Collection OrderedSet().flatten(); // $ExpectType Collection OrderedSet().flatten(10); // $ExpectType Collection OrderedSet().flatten(false); // $ExpectError OrderedSet().flatten('a'); } { // #withMutations // $ExpectType OrderedSet OrderedSet().withMutations((mutable) => mutable); // $ExpectError OrderedSet().withMutations((mutable: OrderedSet) => mutable); } { // #asMutable // $ExpectType OrderedSet OrderedSet().asMutable(); } { // #asImmutable // $ExpectType OrderedSet OrderedSet().asImmutable(); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/partition.ts000066400000000000000000000073621515165743500265750ustar00rootroot00000000000000import { Collection, List, Map, OrderedMap, OrderedSet, Seq, Set } from "immutable"; abstract class A {} class B extends A {} { type Indexed = Collection.Indexed; type Keyed = Collection.Keyed; type Set = Collection.Set; (c: Collection) => { // $ExpectType [Collection, Collection] c.partition((x) => x % 2); }; (c: Collection) => { // $ExpectType [Collection, Collection] c.partition((x): x is B => x instanceof B); }; (c: Keyed) => { // $ExpectType [Keyed, Keyed] c.partition((x) => x % 2); }; (c: Keyed) => { // $ExpectType [Keyed, Keyed] c.partition((x): x is B => x instanceof B); }; (c: Indexed) => { // $ExpectType [Indexed, Indexed] c.partition((x) => x % 2); }; (c: Indexed) => { // $ExpectType [Indexed, Indexed] c.partition((x): x is B => x instanceof B); }; (c: Set) => { // $ExpectType [Set, Set] c.partition((x) => x % 2); }; (c: Set) => { // $ExpectType [Set, Set] c.partition((x): x is B => x instanceof B); }; } { type Indexed = Seq.Indexed; type Keyed = Seq.Keyed; type Set = Seq.Set; (c: Seq) => { // $ExpectType [Seq, Seq] c.partition((x) => x % 2); }; (c: Seq) => { // $ExpectType [Seq, Seq] c.partition((x): x is B => x instanceof B); }; (c: Keyed) => { // $ExpectType [Keyed, Keyed] c.partition((x) => x % 2); }; (c: Keyed) => { // $ExpectType [Keyed, Keyed] c.partition((x): x is B => x instanceof B); }; (c: Indexed) => { // $ExpectType [Indexed, Indexed] c.partition((x) => x % 2); }; (c: Indexed) => { // $ExpectType [Indexed, Indexed] c.partition((x): x is B => x instanceof B); }; (c: Set) => { // $ExpectType [Set, Set] c.partition((x) => x % 2); }; (c: Set) => { // $ExpectType [Set, Set] c.partition((x): x is B => x instanceof B); }; } (c: Map) => { // $ExpectType [Map, Map] c.partition((x) => x % 2); }; (c: Map) => { // $ExpectType [Map, Map] c.partition((x): x is B => x instanceof B); }; (c: OrderedMap) => { // $ExpectType [OrderedMap, OrderedMap] c.partition((x) => x % 2); }; (c: OrderedMap) => { // $ExpectType [OrderedMap, OrderedMap] c.partition((x): x is B => x instanceof B); }; (c: List) => { // $ExpectType [List, List] c.partition((x) => x % 2); }; (c: List) => { // $ExpectType [List, List] c.partition((x): x is B => x instanceof B); }; (c: Set) => { // $ExpectType [Set, Set] c.partition((x) => x % 2); }; (c: Set) => { // $ExpectType [Set, Set] c.partition((x): x is B => x instanceof B); }; (c: OrderedSet) => { // $ExpectType [OrderedSet, OrderedSet] c.partition((x) => x % 2); }; (c: OrderedSet) => { // $ExpectType [OrderedSet, OrderedSet] c.partition((x): x is B => x instanceof B); }; immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/range.ts000066400000000000000000000002251515165743500256470ustar00rootroot00000000000000import { Range } from 'immutable'; { // #constructor // $ExpectType Indexed Range(0, 0, 0); // $ExpectError Range('a', 0, 0); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/record.ts000066400000000000000000000045641515165743500260430ustar00rootroot00000000000000import { List, Map, Record, RecordOf, Set } from 'immutable'; { // Factory const PointXY = Record({ x: 0, y: 0 }); // $ExpectType Factory<{ x: number; y: number; }> PointXY; // $ExpectError PointXY({ x: 'a' }); const pointXY = PointXY(); // $ExpectType Record<{ x: number; y: number; }> & Readonly<{ x: number; y: number; }> pointXY; // $ExpectType number pointXY.x; // $ExpectError pointXY.x = 10; // $ExpectType number pointXY.y; // $ExpectError pointXY.y = 10; // $ExpectType { x: number; y: number; } pointXY.toJS(); class PointClass extends PointXY { setX(x: number) { return this.set('x', x); } setY(y: number) { return this.set('y', y); } } const point = new PointClass(); // $ExpectType PointClass point; // $ExpectType number point.x; // $ExpectType number point.y; // $ExpectType PointClass point.setX(10); // $ExpectType PointClass point.setY(10); // $ExpectType { x: number; y: number; } point.toJSON(); // $ExpectType { x: number; y: number; } point.toJS(); } { // .getDescriptiveName const PointXY = Record({ x: 0, y: 0 }); // $ExpectType string Record.getDescriptiveName(PointXY()); // $ExpectError Record.getDescriptiveName({}); } { // Factory const WithMap = Record({ map: Map({ a: 'A' }), list: List(['a']), set: Set(['a']), }); const withMap = WithMap(); // $ExpectType { map: Map; list: List; set: Set; } withMap.toJSON(); // should be `{ map: { [x: string]: string; }; list: string[]; set: string[]; }` but there is an issue with circular references // $ExpectType { map: unknown; list: unknown; set: unknown; } withMap.toJS(); } { // optional properties interface Size { distance: string; } const Line = Record<{ size?: Size, color?: string }>({ size: undefined, color: 'red' }); const line = Line({}); // should be { size?: { distance: string; } | undefined; color?: string | undefined; } but there is an issue with circular references // $ExpectType { size?: unknown; color?: string | undefined; } line.toJS(); } { // similar properties, but one is optional. See https://github.com/immutable-js/immutable-js/issues/1930 interface Id { value: string; } type A = RecordOf<{ id: Id }>; type B = RecordOf<{ id?: Id }>; const a: A = null as any; const b: B = a; } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/repeat.ts000066400000000000000000000003101515165743500260260ustar00rootroot00000000000000import { Repeat } from 'immutable'; { // #constructor // $ExpectType Indexed Repeat(0, 0); // $ExpectType Indexed Repeat('a', 0); // $ExpectError Repeat('a', 'b'); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/seq.ts000066400000000000000000000003251515165743500253440ustar00rootroot00000000000000import { Seq } from 'immutable'; { // #constructor // $ExpectType Indexed Seq([1, 2, 3]); } { // #size // $ExpectType number | undefined Seq().size; // $ExpectError Seq().size = 10; } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/set.ts000066400000000000000000000126311515165743500253520ustar00rootroot00000000000000import { Set, Map, Collection } from 'immutable'; { // #constructor // $ExpectType Set Set(); const numberSet: Set = Set(); const numberOrStringSet: Set = Set([1, 'a']); // $ExpectError const invalidNumberSet: Set = Set([1, 'a']); } { // #size // $ExpectType number Set().size; // $ExpectError Set().size = 10; } { // .of // $ExpectType Set Set.of(1, 2, 3); // $ExpectError Set.of('a', 1); // $ExpectType Set Set.of('a', 1); } { // .fromKeys // $ExpectType Set Set.fromKeys(Map()); // $ExpectType Set Set.fromKeys(Map()); // $ExpectType Set Set.fromKeys({ a: 1 }); // $ExpectError Set.fromKeys(Map()); // $ExpectType Set Set.fromKeys(Map()); } { // #get // $ExpectType number | undefined Set().get(4); // $ExpectType number | "a" Set().get(4, 'a'); // $ExpectError Set().get(4, 'a'); } { // #delete // $ExpectType Set Set().delete(0); // $ExpectError Set().delete('a'); } { // #remove // $ExpectType Set Set().remove(0); // $ExpectError Set().remove('a'); } { // #clear // $ExpectType Set Set().clear(); // $ExpectError Set().clear(10); } { // #map // $ExpectType Set Set().map((value: number, key: number, iter: Set) => 1); // $ExpectType Set Set().map((value: number, key: number, iter: Set) => 'a'); // $ExpectType Set Set().map( (value: number, key: number, iter: Set) => 1 ); Set().map( // $ExpectError (value: number, key: number, iter: Set) => 1 ); Set().map( // $ExpectError (value: string, key: number, iter: Set) => 1 ); Set().map( // $ExpectError (value: number, key: string, iter: Set) => 1 ); Set().map( // $ExpectError (value: number, key: number, iter: Set) => 1 ); Set().map( // $ExpectError (value: number, key: number, iter: Set) => 'a' ); } { // #flatMap // $ExpectType Set Set().flatMap((value: number, key: number, iter: Set) => [1]); // $ExpectType Set Set().flatMap((value: number, key: number, iter: Set) => [ 'a', ]); // $ExpectType Set Set().flatMap( (value: number, key: number, iter: Set) => [1] ); Set().flatMap( // $ExpectError (value: number, key: number, iter: Set) => [1] ); Set().flatMap( // $ExpectError (value: string, key: number, iter: Set) => [1] ); Set().flatMap( // $ExpectError (value: number, key: string, iter: Set) => [1] ); Set().flatMap( // $ExpectError (value: number, key: number, iter: Set) => [1] ); Set().flatMap( // $ExpectError (value: number, key: number, iter: Set) => ['a'] ); } { // #union // $ExpectType Set Set().union(Set()); // $ExpectType Set Set().union(Set()); // $ExpectType Set Set().union(Set()); // $ExpectType Set Set().union(Set()); } { // #merge // $ExpectType Set Set().merge(Set()); // $ExpectType Set Set().merge(Set()); // $ExpectType Set Set().merge(Set()); // $ExpectType Set Set().merge(Set()); } { // #intersect // $ExpectType Set Set().intersect(Set()); // $ExpectError Set().intersect(Set()); // $ExpectType Set Set().intersect(Set()); // $ExpectType Set Set().intersect(Set()); } { // #subtract // $ExpectType Set Set().subtract(Set()); // $ExpectError Set().subtract(Set()); // $ExpectType Set Set().subtract(Set()); // $ExpectType Set Set().subtract(Set()); } { // #flatten // $ExpectType Collection Set().flatten(); // $ExpectType Collection Set().flatten(10); // $ExpectType Collection Set().flatten(false); // $ExpectError Set().flatten('a'); } { // #withMutations // $ExpectType Set Set().withMutations((mutable) => mutable); // $ExpectError Set().withMutations((mutable: Set) => mutable); } { // #asMutable // $ExpectType Set Set().asMutable(); } { // #asImmutable // $ExpectType Set Set().asImmutable(); } { // #toJS / #toJJSON // $ExpectType number[][] Set>().toJS(); // $ExpectType Set[] Set>().toJSON(); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/stack.ts000066400000000000000000000113511515165743500256620ustar00rootroot00000000000000import { Stack } from 'immutable'; { // #constructor // $ExpectType Stack Stack(); const numberStack: Stack = Stack(); const numberOrStringStack: Stack = Stack([1, 'a']); // $ExpectError const invalidNumberStack: Stack = Stack([1, 'a']); } { // #size // $ExpectType number Stack().size; // $ExpectError Stack().size = 10; } { // .of // $ExpectType Stack Stack.of(1, 2, 3); // $ExpectError Stack.of('a', 1); // $ExpectType Stack Stack.of('a', 1); } { // #peek // $ExpectType number | undefined Stack().peek(); } { // #push // $ExpectType Stack Stack().push(0); // $ExpectError Stack().push('a'); // $ExpectType Stack Stack().push(0); // $ExpectType Stack Stack().push('a'); } { // #pushAll // $ExpectType Stack Stack().pushAll([0]); // $ExpectError Stack().pushAll(['a']); // $ExpectType Stack Stack().pushAll([0]); // $ExpectType Stack Stack().pushAll(['a']); } { // #unshift // $ExpectType Stack Stack().unshift(0); // $ExpectError Stack().unshift('a'); // $ExpectType Stack Stack().unshift(0); // $ExpectType Stack Stack().unshift('a'); } { // #unshiftAll // $ExpectType Stack Stack().unshiftAll([0]); // $ExpectError Stack().unshiftAll(['a']); // $ExpectType Stack Stack().unshiftAll([1]); // $ExpectType Stack Stack().unshiftAll(['a']); } { // #clear // $ExpectType Stack Stack().clear(); // $ExpectError Stack().clear(10); } { // #pop // $ExpectType Stack Stack().pop(); // $ExpectError Stack().pop(10); } { // #shift // $ExpectType Stack Stack().shift(); // $ExpectError Stack().shift(10); } { // #map // $ExpectType Stack Stack().map((value: number, key: number, iter: Stack) => 1); // $ExpectType Stack Stack().map((value: number, key: number, iter: Stack) => 'a'); // $ExpectType Stack Stack().map( (value: number, key: number, iter: Stack) => 1 ); Stack().map( // $ExpectError (value: number, key: number, iter: Stack) => 1 ); Stack().map( // $ExpectError (value: string, key: number, iter: Stack) => 1 ); Stack().map( // $ExpectError (value: number, key: string, iter: Stack) => 1 ); Stack().map( // $ExpectError (value: number, key: number, iter: Stack) => 1 ); Stack().map( // $ExpectError (value: number, key: number, iter: Stack) => 'a' ); } { // #flatMap // $ExpectType Stack Stack().flatMap((value: number, key: number, iter: Stack) => [ 1, ]); // $ExpectType Stack Stack().flatMap( (value: number, key: number, iter: Stack) => 'a' ); // $ExpectType Stack Stack().flatMap( (value: number, key: number, iter: Stack) => [1] ); Stack().flatMap( // $ExpectError (value: number, key: number, iter: Stack) => 1 ); Stack().flatMap( // $ExpectError (value: string, key: number, iter: Stack) => 1 ); Stack().flatMap( // $ExpectError (value: number, key: string, iter: Stack) => 1 ); Stack().flatMap( // $ExpectError (value: number, key: number, iter: Stack) => 1 ); Stack().flatMap( // $ExpectError (value: number, key: number, iter: Stack) => 'a' ); } { // #flatten // $ExpectType Collection Stack().flatten(); // $ExpectType Collection Stack().flatten(10); // $ExpectType Collection Stack().flatten(false); // $ExpectError Stack().flatten('a'); } { // #withMutations // $ExpectType Stack Stack().withMutations((mutable) => mutable); // $ExpectError Stack().withMutations((mutable: Stack) => mutable); } { // #asMutable // $ExpectType Stack Stack().asMutable(); } { // #asImmutable // $ExpectType Stack Stack().asImmutable(); } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/tsconfig.json000066400000000000000000000005121515165743500267110ustar00rootroot00000000000000{ "compilerOptions": { "target": "es2015", "module": "commonjs", "sourceMap": true, "strict": true, "types": [], "noEmit": true, "lib": [ "es2015" ], "baseUrl": "./", "paths": { "immutable": ["../../type-definitions/immutable.d.ts"] } }, "exclude": ["node_modules"] } immutable-js-immutable-js-fa7d047/type-definitions/ts-tests/tslint.json000066400000000000000000000003241515165743500264130ustar00rootroot00000000000000{ "extends": "dtslint/dtslint.json", "rules": { "no-var": false, "prefer-const": false, "no-useless-files": false, "no-duplicate-imports": false, "no-relative-import-in-test": false } } immutable-js-immutable-js-fa7d047/type-definitions/tsconfig.json000066400000000000000000000004441515165743500251270ustar00rootroot00000000000000{ "compilerOptions": { "target": "es2015", "module": "commonjs", "sourceMap": true, "noImplicitAny": true, "noImplicitThis": true, "strictNullChecks": true, "strictFunctionTypes": true, "lib": ["es2015"], "types": [] }, "files": ["immutable.d.ts"] } immutable-js-immutable-js-fa7d047/website/000077500000000000000000000000001515165743500205665ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/website/.eslintrc000066400000000000000000000000621515165743500224100ustar00rootroot00000000000000{ "extends": ["next", "next/core-web-vitals"] } immutable-js-immutable-js-fa7d047/website/next-env.d.ts000066400000000000000000000003111515165743500231170ustar00rootroot00000000000000/// /// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. immutable-js-immutable-js-fa7d047/website/next-sitemap.config.js000066400000000000000000000005101515165743500250020ustar00rootroot00000000000000const { getVersions } = require('./src/static/getVersions'); /** @type {import('next-sitemap').IConfig} */ module.exports = { siteUrl: 'https://immutable-js.com', generateRobotsTxt: true, outDir: './out', exclude: [ '/docs', ...getVersions() .slice(1) .map(version => `/docs/${version}/*`), ], }; immutable-js-immutable-js-fa7d047/website/next.config.js000066400000000000000000000004701515165743500233470ustar00rootroot00000000000000module.exports = { reactStrictMode: true, trailingSlash: true, output: 'export', // Issues while upgrading from next 11 to 12. // Possibly related to typescript parser missing ? // TODO Waiting the migration from tslint to eslint to reactivate this eslint: { ignoreDuringBuilds: true, }, }; immutable-js-immutable-js-fa7d047/website/public/000077500000000000000000000000001515165743500220445ustar00rootroot00000000000000immutable-js-immutable-js-fa7d047/website/public/Immutable-Data-and-React-YouTube.png000066400000000000000000007501041515165743500305350ustar00rootroot00000000000000PNG  IHDR8[|5zTXtRaw profile type exifxuQ g`|``< :~ 8R#8}WBLY /dv)t= w=$b㡰U"bI$:%۰e̻`D{7/%]h|Abzjd9R n{Z+
}תShjG.j7ZEqkUjj:vN*e3yynr|r Ri0 KcF BsoB{X*Y ǿ9MpYOئE^Kx1-,{uSyy |$yO0Tg؎") N|#b{UV Huf&**%楨u^HI~h" G:xw uxS t8-5O,A3"F ]svLvm_^b<ڦ N_|)ɣu9u_O$MS6El %Ƿ;:9soN/ۧo]v/ 40H, 'ow?b'|H:tG6BqFf&[;J7?q'L4yߧ~:mfϙ;o~aт/Yٲ+U|+]Ն-lݶ}]ݷ>rX'O3gV;_uW~~~_n߹{o䏧Ϟşw{Tg-Qh6oNSi yI&ehJJ0 h8'^eܬL:Gӧgkz"ZINIפIT$NN6SXeT(d!P,cBr*+bhe\(!bi1 &G)V*z+%2H.%B1#0`a*z+J\$  e@q#!8$*{Bo5j!DQuݸL<51ZoБiIC?z#UڌЏichF(5G2M\1D Kq%܁S= Tc0EqBȞQKprf=ӀΛDa᥷8ȻT◿~%p+8D|j`uVbCj8 |a](LAR})=y7RxB<|h`7]ւ.mf|Ql = L CK+)&y `)l;h>)(c,#9Y({bTs9 m/4Wy xr=ROq!}Ún8]y;e05!/2 '(Щ}[[J3B9seVb+zA-~~T8T]֍HTX֢lL|.ŻUZ;T3hC#unp^Hg=FXp,r<ϷvvN.nn{xxzӡM{ϙ6v(ڡCC}4ܸ5qF&{N?:'7ol 'O̝_`%-_5%_]~Ư7me=P~hʼnSߝ<ҕ]u5=~v˰xoš[q*6tjB/ Ѫ,L+!2:1Ld7 S)/iWgiTXtXML:com.adobe.xmp Screenshot w{[bKGD pHYs  tIME }ctEXtCommentScreenshot IDATxvHҭm8hȪ>sֹ+_Uf$pAM}r)(fnoV?1dNBA9#x`0k^5/f FY#x`0k^5/f FY#x`0k^5/f FY#x`0k^5/f FY#x`0k^5/f FY#x`*oC!#pW@hiYlTxgy cЋ/8*%Z{_wyWpo~sN;fq0cAp_C- frJ|i79AzpIhb/09c| ;eGi;dcp#Fn Qiv Dvx>|"eD9ծ^_fĵqތ Ɏ  xY^gO5\y8m?\5t^Ӷt_z\Jߴ=u݂A/^q ǪC?mLJ]V1졥ᷟ}ډqlO#`?!VoCu"'Y<&'`Ɯ`,'LMj(bƜ`,'bkD_ > T8"][8!^fI!y-c'fkY u( y07|m/S=x4)c\p \θPe^Kp^Pڍѷ>9{ļzPI4% 8/Ya%b,;(v2/U3D8:‰Ožx. …ooT`}dJ¼ϧ}1I58 OL< Nl=^p~ǚ/FO0]BLl7 ph\*JƬ'P=pS7.q#fߎc7d /qL:sǗiE0x.5`|+>K0c۩{_s;F%.`WcrQ͊<1dni6v]ߘdC//\ڹZp]WcJ^g،_;ҧj4In}r?;|tb0s?+/|[ss}&h_wms?61qn0K Ȁc2>/"{`ןqَ? *3Ep*Ǻqw h-OemnlnOpn'٠ 0Rb?|{$ 7gqJ.NF83' \fGݎGٍ"u ߇ p]Ejq|$:AknW9Db| Ì.;js%sz]!'|<#/\ !׌oRuvS|«s#Ε(׷foXݶ~7,~q?kW_ w\s[7}ˀw3XV!R-mG `/V<**߉<͌0i\t9C޽1sv9)bx8Wb]s]q\xc5z1\G~Wn\|z~\nxpXN;r>}` Z/z:Ι_ 9 s=7NA L|Pɘ pAfLav9%ڴ3{u<--!^a ] J^(t>o.O7eúĴe{x#.?\<#^APºkd}hivNo:uI{C/ ? GA(x.pL2Ax\D|8k7?`-XKoXN8/1ܸf=Uz=(\*`@S TzXzP"v\܅ۧˁ*1 _^0/ +oЋcN'B!dZoXvβt^0.n?7,G/ ԎN}zwx// x"GPpr>%6̷?On,/;/~xa]q{o=˶q X^xe` I]qprn7űX0xp:x8kA;|+0k4v~.a/8|>Tx' > C^f_pdŜ?pn⌷~__ fN-Np)v|_ϝRi8pkΦ~cҹ"pa mpm@G ~\ E5sOpAl׸>cQ):GyowG ~SD\LX˾gE ؟A8Iגּ?9|ir5qȄ^8 ~n!'գMBNE8n< E ;V<xN/̉ 0%Te2g^؇o vƎ^c <X@ϱu0.<#/fx}k8Tx8 _O>!0ه4 >\|hiP|:1w,/ ߃`&ߵ$ǟY ̈_]2]nsA/zDOx^9xzug{u/ף}-{mwcC#7p'WN&7+U'գww'oOVj4klߞLhe7~w{tٓm<z`ǠK'|~O]}cO^Ʊsp3g_KaO˟yȨT6Kmkn>˼_002ߖ0Im{c خlTC8q`l]]b/X|rIO=y~\㓞i>yGL]I2+SޗLo2M:B2SNlo&I~ g)/|{2p!z*,kn 8㚿~.k6-TLiP哣F sIħ'gg^g5vJEos$'kۡ&[Mo_8l},D`e̗KYʻu!͟99b=v*=LCD6TZU*%4Η4'ngIk#7߫j75.rT? 8gSCJyۗew j1[tz4װ:±Ip6?]0mCic=ܧ恾h=i[鹒SfrEʭ Z&Pe^ʣOi g8\Rp/-6M'yp>ưkdυ^_5tȣ'%+y/WPrR(c>ӆ,_{>>Hd%J{)GT'Mac~1xc|s;hH.:>OFzt Y2QYd xnͥ!8pRAva <)$y$W=reR9'Kc'%}}J垔\hI.)P>L1uA!,Yȭ Bk]rH+%W]OJˇ?{RsnhG%hް |Z5Vt?!\<&9ln`P[}]frUJQY7cP u-V:TuR[dse\է^}߫;S?`|n~U}6~+]RRPR9, J M`s9o6=blF8ޤ*eIzII1,FYkS6nFeffѨm!r5^^r1Wt%]R%]^)$+ c ^Sp^AAo}/JF.W\Q`ü`1y.C)IcU1]eVJuS]jejE4Q aC``Q e1iiT OARr窯m7NNN[F9붽V/\1^.7 !?' 0[nmQ5yr8cルrc7'|MIAaWnYZU UBuPXjjbH`ws`?3cR'.R;mTo}Spn~Q&y//U:yN>Wx)cdGYXkZ疔Je+投*SX5ZZZ^-\Z1jSrQZA C4+9cFY?y7}Ryiwtѯ?߿uQ Iں<2ϭC'aen32˱tT/'Küx\_8~oN*WRMYjZm檚B(TkyR2+s0G+u2e lKk7=Xu sJK[ź]6y^Fۇ;mګߨ72iʅ1z~=? Mm,gw.Wd},CEnbkjŪ^ZuT51]BqD/UjCvx/@jW9 <<W}u>tJ^iPVklCJs-v(68oe IDAT`'ZB+h^f JeԻ))*YY+UՕJbfTU7 uC1 LRR ɑJⷧ':D]wtMg0s+V{)ԕA;Uwwԧq,Td"kwνl/yJIIrseW\ZF׷W]k}zvPRp ǰ}$ ݖn6KlXJ d2b‚([C\g>Dv2m/uVlw,]]Un'9Est5VUnVZ]-KeWfYjB%)pMB'ct{9ۤ 5eZ)a>X#MbfrWÔa(PժVZ,6 ˕Km~/GV{% $^sjGxi]˵QRT/-[]߬t}k]߬U/*UmTiq9{+;RieRBdmPTjb^!{=%ߪO&CcŲgãujB 6kkWe>2STQURJ[+URYHUj%J6+!~qɫOz%f:Ok>i||¤e'H (HU-*)6w~^zE!i+z"hH*W_'%w%Kַm+VZ,uuϿn[]_\7Az喇\AeIRmL׻W?--lAWf^ [1\Ƀ,Ui2:j\ms߽LQ3zxq.qli#)6U]u}۟k:*V& +̥0gk/s&*ۋ}˳vʜ`.BUԲjմ -K?wJ^IJ}'\z60oe7>̭N;u[JZ[~kmIRsci[h#[g7i8ݸLJa0)ƠfusU]J]c\ j[y&U*DƝ pÏ;[^|IܯUz. rUZURlՕ[+v%<{icXL'e&KZ4) զ&<cݽRj˕vw퀇{; 5}VsA9S!YF5F?׺yu2Ja+\*n0TqJ9҆t/&A){$ARQݶSꓔ~67>-L8i/3Fk.!;K^|;x40+1lko3.w[T(WRLȕKԗ^XsX/X>Y9rUJ]:Y^_7huݪYbJ!WZ˟zlgs7JV8z Ƃn!(A S, RO-8`xGN7pׄ^Mse:?:ߑJWRTdbVk5kUT-B*$r%y[ڐsٿwtvK֕8TPeRB#ՒW{%OR)uvڍmk]}+B%իJW7K׵n~^i}T U.o6ң6T{6K_ٮkX~f:|myr<0:hUŨuý5}{PPJzzVVVhRl K!Wvnvo紋~<{T=g6 $\'WʂB0hZW0S;uVzuF}J AJ zxks{Rץ^{%2oW׵n\vvU+4&tVCI%ҟgq5ُkgܥU}.Wbծj~V7] % ^U;QBa4^JlΌ$deCJUPb}fRlX*6Td|"0)wlN:*)^L Uh۪;v:44t 9;|l"Je,VWn~\ǿntubU+6A CЕ2M®cgo{u͝> jU&)e4NJgRkZ}y;WՓ=ސd&"ދ |.=xhܔ\ݔBJYjb}jR[uԏ]9zv乸&iI.g/9 rD}BNmJRoud%]0g8g^*K,yXEunex׍׭e-z˕`?Q  NOw~>`㞠/5J"jZn^ww]}I2V>=xA٧\r <WF^jjWKRmWݥP/x m{`]׶f%fz![nSջ)ZiYIsl`2o{NnR?uuU*WJ|ixV=^;6ڸwK.iX9FxL1-m7+Я_Qu}zR4qx̽.GJŐ>IKɂjQhK5f!Mz׮8oWi 7ض's O5}+V[j/+ F1̓66))v,w#zyu4,wyRrJW7kfv!奺-Ǿn*.{n yCɅ]vE}[tdX5K].R]AwJƶg>44z8q!>4\7rjfzRݮF 7TwM[gO~{{Z߷X͞q̴k\fII9\̡`TUR7w FJFkv)ZZϻHr/*+yJW7+Z<^UmϏ?AA%3s*L MP^ǕNwʡil򙗷}2c$oD> x;w~e7wwl ,TUXiV.esv<U]El`X7{7,ga ~n{ݵ3=iD&Y=~ VՕߨKy#3Yin޷jrNyǝ.1+Yzk]z r,)ѣ~`~(|ێD9G>.9W)j7Kuݍ^o% 2E%/GvQ/0O.P5BuT\jR ꓩʌIu˦ ˌVG)Ow+Hѷi +Lέ W ]߬m^)2urUrKazNr\ |"lz:/.JVRBUW^z]~Vy92ҟ}i(+\]n& bݪijKJI1ϟ Yi]} .soYY0ۨvUkubݨj,kne.=jroʼ׊vdMdBYTZZ_\-%+Q˟A /-GxLleeUشBY(6,>|욞f/m"?Hy[?\$BP,+mﴭ$yYnW][ɗnOk# {%UuPZZ^-XuB^Y1b14g6痿hO]JN+CN6Z~szQiIJ[wI\egóayx®䥺˪ΰaW.FsI?~üo21YXT0{%$ =4bJ$NA2GO.vG(A"̒b]]TZZ-K5Fa^[I']9?#G}tw羛G-ĨA͢jZZ5Z]%,/{!x#Z,}3m$W~\J:>>G+bJRUe1aΨƯѣJr%+1nbzrjU8WޛvqdYωL$%y5ݾkU- IDATdFy?Dp5yl 1dl}4.}N޿֕[Ak 0n2 0 0 c?)=cA.1 LjweG[n w|ތ[ZVTPkҷ(1p%ڰXCW]zN.]B=yтn"x N4UMq|6\8S\gi'YpŜbwcGn\I_b 0v00 0 0t*`bUդ"zCl k(}&PSTn0'W.9S U3WEHDlUUif5ͼnr.qEVkg,X?G_kKvFj&k|>cjEha j'YDF# 6 0n&xaaq#6ŁpUv w$`gER"FqIM/)RJ[:BUn8}"NַJ%׋*5uU:?h}R&}Q4|oLEy?:'&~α`n?<{ɻ_4/ ^aaa-sĝsRDWg)fԸ1ZcTZS/s'vw^RqE|5s/z睠}ȵz-f4MMT%0YK~zѫr*@Dq^сW55Pn;<ؘ<-4d,Xgc{ ^aaau^B܆xBq+|U}8G'8sKɱ"@+\~_ܛrW8qin/4٢UFRm}^+'=福fV354MM"aKԭ9d|OsXa ^aaa;i-y yCeK?Wk徉"T5x$;s>^UxOӾܤ"y ~Ft"|9EyfVk ^{>gt2-!ڰxp+ղk0]ÿnaeaaKfwWG|rntrceލđa&S@:F.;|UK/|[kWw*M%wTW@$TStty鵘7mU ak" U]QwC_&U-|Yin>b%00 0 0=eq *ëDs]:D"ʹ!cԡT߯~EM/="}\H}io5;Eq_+!^̗ie9OT^L SUYM{FD'"[aXqKP 0 0 ؿ#"YFN" bW_KAdRttg-=&(]硏,}C)y}A{K$9䲳< ~pQ(dvF 1RRP՞p!Nд=F䞯&~O?e7pҫm+&xaaWGc4MaE!ntx\q*gSn%?Wa[59 Ӥ& q۵Jl96~p*~umz+1*n<D[uȔsܾO+]+VSU%p0HC}C(g2L$׾H5 [o0&xaaΔ*ׄL^gKHU&QaӍRl)_E:g*M$W~0m(~O>۷$:)gfs۶FZއDSq}a_kB&/k@jn~ 8*>ρ[{Dum kx0}>3caaa\Inr;kxqyⲈ"#wTi_$"8 dpȕ͹"zɖrF+( ]sQ%&/gs/¤+cYӮ evXCø!r]5aaa|@dJdBFwe5vs%»ɆgL\1bcsH(nS(]s}{ad]֎{;KN(dt] B|Cĸ%}-ᆱj&\.eaaƞo>*Ou׎,vE{wxdQf z_/z}U6dHMdr^~(6 \[jktJ=Ͻ+W\^0گ_r[b0=W7 0 0 ノt?!8xD< %:6s0N|抾j} ]`SL7o)$QnKV+kݮ"(&2u 0nOgecaaa|oAh)5\$R7Jn| u޻ʭPke%]q޼%Wi7FKk@U&ܢξ6vaǶ 0 0 ハ s~%ZHvK ήb g ZֻU.Wrf&. _ev޹h^xĮಭia -$P'Hk6=Mn!Kẍ"vVfa|&=68 0 0 ø$O(Sz9G_v.޿!Tw&q8Yyl]R}di<2Ϣf|z0lbq&xaaqcb`lBlxGzw~l[Xom=FvVM/3^{YwNBƶI VrVH{:bg&~X?M2./0 0 0nށ-=)6fD*Wuûz99@θ(+`/lcȅnRz&4"_45Jz똾 xio+a|f 0 0 ^=XxpuybVpSU4%Rv$mtg2u 5Bla|ZPYaa$1 ;&ҎKuk3)۶z߹|mO1S"8l;;`٪[zT5V'/Q| x^)O vYT@:[NF?ޤ/hrތea};4 ^aaa52[\+IM:UȹVI1+v߹pEْ"ygDw0/Lq#-IQUI)GN?( JhTTWdha]ƻ`aaao"veESl4c[lhK)R*Ew7w)ķ7E)f1 )pַxgﲉ]28t:Yhzkpߩ:v}gTȿ7Kfa|%b B0 baaa{F) U" %(nغE(> 5Wg7^D/F>7*-QILX;m?^'&zz-j ,;k|w'/v `aƵ" 0 0 ctTwKSDq@##;uoT`?G=F1ٺ#0/y%L$sО:K !HL!8Dgkڝ}6q\e UAnEB.^Tg/0k}a ^aaa^HhDHD]f'=uzΫ^k{P+^vu_L)@(ѓ)L\0NQ 17O7TFDz)^]hێ&TYhL|QȖk=.CMT)DݴĘ.N| cba\/&za ^aaa)[Z\C)Eb"=N~dCH/}%rZ쯶BN\\8&P[}s@~3_=SRB6zW9i}lEz*\yJϓAUKU!A 0bX"!0ò!*~Oh"a eaa @c!С^$\dPv6߂m!]g)c M+R GTrU:lDJZdv.!Q28<[Ғ6 c 0&xaaL7R ZR "RK.7WJKqd ZuH}'}[eO\! ^!$6)_#8D @OiItF].pS[ c}7 øXaaa$nMTP1C ;4F%\_Hyc-.tyKn{M c飀Κ|M  !t&6% C+nTbQS,dݴtos*5 ø3_&ڰ5`-/0 0 0T5J&uΧ;΋s]i rK{Pͱsur줦OܒaSKktN^mttm 8\;f{%1,Hvإ,Bfm;bzDvZ' ø 5To øaXaaa{L]^J$ZbגBj5Jᮛhn*.z[>e%GNjĘc'ch %D"}qN "FUK6)$éJ*s<.4c$ nh /Ų1#Y\!?ƵDmlq00 0 0E"zpF4R)HYPщ\F [ݶ8~.(v )M}CGZ4W Lz>WYrCtmdhׁnBjJ hm,-*C "xm:ҭ]_Ë-|y``gEa4L2 0 0 c)NbSq9/ER]K]^)":֊r#zA>w7uwCl {¶-b _bh &b([5 }CNC6:H286g^./+t_zw %xm90$d?Yu[H""aYZV'kڻh\4T"\QϙzkE/옼3Bo#Niׁӓ U]t[.v0 0w/0 0 0):$hץ@ B7*_=3rN~=ˢ o_n + x(uӲNcvM ]髄H‘ ~+W%5A@Y:O98Yp: 4< _Q>O䴿30Vή|oLveh;[+ 0 -ņq.V0 0 0<ݮW* MZB&kbAcc'rdYċFvO4E  41nu .7eWis3P&GYNW,O֬O[MD Ze-C lQ0gǕ5mC#tmbuauڲ:ج^*\DVEƆ 0/ ^aaa-29ϵ4&WltZ4$F NZߖI2tkS~y,zM9^]mVv]CHv ݳAeWT!$֫ӓ ˓ UGGiF28&}܆6k":uMB Ю\kaD iqt| I`00 ^aaa܈cߡnQл5a*u"hZz+?`gҟFˎ->m|ѕ^H nVvC -h^~~t+7SH<*D*BU`jYnجI*.ʱznxLwWr+vPՋV}W`yfuk)UUu  b_; 2aaa7! Rխi7ԛuIUs@Dkw9enwis]Etl7+6;DPklwߥn_g(Ca;^Q¬9`1h1˃߁j` g#rT%*H][GV-UG$?C/k?M0llܺ]Q[=X\VL2 0 0 pknm`PT&o4K>vۏ{G?:eF\ԑ†n] h# v{>mK7SGGS,5wrjOs%y(c n:J/a}o,v1zhA"MdlYYӮ;:j%=  c{o|^ø  0 0 m褠RB7E"ZB? #;G sW0vp1m޻J|HqxiI݆YӮsw B#RuĮ//yOmJ/PU5٢7G|{5} m1GD!}^: `2a̞}3n y:q]C3WtI]bsڱ|xtChtw/\΍67M0.nK^eeaa>N6uLbCڑ"h'tyы,z#R~,G uv.}Ap%k'Gq)b[ꄰYQi# ^^*F 7U߶%"e]M(Ced4|ݷ|w;=}'3kYYDŽRUb%G\LE/aO4?dȞyyt:dpv n:h,׼~7O;R\++5g+_tNehq='Eeaa^3݋^SGجTK\j9\]ē4{-RYQ]]r᳏}lrr$oZLC^5tS֧K6%aFC q0F'N%)V8M[]8quMs{lQ*e-aH%.׻ӄss^tr~yv\o IDAT~Vsm|^ݖ:^G:x4 MlV7yuɚnHbW*6g}xU"d7^Řeaa9.{3D/ci nM:=A|f(J#jvդ;H ?ěe%)ak4FRhK)n4w(kp3N着ݻC?WG;#i`vj@54Q1HRMo|:ݑi*>~קo{"Q)E=]Y>)'oVlN;RQQ!]x 4%j5qs(Yq!&xaaqS}"LH vR\UqB Wܰ>Aˢ$Qi#kv ]L%Qs/P5rIrc8!|ȣǏ}ܽ˼ip^+SIMTE5Bj&e'( (if(%:t:RAO:Pz]>WUqT]y/Y-6Atr<-0i4.|ma>baaa{tSX/EܖH hJMs1kjS9N}\ɕ=z/P)61 [#}aҔښtaҔc%Esxxw}Ǐ?#_E"Cx\v3#Q"H90,N߷ۧo_;!uӹ,忱n"fXx7ް^ndaL\5䌠f|Ab"aa?&xaa\ZB K)q5y,"P ӪFJh$9teoo=Jaִ%6c^J]vv])ԠEO{-=Aϼu!w'<~OckhIGƉ;4]#0ej#'s%3 .Eg@t/'MZZ բcd!xg)_7yudCh /Uqx903 0 c10 0 0=jCQpxASgUUsuf[.&!! Iq9}^S/]O2 T IG޶ flt%.n4]P.SKzK7G8)蜧<9gŮ&#"dK HnM*1\+!ưhao1O)ལ*{.~-O>ɓ'/BH].ŋˑ 4t)lioH$nHT%PE$n%"hι4t3^UQUz!=?xZDptt!e_}j!qr|o>_?ų}:soڻ G8*i$b~S"w'`gOMECtgYɯϕ~ /G'E%c<.UxWe O܅a&v}Xea 0 0 ?dxmNfыPB(ف]xWD3t{gky mX X„h$Yў^9yC^5NH% '%°&q~׫g%6m9{_7|ӧOo>}J͹ҺZDqR\!<]qr??gٯxs6qI5mh`TM|'8H,2d;3[+zG^Bu("vDAήnX/[޼<߯yղ%l5 Kz'\L2 0ێ ^aaaHdZIձA@XCs73HR nK{Bt֦ҭލ5JƖn==as aD N#b #zkw^J1(ꊻwr]=~ӧOyg?s|C씔 * )D !ptwNSjyȕ8m\=D~]D/,q(vQi%_dՒ4@dyj|׉`㹖Q0 0 10 0 0o3gPM$-5D1G9OkFtyS\%G)ls碽ph"uR==a}M۵9ť\IaCa9m1#/}>xȏ#?>waX #) snH)^x??~=(JR!:XWtˢoJBUT×?DێT-89iTud c 1*ݺdëx7+bK*>2]L00 0 00 0 0MV]'e3.J $!+a[iBK3?j&3AUP\vԨ!Wqe;P& GDR %*]Wt%ڮqkK;Bh}( ]EjC=zG}hfF/t(ٴ-Ǽz=~_~_˗m[D*E"ԤH1:x11*!*]H]pxw}D:_}"8E/&Fg]sE@TB %_׼% 1I.#IF5aa|&xaaqيSӼ͜c %ʞ|"R uڔ@#N 8&xD<%*U2β2bFD>a|듗fW5(^k^n;|x#RYSJlƽ{Z]O<5㫝wUxL% ׿͛7t]'f8<Q#)6)2^.uQ*Uq,JsHetXb8wwa9-ymÿ|˿^ ǯwv9= ]aa ^aaa-$h[ӡ֖q9O$HQ# ]U娜 W\ljER+Zc?ng;]Q]NT0 ^!E5.u#dgf<]roq MMP5{<~~Çܿihb]eRbYK={Ƴg?O?/prrryJEt)Qk TnF$R l"'l-]۱:]{|qx4g %T\vJ" Y%4 wLˤx6X:NuGrVHudx|7_pr=*sD_a9T&Lꠊ)_aa 0 0dlMA&ǓcՋrQ}HH渾,u$#jtxDKu6I `9bWS~͗D깋Ķ&vI]NP"WRSEODHAѤvNwIҷ.[iť\fKspp|>'_ÇꫯstqH9@miW^oO˯tmGݕ1>+}t_v6"M$cCSt_rtg젦_{pTdX4d:cJLA/hn=IV%#]B[G_1/zë,7l֑IEcOh(զE9^1}]^\fr2 0>GN>>s.&xaa*OdvskgƖ;beBjE;Ga^;c^ $"(NQ>;q$=O"G(K֌ uXtؗcLu'yc+s@:F*ɂhbFٸ Z vm]K3NOnȅϭW^vo ),Tx??Ji.YW xgϞO?믿s^|f&v!%KK]07%ICuѭu_}s8`q8C*E*H*1Kŝ3=WQx{ ^;VdL'J+hD<<^jנ]S~Ok6Hx\̑^kX ]e~m^"H^Km~&?ad`aa>I_|1ndP1 AŃJcT,f3hGO))%D="-S i4Qޗlm߲\(J|H].  -5DJI!r O*ΝD];DjQ .hh8yH:]D\ll2=l0ҫ.o28 {I5{{SW_1_,hz+OJwlCu?_~?_WVCa>RSQ\/"Vֽ pDD!-&qEDM n m"uPqJpGd,.Xm9H+ncyn)/V]/WH/| xi>n*V4nƬZ8[SҭiG$х<5_P<_ۣD+s:j4nU@a-/0 0=@>fF7>߸[ΙzyMlgmŬp`bVQW9MID-uTKlNu$qs]=zģGx)OiRyc5G5W+~?ε~w/N'o>Wl_g1V#I19$BJ,uMSrpgьA{5RU@,WMGv/vɨ}MM؎ IryM$*Er88xW٥%z -8^8K !'Xgl6ӣa0 ø2&xaa\w>kObρIM/pb19:\Xif1rI#D7R$%АuU+ QoUwEpZRjE 88[Iʛ%:NSM1B Ŏеt6xIԢZhQyŋQTxc'DLgIr3tH}^~eb૯*{fdL5!Jzͫׯy駟駟x +Rxs "1:}}QCJRJ^EEuױYuY|}ђ;_q#̙-j)1,O\+!SA";(aƜrRQϨ\CR3k8ZܣF:\[:IIqΗ8HaNįuKaa{ ^a"ӿ45 y}>;JDl"f_yecT$[ ] 6l@LQ4jF\F| "Mq8T e4g;2|bWϟ!(EJ#v-v" Ey*稐,v88ijiBRikTlySH^`!~-O<ѣG<~ptl?F/PiT躎ׯo?3^|1mNLD\v۝ >ލ:TһbFBcB7&nY9z EM343EgG\}+(.&iR/~(Qd ]̂lP*03!Y,#*7cF | OkM ;aZw=?$ibaƾba-A.xMn0ژ3l?AUM]qsxpbN̆:_Qw!hWK՚6$ zpHUpUfr7 fxB*^1 (ڪ%eJHCK:k 5]l5fCۮ%( hW7TTTJT8&f .ŭtֿRy;w<~wfQDdx՚~7 !6ӳof L$&FR m`MzMX9hv(61q0 0 /0[^a|&tg1J㇗u|3͘/4;m eԑخj]$ QW|gjWdKWʤO_+`,@h,H1BKYJ#%wW)BVIZqxdJu|1'H10HF;ME|Eܽ{{#?~ģǏz]:]cd`IՊS^x_oƿo~7^zzΣaW4{Ќ IDAT]ca/ &2 uPW9'iH -ִɊŒS*|#TW_I>в 3')̃YVJQI1HPm]B`nY7vT GW0xWQZPwOY}  HI˼-K>pWS$aq#00 #ou";6vgƧdkN5wO]lUU4 ٌbFS׹$߄ RGք)=%+RPBH6DuDT|qz5TuCU,;}}3Z7])UZBMvv,tiИvXİqANru%&0AFH%E L}LDb' , R qd!u9DWV9W./q |~!bT8bU/--˂c;j 8;=VuaY'&RBd8zb5quuksF&:l[v/Ze8r%...pyyKsl6DQ )r:p3!%͉V9Xr]$ZUj\1@6 %Hy%U|Gn1X3wygs]Rs@H++_iLɻC*B"d<8KP}v{{#l*n2<}ZI>{"9   (m&3A? C_<_=j%z1UQyllC$18DD"c('82F` 31Kf3iT#vS嵡)-gy ^@"KAGH]\brL7J2`TK8:F{8::3z=t:8S*;B8J!V1>~>777iP2JGŬG̻ok Y:a*BofU^y%ԢW )4T@(MYǺr"vE%ek:,>T3U_la` n`u 9``,bphn kSQ,Î%J}KAg" H" P7ԴLOD/k=B(w<#x9[9$280D$Bw!uׂ+pJ~*+#dic[Ed!vՖ O;sA\WTIw*YD( a6,qI \ׅȄǪR"JQ^2_L*-BENNNpxxh`aq>c+O׺0 l0Nq}ucx{{z.˲/r|JoI?1fΨƔ?PwCflI&-I]Nd歄TPV]?2-ɻ*Y>u)6,g+&s4mtZ=0x>bepl0\.qssQqg/$rAA|$xAnnc ~t!~`B Fcyq}= B *~. BQDoxр iZ˪0SMr aơTԞXט \ű3D~#$w]r)ۘR"}D^,ːŌ q!wjuz]NNOpzzwa4h6qd/T.!V%Ǹ?+gs,WKd1`qnb O/܊^yrq-xcA{r&P=1̡P]KhUhJU+/M!$<H u|x^gdBrwYe9h6 X,hZ|r L$|)E|ɉJA Pcg&5AJ1tF8lG}>CKD1HYVOܱ(+}Jj(aDJp&P$1&LҘϓ\TYe_/k#Tq˂p]Uیs^_ITm |/FHq b^raXհ7h89>po^Zfjuϋ]"ː)5Vnnnpyy[a>! CdiTN9JR4 򱑏5q~[%QrH&9%џ<L U}:Rx,]epi"Y?`:b8fY7%n,m s|D-#KArL;X)YK3gZ“^NJ8.lA8cFg\υ gHҴh<]L5lF@)޿l3VB KOL&Ƈb2QsVe) g5+]/(wjh6aB+0Yw[E'gi Ǣ9J l'S3q )!2{slm̅fOfuj0 1/XuEc&ML׫]A{BAb}ګ&{>]coSR,[vrwW]#Tl ![)Rq#K3dB++c˲x_=X;bq9Ącz ,LM.%(0}) lۆA8я}Ej~D%ȴQ'8>>`0@݆8z\1#TWA`X`:8& 8V @8߰!@,O4㓂C>f}QrqS+?(w@IAjbbvz^Y:N]Dp Ym$|*7)AAQ/ ET!ы sL1WH|jegWgXVfAa0!8A&2T,`OQ鱸JrԛR*4^ا?>g#_C}q88=ų|1ppp {<m1ߏo=9q~~+\__c٨,U+N_%y|N؞a`k&XHȅB^aji'W.0+wZiKSxQ4K!dLdoX<`*R&%P۱tvq||~eQ掬|dB Cwww?[l[ap $Fc٦驢Ž,K>`6b6cZbVòxJ- Z v^6r2kI$u/tJ !~ H" ~*zAnuR\\^W^,˪>T+E(B'2ㄚ|d0gΰ_>EݠB,ۍ8i,S(neYkѰxlQǩ}Yb 4weSJ\,|܂_i+G888@Gj AkLJ4ME1nooq}u+ߏ1LYoTݷi͆7=_p Ȋ*u9!8ȸ):6ESq>:V%&B:s?9? qeA{;/ .@ DAb esl8ܔe$AW\0z{箳SNVEޕlˮ4_&m=Y$IX9COvt VnG9|Ch4_oG jUvweY \.q}}jBGȲ̈˚l5$LHcZqabdNZV3Tdm[>!&14MvjD45GM@AGFVAw"KEnmQVyʝ8j~b D !~dsmIH$In&ur-nryuy,CňH&ʕ7z,Xlkg1ppfWc@EabZ777)6^ Gӂ)QA2֤Zl6ht:zp"~2`q ja0 K3d|\#itǗe7Ay ^ _0zM_A߅,M(j1|q8C#88"JW"/ƛUH$Ie8r8<_qA)q,Et\m+A{ s3@ ^nqvvNV]w%OYvhH Qb>>|xt0 ՘+x3e^H^yXqvGc\-q~n  @Vdԩ.y@MAy ^ wCK7oAK܁3m|WQ۶hyʅ!4AEQ褐ƒOB$I(:n]9]Kx^qx G%~hwq`.zqrr#c0`7(juYYbl^o0Npuum]77Xo@<3*'?T^F|Ŧԟ+Jku9VB$׍¹l6vlZqQ?c/_纋& "H" ^M7 lہh4La꒐U7T8./]OޜΣ %Faqo\^Fз8SLq̿YH*u{ \4  8==p8D^{TԢ)si$MX,qss Ͽjz¼/cp BV.$zڔ|)+ ib^c6a>cXq]ӭK A^G`0bs_0xEMAEg,'(tFA|+y|{T\QsLUR1uJ D&I):Me)s3U/Mui3N:uHi"F4hRF l|߁899VUr LT]LUȐ15Vqqq˫K\^^b< B$IIJΗY4wҋq"f"CXטNL&}VKV58f ͻˣRd&>5~N+j* PEӋfZ1?y%FEA|--_CDVS.nkN2$i v$ISްbd'MTY۲ฎig#@iJye" BN/#IF2m1cb8gggh4B45Ǥqp V4EFX׸%puy|ibjҢﱘٍ|ξy9#4dXθ77hZp]W2af NI W>G:D\nS АEij+fzYHxPLAMv8_;(CAUR"ͲJaHRU6n2BV([٬84UW¢yX%[sq6pttwgxz6Q1{Iij9%I LM?Ç=RBlcb噘aG\XB SkXb2c y=~&TBuXnU,m  ^џ}F^A"PLY˶5j5۲b+&(cc=d.v9(gu]bVOCq)/AǦL篣je ;qz..F{#1s IDAT  j,g'D*)% bt2 onpssۛ[+DQŮ߹/T9 Yabnjyy'yDTsun#l6,KlkӅѨ  ^<)XmDmOA,MLG6\5u<σe[;sKPBU/0{*OՔT1xL/mbM\ !DwiϘ9 '''8:s]BV=0DрmΊP ^^nBע' Eցr"{kD/ 0 %"иzdز+#MSDrwEQ8KQfFBTѐq+W@Bu]X2_~7!K*M3%*eϿ8hZ888!p|t`Vu:~)L(n1N1Lpuu a<c^!IRiJ6{bK/>"SЇk8cZV)砎4b6l6vf)f4  ? 8(Ef AQ8g-]zD !*Qzqd2+$Ey#~L9P4Q8 y#~˲ aKJ q0 pxx gggv}߸ov lbWY!LS#77jB:Ng) ;oEzj%)qXbrf ۶a[V)!mۨh fXeL7ؒT+  {! O:AGj$]8Wvy=(1BKσj#;ߕ" {QW<=3TVh`qK;8nFs]i($E ,5RqVWq899j6p!2dY4Mlp{{kt:b@ZǠzjj^} Ysu} Cf3x8VѝO]AA ^AoEA _VE\ųm}8y7Kur'R.vq,uuVB@ 0 !mkO,-䑑!/MSdY$3u|8:> jh468EOiKs0!2yl>=>~1ͱX,g ЃNTA7wkcR'DR)13_1LnДűa0``<c<c 2u5@.  / ?7\Ӌ x{nW!]<׃yFRs2R*Q&ؕ&bO Gk &%% };r!y_9ZLRI:_GD{`4a0mXeH>.tN5>q!+ƞ?$\KL>1 gzd^ij5v׎X~^V i" ªs  BAğEPrzQ+ 5檪%vذjp=K@+т1e"Bl[AL׋7e"H^@Q{HRJdY(9,+; )˲>F0s]Z 8>>!0Qa[vHB5V/0DO&-0ccUβ\쪔%Nf$gןpdz6t6EojBAVmB@a9jZ62ݭ   6H"Co7^AEB(|ʜqVQu]:֮p5KH&L!2a m0 &)`\DSj\*jI\Uqc¶mx;wz1FIS/wdYvl6jpvv~F$kmD&%4#ps}b, ]( ml6Su }8 d ܲyZz!%,nļ.ӱ"AA ^A*qS~6ȪF-b`U}|%x9.,2 3i!DJ4KE0DRO'\T&V ڈ.vJu)04Wȳmdq 3#pnt0v G?7w`'H *WWWfXWHĈeQEjĒ$zl6x|=)0PB,>ATƸdR(qj&I4M11GWO!Եˋ1VCnooh4E97UA4u NjҞoCE &;qr1Xr ygCK \HHE4)]"hv%ȕǿ2$I!ǁmF`0zV Nnnzz<&P@:,vrl65qssV+a,xu [-Mj JtZ\mh#cq$??:yA/*ٯ>X?u)G/ ^Aij7" ^ӕE]zeȘL $i"Be&zUjn=\TUJS<^ di(L##~k6p8DC15/Eȥium6;?V6 4E% ڲ4M}.)9 %8✣Vc8bb Rs]'rt^A|=?k7G1IO_zxEA|vןVcAop3 /h}x۱b\GzXB"8FI 2ڝD[D_U7v.=J-u]_CGBѨRfu}$B`^c\>|%nooq8 $Er\&_[>\,ߒT1ϱX,`6jvH}0L`"2je4_`N1AEAk)1&Aks mQvD$ K#@Di.YkY>M #+BU?-m[mZ{{{8==NOOvh4ņ_eQ)a<5.//qwwxj$N*1R>^~]7/AEe(T.=ARc|-z {Vn^mEfHT9R%IOt=jwj @A6|bEضuy2|ضD qR i#xEWG>>.Ʊ#*n%|ml?޽ PmB$xf?2$qj[Ǐ%Ȳ G1OF]]D?`M[H)Gj,N,K<<w.M_A@AķX߰3mm's6&EF?\tO^U>\ׅmz(bʵ,3WYVDH~BZF>)[,T{]g)R<)qf^'''_b4qӏy)+o˼?qu)2cbOӗ]+jo׃ j|>l6C^Gل㺕ͤeY}ԯ˝(Jy}ܢ  @A6K#Qm+ܾ~⇞c?1ضu{>j~ {rБzI(+a5p&/]Ȣxb Qy},/9lG[mGGG899pFl?2ƴNBH4M& lpwwX.%f:Ìxn1x5AhV ^Uc: 5Wuz=[m5)ulMAA_ ^ATo=m <>}'K9]6$z8hz۲y<߃_8,I!CH$InnDfUk+urg,S=9`01޽{wggn^s*-J@?B Cl0N1q{{;,*0Wh\[ ^t}k&qjx~0 QreL^zvnVF8A ]R& H"] T^NnSa\{zjq!c p]v8VE+3 !(Ri'ki|)V",˂y;{8==qxxv`YB@x)Da`Za\b6a2`X "#ٶ{e*@IpcQ i'gyIHYf3f3,KxfY'A^G`0|>Gl6P'*g  $x?y#I;;"?k^ KB 098|Z,K=z3Z7CF I-lyrI8j8;;)qxxNf u`*q\B cSi6a6aQ(mۨȲYj|)`'-_w~5lOTm#vl:d<~ S=ϫP-LFXVXטHӴ.AA$x&xA/5 Hdƹ83<[uwʑ.%0WEi]^ΫLDsm-XV`x!z|߇m`U]/!,CLjq#K3-2#$$I4MDZL!_/"HLGi"%^Mt;FH ms\s`8lBJZRhC#~I FAAEAӋ YWH6y^E--$15}3u]m}t{]m$I *ɟ<ҋ  EA "=!ò,xejwYvQfWq(B&B@Y,$z<-liV?%q8MarmW]W.X !& 6 5pss{mölXeZ- :1%\yI]  OBACN/ :.UVWp]"xYƓBBjw%)(4D ^R 6?2oG}RM1޽{chC6>ZRBd(l6 ?|iwj1pƠ$_1؋BT5REX.f}R6#K-˲y&\.UB$_5 }A/ ^A _ QwV(CDž-%h\KJ U&#a8U< w)K.[۶>6Fpzz z=k5؎c{Vq #, f3\]]fAǪW=_r4MSD6T@ӵv7H߷ekSEج7Nu֜KyٶVpnf(ϙAɵx!H"  eYpjwq`q BB@!,CŮ(UZg]nڭf|߇z8:<޽{t]t:mضSz/iLoK!)4fl>=?wwwƕS}΅eEp]IcR(wqK ^J(mEJ{'& 6b>c2bB`P1@yeYjhzG2{|qMAğ ^AAARtwY6g@9k@)!% ClےK@FTԱhǜ8pAGGJ:88@CۅR]-YL: r?\]]{l[Ss+2A&UӍ3WѵR܉6̣rw4UC%BDϷݧv4NS, <<<ԵYV!Ηo@h4BXHr5g  DH"  D\P.U<8Įfi$A߈0 cfY&Zq|rcSVpu?}m%3 Pc;hZFfhxxxб~䗩4 !   {E,\-x5 ˲CeJ\o2H!eZBa(Tlm~VaCEu ޿ã#h(ASNRDR2drV\?fsRlO:΄@%lځ<e)Q4NeYpm(@E1h?TˣCr(n6LSݣnc8¶mض]KZHmV i`z,͐$^~iA݀EAAkGsgo盭 eqpz1"\ׅp\G;ڍdqea$I d`}4M{}?GC.U*\rl6kטL&X,@Nm~ \+>o{)tl ƛ|pww{]K+Quvڗi1.Fs V>^H`6ׁeYcٕi\cHO{a¶&&ыW\$Z55$,$v8G>6 %6)$  ?  ^;&>oV`W":}Zejw+"QBgzE'Mm(,̗8>PVfv8=9s^eޠks jiB cNJ p9\%mu]u|?c=2s1UJE7s#~ mrltzF۶إEg<٭}%[r/)h{Mn |?@RIf&q{.mEHE,tk}677V$]  ^  +^(ϿuZkq9+,#M5dE)>L̒782sWnWo߲ ^YR619::k!h"VѪ%ѫ4ƴ[:kъlEY)a}FjI`aEQoTB㔋C3pyqp8d4!+v뱾 I2a>O ^jV-   /#'ӏ%]g/Ҋ2 <#"$!%NWk.cB~ X;^=v?U-;͵Y3 4a\Nј؉]5VV]M.]]Qf3)gggήs)#+\b{J[??FJӔ,pufQm_+˒tob0mzGZ gJ7qqyx}lպ[ZRJHǬ1GL'gc^ZXAa AD/9}~g ܭu^5$IzqܺvbH#hR%yfdYփj=<Zlzi_grW^+vvvbuu^RKv\58NOO>|y:*6ry&jh`إq,chC꾩g}#xyXaǾ],s~~:;;wmMQVh:diCcAA~oL?T/AE`M/ )P>]h7aI8!'X4ΟfjwWeYŗt)ʤk?=*V|Ǜ7oxq[36uj W CNʸ8¾x\Qj`S ]axGhO/kZ(&XZ{~X-.Zၫ+& 777[Y=A]Go0:h 繘Ҏ|뇌WA_T/AL,XmL ; ϵѸm8"bЉ]M,[+3'T`߈~EwAnv+A,,c1A|RhӪ~]IGK"wq d\,u\M B1=y$Iшs0t5 +T#~Cq! ?}C/AE: ?"v /(g "8&" h]9 V2ִԀzyMuE%~zǼ:x7?xup@e^׶oB C=WW>?O.//Zs)TϴV.Yd!2RDVhPJ-cՄaHX,0`*,V~qDq(rcUgT+Fk#666V]qxLd6b{{|wź ls5br=!s T7JAD/A%:% =>&|;uە$qNvsZ1(2W+r]<#na?H38݌5h p}뭫dКR ks@9ɄxgggQZXyW>g[1khZ5<%[o)=)'xEQ4,C|_;ѫ( ^\^^2cF$Nr[{+++Y`|qIݵ{VlAAMKAAD#,<'# 6~eFՓ8( t|>'sʪls6_]벭.5f2rq~ y+iM3?~ͧ>4\EN.n%m$I+~p&#e97\]]quupRaX=DZcsyyIYx! !   ,A 0 Z=tn:«*_^2mDuv"H_e@ml XkÐ5vv۷ob<zp}nE<Ϲwqtt diFQ:b]ZgT,=]~Ev7[qՎL aźXsm_ϊtoTo(rL&\^\J ĎOaHwX1tDAT/AA~gDAAиrIIE}vroj\;uaeU\ߢt /!ΰjj,u;yat4Zcoo^~^ߚi(ȋū]\8??ton'b7o"m_*([&ҶiPZum\J)<# *( ƶHuMZUiqkkkRFu;A[t-]__g`0bqǻԋA7G/AAAFPƢ"$\F ǽ,IӴ}yf6uF XۈDnuMuղz g7_j=>(߿$.*Ru!f+x>| fB:7'ĜWYXl\;7a"Fkݺ@k HĹ ~>[I_*l%M6:+bw3)<)?AAxY˿%  P=M$IBDQDK5L+(*>öBu!+,=>+++ Cvww?x5{lmo!AbN5U;I>pt|޽𐻻;)UUuv[/c]a+Ouc(˒,ðuz+8J(r'@!ӗBMӔd`0lV8kZl} {u-px.]#Њ^a~Ѭlg(|_ŸgEt:d5AQJ9y!k}88Ӈ&W4HDA7uKAAsrq$ ai XQٵ2kY:Av/MKp.͝ rAy?Z,->vv5'k12ϙNB!\^^v27Y^?jף?5U;eU냾׺ ۖZ#x54_}"z _CY<<gɲ,J/O}~1ljkxboooY[[#"7su51frC,wrzz9UUaLUz z˲pjmNe*|ߧlD*C&Ů%f*QD',a&Z}Jy ^diJKsIcFwf3ljOXAAAAj./Ue8i.oX \|>DZ vna(1xݺS@3bm-~*ﳷv[+c<[Lɐepzzqa:۟F 1qk<ϙgx<شEZ%34S$R)ʂ{.//\]q}sW j\֢uQ:3:n  /AAAjs = $I^]S;2yu\#3բW?"uU"^^b}vvvzۣx gH+N.?>0L!/r1(hE3cARʢ'6N*l֚wut(\}i)˒,wQ)WW\^]1LH~ߊٍSY auss/܌>܎V3:  È%  ·Qk 0#(Z`ʲ$ryJe#=/h|fgܺFkinVWc6찱h4}Gi>JV S\f\\\ptt GG|x=cmr[b@Q0LZG)?~|FUUؗjB_q'yAQVz!^V IBawD oӇ)W\]My>׵ qJյzlllp}}| wkAW  "x  MZjjwqLDŽ"MvjԎv$iJmu?,z=ډf?yꕋ1|VVVs ֶ+t55Ц){޽{%דk]^0^u9 ,( 'jj*z)'zMAAKAAo8$YrwcֶbR 4)\ݮtgQz*ίfyQ:\eooիWloo k[qEAL9<<>ptt~k Zi}w rbm[.J+'"( 0"s-AN#xWeEJ,]D7@QJ' ј)ш_Q;QZc  >"x  okjwu ?pM[^3ɸh4MI3eX"[ CCkMߧ뱹{{{z-S/ [q*YFe2L8;;ku]^^r{{IJU)_߿sVZ*sWEhO~[8tq; "I~8 0Ϙ\M'LX2w}vW}Flll`!MS1wwq}.f}#AAB/AAAxNJQDQ{`Јvl\)+u) 籶o޼۷loo3^]g$v5 k-H97{9==cj˶GydqDnޯZ  ߏ^  y\ꯠB)M;L$DQDS;fsHvW:wWUUh׮V.߬b;El?Pa spp$%mՓv˲sxxȇ8??lVTh/V~PUy^WSKoIdjX.")~GU'v)8T>Ç~8)eY.EqY-e7f5Yj9ev۩6_tS+<.s{5§͗v{Zn+ʢKFkkFF# f`WZ^++#VV V̩LRn j!|щV\kиq|| 777ߑY UX7}~J=kJ"'r,| $PA?^].JmXTUD|)eIUU2#tWM̞kP%YR<}rXR%yc2U-H ?p]4e20 aqnD!Aյ!177\\+l^n c*vrVU eY.Dܵ_u!cXGE CVWW988찹qYzHlcU1͘N\\\pvv)GGG\\\pOQnfScqzߦY#$9i>}m$eQdo˲U9M'W>dR3f3nnnay]@=Eo_Kj'WvQܼZMʪ~BkSZs5WV^H`Jjm45už#AKwAAAxJ=>aGN  GX7YBJ324y&(Lu5Ƣ">;;۷$IՄaƘ.(./pxȻw8==hp.ꑋ;1,<{ lmۖٸ}'}TmvyՈ"v G>dOSWZ˼wyu8I:UFi?{7G 'Ai2syXEj=7prr)'''\0=P%v=7\4{N!6Ynd1<ϙ{s0}.QE!IPyQ?s\sƧN)(xϘ\_qv`*J\TPbPED G}ƛCQT1/B |iu;vnusՂ"WyAeIYTyEUTNVuQ`56B1^u+*  >%  ;։UVY4n}:0B'xEM*S(*bޚ]Ljb-_zRWX+Ĭ꼶]eq6ui]wc UU!q>[޼y}$<,ι]P=M%锳9>9Ç~8dr=,˱ȆRDx]dGًBLla9J%x֫#~^|$( pb%U(STS'x%戭:0 0Za1Xk0 G3%o%A#ڹ|7NyFi$më N**4'KsYRyF0F+ϹT#xuj~Y[j`֊% B^ 7^K {겟|s[U>Q06⯩q֤¹gWSq 9Omdm,^G.A$ kkloo˛o8xuh4buu ZƸ+V4eUQ9&\^^rtt1?~GfYa*MZm/Ɖ赴+rjc }uzM’Kй("Ib'06voTۚ;-F2vzKxp~9b} ^_yJJSWbN ? G :`L=@=zm< ^`A,xuS20U,,J yBވ`i~, *1UhW ͨnkѺ:5Xַrq% "x a>ܕ #'ġn}#jQHiM$IB$kR(f<<<9UU-.{EsD/]SK©lsnw! 1?`4a+Όzrث] l\]gg...p%ɯSKKTLS,CkR(T,6}Bk݊Mn{Tn˵o՝ vdUjI0TL@0X?EG'/3"#/S"%+2~ EiU](RN496:EXxb*) yVR9p?g>N 3 ZyWK1غ7ztw[׊%  "x |vy$ =/sZqEQ~i TRvWE}y~@Ј^*&FUb ]SMA~٥ҧH׹8(J< 10lp:eAPO~z>V4L ^(˒|yXc]֌ O2Zզe/[Um2*|N5Mܞs1 PؕW9eUPjp kOXD6Q չksx57#x\Χ[*ʼJYHo2{4eQ%E^aT-7Faȥжk܎qǢgϊ  %-sA'bLAJl'365h<0 ]a^jj!XcɋQa17m[>fYSn2TqfZ+뱱{ﳵ~ִ+S;v(a2p||qssCNa-'|Iù҉iiW˫ؼqzA@m|'Oa ~uM7z) kTX*Jc+,n6zi'eFirJ[PVTؒ CU ]U+xY.ҥk wa{!v-uũf|$^@)^Hoc>˘MȘss$*ʠSn#ZPkv~+ ! ·\M#=W  | ]-b UVO9+Bo H9Kt ,i3>캮]x輮a@g4+޼~{{{!~8Xn C)]㬵usy'<<r*1j7j\BR͍V ɏՌXV#<5fr?"$�O2EYWfu1娬ORO+%=6*Sq3?o߾e}}5(]j4MÇC޽{1'''<<<9UUPxvSMN"&M(2ˆ,|s=ojyUs:6oUUXeX7ٿB#G[75J,E{60m YYKM *[Q،RZMF5Pzs"YJu]!r:TׄqLbJp"I=JO1dTyI[@YӸ,Bڍ0&S RKAA~3ZXM].O{x$IB8jk1U1vI*MS_^9rs7)?* lnn.lmmI],><'2nooǏr||5ymII&SD-Uۯgo32b ^YQUyi߾=ejsuBahJLQ"؊JFQ\|^2UUK'g!}mG|c0gQE}O$)iNY-1օ&RՓCM}ݝ  ҈%  ]hog1q]JlG( 4e>fe4xq4@CF5F, Q]nNJ`;u>W^z]oް`051v2[?@k \ݧk!\MںNk> &4b0sE{v}" B9yXCF|~G`˲1tDQ*ajT%%iks-sn_ھvmfSX߶BY,ZUiR+^BD =M]'zhp1tb;qVKA~DAA8"I("eLڞ,):0UUbY I}#qn}W h6кzKST IDAT!+A+tﳻh4" |_rEc-mei9;>~=ղ gi,>C&a , UU9Ae﷏iyUyTϋgw~wqֵJc A "aڀ !a3Xm0DU K 'WzLg6մy|~@j!VYVLjFZL^RV]GVk% "x  oF]!^^Gh?YZKUdyF:g)O-O.z2,SV8wkZV(sppc>Q=-נ۞fW_\{|snnnxxx(Qs c e].{n=9W ^Z~RwPIbNc,>dcS㫲nTEe Vh& V2X[cY*Rws5ͥN].ۭEMLGff>c T"zS;yB{$Iu|59eFUZ<|jjЮfR_  %  yOIeXO/h1! ,m,Ƙ۸*x]>?{nnoï1Oq<=8<01Yv>vAi+~-`jt~};juZ\.UnW ^A z6և$ >Tut `1jSh]:~~vju2[Ѷ[;Рx1k۱(KrJlYQhL-z9~6  lDAA ]-nWEaHK&*"'f3,,5hx+R^lN3M35ki7"F (Zv)Xf[*f7rzr~~ERPUdwַDQDkc,hTOH^/|݋Q襜ˏ`0XKo2X?H>^VTʶ`kwW-<e0>ݢNR:7'䄓>~l6[έм_UOOZzuh&Pk݊m>qS1[xQm/#`dXj_DQg0oo2X[rE;xBW9QQUU0H73~QyzR}m; ~j8huzm666bE#wD#tpz#:>|NYөe \.-T!s9!{IE,DaD$`\|{ѽئNV[OrQ}8`e5fmzd%7Xm(1Ų&,DK2a[7V~U})|C'MSGyebLE.4О\LcW) Ð$e\Yv6b49lIEIxV?{o#ǵ1PUDstnOkᆍ ~~vh{$QIɪ"^~;"#A)"cQUqr}ǜ\PM;b[ ttt5h;@~l>/[6U݆5JU1Xxq4ӊ8G͆rE݄z/xK;5 0 /0s)oba= ^%gݘQ]UUUEqwa+tm6e '_j'";oc UI3i8::O>Ν;C͛7vrB4II|AX.xϟ__S;NOԳ,Wȱ؅izrDCц}lhS7t]G۶m{$"|V|iws_(Hrg( KO9>c~2WuP6rFޞ{K4K5%\,/0јC c~2ಸ\ aj9giQkU4RG$#~^W\~^Aea˜e6_~-0  2<~&>vQzKxidd:vm5FQ׶,Kg8Wtn%sLc~4Ν;|[nqƍտ_Wf˗<{Ǐcg ֛ !(:v^v'npJz~Z/b9飯3M-]v#ؼt4䵯1Ο1kԋPRHӎ-e娦G&䈓sGU(Cr8mpx9[Kܘ?to et“"(a{ü!<ήKج7v;Pۗ2 _d;\6?f7yAۏ /0w(abvqޓ5\۹FSk*"rL[ulږjܻ+.ϑ[ڶ-n]fɡz8pޥeh&|r3Mqc=bŋ|w<~/~ON1>~S[٤hòJ{ )Ƈ!$d >5o*Cڮ~EdEQзC]l fG G'MT×]rF9\F^ŸnsݝQtǝ#1l_C2-DM/DtTOQzbDu*h o8;W@k{9{ǡaaaa\Jh-po/v8am /0 0 ø;~s^3}7s_$wر4~ojb5^`o]НeH¨ԘI|εkxg޽{|駜\FQ;PE8%lX.<{GW_ NX,M] UD\~WUe"4цuMS5';JO\eh_? N[T:\g:o8>gvs>n\N3ಋ+EUm]Xrɟ'=z_|_7_Ë/R\A6ѥD-6JlũU& B#1BQāh& !ncc9)#[w/inov,jR<$zo>HI^硚̏&̏g̏g_\]q.j݋|ЫE$n~5 .E֓^YNiH׭ ]Dcsl{a϶G?a.eaaWSVWɄp V0{C C_߻w KotP؝N!tc2p||7}Owr4L&> SB|:/|}O>믿믿ٳgxjun'macJ6jMS~༣,Ka^^Écm>TF (W'zn݊V*x.ϧ\?bv4T DIjB$RUz"@ !H!g2_Ѷ:m6h9圈(6ea?L2 0 0+\vS2F/EUV*'aU.GQ+6|Omѝl@c$@YE >00 0 0n:2:5orѤ~"/5S;>{]oc P䶥¡_PzoK}b׸~P{ϰ+Tk׮q]>s߿ϝ;wyfd*]{[., ]7|7<~W^qvzF!AJm0r͈=y !EC B}_>i7:.+Q񨢯{eLFA~ @[k;,`W@TmaS"a{uɻnxV,QvT!֙vEL+fZ:۰ŧ2 3 ֡|c_M2 0 0 08W;Fⶅ!NddTB-`Pѽfw佧(R߮|t: d$W .Yok'p/M8 J2 ШDٌcݻ7޿[n ǜs*|Omٴ-ϾO#?NOO9[u]v_be#¸ )Z-rkqv*L&؆"cLǂ r]1l4|Hg4~;O=O #/'_;xhBQI0K4RSG)ni/~m G5)*نЮ:Q`鵓ϲM2 0 0 0 Buu)W(BOFbحqֽ6m$X4v{ iv+l]xhjByGUTu۷}6<Çܹs[n1ϳ('(ɖ,NOOy%| _}zė_~ 1c#^\1wGxW$ǀsn8~zQ" fV!{{)J`$xpǧJcsu<@~X{D'9R$15̏gLf U]"ED%-+{{j{=6;-eG>D"CYyIdZL֬:)Ę鉎!~ѿL2 0 0 0 Ƣw"pU2`b1%w.I)&GU/v<{P^#1Fmru Q] 8Tu\cd6rL]'{7I7<7n޺ɭ[x}| 7od>QUNP5&J/_'<~ooϟszzJ-v7+ HŘ߭'ZI5.z稪nh5 kZN^YI+2{wx>f2?,Mw;nӧ|?Ow߳X.t/n, ~e\4. !E.nOXuS9+!@ !t)3~YS$;~쥳ns8tg<{#qs~_~#i5r GTf e]."H^ IDAT 1wٰs֭vWA^N"$QOJiMU2T;T=D p>h j0 C/0 0 d_,:bsFG饦$le+ ~z`S/7"*#?֝;;qx( O]4uE]UE^HArrd\Ѷ {dSRdו((c>>S>|g}ƭ7vrB{uҋ]е\.y9~-~-O<'|zEawcX7@xKkYW4,KIveASWĮk7t]Į^~1 90bkDsQÜ}>Gr)qd$ ;ٝ2Dҽ98u˝zDGUrwL&ʹ%(}Qb3u;u#9A1֬ʹj<*kMR>Vg60 10 0 @ysKȮK XStgj $l(X ;]%ǩKώ 0ԿJCᡵ"( eQPWMӻ;4}=JY^X-VJ5}^N[ew=TGU,Ko?w<ӻw &ιTS/_# =zċ/8}uJ۵Cy3K\/UvK*UC]p%o4˥c, ]b$F4K4ωfWvegF~t戺A4uSQT$zI-Ǒo-ׇ~X ×ZTTvHp%{0 h10 0 y밳K>]Y)ܨwneW+_E]PeUuIQen*\Ijbli5ٴ@%ED L?&h*@$0 1uz2$'8һTsjq>|k88::͛w{}6xAdx}*oG0sggg_|P+}6MƘݴǷZW=x2zLB%D?=UDuפ}^Ia?h/0 0 @vQoWwZ~)̅GQ._@Q8|ӭtU*uIٔ)..$xq2T Dh]k[6ͺ][66no:4@j IMY" VQGLmh^YVW+6톘]m9;k9wݻ<|pM!w̰UB`ٰlx9}'O+F4j=K5.i݅jZVUIH?N\()+t.$!΃+pe W W" `~W%n+xHb:DM#ص;4vH `QhH"H]跃v>ΐ|qDﶭ'E)SpKeqԻuэÖRo6¡%.^"+ r7xB<Ѝ\V6`Э0 &xaa8c:;"nVҾ 8bWg@@C櫿EUPMJYdV崦jJgwW+=Ql!s<_ʳK2C$H.fWjby`qdjiͪ%:T SN<դVE7 k2vJ$aiٰ8[\,YVt?E"/b"Y8N %޹ý{wy!|79vd" UN.[l ?_ͣ>})ftW.T?z{\D(Vx*PcmcWJ2XXzė2J}rȟ8pEP(ڈo:x+) E5$re/+ i\$1\w"K.ܧKSK )0vh.b&vb!nք6b&_$ѝQi %/}t^S\(ɴTKsPc8*[Md ' 0 0 ء`VٖF1vO7."*GٔԳf0;0=054=J}@xkH$t]Rˎ_ lVWꕰ:۰>kY 3ũ ꉧ8|Hߌ+uQD"!zbqjm$8˧_xmbIL&s->|>ܿwtJU8'Y$)Y ش! ?y·|˗_}W_}ş~/_m[čq~ D*"w7܇hWM omtH1жzr+&4EJx\Q+W_E$8zW U3T _5<*)|\(cJ.8 $0n㫎+6vMlׄn۬MIh-Q;DQ%2F8Xqk/p1N( '*RǾd4yEǭ"Kcu>[<8̸w+ e'eU ^3 ڏo9أ00 0 žs_9k͓zW9E#jJ|%~Q;|]& $ \jʎ)hmDo^6V~RuC=uO&l-EllMlQR_A qZ =d>"ݰZ-9[Yso+mŧ v(6%mbYL&nݺŃww;wvrB48SȰ":!@<}tt{? vPYHC,K&f PQ{@UU c"$߸fj}z&}ڶcٜ{|Zecmyh49TqhkVrq?W-^?I.0TGtp%c@Ss@DۺQ4!25 mWEaa sVHcLB-ȦV YR @")tɼa~m#SGI\_ ^2$һ._wNɽ$_]R%B%M,.ҭ2^tH r?,/BAAH}.Z,WKKEj&u~*EQP%޹͍7y3q=nܸ1UYR,Řֈs{WFBPwLnݺr!YJo. oV$b C5sJuCy\I@EfMuĨ, 4*rxfzͫWs^1!dfb\|I]'Q$j:)"=R E]PuD|/*zBED\BE@Q|/KGsI#Rx84gN ^qqv]״^_q.7]NNopN܋^8QUU)*OWSqxB0 0 ^aa/\(uwU@C|{*&Ӛɼfvv}]vEq=+Ns1(~7aaw[aaƇշƿ ȭ#%.%% 81GL&Eԥ+!e?ghyťA2M12.JvhIW%N<ͪc t+]Gb^PS*P•xWP%/(*/ ؉|ݶ'EIUULS9dBSes)|1)6mӳ!#£|+Kq+O38ZڶeٰZXrv`8)ӟx7yݕYdT\7( 5Kd9\UPV/88|=u iZ8-Lsg{1ﻒ%{:GO^^> ]fcD/0 810 0 @VQV B]W4фɜɬUR۾W D¨=bd=~Ts6<-h=FͱJ1;/ O)%1/n0)idF'TnBkKiYbPbwfM OQ4uM30LNTUMQxbϵ9b]%k ![w2+u#!%łS~G~{NYzNvEAR]"nQ(:ʪu*˽zx#B wvll՝uy:fIwAťG D W͔֔n$C/ u;Y \R7`{с'K/\CK_w9wzMW_7m\^> ;8manj ^aa/b^ Jt_nazmɍc:a~2VT_ d=P 'wrtRb,$:QLb;q9*nqT^縺żG_*~ԁԓqZ\o,G: eY3NMSIӤ^]Y6ڝn*ǡjjf9ꊪ~:>Hk?{_ͿWct\Gu*V#D :B'cd!8Kу#% iOMd/^^;rQKNWq ~(vZJ ܤDž #heݰ^4,^y684 ]j]9۠T=gNu-m:'҅;=FgR$vLx9/E ى :/nbaa|*0 0 0>vjL㨮mڊ{rWpRDʉߜqk]st}F9)RlWĭK$j"*㕋ñҕ,DG;|~5Ow{hϋ^8J^|TvQp#M}wA\IpK$v1Ψ3r26iza^Xqzzrdu$FZ.#yǝOp;o|G)DI ^Ar/|5-]*{ QlrguGsא ؿ8ϛ cT_P4侤t_xBL%(D$Q"۱/9cup^}x/]a=e1ww]a,oo&v]| #JI./8N>:r{a1baa2.ITuW挓3NnprjVkA] H h6*(vg.(F3Ųvr{'U}<^d—xԣ B"1ގԻ U%MS3LL&L&.KEaزlX,Rjzm[b XU]֟_#RS|5&P@/ *%=>%T鮣 fGr oα笏l, )bL|Q:{ Gܬ Q! !2rAwaݮI6 s;kָkB%'Lُ2r^ 0 P10 0 0 'qt+4G%G7qG"~ IDAT̯͐t# (.K!?6 轥k;3•o^twνLҺR *دQ'x" a63ϩ뚲'WÁ$ t]`Z\.8==fŸ蒕hÀuw=yO))R (> ]BPY\ڈOK$4NEA3ifsfUQ}Arm_q.HI:;;lqb`ZB 嵶5;`!#W#O)H/](Hvw~g*?Ng~E[z x0Lig}4S%Ę]h!SYSd? ދRڋ^rŁs\<9.,za3w2{#K>?@< 0~Ueaa|09Rs+fSNn͹v󈣓j RGo1woAef_+5;{̺f7["xB.fSaUU1NLTu/glʂC1FBl6r6mK:ҋWa|Vg%ӷC#Gw's ϖ]Oޣ>z}.V_.;T1@`$') Q*sJG%KDP"aaC6yeAIqw7v׹Iuu zw) UrJB~.3 ./X&twTՎb0 0 0sr-%]QR(E%LrµOߘ29PnnȆ‘ؒ۲Uw,nQ?_" `C!ŒzUhȪ&̈́j(\SvQ!ж^de'M;[]00Q# 8` yӈ=1U$h@pDB`'}vDQlaZнm-22@euȇf+My^c+5뽟z1>@L2 0 0>o`bT\Tԇ r^rt}k %gOXꂘ5(5~48vKè߫|AwZ3CV.}u*9qJ˴pKʺsO."B$:֝jvu%gjfZ8[pvvzމ0T%Cl:D(gkȻˢ|ROH=>qs_̟î@#Iу["n~MB@T֔CGڏ9 #.GJ^PS͟Fã%-Ʌ6MO:i _# Dje~[qyF2 efL2 0 0>o`#q @$j ҡ. ݜs7GˎE,wکr;Eɫn5w w{a z;'g*G  8xK 1. ]kNY,յ!K>h*ݫ%+G %mi rgZ"_1;ц24CһqJJCT}Mo:~sMuS4JtQ?v1 cej/0 0 a`'z"JJP6㚓3&L F"mz-mq~f/{9>oJW+_rjnH{qQ!v&})0*hT6 Mb`XX.Xt],vtKm3]}]FbMCJ_}#|yj9,} x\?ߋ/?p:P!;**Dcm[4$oTHzxX%=~~ҵr1=di؋*I7݊]k+i.pvCw}tCvALK0 0>xL2 0 0~1t_{;RoW=L86fVʈp1vuC.wuxb㴸?_sO !CUڎrrd\Zh>v,ʵƯzb][+.UW_?lѽyCs5E}yOM6_/}%DK#y@)F(EmJ#!tĠ!zw׉~W4z1lp^OK9%*a u_v•wC,te+F|I0 0~y0 0 DD+ YڌɔɄzV eD]nS rRLهG8Y#Q#!vŖ.$WkYW, ^+gI6yoƯi:LbW1]wʾu{4](~+TWef9ML#B1\+zB5SOzB]IzAlỬ 9WLbW4 .\;bI+}MwBJMHt܍779ab/0 0 FqN"YJb+դdv2 eS@K$̲ߜ[εGEUHDB@\ rznMKB0LS8*Ư='w]$txTڵk]r\7~ve$qnԞ\zvX[STh(( 1n!J4Uۅu+2qz幽N# G"JQsüo8QPXC^_tF]rwu] t)I0 0 0 0ܿ5 QO+'So19(G(:dt N6TFTQDSh@N^ADV%BiJ}Mvb79tewxqgڑ}k=_=>t|޷qC}c\4?Y/z<]/.QR5]՘j@K&Q9@ԛK. ~.h˽ Ytܼt֡eWmטĮE6m+Q7H&4aǍ ^aa/~3R*_zyڔ鼡J. bRRQP){ȏh$j Cd-ah޻6Gei=nRu16 /' UPU0ttsR7w{͇Rkh=i B!^תV5MШcCz cbWևxg|s:T|*NH%SNfB@ h@D))pyvbLL@6TJ]:$PP\߆;?a[U\LY?U!ib:NuHtRaCjxaawnnХ2 ctOƔSJ&%$N2m‹bR^k RjblŒ!gm c_-MMҋ1]mZ&%?i+{qFF(|+!x+Lj+QќBRs-/۽߸[TBID@TKS]׹CtjEA}4P*Hrw5j]zaa y;9䣺rMDJ*ĠujUQWMS.\aq00 0 øCr8R#bN)'~udù%ZrÅ9PZ H8$qWpkΆgnttmm5Pz{ך XW ?PNf@eln7 VI Uf\^W4M$QWN o1PƼ\bW9BhJ]5uߥh2xeݮ]0 0&xaaUQbJQ(rNL(+]m-m$즓Ax5=<.cŁ˂/e`mh`9kqZ?o>rOW8ӊ_1xRc(RZÈMm&&AeU%hT4 ]V]<^Wn nr!wǧZ'Wh"Naq_00 0 ø]؟Q11GѤdr0b<+Cs>f-FdQ M֫ղ$F*)d7~=yaq10 0 øuTzDQ"PӋI A!E+qryiNkj~ATxȵ}D.9Tf@hR]zÜJf8Xl|‘]^,zY*CQ"nE75ӟ'<'\% D/Xm/z]cCұPqrL1Kx>尷ˮGTIju8uy:G|?sz]څJ Jݵnص52+aa<& k0 0UQG]rT2q( >0\R{x=ƃ:ri׭_^r^!C 4qZխ nIj]=" ѷ__I\n g a\=7$߶N`qe\^K R| )ucIA$,K&X1* (.W$MIU!MMzö&:ZVzRZZеs <2 0 &xaa< S"Q5d?r7rQ5XQ"8Ѥdz0e<S ..|7fzf9 u+ mA@っWljRI e un mYH5*R*g 構BLU5^I w76=H!x4@#պf9_ׁ4Q2 0 >aaa@ur_T .x/=xx2NTmF}|ŞU;KiHmRa1?1̾t]Q'x1}kGMUKLI/W}/$xyOZDܹF31ѫbNkfXS-B!Q:6:.v]G]UzPv m9 XTˆ<yESpO-lҴzjaq10 0 㾳XӋ$b weA9.MF@\Ng8t3xcƯc]ZQgÔҰuy}Je<DjP5 ٳɃ k$zqصk}6hT+ MY/,K:Վ$+& sΦ;xn'_>yn5%cuZY-k55eESEIsbExaC8?h> l^aa\vлAHW8( ycXu ^ ʧ{t#E- i 1̜][OgcF^X}`3tc-B5s.OG.I}=%VKSK'KVzX):Ҕ;[<0 øtnnC SHŘ#6eɒb)F鄢tx. 9DUG$с6&cJf[J8͢x$ ,P@<*Lcf3BHNi(I؉\K1ͱw^Ӧ3vN=إ."DSCmZOV[pz`5Bt8)i&~t>=o\Qo@3 0 0 0[%m λtZEˬxȏ $b89u]͔^}Oil8]?򃥛%/SO\ƒ}9οK+&7H(MY81 q3/\ϭPMM"ک;6贱[^oaI#P7 Qְ^69woOY"%/T׽ҿ5̢5a 0 0[ J%qZKr=ᕣҥ^sD#=Z \: ۥ3=b /G.x=f!#'Xmgs=/$SBUф\ 0yF^uqjz`uɯz^[s+ ^fVgO7ɑߔ޾0`pեHS)e@"'Ӄ|Զk%/׭z_WzƓ_6b G{ t1 EwGszSgR$:|NeKxYݫ;nfa{ ^aaG#qlnvr<;w]7͘O}DE,\h ui=ǹ?&㥃̞$m^J#SB52*=΁ǣޓ&jy`mՍ@Q7hمtl1@a9>:͗8F2 ^4;/[>UOl"!D7'@yExZPL pJԶ깥yPIBajFOP-Eќwo8y;gyVSAIH0s0 0 ^aaq^՜?EH{{aT |LOxozN`o;6ݛ~,RȎI7 ?Zh1:T=G5Pe8P7eY0QwO$b@%dgGcvCQ좌zOLQ[0 NSCbFG aqVqz<ק=:xI $t.Ζuw aզwҍ T= GnLM!/#~w18zn\mVdƥgR5 n<<ACr(X_GOV2t0nύm7.P|(68>:!x#>Su:`+}y^3{ne%_VpD 4xB#ԫ@ -x)Θm@]K.h(y 0 øKL2 0 0>ᅡNM"n ]T&Z/dD{s̮:]t`&5|“ F-w3.:>G>7gŒ%zY(m=*\2S_J@إ)hX+u#MՠHsֶ SFX/Yo:ӷKAbJe)S ֈƧ5 0 xؘeaa!E%5n#ƔZH6zJuٔb<2jJfBc]J[#|V?Nb69Y0fi .3vkDN'7/P}+r?%!6 qA Q AyV=ɳ)'bĵb?byz`TEE.FuvNtXH/~ 8MI6elzY/'+߼ӊP B8q]z mcu0 0  0 0rhjlL'\%ܻtd#iwT{<6-r5[ zK1%]}(:O^ӫ-i(0Z^4&Eb AAx)(_}$qK"B>ԅ9d`Е m^lj q ?@= cw &#?>UzY=.q}{種*n.`~8)s^0sܶWZDr6P""#!Ь :Pkg>2;G?*pr =RD:_w7j޺}Y_wwvvI!vN6c~F8P^9=^p|tק&0Hi"p%9v850 0 0 0;EB Q"0o$8{aH*!d@CHiq[bw8/eǑӁ;Hb\ZX͗,ysbᘩ#C4Bv3iRI0A" f̶ej>r {!*8u)ns~L@\: ɊgB$8z|Oi e/tGa/0 0 NѨ:C5 Cm*eWb}clV)vr>64 ,B1^g>HԈ@i-qBȎO\IK' s[c` ԁ ,+pt`xZG8sfAM%Iu8h\) o8C'tNww# WR PYd>)swbd7ߥkܞ/a10 0 ø;4MC49%쨎U?9xxeH/E*.ӱj'HC:f(a}vY|AZ*x!&TeVkoG<{/x`D9*RI/uD14 >.m.]9 w6poj*0z 7f\SJ7Fq1%:)iK1u0xW5Ku0 c3d0 0 Vэ)SN) 5(@VJuJth0*& s'19]E`8a ryƘ 0O{ j$jbhR/bp0}Zu|NpD$yHuJ҄@ljuC PWjPLg#F_:!%ח$~IC:p~z^)#-98\AL+ا1LBW*'8))bƴ<`2>S ?a\N3 <3gs5ͺِuU^ru[) 0 ^aamAFiHc _I_\U BF}(mSjbCSJs[=_A󶆗R]aTxag])5}PC 6 i E\Jb\ǮЕjV'.n{GJz'Vf8;]r|'3<=O88QW:A%$W\+CO(;7,n4)`Jz!(Q1?a6yttdt@YL) P1t99゙s9]֒]-{Q_t@67aq_+<0 0 nnz-c'RT+Tjа^ˆْيYr^Ѭ"Ѥ#GQzĻdmr`G$ʶ赽9],8dONiSb%6NlRS&!FYnLKHĵoӬ's𞱷Q!eKaa\;&xaawB 4G"M5ժ X&ns$6` ].gH?[1DrtJ!%݋]?_W-?^ 5,9]#BM.H&YJbW79CM+BSA*0z\~$K8xqq4"JYĚzultS&Ɉ4mqA1*(J/(q%#X2JZ7@r_cb AјrzUQU5uPW <Z1g?1-)SΕ Btc[suaXlSKja ^aaѧ=!TzV5zhx%WEDs Źr")l5_ZWkxw?ͦ64%zhe]cmfs{s"@"Fm,x.n/@k~2TR\Nzq:Bh!T,NϘFLcffS&1%/W8H0n$zehSFF4:R*gsg V5UE]7ixya<)e1IR"΁0|_p|hLlbWKRΠ-/f2 0/0 ^] 1 RC$<1F4@k&1FсD\vͰ,^N%zCȹ^"u%rbrx8V+ſ;]~z%sf]Qw)9.> 0)T= " N j$XWfMl*А.:;HrVT]=7#\CP VY+ytx<$tƣt#+ r=.VK08,r M$4!ꚪjuCUլYjNa59{~qqZOjc23ћONjEק\|Xz0 0,vgaܛ\e[x ^ {ħ8Fׁ|lUTnA\Pd]'^N$bŽڀj{g2xOs||?wя~ķml\)EU76N&*%:^$+1T8 CD$u9+D"N TA b *RՑJg4*U0{Qzr].JB: ZUzDnh@SBSƈCp,9'_q꒠/x44uW_)ϟ?՚>sYaea=z3^ƞ0 ]q}#8պaX^T@1))!9\]%~o]kݑaSjw]P}l+{bb ^z^sAMj0m| OiDhS UrwihpDD.J4aMQy1y,IJ@xDBEꣴ4%SBY >J_}^o֥2lxAWKU7ji"!fࢧ%ɒӷg,ΖˊQN98 ٌϞK>{ՒbN9"0 0 0;eK{eӁݏ7":P) j0$TvJ?~d-5v[ŮU#"ol7988¹+c4Dy|t3׸,iQ'l .$b@CEV4*3 qѵYa-c5tkǼ_ںi-tZၘ\s]$F#(ԑNQ&|PQƮnt7AviH9?NKkiuP$RZX8=>eq2gX1P|N'a勗|g7oX*m'0 0&xaw~qv!+0Ž@ḿ::Z֬ehVFE:Hn>iMvdSN=?ADήMgAUUſ?Oя&( z҆^7"&#c,O^Xh PP]D"a0]>*v}Hk'|myF.xG:t%pbϨЮlKj(/*ѹWRzUqzrW_~ų'yrpW"g ;3+ۣ#Y., I%ms=Q̚ea׍ ^a]\]Kc,&z{iGXjVň2z"$dK>Qޟp#^9ŮvW ڗ,z!yV1H'#G6caqwIhA0Ō0x @j.F̞NM twt*qpum.;W<#2*QbѰN1F~/~_l6!op9քV6^{wKpR)֭.fVzMl\u%c%nn/}NF峡I^r\;v}巕$,l9;=eT3߉lm:QD(G#f3=ׯ9;;c\\bVaaA ;3 qή.m~44/Xvx:4BjX.Yx<9'݋Jẋ]^tYwz]A!Ecvxl)~uͿW:9ߣ,k/R477,vxUojnŮ~/b!zI^+4T8 8~Jޱ]m<;f"۫ }o>I|۷};)ɄBSM{ɹ, Ϟ=>orvv\1ea볶q7s}/(=5mֳ6M$D!T!Z<[1L|IQ +Q֭T`l4 QY%_9a4en˯d1{?g=?ڧX DF1v ,N/vդ[B hhЦV%Zu8a)!-OykaKo 玓޷ GEYWg9o_}d6("('O_0y rjy0 01&x!v|hw͸oCoO.'K9$:PGeltt6{ܴDS o*K~&iĉOJӂ \뜻CCookk=6!7TI3  wP'_TbN_GL-mX5zEZTK4THlp.-/Xԍɤn_,I֮Wqw>HU99z/gϟϘNx'yDR-C>s9'1!U#0 0+vۡ8W0n5al3z,ApuZ,N,NTPEhG+ʹEN-A*iNJu\Jo8d}GWൽTؕ)UxAq])a]KՂPfR8UM3ǭ AS!~Mr )gΗb+޽{[qxxdU^ClP,( /s>y}N%I sxzO=%HUW`0 0&xa7C35!/nVJ)rqJ1&%S1:>]bׇ^]]ҵ YRºMgݵٻPU_w{]. ~L< &Ks?Iwkb\>Z['s.PRZHhrzqFZ4u4]CxhXUi|Go8ygO0NqΝ{)O>嫗~9=;2I?`i 0 c+ 0!]Ú4>(rq8DRK޽99EEl@$wEݐUI~~"J+ֹvW6loO!1Fkws=o"):tzLWo{ %egkS:Iؠuv-S*j$imݣEB`Xpttě7o8>>쌪XH&}݊)FbWJc$(m ,t5.䄟yׯ^3M5gep9&${U^Kqo^q\4znFYʼn&+z +N{^>3X )U9T#ш'LS wp_shUMSsNNNh&: 0 cӭaq# >]{7[;L5ԧ6 M5gD HS?—W$lk{;hMLή*sbf.211?~7k{z0<5 'WDir0ޥ!#P2s>DLWu5zz9gS-ԫk\lrݮ9٥Db_ UU4 GGos-<{"5* _<_rpp@!@/T6axXG2V9 [`d3Ql&ڬq89( |l!~ex1nZwE=ZaAN]Њ]q8l{7א#_xīW^rTCEQI4RK|\&vI!ȠzF%)a:4ұAq,@x뜝?''w̯⼕`'@,U4!ڴn"y]?`N[_>DR|)׀h@cMԫEW^ω pqҭ] Uy8By|7bkVo߾믿/ , 4^ǝdӧOy?{cTLKzy<a^y00#sxeɎޅ:cDsE1y8Nkˇl ǹ6G@izٯbٕ]ڞϋl?]I,vMM<= N~Λ7| qݕU)%n*]=/dor^z\Į~rSݮfMrݮٵuL^lBD7Som Ϣ*b40pvi`ʹtCZk~R5^b<N(T ". ^\1cWn-Nzl^9r.?*yE׍y ,,,yXBz~CxQ i6J]e]rSW\4 vWٖG)fn)n-bB1>c2<RAAnGC\%c9^unťV^UVVŞWfg=:A ]u".|HL%0~K Wjqrw!P]% ]Ϳ7|/ڔ^?`OkE+_' S-T=C[44[利$;ZԽP_7to>r9v2b<<&Q!h_`%RyF?䕩NyvݦZpGvl8$MS(s-L$c,/-q||)Q}k;xco8+/AA%|HϚHKGNR>n겟M0Uzt` ;*#C4 61xnmC 0W檉3^ղhսKk``2wa]yw/o7{]Ɵs+l3Pj5/gS%u]I +|Է UKZ)Jyfwg lBGC&OPe.lus3buq%"߀Aɻr.^x&I#zFHZ1ssssV9֖Xk7|j9AA%|~Ē O"܌ {^~5*U%z9EHp  kz,&4EQav+qbCLEy<y²ݞf*l3o_+.]Y8 dV֝ίFS ի n,EQ?=?OHTV̻:%9P%JTw{f F-+^&O\ -%5TSxW31ujfiۑˇ xdxdulvƕheC!qZ]ޮj\񘓓ߧ_9%n?T);;;18JWD]m^+AAPK&J( 6bf}S]㪺' v+:\g KU:.#w%|š+R5 S3ijWЫZ.flU} Zt^5`Oc-«&52ۿ7O/Ub(C [spfm?wd`*U]܉kؾf֠1EUzAߊ th,Y-EN9QLFda#tQL0.G˨k)_Fj-85imSeeaae$>C3Ӱ뱲 +++#/jt.l ‡^ 71""y/A/m2D/*B)C#VXl: %L1r(?9 ToK(bhurN :gjf"9ż3N3?.U*0:hCd(C5r/zw\ymg.䫯bcs㻄7*mɩi*4лչʵpƅCQ* :U"gQ(\k*ʿ^=3]aX-D4z P ʡ]IO(&#&S)xD BjZ' IDAT)KԾ5oCid;`dU߸mYe<{%676vt:a_)1^֚3VVV888 2apxےwwԓC  XDA9}9^ Aȶ?}^D,BCx&"Mz/oKD!.GDc"*|y Yb :oꅟ^cZsboZaVV(JLҊH9ӔÕ.8Nn#O?_W,/[+cƳ Wc h]r3!SZaɣY~^>4TNP?U_A\-sT1| ʕUtkfGոp+~v OY 0z>qq#`_8F+B8==vqYA[^ 7g"{!6?;_iO8)ͱ|g,-/ҟDeBu}r¨1ʇdM(}'^ x.L|~UVyU=kڴރ B4(86ctV4J+]kT5zz??7:V@8_1\] JW4!0xKas\8K8ZMT(tvsq>'r9ex\%0Wsa}uqĿkK50??OxV !pyõU(%! G/AAԅ֓4 ieiimlnM%[T]rc18=IFYޥ=(H0nMj)ϼ3|.oҾPM]x{81mTDbRڠ1(LR:,-eaq6sh _k~?^P.߫/q]+qx1E%`9 8SGSqXӿŦf}uUfs5bVAMGy T/ P%J9vDK X x\f+JXgggspp`0`0077𪯊QZc2XZbee.cƸ,=  BDAAn 5|tVxƐ&)w駟€86x_{0p$.-Q 9|~p2БMz [45kU]|~^RZ-9[W} ͼ8VAD"4B Y+aW"/eIX[3zO? rE57yP|/U ^(:U^p\$f\m3HbB [UnJ J%QDԠpˬ&/YbGk*>U-{]|*}{(uY\\duuy(sa[㸉5\YYayiCuHYXkgT_M( AnrY LAl \lxyV޾Y]]a?x2GGxeY1I'cЎ(6PXF«*BQV -A\b}k"R3N/ܩ;_=W ^ΣG9Qo=k4eHpw)QF9_JSd9,W./i%t{?/_|EY1Zh烐+ j^c\D/_mjQcL:?YJrZUwJ+xorP"EuqjPiE.4UO$ujgV9GYk0$(u"cX\^+Ep89W}X(A"  lx%=֞-&yAp.VTֆ9{lmmLAWM0(eht8x=v99;+43avaU}Z8(*PWjE=sUe+M[ JKBW HCBx:Zu7 ?Z?_?̗_}ɿٿ"MSY1zf>ɻLyV;)<4Jbd󂓽'8Etڀ2U BB]U̥fGծR.-[+ 7%1h:II"t(M+|264R(_M kksdPwБs[v2Fs'cgRi򕟱ڞ$iˬ39?,˖ХdA[^ 7%" cZ&X?Y݌wwn'`qT㙊/Ė2/89=)Za"C1.jEHSgMsrѲ( hV"" [bs>+>'#yIl,:-TpNhtQ( ϳ ph?#^DܿMx?+;`0뱠h. 䀹"M~'#T:V˜8AA%p!"z fa鰰wlqWMjLP%јcxlSʉzve,yV`iU9kRHaĆH n.[5-jWej>gJsY$qh]o(tȳ,4}Jn ~ק{oOacC{U^857:;#p{md8EG1hUTg*zkloqvY\Ybm-˖9Ζ`W$.E.c #46hRlS&S~6"_~ߠ#Jj}.j%d pkmI0*Keh4j1%W} ­F/AiK?R^2lnmF'`nc)t1<ϟqv<ėGpYaYZ._ A+@VZQI s҈$NZaU2 WP:=en) $kb}3{S%dB$زh ԅnd Z):.E^`,6/%_ Ƽ>O{ gW)?ޒQpt DAL檪j=+fVE-JxoQ5XP.UBLb(* J#1 [v(,֖Xkck+*K͊ʿ~۴(UW}yN$cZ(K c1] pKA mx>u u=gq +ܽ{;wXYYfnnu (k-E!ycv8;gkP4j%zA9Mb(lJMtiE*vuٺPZ>fxv>n9۽Sw`0`eupEQ% "x ` Մk ?Ơ]-"IG?gqq$Io!]`8ǣ#{Yw>̻**G!5G;xMDSRmZrڣzq҃s,0DQTE;MVǨ~k-jGF܀}&\"Wlsӽ"> +eyQUi5/k'Ű-EDEtX;W)EGeʲ(\pٶ9^*Ԉ^rvP9GGJk$i]lqLciiuNOO9<<$kDlo KAq[~?+ǵ @9_cg}c;[[l߹^/̮JJMcgGa6="5eYrzzƓ'Og<SEaSW,5୘NQ^}i|i6lWXQWvedE=Ѹ dwZk8Re3KGb ?n>S>[[[x,:-/B+X0ߪ]UPf~5 9ENQyNdtS)1&"b4(<,јxxOI¹NbϞ2DzV:lsss`d6(]PA  z\y&㊋xA5i:gss"N' U[cx }!$^ <=W"nLhVbW#(Vj)K 8 Ih.,L28!)bW\AQaWQ[N^|C/~1FV{E=CѮC/oyƆńyMK/h:*AxJȉ88M9WwFkTnCQK;/ֱ:tй0k8rttsssqsاc\UYXX(N/AA%  W^ʌEָ{X |fQͬpO$66eNBP//4<Ƣ5MhsǕ9IVtPHSt("8T λKǑ BUu.'sv}]]^X]Yi(^mAF!  ^iϮb(86ϱݻwY`D ʲ$2y ϟ?$4ZݫbכW{j[ok}W䜣,C!P,a nø!3p-KZϷN7݋//xyj(h1yQ0L(2ӦTZ)OIOb8?+Il yʲ}t:8&~1I077J8_20AAx%  |%x﫦g p}%  wqw!MRY]],,,1ژ窄sj˒3S{FavWeg..Cf4V&OMG_]^GNtRR!^L_u,{EA8'-M!*mOެu_EgeI60Qs|g 啤,eYRRߏ}]C{1GGGrpp@'M4m˾IBcyyUߧ,KsmO1s'W0  \3"x  Z򾚯a ܹswﲶ"i6M'UE•sd][<}gggZB)4ʪi4Jk`::.Sm8L#$Irb_z=(^u>|g}*s>p^Vfjb圣( 'iJ'MItPLCg)yq޽pҎvΑgCg}dׂZ]Ɠ1YὯ %SAAAWxS',--͝;wXYYa~~LaeXEgςt#Iv)$/¸Ѳ|+ϯ(ht¼w%˂"zn3kV-kc,˱ᜭ^ҡz=>?_ɜתUH{E/yx2&q4R;{Q&12livV˶<ӓ{yvv $\/D"C'M lllHga`v& 7AAצ]C/xs4n`->S67#G먾)EQϣG8<<6DDh/SN5%Ή]f;sP9&#.Q7렞tu{8kU?|՗5I -CYy4qM奴"4( ĄKN/XY">bZeY29>>foo%As\JpU I`0`<3)˒hus#~I  ׊^ u}c+k.jҊ$MY^^fkk-677Y u#^*y+ NOOy9O  DA~J&-e{MOGӚfH?яfee^RjR ]2EgO3vqrr^0]'&Lo:M,tXu1˫q)E7s,(νR9(\䷿-ko>dFXz`]w1I6̯PF;L,keYVbW+bq+%Teͱ sDչFaeueu1'''L&8 xKKAAx% ϒ^] p>{LXZZbkk{ \hxVB#ɓ'ѣG<~^,K<̨z W*^^ڲ{uE8:$Iy^rnCQy[dkkoyȃ0F .ݟo2⛋ʢd24BV-vEQ]Lxs" \5+c9<<(t:sk3X1[?h W\ $۩  uDAä|hMRt:VWΝ;lnn2??i5ZLYÓ'Ox {{{dYVEZ4u5oDf }POp[ydb!⩚ZͷZk8RU%Y'\?%IbY! j͏U(T:&ڰr6ۑUmEHâ sy7[{^<>}"(RdK۸88ا07?%c|& E^T=AAn""x o8AxSҠﳾ-VWW&Tڪy8];;;5Wz{]z7Ch7 5#x7EMay^\^-o~/~seN*jt;×< s8&Iӈ^*|o!IҒ$q)οsWL&N8<8`oo1`nJ)DQd*"hiir=YX\$IӦ!Uuʲd4w}ӧ2U}'(쁗<7?术 'Fi33uӧ<}c<97m6kӕޤ5/|pҒeQ$iuI̞RavɲIx{{6V[(_)O~W_*}zժQua)˒<˙D8 +0}#xiڈ;u1/EQ0h]k뤕v65Ca0RAAx%  UW//-߿&E(i\Ud Bg4S?c?p8^Bp*kL]^jw9bTpu;FZDNk$t]<ǹ0˫=Mwn}'|rNDAvwa`gU$Tdo*7bt;Fp(KփpձNY6NNNeuupH#t04 Jk vYpeVVV888hz[KAn"x  o0SKk4~յUݿ&KKKz=T0#j1O<ѣGrrr48g:KoY%:ȼ#+ϯ &TWq3цmt.ZZC%zzи&{i/eNpԵ@K6j<ϧц1v*}L&tm;Y;8؅t-o{!18z,,,4p88Qx {G/AAڨAL q]ݿ*4]*D3=zT\c(J^j]QZPky_Q'hm.}Rl%~4Mկ/~IۓB,sĕ[ 3$!csUT4t;ieqc,ՇIs8:p|t>YMA%  oDAAi3S)E$,--qw} ՌT= |(ý=>}D]>T,Qau7u+]ؗ # qv"R& 1tҔe2cŹc\ wauuUJVmו5+s,#MFŅzW&;_KⰭ4 ȋpϟ?ga~`@n9Ϙ6Ԛ^ ggg<{n;=:GTA7C/AA[M 71 ٺÃO>am}~GS~|5ѣGe٬ոʮ<|T&.{.ܖZK:q3s5(TzXVݻ7<ݻDp yStBT1%5W5ǚNکvuy>AFi WWIB\E:ryW+++,--c2pޢ A"  -&T+ O+t:]lvPЄͧZ:>>( E@^K~֞7-l:g) $0S_^rݚ#2"m1 xk>ı|~}8)˂,dyF3tTJNCiK,J,Bnl}9!_ɔ.szzY\\dkk`8f~~%YZZb<s||RE U' ;G> m>o7|ARt:]޾& ?^vdU X^lnnp= $qZ_#sx1ϟ?kmrۿgդ/YQwnw>c"I4W_chvȲ.EYbmo!_/;WPRm>ibd,c2GqRebv=(u-*[?YZ# 74*uuT+KK~TEEla uocHLxNxo ˂һo@MA>:s?%Gc;i/V|kl W1)R9fKUwn*wlf~nMJ0B竣 <~£G'KV|\U~LƯ^.n.߄8’,,$If^m[􊢨*(+K\~X^^ˏcH2֨u uc4a!Tk̬!Į:#ќ(h(^ \iRV>;4OGEa{.,--'I"•գј==;;;1vtXf5WT53I-9b40ću:|sNRUaskݭ;%IoCߗ_QIUUMk-y&dD$NPk}Z$fଛq^Z|JNogB`K0aKO27ggg=`nsZ):ie899ȋy(ۥYf|L}_A0 ׉nll Qh{H,?35;3IffZL@@LkA R.%LnAFf`d0r$Ass39gɛ7oayy0 hR.e锳3GJNgxW :I{?wɫU(d޷}+FWrvgL80 >_}jWt9eYTc};=ϫt'"#HQZٟ+ KӴW ?t: lnn2pt|jUp})ϲ8ACxv H_Apa8ū=^xR?W:H yhtdYFiJ -OV,LvۻFI4Z,H$$1Jk X(ծ8QYaŚ%k}%WZ;'xeYxj^Q|%'cdU~7X,`|=8fiii~T5eNՏ3|tAx^|eϹ^kȼ~M1Gp}I_!C7[GElln,- z-R(((F/sy9"UZOZWWiQZ:Z{ يڟݥ6,I5ay\-Ama-yV{X C_"doף2&O,4rW (FLKh}IZES+=( <=^UzRu{=X]]e82L( W{ujQ96؏^wZkJ.ͧ1A_$xI 3 т ח M*upt;lnn]M.|74M۷ϼ뫹TuhRQv~҅};\^0Z;sydYd2!NVJZkN%tʲr\<8=Mۑ ^x4f霑P\\\V+<.|3c@U91L4b7׸pAEQ eYP;ϿӵR£/..g]^N'Z+5/zFQDEګ䅻&(:qLEi]ՠ\Nᐭ-Fל~8jtMiJ1oդiT+N:D-V߶{UsԯɶHژ  %" <OA LT:1 YX_gwgׯ_7E`cbP& gg;:_;&q[z&vS!r2c Y|Nkh|pHFGh7?[KŬ>buuˋK0gTmjoSkc&ii^*ҭ׶?o7vEkA/A"x ¢{P*gqlfss~*Զ^o!sF;>;svvFcQSK.o٭e:~ 2=Z(e1$]jd:mS5sRxUmNCQ8FS^@MLDׯF}dq3Ԇ5./f\^)51ʲٍ^nhqF,1t;a\X0b0:\emeeIJD*E[`m6k}6z{cTOrןDU5EUPݬ J;'_ KAn57 Jeyo޼asc~Oy@+դ6̲5߿%IP;ЏM$IUU{`ā?1pAdRu'uӵuJ4M(<,b06=1E-N_[Ruyѥr.*7rH,q14M3N,Kprt:]`*khtVn} JY [X-]Zgk\/k;;uɥp)J{h塔M ]fzaYԙ% p!߿gt9"/G3& u9dea?c\:Ii^M, t:U1CQcZDc}Z k,eQkݤ7<[lvQ O{ԆQSK!N-YquuOvtz>#FS+E,{ =z{=!'XJPy-JY2.!(] ][ՔhQj81%XFaĜ۫*4 KkD0U Fr/, <2DAmɞW UN >2/w^:K֚%Td2r+0L12wϬ=ñKQLrۂ.n[̲ kY 'u\]]=Ol1lYBN |ZϹiuUWRY_='˂`Y"x ղ2eYF^ KKC66,[r˜C]R2.1\ԏRd<*,"|=E%zU/Jlr/, <"HObTגEu$'I[A*vlook^xAn|=,VuRdE'''v34,V_/..ehq(t{ux76 8ɲ.š ̂I.//ZO,r* 0w4A!aRNx]K+|uMS r5d< "tbM1h4*DRJ͍ZwotHEa0G#xiV,9,-En( C^$ $M Ҭ$ Eı()V=~yjPjW]LyZI|CAxx|˪-UBY >uY ZX__gK^z6q]B)T%`%KS/.8>>\]إnUDv?q3_\' W_'MJ 㸩Ut:dYR.ỌMa}9y#ңAc̩\ӸP2=\K;?{/7O gg~a6,3F({>+1[}O/GC>qBWjj]=ES]wX1`+,-E^yV94z0OL2$eZw MSdtM8 tGy(("/0Um%hAd+-lVeS+IFWQeQ5vjMok oO)jiUE2qy~ه,! 1eJ )3`B$ 5E֣jCEŕ+*kwp5Q]FdT) KЈ_YZeid3LIUBҬȋ}X=TĔKkFw7_ԩ!*Ax|u ZXT${CsWZcu+ܮvc>^M޼yË/ DQ\Jc`d ?_8==%213!Hf@a&I$I{)cϓKqYyV6t0|]~ߥD̥, E-zpa~CtP]9ZP%Po)5-pɻsk<a3m!|ag?}ߣﳾ6;;;tN3UIs߿wG_ST.P.UC3Ϩs1OӪTӸvEkX{DZJ ߟNgn) q118&t?e6IYvV+\-/I( Ɩ$IÐ<1Tff{c8Yh>5^X{\,kJ0:>K]Ǡ*a1 ֦(:qF'RXV=:2D)ԏҥvI G%oQ?ùjpY=.K]k}tsqsyrtbRqu0dYA^8j'D+UmQ,leTAx |W?Eb+yN_fww-U;gN-1%K8885y^+1RA{yXy~˲d2zgLjn\jü (Q0 DRy8P7dA FF Uw$,#FZQщ;yyUbܑTu'5ےɠ49$C7Y[XY^7=I(1L@j@~.N.0e{6[✚;bwqhl%z)W:V& ; V;ls~~ŘфQ$͘ XB;^k?ڕyss}g].AA^ |Mz8N/+?-N<, ׼|񂵵5(j_9 ʪn9rv~LE(m:P* 1&&[$}.G>|9rAx,SͰesW*n7M-ɎQPa" _~PX!|I#vA!"!/w^+^bҤ1vWלqpp>Oޓ$m[7.uxy9ڊg,X\1'z'Th6l ':WN$FOS%|ӝ> =1$!fF}9@{ڹO,Hai^Sl#nIY.LN*06y%al}VWVW| OP6Oe(T%pUbFDs EZ_Y7W7c3ϴJS-ט(J@yx%pAgy9`u%슓+F났o1+Ps);ºCʊ%֑"x G wA.A@Q.{{{v<=Ngf55\]]qtt>| 3Pv pjϏ :lq<˘L&ԀkӽYU9I_,KI nܾB)N􊢈\\\>^Z*R9IL<|Zf)*'1S̽R*>9JK\x%˃>^mp9fOg`JTUkVvueS= n^#umʅV9Z^R_}# z`GL$ڲ*  S}Q?>'c EA-٣9n ϐ[q4Xbss]_0 AW)k>rtx۷2&)R(~?Ny8wv|ZK$MI)a`a WkWYTeYU)W BX~+8_[ ,蕦)aJ)ַR }"(" #zrLqߚPwd+gVʠx^N[z>=vwVy9eE;G5t~T=o&ڲ`#|B+nO}{;^ze^x-RO+' }TcR<4~u]JUf>f@AA/AKWYKxm02΅,y;;;xU 9LS믿rpx (ԧ]yO[fNSEdRjOanڨ{ZF|M)YaBjy ϖw=!8a!rMV.nEM-/z^jYa@ө9Ec0Xkf1߶8qi '`+u;lm {:/ġ!K( 2(eMsky׮'J9 #ucRښe[) Q!an\a{MM(MxYKf^"z͚V_ "x _,1G+ c]'Oaee޼ynoý.I1Ǽ}}FK4AuFRUH)ޏ\__3 nw0VS к;It:iQ%di}8)t#ρkOirBe.a$x}ҍUϋMpgʢ$MS(r1RIt49LR9+u=baDDr9Z]OK},(ZJҭ5)/x3WR`1XSPgO磵(VPJ!eAECc]bJ3ԧ}V}=8# 2_S|uvZ%S=߿HLt}^Nֆrc,EQ {DQujù9qL'I9l]O#]MU:lܤaG1j{@Qy)K'[J:׏X_b [,"::a%vQVCe;.VU-J+A*јaL,Z{X{) ,2R|O,`ۭ9N/Yu5A% bb]ߣɫW{:IrkK%(N/ ,uݿK* vQo[ikT]$SO c\'A@E+u[vUxOqC70eIY\󃃃'2|3MV9WYe E8?)ZvbWPqW%4]txލNA+"x=Qr$ £_ v^d}}^ֺZ\J5ϷƐ)>|_~swyIjbwW+\^^,'>6~kTF.] 񵫣Wt]ʲ M3&X).|:sRM[%ir}}VډX+oUJqW)TyQ b1|MuۅLmj˶Rfx^A/V B6c# VBS6␚K~`bɧ\mi6^Ǜ.v>AkL @זRR>`ssr@}T%xb󸭜O3ǚ6}Dv7lJq1gZ63@V{^ØPp}5e434X UoږL|=Ք^ M"5[ z ٭1kx񂽽=^|ɠLAW"ֺIex||!eY_r^Qs<[Z&8kI2NIiϚz^^Zk<\N8T}YXxc?4ĂvY?UI)eYjV;jǍ@vq]ObhhMQGJFd`Ѭy˃8x:Glk~j'c^4s_W{4m)),ZG]KOđbygssKOe@6sek})k,k~Oh6| <mJC>b_~Y< @lnn[[[fqYqqq#8::b4gy#xU)z#YYYuڬd1Um>ByaV K,%s0c]9Gn|}?.ho9Y5N/O{x777[j+ &a6w%̏[-^He-(d^ACgk{.KT31f.%UU]^}ՃUYp$jkJRZ+ 5Q`.ӌ,+cL9jXݽGesX+KkxYIox"b  <@% mllkvwwYYY,RM _999a2f7u Qh{ য়~feeɴKRYV}ՌdRXvNqǥ! S᧟~( i͋X"wUPߌ18vߤ5m6~} z4'eZIe \zœ0P,:-ʰG{ȅ-AZCMޖZ`3Bΰ*IO㱲e,3F4Ǖ} Z׬*81#-XD/Ao?E  (bii-^zDQԤi]J)`<svv_~ 4(&xx37 o/ +Γ]pY! 4m/c i^Ƙ*MC?7ic\YMq0"/H8ÚILbʲ( W*~|ƛ&mp/U]areVWt#U92~RbANcܡ(`4pz:"3,9KanZKᛠ AAOk `8˝lnm<aSӤ1(ݻwqrru#"sqtx=yW4.bg0r4a2$Nhmթ4q`A@v:;.]DGG!P[oȰS9I4%MS,ƕzㅪj[AP +·` |GA?dmALȁ ZufufUD:[6`ziER%JY^Y]鲶`)& ,J(Zi8奤KKM/AH  <{aL5^z,--55)LYeш}~'9??g:T\{lV3;WEh0V 3dt:u5vn80<#;{=(nJE/4č2?f\-zҌ4MQ[Sˆ8vW#:jh-Rl kUp 3uhoTeEj_f5TLPEcxS +,/DŽEU-ga u;C 'KAQOwjzz= pfpxp!IJY,"|o[DZA|i 'tL(04— kW1aNh?O4}Eo,fi,˦FM_5pn>O esx9QA)1+++=H+8WUK ] sCpojbs i^U^a~Zr^7 A{MKR .]9 G%C  úmCU4h]*Ý]cuu ^nn2}9>>f2|"ꠞZ ϋ|[mr0e20Nɲ(J^N^G=y^?AR.N̹U{,iIM{ Ϝɜe[z;yDsyqcrԠ2(UUI㳺c}ʰKkSZhjʼn].aem> YkK/K'l%E^cmjϥ5Z`M̵=  d& p8]v`wo/Y[[i=xeI\.9zCNNN]HӴziUW ~vyUnQ H't׭8v:;J)%1?Ec&`8 |Weu{ ^u-8zbe&!a@z\H ]NcRѪe՝ImXnmi^M;Rt;k 8,/,/wX^꧹dqPD/Aֽ}D.  à c0y~uݛ7EZ&pg ]\^^r||̯cjbqѰsAA/&qkG,JҎZI0OHo^y" C.N%Oi/L5P%yeYv>}jpV/PƘtsǿ*ex q b0OhTHQ ]a^jImh?=KٷΎjtXy8XǬY^v)$*[Ԩ/Oᩡǔ"b  b;ᐭ-vvvcBpGq>ptt۷oTcqﻨns}u=Z4ۛyc)˲Im$)EQP}s0*WCw:Y`WWWy|]^I̥59_**'OMFBiP/W(:~/d0(U ^̻a55{⣬A/ n,d" hqϵ}xrmts޾}!1(r悱w/~ +O5iyCQLSdJ֪RPbvNCGWG%Z)<<$O1rypasyeyFfds;.N5׵(r @{ttC/T#w>đGDKc^BˮS}F$BkPVh"K"X{gCNR3-x5Lb$hauu,R5EUA>hf%!  |ċE/O$ 66ֱ}akk ibK3N#?1^ IDAT~t:n%ÂYfPb.׫Ӗԭ"5M/"ֵOmi4' [Ck$ICVA. |Cnnn!ήaDgPf%()T77 R6,؁VnRI3 1@y8{ z qLA!MN9ܖkş ۊZަRIL c DCkR-, |14˰  )jcapBDHPooU$q܊[ J)@]U( 8xo޼<1&2o4;38_ KsUU!/ dE8 >( 0n} ׆?J|7Zc B>a/ԆIů8n]/Ԯ޿VYApRċ^Qje`>颛dz"ic/xyK#DEUЋ$,opBIW8б8^^& Gjx  |'NA3~ODHvx%vww8AJuu-fH9\__8>>h#p#0m=8(*Ԫo.Eg#zyu:ZPD+>65y,`*. qy _g|1uԵZ8JO>aUUiN6p3Ou4ػ4sژMj<̟% cCW]so&I CeHqB55ҘƽĽSrzz=Y i 0FHIQL#I _^   >V\8NvwwoaooϞ=Cem&Ԍ2Ơk\_]xqq~R.&&>QJDĮٶiZs77c\^^4ރo1EQ@)B$Ȳ DV W`a1F\v“S5 '&΋jTS8eEUUZ*$u54WQi#q4Ma ||!cgEb/k& i"ISD[te7Hͧ3pJq1U5ρ % 0_1!v`^&Nk:GGx1O`EDz-.P[.b󏻟Ӹ>~E$`ΐ^m~Lk4M1Q^6ׄcÛ7o޾}+ r ע{kPO6ֺu.Hz!*8Ps ?fo7B4$BihE9f+8HeMa=ڿ98$WA0( KA P%pXN']˗X[[镘>,DItco߾eqg.{j2§:溹++#^~4M\MP*y8Bt%||06FYx[z'ίWʲudͽjyicRe c օo}Ι,Jf"B/VQTS >a?3b #İ_q^Jb }5AAX"x 5v %qWDiHkaoo^.֐ijo/8==q~~dcB'ŝD!_ Ϟ=?oIK7lVp'zMY!i@(,EeArVX|u#?O>~~P QH.IA 2FKk(G(R]*CAA2DiX8Aav^80 l?H*2l!oE8?!8>>t256`<,KTU%ݓk _ˋZ^{˻z3ƚq;\GL> a蟰lwJ"oF8MDAoN)@+_Ni_ AD%]@ 0B'Ȳ[x5^zgϰ v|TUPc v:Kcإ||*TU1>g}}[[XYYp8h4Y6@eHqG}o/74^SQKm֠, /RJGZk ڧk6EQ(rcL&SL&c\\\JGs<+*IZkCjݺ͡T+et k팫wfrsfsi)<V #m&nˋAiV|o "v ܍^ ,}=ׁ7?ɏ{J+ٳgx~{ww12Q hkAXq!ϧ8==޿noଛaCߟy:AXw}&m]^?i WWAyѧIQ[{f}}I`uu}NePJc0 48i2y,1s7S"sy:-4ܤU I`0Y_˫Km 5?vUc|B,~B縺B]ס~i#"qz,9JTUF3Uz5WSϫ=3>;^ЃP*lL?Wy“v3"T!~\ S! K_~  mll˗x5^zgۈCx5Çxp||A>H&A}}8AUh&x~wx++ ϋ*qw}s_3Kq31=T) n#~@ ZǘOQ %AnX[[׿V RD 8ǘN8==xOF{<1ʲxs4hME1#P5_gqHQTiyqg]ϽS{';Z kl[˫U/ l#z}8 2AY`ԆDKiI_}vo[/@׿~o}gt %RִM֢ ^ h1 ^;ӤAwe+۷x`wkΙ5~uXymے{v(Rx9NNN021 d6lkյ_t=̺jQIm-a ?Cj~CŽaٶ.($I@ϵ!jSA\Ӊh {sC9 {NpipD2= NsCB7'{رA^T$ "#=W~0} 46^z=`uuu&[sܦ1qrrˋKUj5ݲ(Sp;3u~7cDImffXvL&8xu|89p4F{?ͦ5Tcpg0Nqqq`|֚6mj1_"]QN9Zhݢ(E>5k58 y&ߤLu!MSdYkmpHrt˖eqqfZ֙{zzVn=Q/qD7ic;CA>= ?ƒZo L7kSjC!H޺Q/"iF}lllu8}gggxMpO[^YN6{[Gh]RA BVUU1޾}$Ix58X_>=5PQh[-_E/Aekᥴbz%@wdsƢ65PF{'6GԘ@xW) ;kB=_Oh"n!^C>66fD̒!clpw5}K~A~5PK&AAY1 (p4klmocRԄ(`Em*Ã|7770vԃ.<ŵ5S[4Od< c GX]]FƠW 5FuxQ1Lm:׼pHԡ_0xC}C ְ,K$OU8S/PJ!"0K} s`7sX_,<O]<&3u\~Ag%=3K /AAp+ZtHm@p0`oo;_3 C3tG[9pyyC>|%1] _?rCuo\8;1q: UF#6)t# CG^t6mL8dAEf%!x#  _ق3g~t0 795}x677:C ^"qvvǏ3 6IѱjK$,kPj 0֠ (%'OMZbAP%4E$A l>o$IfOLu>/>ܼuٗTuqZ|h^װ Ak)G[7Pː,Z c:^XW  ts^ K ( ?pD0mi5x_>VWW1" c0q~v#}?~DQp΁BOuPKO-ekbԥVF#h,MAJZ`> Y-<^jUUwCϠ+Dma@L3U Ji[c;!Ի1e0F6Q$ .4q/~G3Xa u -\^Mւn>ZEpŮ60?vI Y >Kb9-?>N`-x^a[WAJ'''xo߾ʲ^D2x~џ.෸_9 ![E˫+!IbggZ+DQ E4ˠA^丸~u,ao&+A!xCZEQ"Jn֑F$`A@|:ڵ~+Pѝbfw1>S4̧/XT PwҐybȭ5sAwy1#&<,3T6) |6"x bt{$X |q Ɵ&(18~x50EQ'x~sqs31޼yc\]^!s_{$@!u oGlfNkDwmi86X__UkF!ccooN(eU=g xPԆQ!Ă|=&R~N2*A$0Zj搦&!L$,rp33_0&8v0ơec@%es.2$3`j۾bVrҬ " r,E[kKM9 VVW?x5666l0|Z(puuC/Ƈ0aNgw0ͤ2w5KBpKlEkcpyu @$XYY)uz ^xiWWWBUWvYX.Aa0RJ+hC·DDm4u;g.5Jxe[͡Nb5d[!l|Ovu@ /xƠ~rLR %O 1N005?b|8;Fְ=a{{,I]H#9yӳ3'''1ƟP@ *q:yčT!ʲ͵O p腯() Eԥ6 $I5<ދ=icptkukD[#OO?7*/\UUwlCaH b_ϫjQst)JJn>`ؤɻ1qf eY{1 /F!`>YНsT# 9TEYըjkG-9# |)"x ܥ2WAաM=^j/Nc7&Ȳ ;vZg.֠; W#~9 ;Q[k6f{HSOkPEnk,ΫDa,p֡( !b`ggi  4n7kTU"/pyq*;M;; IDAT;߉^&#ŭhGބjK690BQP%(FN\;RiNeam4jx}ʕD GfK6?Q庳L RpL(+4G^x̍I¼'{Kp Q#0֡, %4)RF  OA&N[ܝsj4SgihrbxQC+A6:vx܋]i¹p;RkD0Nq~~w8;;t: ʹxΒ2`дM~f 0ym`2|MoϢT4'Mi(Ak 0x2)޽;@dF33"BG>3>"/hif %S>k2-D BHUUCҪKOHhkj14A0ck 23,Wǭ[k~e?)>bWYFmyuUPi.r`HisYeZ{vZ:1|irp ^MHADAGߟ/[/a;&4&ϟc4Aku|"9C)lp݉?N;%) i,,7znpvv #<:>hGI0u绻@Quw]c6]:s}+ヤ<>1Ʌ% ap׏"*%FEulZ۴I ˼U6=)g46wzrbji*З:uhӹvMP֢-dZ(RXG [,[.5z["8G0J<0KTfLO,A#  ?鮝Zf~P[A8e={W^8mC0ygt:׿רMݾN]KoWS?]=Ņ:^ϊ(p0bwwYamm ӫɔNh/^ / EK\_UUY" ^LscĜSn|2#ĘEX\G+Ax4s9gQ5ʪBQPR*Kq+v%I4IQƥKcC|zc)?v>9ӘOxw.ǬhysYl !/*SEvs4HD9b$PUyQc<)0*,(^KzRGXO'H ^  n&jB3=[eǰ(|  "8!Db: _܌a?>I@=pWq#t41X{hf|L&b8 8h4dg[sjy13p||a3mkB)YN wwYӋ;P%8F$3^fء9F'0A\Ĉtk ]^I/ r<7%,Ыuwk,iY ĽokD/DŽ0xc:PV+"5O{3D/"0{wWYYyɤdRi8h5]wd m- % 7fv3.BQؐZP[?EO[6Ϳ;"DQx_ϱp~)xx#a> j$Pp:hRSvQZ'鹹f!% x#di lmnF#Dq i,M5zf縼BQ!S!ˁـɂٶW+%? '/5s5qH9#(C kD~{ t`8ԦFQ`$I@!_֑x!=c$I4Q[TƯsw8 9.a3>ƇvuH> W<"{/q?tm-(PYoq,-Ɠ ipkB5M/м*"Yu`En0~UaYuHkZ%|#,J8破n|o;.S]'|Aa>qIiA 4M\  xr71NQUe^u[;],,,@8Go Y7)298ZC abD0hTX_EU3å2^j> JԮ+ZTU,Q%8ZpP!҈"Fj ]{A 8^RuEt! č@JKAuW+c|L˷>[crL*o*\T SđFG`4mTz]豽P?e>|=L¤ԥ0lX:ﺻquc:PVrH]^7rEAadjI4[3VAafXrpl|8#(4" 5t 桔uzBX/"ЦCd7 bb M1"(i| i++xb/_K< . Bm ;Wװ΁l͉'ݗWywQ  Tu+(FQUi B0`GeюAfa`%R :Vb )HAiPP AyǫZFU100,"݃@ P3mn Dd^uph'j]Z03@爂KGqû9kx(F0V5T^-P[뚲\^ҍ&&cG3^J51/7ƴ~=΁c 8 ؂pOj1' =xw>5؟`D u)YA6B"((_w}42}NNCߌy[wͺU$BM ci`2P P"$k}m,bE ?AI!B I6z{'2^ T"BkD##Dq8c Em`I)A.Z8p֢ Q9؊j@>LIbsk/^ao϶E41S jL|Ke]EakKێy Sf~dO1.qFְO5EPV 3^dry~Ӯ/r ͈E :bWji(aSAo/J BU6UU \`K/~kk`Á`C9Eo| cUe1Tj0ݥ44W7gLG 3Wo^ ]8E#Ԥmp=T_Lvb8I!DH8| ]qCGt^Isf^܉^M6 umak( QN+ p%0A`0v?/0ZAG*砻w pss'p޼}s#BE٫wFrn!_Z7P5./qta{k ϶AVWAD>d#N6V& ..Op3![ÚNY8弰k$ (F2Zj?%QAEڋީs)z{s^M SװƁ `+rZ+E"/Q5ꪆ\m`# MQH]C]]wm%R/v*״sޘUpzuE]U(Uk@'>.aAń8 XTt%#u %Q H^"(U͒ډ^{nD!ApY65`M [󺄳ƬAD~pRVS 蹪|P[L~*( }ͨɤ6 Sp䫵>?]}=Kd3Cݮ `YPVɴM˫ n&%!MzNzK#2 |MC_AGJ4t Sdbi8'#L)@1N5-|mw9֠}ZCgu5B~cz3E5PM F]ʂVl_gȆVm ֢Mʲ9qp`:a9g߯~~=q;\wXS7nES׸vvv1ʰֶ5k( aeuݽm\O obyC5}\:h # VRęХ :uWD'h [9dc:ȧʢB]l8U\?V. gumv;4b;5.r/xUFU Jkp?3)i ) G# 1G. Q"Dqꅮ(bPT7iC0;Yk3[07WLW0uS+/~9S wb f׊HM/!Bkr^}ݨInpq1Jg#V"(E8IUOz}k*=9tk-C]w)8h0kXP5oJ\]Mquc2P &^{n"ܒ[G.A_ Ii( 6,2Z31,[R>k8$F:LG2Lc$QAcOq *=Y8j\SNX*bĎN!P#g/t&GWED1olc:@j,G_9uK+N>~x<1;9޾_n?-<m7Ab%rړH7:IYE+|8ƻUDZae b"(T :aRl-|-_0R*|8L[57#iXHidpszٺ5l]W!vBp f(to7 M^pͬ ]}4`X,-8`8Ri!""ojf/B/Wg_ϳGwlܭFZ6xW8` FE 8eaa}p,Xp4"‰e]dßAss^KEIb8B kJhC$ȼk[[]wx/8:zS8kC;fc>!jpc<6PsKraƵцX `Oal!66W(+QSs 5p!`XGf@3aL! $z.5S'x-JؿK7 IDATc (x`*gZAE4V0+s^Oq}qkLorui) fjMUvOKNۘ\SaᜯeCQR]ZD4).CFk@+8|>V~`l+wNv,h-rͯ.]QLD PV(^6 U,PSe>q _[kl* |kY#zT3( :Xkc 2Uln:h'*'G pnj*{(uUȲ׃r;5sUX/C)H`,a<)qv6 NƸVG Iu KC/AAv%LCi4`u+X\pՋ] um©[R"Z'W+t-Z ކ &9 E>":tD )BD.1(1u&ba V)4byb޾39j  "ǎ砘Kh&%| zdHnzЪ.a\xtcAe V `Z1.o0.WSFH9D˕޴KplW?}Rfvw=yJ233/HJmSIf'|g!՗0dԌ* yߓ^dzA kX "ب KY:P֎f7Bh<9^It.eWƏ[RXH)˱u U^ C4 EQ  %U!\AI>"Ͽǯlt )RJI&11 +0B\u%Ɩ1g:kЮOHw8?2(z:xeB]q{wnw) SI.Ք0_XΞ nU%Ϡ*Y2*6up{ywCJdW$qaFFFFs#^h|:!Tt a$UDۯ@J$^,ؾZPo*U,ZMa>KcC|⁞Z,@ I&& <{]sk֋KBj>~p3%ڏQ3ӟ HKFI'BVx}ӳ̧(W7 vZ\_qu--ӆ @"󤆉_@urUy@wpHcNCHMݔe)4raE\zOhC!QiDZK6ey[ ׸<3狻NB6*xZM +KgЪڊ T]T \O1 621fdNd)KOaJlQżĕ5UiI-:31FM&k=lAaϿn UI:6Mҳ;q"xlg X~:˰'kjA"=?y{*rac !}yg Bjx)8A*G.ؼYsz՚ba1<@zah 'ӮD>qDz.9E}?%D^w;="тER;|!B noi'5o?ί+?~w@AFny]d&㳦0RvNF]>{nʡqFn[-f2\};.]J}Q:֭5՝e!<,Nk~r@kG<5e{\a1pP-m-qu v`b!VdS%p^rɑ^g s*aۂʨ ҤKщ : Z-h0HEcdfPY.d2Y&Ԑ|ոyH!=b`*z+D##1Qe]Xu%H&ot^cИ9@2Qu TCUS3&fyHƼ*efSc, 9Gbx=(/"Wey c\5JVq. Ǿ \]y?᯿n C*(0㌌D&2222222qx}Ӻ:m`KC.Y^Ԭ/l^Y_.V ư'Hѡ'ע> Mс@ceX"zъQ {Zv/?߹bR3؀U˂Iotd| d9ltTۤѕs=#) ِHDyz~GxSۻ-Xje}s]{K{:iŜABGg2ɽ7?="q>+(MQ"P,.)K?raTSK|Č?ʀE4+Faތj#ŋ# jl-6 Z!nQ Dnd2 mәuH5z$8z0!r cE"fW'+Z ۧLErrzn79n4:sbQPWS`{[JM!g u~Q9CFzZ{Ncxh[᏿{]ǡJܾ㾽wTG/'V`ז1 !#̴IR2dw dWn@%M]z.vck/G&2222222@;]b&Soe>e֘\YXybzE, Al@m\m!FjNl O)/]"yt[<DSOh ˂j]Sm,5o%+ɥ :z`6%UWVt=x~$D&Y$={ҢڢcTźbzMrP:i8% ua)娽'f/=6evCzd&:(F:+Ԩ\PTnr7n>5QhJ46Okf+"'z&=)^4R51o˂p WGZn)5^X00D콋+t*N;.:~[ >>sunP%Uc8Cڡ!ZGeR)?*T8T=GkCk@Ê%!t黜{O7Z=~egy'7=o}wNZZ"ܑɮD&2222222T9j#xʪTl߬y 6V.K .@"ԄdՓ^kl8L>gBGb$t=,R.NiP= ԛnA}ٵƣa[!]:m)eGgᮽaמ8ۧz^'x-Jq`*aejSb+!ؖF{ˣ&Q!ֿ@==i{ߎTݢhH$PP [W:H =]HZuш9Ru +^?RMFLjbQ)P.X_QXWc N }>1:|==^Iər|p}43[XXq1;Zz{"-5̻S:QũTh B=](,E,(JDlm:?r?zZfaRj ji[7o폏{늠1N@ G6####["^GNȮ' #CTvP0N(ʂko6l^Xl+` & vio Tu:jܕs-ٱ $\)xM^]& UYܼfVS8to~! *Y}$:T bZ|X]RVHZ lY],VTƶt@0!Nˑ$7גG]Sd|ܳ?nYXR7LY<jSmWkvvO8@hZTF p\WSA dr]a\KŖz}Aטb;Nj +zNg'}`@QՍ 3lJx\MDZKc Hm-F,gwM* 7=(4m}ûww[4 J2ﴛSjo)J_ۦOOQe*-WKn:vG~{󆛻 %P5}y-ȄWFFFFFFQX5( 3et`vT7^%%զ)RcX $[ '>Ǎ3]G~eEݜU}6X }*[P׎9zAYxu vqO9:4o[>њAM9F{>w$u3Y534WQ*Vau.er0p=zD cI:͑(M]4TS㬱O~:pXCUH y')Wo:sƲX⊂(-#>phۤȈ:bb+8&zfWƏsQ9+oɮ)pbZ]X_R.6%WSJEx g\Q))2,w=;r-)_=32222^|+J@ddddddgɮU$BXz]rf˫]\PKlmPQu98 ^>3F;*!{v4c1m N4}$KNmHqf e }.d0%ΐ^gtֆȮob @w;wϯﹾw!X(Ft0x3jru)/2rzfdWXsB嫃LR㱅Z.l^xZ =ٕvFg? ͓/k|͓f!2^"X ,1(ږ{A=RW I2 y}`Xۧ!K|'|H>5:>@1#3i$\%]AH׆j3̮z]̮ODP@5 q<;j7gQfu1ԡal&}HU@lN[k)peC6m +VIj;מ{#i2׍>Or>㓇idB>ˁ1W5rKR, [Ԥۏ!s(~Řй c_{RoVRmi#+j4܀-m'h7_S4F23@o!khbՠ!pwѰw11o{Ʊ\ZHҵd Ϲ,+zn:mxpޒSUbz1ZPuݮ~;~?(5A+HEKPĢ,de|g!Cxm3g*@EmXDe/֗ ʕT2]$%4 Gw&£3Of-YzDܝ`'THzu].WtmG!ĝϩY"z6.=o{:;z%Dݡo\-Vԫ W0E $#`b*զ,䢏Qk#UԉROBz?Sg R5^M$EL:%D -CG@y~yeM]WXc&st]ׇ6H^QR7F_f[%{rRbuVtp8叿nGo:ڮDADEGģNu?f2##oA&222222^r;GWQ::pcYp˖_,EmP!^ʐU}WoY/|j$:E1!:v Ccc{* GrkTxj ʲX}f#q_HyRVK4̩{lUbHU'c ++,ұ+ #tQ`0XDsC q572i1%z]xNajK qU2Ĥ/v|cu$fS%(4&RZ2" :|"dHD&>zMk=|CinUA)\8R81aTkF>OriJd4}i}^{΅NTQ=Y.\3q(QK{s{;>}OKBdRbc42_$]@d+#####/'Sې jcQEr/[6֬ l-PB &j IDATɮ~}I~UkoN ubXvp+;v~ѾLePw>2Qp=;ξ89Ry_H̖ؾZrfjUA3.fOXVVm7S_zZ!3Y4!jBlA;!h d=Ccjo"J=)ikdbl-rTKU13XS9vEld5jɱ?"LQ[|@U%΋|6uZ)l{UdKkh5M۰wyd)X,u%echTWc'j&IkQ?k*QQ\L~+RFO\n,7w=-yo{nn͠T EOT$7xÜpF?x"^RXSW@,پpfrbSlK%>Mc\5 IčeijfEt.p6 }$k6}JH|HcQ!4e)*KV%W[.\y]a*CM]R&۪evO+Ls޾p1ɾӎA]4psuwwx|cdhnJ&~&}YOd\FFF)2ᕑ2;:L#هl9 bWۨ205 u" a`<,z]rm蚖=!Z ar޾weoUuMW==}SFBJQZM$EPס5lIʱr+IGouF86FG .h{ 7 kTØ4dUŚj\lp q%H$Ua:siޜO+QX B%ZP ew >Chl(T,= j'QGJjK9CE]PWD$E{øv ړ^aj7Y`DSű;m "PB mg7׷޾寷?aV"'):̞JrM3222^2ᕑbP6_,QRo 6+,75/A$dMxFՂ`%N-mfO0tu)tі&;H/?}zc?5XA;Y±l_o\.P x+T#iO"͆fLf#)&mUO7>^WaҤ1liq8ͫ%m6]=͒T./[Fdۓ ӝߨj&ͳB7?,. SڲT ۚz]bJl[1anh 5=RFx$$m3oj9Ak RUbIsh隀z0̙F䊔p3dIC\L-W b)xDv1f~=2_q~Zǟ7!h4ZLQRK|vh~wv 4((FRJKja-'k22LW;5w&w=!iTcB*Ykvײ4(Q^77LXFƓǎWDHogaW)lu2(Y>2yTqزKzEPwTFcʑHN+ٶ%,!tg븿c]KP.^t!H -*M$z-*ČȸlwD;nP,%dFKF mힿ]QMkh;J2J2f~a'd=JN<~LbFFFƋB&222222^f{g.D]1L!T˒66W j=^5ͺ+N:+pH2"9Oig02_a a Ur],(l@iaPvyOS̩df׻5 I񪈍6a±.s AM5\O}_?ڀ#{L&S*ajKL\) b pP+]O_iM8(@9K4t}=a. EO$r\̃huOdŸU qCEmkCTiܬd X Z")ZBl:wCe*;ﹺ-׷no[vGbj񟈮~*@-_~//@y 1@U%Jb]XR*liP(-ddnЗH:q Τy,Q\eXmWSv=@1O52M*ͤxPL@ը t8'T"Z+ʅL{":ϟ2>,I͠,?*ϛSEAղ!yF-Y0?JoܓWU2%[ԶII`\IQ/p%4REP whC1#1/FeEڲ^Yo^!@(P JK{{>a* Ea)˂p8k2I5zZB @{i=Mӱ߷ ]nwH_ np8i+ڮī\BM߷fXq>ǻeuWFFFB&222222^8=בh Dk/q uRxU[K%<٥?ٱef;3ϥ1]Hx b)-,킮n=Nic6^<y.IC/^eCj rA!b:ez`*)+'H"[dKO#sUKSccBz%^|I|K$%nP0N(낰*%ղ t σe$dLve<պ_1!"-e+زF\c(_0^4Tgk$E&uB-6A1Gdr6?t&"I,EZ^^߬6)U\HxT;}#'_\|KrQKJ^}NM3!fu{wJHts{{ݞ=͡WOևP-ME"`lRuEkE3锹k932222~vd+######cqUEIW0D O|w+ytb`\TF,VP*exv IsH_ZLvD&R0o&I2*UUVc`{ 8iWUDdl ?$S&ѓo[/}9$YpNRnTE((jqn#Q78t2.yxs?t=%=꽢UTf)N0KuMqo >" gm!'dW.\. EWQQT5(bY,姮54f*bWPT =( AwsoGHq9ZʄA%ʪf_\\P/ejc1BGۆۖ{oh>fOjk; P ǫ &]"k&bU\kRsINXfgWFFFFƏLxedddddD̚+Q\aX*VU0Oq\ꉟz MꙆ)YEbL#U@p,{) b'=ƹ:8wTrKF{=+ݝ:N8&FcŔX.x5'UuBZC+>^q{phJX7CP&MFd8r$ZYwK4jiχOCox%P/+U,bGDTӸF?H}=~gXĈ2rP EeE<'$kЇf>η':_il]&sߍ(^!V\T [DvdQA4lI,E ં..Й6$J1{7Ly~hXdWQU-peu%h 7+R2&dCWR/[DTFM>C"2({b`Ynlu3 EP#,8sssn8T-:俥 0qU>#ǵUfb;1gw#AFFFFE&2222222KE1FeURT1#_8)KA}g *(xe_>/iLy$Ow-vꐡWzYZDRQIr>{gJY9g̽A#ŢZ4<yOu!r]֕U+*`l*^S8g|EM^=B0&^ĸx^tBD!QiO!V'֪YV%vz*5C2Iqt~׷Tq2Ⱦn$ {AYVo0222222?2ᕑB1MTYg)(WX0}h$Q!of:y+#UV%lhO(;O\Ox {||,dd{zW&#gIE{/!_;_p iN\([dun̊ \=7#%bc.Y1&37˪ 1W:5:v,T$amubl1#$ I)_޼zMU1 dzԵkbۃ*6 IDATLs0y:S{LxfnK8KUUu"%%TE68c-+BlvdtSɤw֦*>S9(A%6)U˂J֬NbzPdQ'.Gy1UI<3Ws]+1WQ`s%yG /JPDd$^uӫx_JWD( DW`CĂH!gm:ʪ7pyqz97T$3 n5W\_@cLZ ̯Ak;O,(oKx]zČm3]bcX 2 _\a): ~L*Ԍ3I4k}38<'M$WZSXUIc~ùzOQ:뗱K=J-lkSXEIYXgƼB™3_YD4.DXHRPT5'DWָePI; U'uL,t l+!pej|绾187fD If^&19Ώ NR<DZ-o19 ...Y,8P5K?mrssûﹽm[#[ku/hPE1`ǃ>4I[/3P,E(02/99]=Fk_qm^(j( 5ڧIVc /cb 0NI9W7X I1IoRjWNI,!+X,l6..l6mt / mv\]]{>lT?|mu"gddddd|!2ᕑ!2q2 4]?{_Ȯ,)U`{^ 5H*fjX | *$$!Q }_ύ1XCvX.|Dtd-@U( O^ BPp"EC٘,m,g!E<ܯo5+>B&Sel̙T \{"V{v6QzQ /g Jղ,B,KG2&^0C/c K(EaaVZ4IJi; q82W$zh'( -([K!ۓ^XU3թdH"<nooqww| m_+_s=5V5꺎-GP&2@P('BP( M Rlic.DDTeuo*ҫ1eP SJt{琋n`\`EQ( c;2P]k0t)':O@0D%¢x#`:wH za d8E2Řd,`,MuG5 DVFl$˭E`kBXb> WW('evm[k<<<`ݢk8?_B<&{jvioT(h( BmC0֠(-l${K=eR>kx`Mq4NUjr$M]bGB;w> =i=f<Qb=@N6`#`TAIYQ˂B]@ JGͶAٗx&6dkD[L&s/f3E$vfF4XVxvE4Ώ/}=M{7{iZ e(٭H9zP( 'D0Z^րL.LDPV%%vt삼Kֆ~x4,݃O\xv2OVeCd)%YHy9[>X+*V1gu6XPf1WK7'˼(w C4]FWRW@Jjxjߤ+%~br2h Hvu]p~vX,19:&}bR${HWZUOt>H8LGr|g) B}PTTk"̯>(P:>`-ۀo[ 2waDC=% X{<"S 5$ #|A$yXP;Acz"ačQX|z(K7&$S$LM$'s=wd_Y(+, a1,𛄞@xvHxuQP@g;g;5L%~S/('a5V/:* BwWO.B?7C]}S kC8-T$j]`3X)ި3Q2[>a{'MP$.c 4PIJSUA_@No_DH\a9\8H|1|15../` 5'}t]}UabZa^i0h}z}\RP5-z(1YRFBP(:GP}Dx' =%^oVɂ2t\o)}z7"+<*yYrN8qaIϋm/l)2+w_&->瞏ЛRjS>r}Al) } /DY,^bSќ^p1(p~}ldUP UaF۶vl6l6mw.*B47|^E8{'-z,W(Ϟh>Q( ANlbkL^ "M#mDhE4XqL߼;e@>tӚXD ߈増quL~rCFO3ygαjh$&?(R"q_eQ\_Xk:Z.V$XM`^cZaۡix=}`Ph{TIt KY BP|SАs:\??? !cfAgzF]PBDjfB5^:qR0#uF90:kO<>?BM3t& o %+C *1IȯC`T͋}tTd斎3[CA!Ȯ6 gj,f.c0Lqss ʲ{B1Ƚ "=}s"I6$I|vxka޽B8WBBP(︣.JVxmIf*yV>qbi7&qQlN@L5>^gχygtr*\ 12<$Mr3Ώ{Qߑw:qdd)Ci]dJHLhd<8A4FPe3qw WWW(`auj,Kޏ- EO| x+*% B{c/ʎCR_T녖V?7 P^yH7_6 cRGT7s=6#mphz+LSc}m:_r<ڝ :'Uz)~86BP(?:py#k6,4) e_Gv*'&\*%x]'P!q 5Xf!XAO@H3Zko?|)'f!!jU9%5J4SV+^̒ʮ\?GTՠ( f3, \ϯqu/2ft%UXxxxfA۶`/ѥ\PO :+_o!H-+u%]Q̖\d4<~;MIRY'CQ8HLĭRDyT; T@$كC̬636TCσ0d0L0_n \fL&0Oh]_1ٍsnHfUBc77<s=gg"'{8#II(lt)lHB 1&[YAIED)8Od(~!#^N:A0^D0Dׯ;, \feV22^n`_7XXE«pG{!֬ ܭVz%? jiP(/8|sO>7NP~UjV0= !#M>mс«&9Y ԫ2()d,t[-zY$;L[j(jX; 3[ý?[؞$8) O%:`6 ~ I cmGѶ--ZQk8 *Ȩ+Bܦ)?Jx) KGr_o؆3st IHvy]BD`C8*>gI?I#2p(*3 <$ 헯5#: tCjBJU8U ʎhSx͒H@`/zQ:94[xp=K2e^Y4$'3C91Wrg>v4SVpE n \\\s@H`M]Ua^]s( F69"υ^ BO/ydH8ܲ !,FiѴgVJ13;ٶ}IѷLmtr,vx ~~ dǭt2sp1Sd=V(^9F~kɥ~$ >(5d eVoi= uJ`|C. %euw{[\L&YEkx~ufrnGkc:< E>*?Jx) B!+s]Tͱ.գ|! @(A񎅏/=N"!x=C)yo'^",|hQ7㙥Ŏl|wDP]Sh_"={sK` )g'"1)9nn01Pw(3{VpɢP(>ZPfPKP(.}xe ΰk\(N ѭ4m?%0k:t{DOj 5:obqz<\I?]F3I`/Y8{,SMLcrW =;ܫw$ӈiLؽP/$Y:{@d=q*z!e '5"9v{V+l;4u]g'KPhoQ⻣&P(o|A M|-X nۻkPF;ah6'maum>$0 I*D)mb:ǞZv=B @2"E.~\_"F;Cǐ2d2edy?I?=] `8ZC1q҈"H"\Pw>2XXX 7lv,( `u6 ﱎꮦmC.WP(4}٨$._o % ;O {=ڟhVHl6^1)&=c!ùht' S2?^]x'kkb} AõQ≶}y L$$1\l'ۺgGOrhT`w |DKC3kH2ZcM, ,p=l[G_h M *K] Y.PKP(~܁+R%t[.#4Hxu<#}?$&#Hwϝ}tnI&NZ };pPL [%[GӬuPK0ԗQPf3+7ᶯI( .: g^=9!,R/8bLR⸊5=ws8Z:^ԋɣJ+Z`eX] ${p A.r 0NY`qs)9T m *2y ɑ6,Nzo7^w C"Mt2C9)` >QɼDUxOλd?g> /7uON@bAyϒYoH'opS IDAT 7!}.NK9Z % nȞڔ0sASbP'uh;t°AIq/|jD%ڰ \T;xB&=^KdzeW!YP͋Mq}0w@wP v8̧Ngsw y?tb}50d!l[Fo;8aKÃLg;Wsa(,ZyddqO%c;whc7'u뾌pog>@AΐzˁA$Jww/L0DI {kQU%PUUl.E}ۧ1R( QegwTY\j' C kC 1YqU׺zD}䷆l+XP%X5mvFBj42  APYAbI9ҰA5 0 R2 a!ٕ QE4$&x/h]n56{'[4Pb{zR>[jSeQ]jG{gśG$m  B.ȱԡI+7nonp{s+Xc„@ Qi~_cb\b\Xp P(~ԪM*36BP(NmnL.=6MCqo0G«h|'$EH/-E,O8  ]W_J5բEN5ͮ~Wk ġ.Jz}D:x`9$S<)q;;Uj]{Q!?OŁpmla }jzW}lOqC!|jvPyA|0N}<m8 Tw߂ URV'Xcpyybql6vd=,] M|R(tM9Οh>HtKP(OnvÝC_cO;ASu(5]f߁vbCQp}}@8"$sAD 4]}m1kdHwjԻe10(IJγHyB鞷{=@S! xqw (/`/Lg&>Ga ժ1}`z3R~43$*o໠w5v M݁=Br唲4xˍxJK,pPyBQ^\(DAZ:L}rn=K@lP/K)@v. %*%mkAQLp=7nonpyy(@D~Mb06-5m_K(?h}qB#M^ BxrC؊ )  5V֠5hԂf<`*9>[+l[= ?Cb1he֨FlPND5KxAurt6Hy=$1BB"XoQmk\n(/`*5Wv|H}f0%icӰB"B:FSwv5mAFa%kYmbFoWQZCq`6AWQLjEQƆ:JH9ҋz"j<"o`qHx=]k13Mzl-6Ơ,'/777->^&M`` W1 ŷ|DoW*(R( nї'(N8w ӋrM kB {qʫވ28h+:<>dݤB{tGcڡ޵pqFr+=:(]'1OZ LT&,oTh[^Mq2LA caqQu6䉘sVY@xojx%cq:vQ(x0 CĀxk;%ZƄOL ɖ<&d92DE.X]{o%ҋhXo$`aXc1Lp}}ۛeYtaǾ]Jp{n/un?TKBP(?v{:|V^Y$!y |hv-KHPa@X6H/zڙzJp8=gJ?Xvm*lW;4UnWhfpH(gDzZ}z"q=ꘖxd A-Z5f7-c2F]k>g1Io?YoLd$#_bdCck5h5 *ՐUQkdiHa_#R` L.fE(AtK"=s9CzщN F1YC]GW[@\pA(4;<Ӧz\, K|>-puuߊPyvHu9o>HMPK堄BP(?5Q-1ԕ"fͮnբAS9L6,Md?xm1M1(!HE@Mb[WjqPw TnֳjEE(0,DHMV,&'jyg{jSԘmbR0&R^[mzh6DAbZ) u.1Z<w=%"E؁0j[آD9% ,K' Zpm)ogqW&DÈ|@\ bFA1IY Z\]]77X, {;D2ACl|xzFv WB36|k@ /BP(~ZFbB!Ă;@Eݢl1( K`pPt68(:ȷQH;P aPm]:Uj]EfiȖ@<>GCrl6KCSD5R^~yP UaNI9 $%lQ*+D$,:DvweQ=kk`}FSu3 6WGO;PU#k0%b c-+"UNtzFa.!eu(]QeH`ðw-BS`ɪ1bT@Q-N Hb%ڶnzrf ]p+ % B''S@ %,3\Qպn]N  `~IY7~7}RXT]D@mj~Sw 7E BTx5ONΌdH(DB $ЁK46X'E,|hնdCyYz$hm0@ RU}N4Ĥu1Dp[7{V;T=\@vqd!:T0B;8?L ]cQ3b;vQ*w"߬ S/9RJ'g"HVTFWWhk񽑤9MyTcP%׸ (2^Rm[fF6ج7XXר `HP(/ % BӇC 7 \è{ְS6|d5 ˤu,Ev CLР;Cx~jv#" ($d7+@xQ"A^PΦPSka #3(vUFN~K(UUISrVV4;lW;l;ue>|ڳ*>!g;PGA ~LQa9C8^H\?ϕn0Jma A% Z uE= wV;,![kqyyb*ڰMꮨޣ*,WKk=gdBP(_xS' BP(~Np]rZMWli@''N'B(]tp E565lWUH{Ecu>aeIdeIJ.1Z&We1Q)WN Lfba`Q/ )uؔ+9Jsג]rTTL&;V c4k< . Y-SU?xӯIcw!( `'0A4C)xA$=ɏ* u\ I|] ]]w5`wȱdY덣Yꈼm!LIh'ح*.0@ E1$Lt\ê78 #ΟǬiO U:$P- ]m[lW;ح*Al`$~DWPF4'~^Xx;`)D<;k -N/QN.`Jʴ>T?zF_ 2zVv/ѷ7c.!-~]wGQrm]"vnnnpss1}0ڶE^=6 hQ(GWC1 qt* B0C9B1o"eV̦^oaJbbQN  V ib\k&_7mTK˘;㡭ؠmj+#X*``Tljms{'9]ڔ]#Ykq'pnUZ-Ԁ.2Bda s0N^oCv #Ƭ3;L:]$&x-T҅^JڰDt\(:^ON'"xH`@@wC7@m 6].\(oc^@VGWǏQQ+A uWCTKz~.׸b|"^^ᵫvXW}]ہXvQ(:?S#9S( B"IM>8TY``m14 ”``C\$sȀ/wlS.kY'{zuax9Sy}8y/cD=%'/J=2;a64@ڣZ1]] `b- ˔ӓ243}yHHR3 &\luv`8XZR$^ ا9%Bzb{r"[ k ֔h*4Fx7fU!_Jk:cN/ CowpZXv>c=D8^<܄桦줜b~-q1,k_C]nXX.V;8c%+4D3lQ|1:x B^aBG?EUHV^<9U  PN i 3Q's>/i)qȮ芪Pzˊ󂦊_ר7 |+"12on/ك'B(< dEܠHzi~ :H/2M]Ya50^L@#>22 TBi>Qfb⹷Ȯǒ!]Uxg k6]TC1O5ocPl] HPuJ"[֠oal5"RncA񝢈™+Lˈ@2 x{5[ 0pϤole& 0& s,]a2X[B0dU5- V j}_׍^-NZ"K_b__0PH8 Emb\꺆kնǷB[,O/ m̬BP(q=aO@$,{xN...1L KPi` C"Y:7Z0A֜T{ʜ36ְ B R`'h-X^cs J1~͂R8ޔq}ݷvR3Lcn tt,R*(r<2Wu)胈i2N P\xסنZ"LEV0e=7|!N'UN@ɣɧ٤_BO)ԝdCJB0]olXPoZt J2/đJ/[oJOH_A/5XL0 C{NG2fY˻͙o|"2# ܂ME۠M -H &>q ePw- fqˋ XcbKYG4XV}mۅ^,_u ~S(>^_I{K[^BP(2/6hᆭ`k6X8WK C@H#n'I IDATѠ3O^h DEEWv(.z=+l\h‹`B#H)C tP+z$%95AV'S3:oka%6fR5{c՗ӣW<FչZC+tq_y⿉62lG6X?+_PE #%eo>NDj6A$ب%F- @؁QL * `P0/S^ˎT?׿0~!#-\נwh 5j `&r @ؒqI` a:`>cX`1j6CQ+hvfE]BVڣ*P%V?) UcY{?؁=Y(P( b\dv+Yv xgxqhk;"Ba @.a B}Jv`d0^8A#^ 6;b0u@<U ?k7+9eM1&] ^a0@A atGg.+4"킉|d6O#%>$ˉ=R(6]s + Xb)%cGJZq`6foKvёn`oÎQ\aYb]LFvuC \\\bX eQ'0i0ޡkll6i0JBf O]~טx^9cFY /BPzm%K}p{xI , 1II+CkFmYkqq=eꤴC!]s|%/;Tг{ʓYx~L'oOHؐdBoU6[Ya{j5JT`6d#<: >$S4(\tBNw^dt0EB}-T s} `0;@W%.JT`:_=NDŽʈ /)yGtYoH0be,|jjUc kT:e?ha ٥ثFyc$a$DCD N`OH3\j96%R27|$ECPvcۇ{nUvQUb%3OvQȮqO O JDXxǑ:NV !8\ӡZh .8fJK:A(^4g&>0ݚ;FJ̕+ [tMfb;Xo],(.HAhKh r9[?^4-ûDx6l */af)"'"tdg6YW&J1h![$ |Ỡ쪷Kj].]K||d'6F3֠,K\]]/j6CLhsA۶ج7xxxj /`;O=-)]w^%R((9{斗֐,,0C<=saMs-f(. ؋ efzW-m(WK:xQ<-퓼F XH'hmPYasBw@gP `(c'Ø#:Hgڞ?1vD'5wIfR]/kбy\5\(/-dm(M+(Û/1w|9Vxٵ]ܒX)@ޠk=:(T7[`MPvթT(@}Aҕ]bG`/\MhHfR;5E6(^N7R`vnH&/?a8H:ke#A o!A[5a| # 5ڦk[{uzߠ\ǘcRNnNJɟTg()6??y2Hu41PUWbAI E u.X^4n/ oQ`E!lZj"sоag' KÃCTLF, 5Z`PtumŅ5 l|$@QyT`<B*Y\~1jjJw@k[v= (eb|U(9A) f4wڶ5s Ǧ;1A1qDQKQō]ʡ+Wʄɮdb .DX\JXށ-,...p}}[se٫%فWPB|^M&-݇E]BssHix9饄w[\5)fK8-ak d'?b 5 x`/'(. )%` B C:X1$쉎ox?&;դdNHheHbAlO`|ʮorFJXSR }yXX3#BV$;u>>7J1ܵ|<\qy=j35X  A$)̞p#:w{AǀBRʈݢP[L|IY |Ѷ a~?ko:Z@PPvY0$TS[ԍ}@V1lgx`1ax;dJX*:cG7s}/@+xаJN04x#G}ZMA[V €QhBU$mpcqb%a=h9= KV+M3Iҕ<&An  HK/4R ^tEo{+> +໠I}a ڭDz[cQZT=wW]d `%a r6~q $C}BxhsEC힞 5+6Xo]k$Z0T"$DzNT6;ϳcTl^MHlQN.{pT@,GVӭ@X( AFSw7Z`9./0RˀX\$ u~Ҹ'1XӫsWdwmL~$Zdo[Dp%-]qlIFZ]cZ+U5TGU;N#m #"]8͈M\ a3T0ixX2B/dm>xvbg2  NJ-,{^F|܅34|څ|$ǭa !)V2nt ɗNJ|'xYw)d_SJSE>Մʣf՘ qWsi7-(ROWHʫ#?=s)LvdCv-"imQ]Wp B9* ?=+BFY8kȠ%[7CrhmHqˊ39v{uMX&㫊ʗTUjcIAKea< !+"/.E,R:g}Šp 6]'DiMEh y/82B5Jy9lW;V?حS@OJ#shŪRrL>@2*lBHJ.Z>hH6{4T"V{B]U|HzE_&l00kFQ|ƒ6S%sA;Sz ' bc$$>:9+}B*Pn*VՖT츺31[LGWh@q3*D{pL_?X Oi ]{.r]-uH_ng9[9KB)a,]E5EHOWacn}>gE qNFSFvHPS{_þd~j3cLl6ed$%"D6=Bmې_CD2;DǫfrYDxt8q:خlVk6=#mIuhp>FƦ_K.i3yhe/upק/̑KnJ_T@1G"\6(@ h̬,aF)DNt1^O-h_(UMYWT݆~GuQLK'L9 YnMdrǏ,K1sA{~nppm, Xk0k5ϴo6|3^¿uZf0(,)]Ρ_^4㽧WÉzn{`_bq{l'(C2pY%G%*&B*_Hŕwc+] Thiti-,4 YoX\qi[Q"گ貨RIKk/Qlě _/<%MJک$*^+|}'HUL+GS(&dx8qq'# װO9-WhTa%ͽQ_'Uׁnn#ZpZd8Dvib'm#v홢^} K 7]yuJYG*;z[jSN~}b:0[L'Lcӂɤ] Ρ.m+В@]yGǦ퇯ܴmMf]G6N!Z|NPQK#n}-9jB r\pdRIѣK1 #=M~)t.;^ƒX$R_9zO W$J?EmN.:*PՔb|1a41Gy!Ys th%KB%듫ꀬ& Bk~rUUS1:N6{=㮦> T#[BW%;aA6>%cF CFpuVkZuC|,֊?J_qG6R') WqysE fxf̅l@_ |"2UD=h Ɨe|T'Hyg`0Y `#^y?{oK/ 3K YJg«:fU>?1[L_YKa4b_\b]IVG%^_ lo -,PP?T>]٭vlwV;N jbaX 2\#o_Ujwd lPg(/n^SMB/L:l>WM%;)=]'ddSksܕVGV?L#ss̗WL#t!@@&$>' zCV8Gj.=Cq[X٬vvGR !4CBGIkC Sm# FzyI*>D%RH]ICW*/Gt/M)Y1\&Kwת5)k-O7|+ӤRpPGk<9;C>U|WŹZ=FPdL=p=#ÜsL%\_/L8vIR9u}KxI&gMj0~^үK^ummd0 5H۩DEp RՄɴ`4(8#9HpC/'dyGv 8MU%xE|5ԧTSfwⰉʮ㮤ܕZ*'.%IUbqWvcŝ׫=Nv.OrZO=k̠Rz9[W".|[c}\O1 ԄCP Ntوb2;\p\RcпK{ AܐaAiiB_:KO]zc>^hXjR!8Wڴ^-eEr*қ ̈5|M~pT>ZOu "T% є|4&/&ddE|qYʰ$6Xj@VBB}%Pւ=8T]~z3L#q33#F(s!/2\#GxI3ؾvK^8>4B Rj#iڮWBP?8N'&U5)U"$7ԞW>KFVH/qmߩƲ$nF5x@ɐ +)ٜdMc+ƈQqIbj|oeطҜ#) a&5Z_5_ PA=ψdB/4])\{M8͝&S]"^߿gX0ɲ,H `z8߯_ݳ^oxܢJ첹`0 cJ/#~wh`0 ~51x[/{gXx^8 #`4)(&cƓ|S*F9.sqlDz[pHp%{O]ԵǗ5p8p)'ÉXR*|wMFQ%Y*H7g;ysp;ʴOw_g)c&SFvg=.ǘ"hzyBAZR)5K& IDATsWGF#8*)<ƲQF120ImGHjU6:P];N%@%\ǯk$ժ FkGNlݷLTbo/qi*AAaT HJ|U—%hܒ]P"#.*#2,ù:S:ig!G!'5u]=_ _eI˨ URri]Ƨ.z/-y"J>8NpYx2zɷoߘgyHT6V"4PU햻Z8U,bՙ]`0|;FxY^c0 tnj[ {.]iTä~`Ǫ⴯p "'/2<'/rD|ey,de.oDrTeEUTUSh4:$·Aw' "P$<YcQˊӮGܑ2µ5q-#bߍ}`ˀ +8UW(*=uIJ:>ԑm 5Wz^wh6[3>:SӇy56DƘPh(*P?<,GWTw9pYd2f2njG#\憽4p:8e7uYE(ԨޭQLӿ58}4:Az*('EQ0͸og327̭Z;C#͊t:l8HE8`0>gf#pg0 ?07ɯ[֪^I%縖/@'s9<Ȋ<ɳy^Y ŝ* ߐ\>}qDSWC$2qDKb16$d#϶ Ƽ<}@&Ҥπ5*Y>bxXe0gw TUl4Z'ɮTcI^Pyj!ÅpHze QAP!q:ʥjm H eb;q5_gx*g]$]WtR$s |V*Ń52IF1~m  JrػK!d40GxIM.u3y:9 NA %r ^K{hMOPr7r䵣\{r-"1YuU(OPVd!4$Vw"Ԓ]=(>W%ݎz* ].7>_Cksh`0 #) `sAP=8_hgJ*]*h TBEf9ɧyoNe{E_8F c#Jyr]+4PcRKaY;0@$Ca@JO#wKdIz xuQ6꒞qC\w1=5e Ǒ~rhR%5pHz^辆4'32"ڐ])6SܟpHyDn*-Ӗh1J&NroN#E;!7n[65@a uFdxf0 çIx- `[gZKŌXjpQҕz4}3rB>HA)yik5:{FIm/ힳ|ax0WE=ndW&} NT@5Y1i@llU\zDB5ś1JhĹtx}]E"/-مSZ^$[OWjVY6?^tI8k®͖N=\\S mo+ !ddx2<}tv]w%Ѡɣb'K>9G ٌon;ٌ,Mꮪmݱl8e(8׳5[}`0 ORkh0 _j{XgCcZ7f#͍+NB ;I?$%N?K)@b<O&\_pssb`:E>=ww4tTT#A6 j OMx `xL`HQϺPR yI!\x%a*\fC_;xJ60uv;V=<هb`0 G_.|fK-0 ᫡-/HEE_55aPUn_~ҳ&&u|ܒ[=-9z~UV>rw<\ *KXB.3c-‰>c,iFOv N?HԞjp뻪/a^6$R s.fw %e.`0r/_DNj]D|:sjeP,COթ:뜌4s.AA\_:<<>zU 8-'8ppIER39q)~*tb ld8{TCdb۷[F#4hOp8pwdQ%kH4_mv9\&iãCϙs=6j-lcE/Sv S#.Uw3? +jf ?ƒ/;!8#]oR&1] dDW'_zIuq=hz.Z`Uζڈ,T;{>'I#Sm?5y! f傛[%/kN*@]hgxvGUUѼPzZ5^/@SoXQEMnQ1K0 û>߲44u`0 7Woy:u=苎$#>H_.>֗GM鍕6^2.GsnK.s çyᲵ"ڪ6[6ѝR/6n%%(vkno^.NgycO]5Áfjt"4QUdA 374lb0|cc-o*[' `xH^G?#O/^P~k ҿ7L[Rϴ8^yuOm]p<]ֹ>^QV0>r:eVaW^j#*"BhM˴RGu d57,Kf)YÖhuf~wNDN{YFP m> `Jy׋ /Sv ۈ Ƴ / \.>FLճB&nO/FObHb(SQrj{{t(GDp.( f977,FkfeYnYl6vu]]r|цlme*gn5  /Sv TfsTv>O.+$}TvxV'?{%T|GxoE%BF#RGK5E 2S'ǭ< D_ʅUkűKc%yś~&gϺT>~WzY2>kvǝCtm?7`0 1蟯o壞3*ː{R͡p;8A"<"_iQ理4B*8HXIM OI'ʐ^ (e8R=8RsJFng CT'w23_/"Bk5>d5͹Y>8K6L>zv.EQe1uzLu1HϬP4T߾U^89(՜5߸"C!|]?@]Wsrf[`4-v IאPsbb|Kk%?5*\9GK4" R_i%a .'HU8p ;b1Ac}`_8NaK;*Sq GA]U߷;5ı݌S6l gok9%g{k^405io?ۦ# V%I"+':f tr?sXTl~r<[<18*>Kַ`0>r__P `(\&^|?Fʟ HvnE5DUǕKC-)jE W9q ;ՆpUbcyP9>+q@VRIHAOՕ҆@^6ϥװJzDEr1)2>3:w^0>="eX2|CVI/MORՇy/^H,dϲl}Lg3svPsC9l~j,h;{^;>׿0Jcs`0fsCn`0 !~Gb+jocd aͮgj # 4]  R/9A\(FF=rݮ`T| *ʲālӛ10EFPZ>^QC$IH8@k^N:*Uk}zj;G7^J@5*CHN7RT@/M}H:R!uEl6c\ruul6( w"sU*-͆fp%^ FtpWl1 ? +#1`0`Q|+-j] hi)?vʭDF !*$)N).w y1LFRʁm"Av(#4({J9͈̈́gS ԕW_ZH~A1:KKvI%g$UZ}E;w!WJ7 ^Rw"ϒ^sN(|5WWWL'j5:Z^+˒fzn |8UA~m u[9 ~45 #̥V$9G;o@sW']!\dɅGlFqh\PsqA>Ȋ(5JW:B>kUYQ5թu6璹(X,r5ΰysmJ={5Á, !!=B}Z%)  +җluUƸ,t8q:w'XQkcM}CRO>=AI[6 ë.ğyCEr1`VA5[eL&Ws%777Lӡ9J]5wwwl6Dv`0 # oce0 &MΑ$UjB5匫匫)bQL\5,$%ח)C;C\۹!$q}&*+Ljb5xҳmG#@UU{5?dRo[3tl[dc0|exD  Ϟ@c0pժțWH,WJ.mH LȊQTq]/f̯gSf1iAVhI@@52^JG u/)vǟ)D )\$T'Q31٘t>b29lԇ 5Bh%Wyag`0|{fe1_$Uڪmoh{wh IDATܰ\.ƣhgȼj 5ՊnO]~%0n\#`h@r-6~Fxfoh0[ ϽtkMQj) `:0[Lfjd>d#J:O-GiT["5U)}(!)Z=idLp12I\/s+#a{-G!cNr2؈lxSL q˅Ӿ:xB^b.{Ş-҅ ۵d0 _ Yӿ+NeWIg8i onne~ux<&ϲWcBJ wwwV+ȓ־i˒dïZ2|Bp%a}&[7^g[~1>xnl% ԸF͜r`4q&8\5A"]FL7$] i?vNiw ]!zIwf<<q.eSaF#jb~na{t pdt˅^/7˫!`  cv+k$0y3[)Y2#@]GV5l6``0|ŌڦT`.] +_R[~3$5|qL0 @|)Ŵ`v5fk7W̖3W\.HSMwz4 )b67hTFQ5X]:פek8Gd.vaTg# (*3F.N-UyKEC>XhUj:^_% X`W"&|DV|ˊ=ow4ӡҫ;1>` 33ץ'Dr5lFQ9sp8nY׬V+!ęKtWRlf\yz$ᶢ5^# fqjR×ӖS>a3#n4twM3v6]"oIi`}),'f GW+* *nd1 :d+o4D8;2>&=XO05! .R98:ZԱJ&y\T|yl}a0<'zX5o ,syl6۷o0N)qPb۱^l6{j^z~ V6| =Ɛk%2Fx>m[VƆLu6 Ɯ>rEXUJUQ#a6,`4')A\5O$һoRAM[Kܯ/7=[æY6+$0N$5LQR$XN5Q"2,h#lv'Jl2,O4`Uy=^8j~^Ʉ,TqqMa]Ul[VݖkJF˃ 6_2M ;h]_Fx>O /uƿx؇eͮzt B*D# JpW@1ə- ?X1[pA:dDK3|Qّ]gوgg3[|&Q[hq(Jh^?GL]_%xODzabߓbl:3<+ޅҮX^LS߾}hI.j- {#Պ;v>lmfx! ]3.$/icu# ?4?Ÿϓ^xR <='Tpz}! S;: FW|*4AE0icK{׫KzR*HhN:¤l-ե!ڳNLDt2q%sɈ|žpZ!.D$8ߊb v)+^^oqAmx#97בZ^3HC,Kv?O={TÀvF2^ơ`_=eP0ź7M$~5Z /Ѵ- {lihIr!dL#?qۜ)@ E]HI/ j),yHE5;zdc%z%L:|]b/ְ*{^Ǚ NLd)T%: Kk  3̯ڑ^搆@Ip: xrl>#Vz?f_Gv-V+c=;0I/= _+/22|~`0 W }#zzk- x~2$V5 /9"MUPDd6ǒorL>Q|"(ky"L‚J,} ;T֐}Հ'dEjDE˨t #'NBY%Ks2 _2{-L7p2zy[9G>%uϟ?'ݖdjYhod`0=eTg c>b0X\5 iOoeRaYçH6 o4T wXTAj+d#a6fl1b4q^K[;s2(QQ kD^}t' 8cz5F~pbD'hT/jSHGS`x[.Yz 3͵p^Oe9WWW޲X,L&EEU975nGUUQfu>f0 xh&6>z&-aK|)J4YfJ>ɘ̸?K7Y!Sϯ_{6C5xK>lLs>㣽aCgfnԥGp:ք%蓕 %+l9Ɇ+d0'M+(r%?~`quŨ(pY3jbZl8ghx74y{(Gۤj0X5I lR7|kk6X ÿD׈v+$c<1_N1YO6ɲRFqM@c6ׇNW)9[!qNFbF]zC~{š^xHlH o4>~jN4k"Bec%߿g~uE^8w~ @]{VnTC0+Cû.Eg``g.eɅy&jI`0|X'3L)1[YΘ]O\[+_/^g9z^ZSO76"pt|1<8N64ME^r6`'F ,g2X,]<+x(˒v]uFt.׹Ze0{!e3`[B1`7b]3kRx"J1ə_OYΙ-&fn<7]o\׵vH5dݝg5+qou$R'Txq9qlI( 5Q=S7(t"W_ѫg@CTJ(x0tѰHAk(~jg "&1HG)&19\P+H嘍B޲z^WK]}ɐ0M3, bX`:"MӘ=F#K>PEŮz_~.F?k-2rEe_ ^ (@ }35~a` w (l.')&11QIBC^( rVR:_;o>FA(gXB a$trN%= ̢3RT!:V$:iFZ!l#.#n!^ =¼`1JeEe]d4Ma"Ԭ0"w8nv8b?P?B!>9xk/hU'ۇ\K9%k޻Gwi ,ha41d PK8XI}<\`3$x:x:ByP*8u1ts`\H/O>(Tz4CcfЍVX,F]q.-iN# #s^?xF.xz0NxB!?pyDyuJ9%_hl'Op~R?~!s.^(d>d6B:JaSoYD0NHߜ4xDײ=ɠUi:@Z g'(%j@5T[3jqV4(*&B$yq Ƒo9x Ax~}. qotZF#f3V+, x 11{ʲnu];ߥp &^WrsFB e^kRIp^@-bb7p8Dw9QD3SLXKBD\7rxk/@.Nlī~Km=r|` LdEc u 2< tïYrhEx.D}&br&&hqv#) ?,]0s*ib>XVF0t╉sU]x3ko% kry_g2p]I+ Me\.X,0ΐeY°!2YQ%6 5#' oic"[#xXË Ŋ7B!&>ڝO[KG"d<.. zpXegs.FaSA:J5*&<&k=t&?iq}}|Xq'vM&dY km4 #--ʢRY(ύc_MbLDžEo4ygiߠO.|ɥ"Q\Ia3XĕDuګzH'| Sd $G6.P(*_ x'τ㍏hmFy=t" "Xk1OZ\.0coEip8lnQVe%?YJg G?BP"?3E3F!ϛFl*j%תyP^oJgBbSR [ѫo7|&H77X.C.kmPޣ,Kl[ke yMKDR:^l#?oLeB ^ y::!u>i4^0 IeR ]sb&O-וֹ֒4 xR<8֝SrjbaL{m5KsF(ɐe)non\.91g{j%]:a_"J^k3~؎M¾?4<%n!ˠ4V ]6 D(EY :HgWZϰ|B$W.B⬨ !cO/]Zaznjq' _y.F ybj I4,Xg]-^Qj^mF9"G !>^%/() IDATFzByspHR4HG @y^&k1UݬӆPCb#i tק6O5$U{ 4mWpuJLU8Zpssjlkm{k1u;keu݊\B!?dp@p9! 1^a BWT>?)%XxV_EiAl Q^@] c޴Wv蜏p!NO?^%0:1Ib1f]:=*ʲnzznCUzxB~! Mhki0IʲyGx{^>a{) ExeȲIb/m C}8k!w놻,%`gEZy| ivT=An񈺮7GB!?ųԒ! |XSk-"&0*8&\t%?"Q^£1@{"R$ix6ɆY7~~y!A}+yɗSF777fȲ Zx7px:a^~}n(4MHx%Ɍ !'7NB!g&x :GъY( I  zSe~k2L(DgZk-HכhcA^좋B^W^'bc9)nnn0NC*+ s(~=NSF)OoB!=ʇt~ i(xB!?]`/eTDE䡳 ggWHi/c Lba1 X]lWl+ۖKG!M{Q>l6bjx<>ZˠhEQ`۝ ^9x_]B3;ҐBAF@>I9d " BQЫ4T+ɟ Gզ\T}ݵlpnk|A!*!o:},x))xB!? ]3bL1B(/<\ɭ:s5.v+v/lb!BE^!|݁!Y=Hk-)nnoX.1͐y%]EQ`a``ۡ>l zB!Nk3!!N; >d~_:~> J63-tt*)oxc\7V`>ڀ$7nS{Z'~u!+v,˰X,p{{l,B(tubWLgx<^p:P5TḞ #B׃!N|9= ;B$""jC10"YG.ܾ.2fՂ(&YT^LTWyr)!}XR"nS\U_ϫkl9nnn0N$I6\Mt:a`ߡ, @~B!B{3y+G^(x ]QtuuqՖˠ7/qkO DbbSz>ryē !䑞;Hj'^0l;CLUah4|>j pվG,Kv;aݢjkwabB!< ^B;1iCT`y^VN Y \b3}cOHoTzBI~G11A :[`FBr &)41f)&biG7kl6[v;e{AME`NgB!|!B"wmZCYtR>l4bF'5g{^.I_7CFzVV+̫nETxV$H77X`<o'^}ߵnqww~*CA&!@/B! ^B]sÁT҅xɹ%m-Zr+0JDcɐ\xO^-2ҋ?:]uvv >mJ.z,,6h4l[F#\)Vh(n/{TU|'tהB!B!?:'h>x Te/"B@芧X»$5jS) V뾟Scq(vK}GX lO e9%V9,LFBCeY`c^c^x<{+D1]By&!JE'54 .E/=]K_ "Z!!Oo 좼bm-.JX+,ssV+, L~! *N5SEԺP"B`JCB!'Bwj:^>tJDcf~AhtjV G<\N_ B<;ϋ T4<>1777XVL֘g9eUP3LǨ4By6!B<÷Gj#dwQzp\ү_ᝃk.B!^fWS^c죶b%0QNԒA?c/c Np{{hk6~Eqs D T}X+C6C(xB!wM D/1]]NKjo9b"Uz8pM^.ajB,mWs"M!֍_ePDdFh [CXkg9fnonX,9̅* UU9&}E2$ˍ~yXËB!|TKUpGS5QD U Y]!ծD t5CS;4zV䆄E+x&4|((XHa fưM`1X fkp0=xz=Nݱ .}v=OB~pE !o/B!։Aj,U08+y<#DE+^QR.~~lM!M:[׮]لGeHirޯF%%)l!seYp8`}EQ9wVW߿vi~DaW>0!!ByZ盶B`MCJVrGFM kxU圣D2^ șRK^B= 1Z,}jϼo6A#^_ 7y@iծ7mA*ĸ~A IL'SܬnX,0N91B*[^Pex_;|~i-UWjvI`2`urd2Ae0zÍevUU$BxL-!ן]!o/B!NDavTNrpu`*D/iggܳ\ٟ*:Ǥ?TJCÞ ;kOw_VGQt`2X02lAfNX-CtW$P1=bƼ*((vTU 4PsKp]BC(xB!լ3&E5DyWZ^)&O<>M瞎"""gϽ_/Tklju:XUw*k I~"gi <ϻtbVB' H YZ ~yns(N'l6l6~ ٸ7+\҆EsNh!mIA{}LYAud[%?m|Y`cf[ N,CU ꢆ>]P:X}%CG| wϑ!4kQ|FQ5ʢBS{_Y.Hy5Aw_d$/kR|~}^DEz!]/<0N\.p{{l4I`5 ~65>-|?9!9 [B#? ml9su1yfX U;WT۴"BO9(aڥO;} t*^_{BS95l2upyj`M+[E{zRٶ>\(Lj0xz# &nVK[ Ib6b+<7uv_߸.!D|~vBޙDCBbm.7O'}J)EHi8UT*@@4/·?v_ g/6CBإm NS(MH; ;8*L5Ih7jOؕVz~& L~ZjwVX.GtLzTUavuUźn # !c1<B!^?LYËƣ.e"*i 0+oZɫ^-y;:|M9(AU(Nڸj/G!?}˨my.myZ.zWX$AX,p{{t$~V44ݵp*DL?NDAB!p6J!9 ^/GP+:Ұ8(O!ƚXC!x2۔t>O>xu LzT8(1%n̈́Í'~+b4a\n1N`m2H}؊]w'kl6[{e= c4Bc&B!䣑/{KwH\.7CqPKuN``aFomkbO8.8{t^/h*XؗN5:۠G,ȕ=_No&!]gE^W- ZƄC`4a`2Zsp {ua{l[EiSB!/ń4 ^B!;Z3Ҋ]A\qCu*r !]&])5]?]\C+QR4Cq(P T rPzHi ~LkX) '64TP+ֆtΡj{aݢ(K8:>3-!B^kxB!w&:j#zES;TEX:^Pzgףq x5Qڗ(%\~ ]Ě+Yף!'ޖI䢦e~*^1"[ H YE=tWUU8l6~C4hK; E!r /B!򮴑]1gMڣ**#S b/FEy bʳg\ A[KCE+{ o{})B*]ۦ5lV|ߢHU^}) 23,WKf3ci:`,(n^േsKKn}E! h>iB!ЮPxxQ5#S| BCԅ- \YGQ N20j *p)=SX>5FCLpTyJy3<ülB 멾I Rjd<ϱX,Z0NYΰ3.1i#6 ʲz7+A(B!$ !B!oV ~+'9#qT,lb:aF13#[h zbšByQpZJi { Ij 'nZBȻ"cL 0+YA+㘊Rơv-& l@] Q/v[EFϰ[|ۏ-B>3B(B!s[,4Cy,pqpڟP W-$ߢgסO$*wH[hP  թ ,,6Pvf^k>!nc@+^ZK> a%.`lEgNX.WXVư˜CUVv_c?kxqAQ .r6z +!| O!By/.3`x  (%v=qd1m-/H(Թׁ%q]+>\Q*w꓃F-DN:z9Ɛ^Ǿ !_ǕH.Kh3S#]H 77+, yމ]C 「jOG;l[ 9/Jo0iFg"f !CE!B>^ {ڣ:oHG4x:MIc)YI(M]"]ͮ̅.u_{ԧ}bW)=X$!,}E5#=y!_²QZ"W"s"N%%<"ޡ,KG;l6['8nȥUFgQ"!BywbIN$y}4O10ORd@EjqճwG-4Gg.D/-)cӮqsq{Bujצ;NmB> !BˈK;m. AS6YZA>J@`ҰACP>قv_8VY˜P,KWډ]=NM᠍E WKB^IgH! ozZ^uAmW\I) ILSb\"ϳ(p U@գ,Klct:i67yk6K0{ݦB> !Bȋ{.=I^ {:1b(t6 $ +5u; Txbm׺m)9%+|>`S[+M`!jG]8 ۻ=NR'0jaGw(]j v}m}f zB&D[xe^A1 %42 C$]keY.ޥ >֠}&$*^%!B* IDAT߼KhoO/B!򧳦e?Z+ D|P*{vzh<cMD,ELoc*rE2N+*{Tp^=}*/x6@}r8l lد8 ԅ6h[+FvP2lJUф2ׇ=+z,;hBJCʒ2=ճ$}Xyc>cXb\a6!Kb*4UUbczƩ8 +@~sVțA6$3AB!1Ic5ZK`a$J)P4hJbC.061".hH΄e9K/it &nRҋi3E-NXJќnߣ7`t ݁B}>KG;YЧ sa)ڦ)lŮ%mt4FV#nO`ha6f|,Ka RwEQ``^cۣ( wY%kLKvAB!|HbDS2J)$ ▪{Eutjpy0cI$105NB=0]3:պ&%;3^*}"I? E?]ʣؖ8l wͿ;6\o♶qa0x^ }!1}bk<*F;.E pPmZC5aJ`@Czh`C"sLc3,W LcX#sqa+AYow5ʢVX\YjvQVQjE.U" ,f1)FhG\!55Sv_~,>Dϣ xDCB>^p#E!B>pbAǝZe`b5/p^Gu +G,R x8z@<~}EtPqK9꿙vD# pפhpQoᝠ) MW$5,zxB^##b.+" BU^Z0H=&.hPA 4(h /cb`c#'Q8m U~f;lw[u9spYv|BGBB!|:kyʾ†N8•=5X 6I&Fp kxXK?uUūG8yUtNDeunW(IQ("?;zB!u{F975Ů[KjQjuCn+xQSTjr|dlƅx2T Eyvv=v9h&iK!(xB!e}eg^j@ᜢ5*T!m'#6ka +Ņ7Α~ ]l?2BsН#*.@3!!Ϩ\87uw8 akD}"`8^4ĎoAoz^J/{> `(A6Hg;064]06@y`9L+5pN1rLV9ҩPm00jx{o٭?PT: j-g?;䭆d´`B4!Bȇyc$⓴%A#CUXg|t TMv0":Bz3rs=hA]רN?b.pTRa\ ,Ұ ̄dUyb!px cQگPpmX Idy,1L0O1M),5"ƴ+=F҅AQ uӠi<&3&%!X19UnSuBk@BMm l"y,WVPc!!|(xB!ρ\ռV1q%2`EGUp*p8Z1D(tyTл1pJ ]u=WT]A !Q슿7h#hEp;ޟP=: M`4ri^^"Gztu]1L}H*(I` ,"˃ؕ2xtd4I`#}Z1Xoa\3*AUPڡqy6vd*m}A'5 9,RT w_Xq iLtxu`J\H1e.BP"B!AWT+~*B$WAsh\Te t|XB%^XoDw%CKӢǃT6V W |(%czu* N`} (KB!/e*W5&lSBںz%Nx#0 i!gF)"d4HI 2$Y#:)*M6QA 25N"IR)\Zc_o ;ĦL<J mӡ]?±>v&D HezB>!!|(xB!OOpi_WKpmK'>&L!@ԣ@ukT žtsd> q,0baxH*5 ;@Z>.@ .tSS0@)¡:8Kv#N}YXGS!Ji0qS/H!_}Aog=kNVh#[AI65H1ұx:x6h6h#gHG< 6H qV!2.U6. .n+6Wc+ʨAj3 Zq:8-|RP{̨v']r+sAU"|c{T;{U0il`c`ac<!Hr I0JE|9xK.| SjZڟB|Xna\_32M ^UhN6"pCKbhaQX5έiC`U@VE! ^B!_ RZRmU10cjk Vʡ:8Ƙ'ȧQ ;0 ipT"F!uE}zb9I;EwhPj}iW*Jgêz W_9t_t(B~"H. R_˅Y I QlňƋ1&FItfjB/ Q&HF'tGĒyX12,bx@-T (d>q_?8Tu@զjHc0/~2lkٞ7Nx0B7!BԴB+L bH$HQxDZ*QJ[Lf#LLS̖cI9`wi4jPB6Q 3+ ^jxʣ"qwaN Mpo! EC&m\8.E!}+fr zE˩ M_hNS̖S̗3WsLS 8d[ xA&ڛP+S<j`PJLMw6E!10Pi QhIyQ 6;l{l{4ZQ/IX$Lk&-kDchї~|:B!?A'_?0~7 ƪ2MkZP+urp6uPV4GulP*w%1F(އ+=FU8O8N8O8N8ʰ@c!>Y1A2"Z9R:?LdJ r1g~3⸺hXK uA60c Ina35X+DwiL 1^u5FxZPE O6ڷubZDMa2$5FI& APWP&@ĈiKD9O}LMmI| $> !D(.B!_=!/.ҒJkyE]xMh`!zsp'v(GlOHsd$G>01Α)C\^WB^LrBG+.VB^W!B-h (x' W)j8x4 d (httl!H65X$D*ҍeIArkbt BԊo1Y2`y,«5x\*jZ01L]wm#ɶwdƪw*HȌ# HQlS\*2a3"٢b9bhy6|nZiSsc ޔ:RPw5gG^lq?So_kwؽyO:3$J^r)eS\VNw[5FqgG A% +3KkeRԷSז+U\}׫j5W 9sAZU0k,b{ٚexh&-+yia}`3 Z^r.uׅ8BͲ]9v5JB,׀+ܖdlm?^):d$E)ŅT?J\?.VwZl'Ej$+ɥ`:ac#^y>IJ/:ޯ&R-WPK)oR]ŠY\nh% *+iX嶲+'W/3X\)?j,]ycmvs{_<k=M`^}Ssu祮_Ge\fuY/W[׽_5b~$=wMތCeR5~ ʥo5.F˳  5L!ިOovҬte[%b~K^8:ͧ~R?7uu5\{힦{m$:׶쐜坔R9i!I1]:kU:< ü^wm4 2 k[CO%,ɃB\کL*'-kƒ2c͋OD8 =ognE|?tוή_撢נ,i|mĝmcl'_~pQ=vk^=O칤X\L}ꞕs5fKipgV=A7R9)?AALf% 5E?uk˓nXKVh583-.?uRq!K!)T*'W~>W-{ÛjUgկcf -KczWS"zycGidƽҋ `u' C"0 ^~A$}VO@R rrS Wxj ۱qXmeKV=}0iwnè:ʖF_̵Z+_WZ^/ςRHuVWVyl_xo ٔ3-?塶׭3\M˹˲M &mZwr$jX6{,Wzvx yۉ-MrL(j.z<*ֈo}nR5]R3c{2aftx؃*-s L˥??\L0l;Ka }U]۶7oGw*K0߽klxHae ׅQ0){nsue ^:Ӌ SAç_SKo͟lmm{1͗;aCUi;eFK0cO^mҾpkkR,iltו}]hq9W\y㵅aW JS@Q:$jWU UTnn,Aɚ2|_HsRuZN]~ IDATھmhc56|cGo1\!/W> >#kܶ2b!`үC#OMwP_6k;7x)QN!h^srJJJ(-ϕZj!rL!aOîp&,Օ]#{[*7I^,F5 K5Qe^n½n;9+{)[T٘=ݜXm -?J#=a߯GB`u%Kx{>l{Rm{'mX*l^P6~K5iR^Ne*AV5F\_Z^-՜Vvype5Z&m66t6l JEGok}fdΎ_'zfAsLKRuu(uY{kdʛMKhRf=|:' ''{~fx}?;^ ~bC;9ד16 1ktVje-[*3\ZW]iq5W\HY #V*Y[/o+lop{e qeii6٢,\:Zɖ+̤\ZA&Ųc ?cׂï_ 'ɍ79?u(™xQc2wp{Ҧb{?.{׸O^x?tfjY[^Qga g<&Cem eYm|~aE+w6v7/mRpli̔msRuN9')I[`͍{l89^8YN~08^ˀ^=٤=E۽mf{k^E]Omp? ~Focֲ۪!ܚ|X?Y4Z^/t K]&ovCrxݲWVm_7fzYr\ڮ{u}_f|I7 & o⣏ @;_r\JeK`){Jc!_l&ore!)DWL:RFZHze딭*165Ԫۂ'7ϽO] ?Z},[velf)joiWɔRnVyA@cWzss NpҒۭzvVRVRNQfJuןZ^,ςrHJ)[*fTqYm&eP?i%%w*)+g5Z\uו$֭nnWrY nreCDG'𖹃wAѣݐlr NUWԽ'Ev ƜQm1u]f%ybRj,H['Y/Y_*|.N=yt+|O1]MI &ft~T׻nWovsRI0ga>6/ O⥡8d4O&u?|/;>|'*p4y5A˙_W\˹l굑[*U]B.+)赻lA샟Hޛ==}eS]R|=ktv{~vt㷺)+)+j:e ?V{ ]@:wo#gn!`Iϳ37H^mM_ws)1:\\hqPs(Nz%)d+?ZU*;uﳿ?Pe:ݫDLAZ߷֭V7wK{C6}G;²Jr%Kʖ$e *MW|{<ƙ3;>~d .\IMLg?l9Szu ; nm"]817/2JK`Ew8x>۟RypjӘӅ/4~[a43VxŹi~6r3-/犋2KK5 vOwoK>ǞGv뇂khtvbLqJ(6Lնq99_ ^|僸g K8mTřxZfOb/Z^4[F:t^efwov};KbPZϵX|Jrrkm 8%^|q+(^ŎyKniecuPVlLgWK-gjAןj̃(Z}w%\I Aͼ^ ],w4y,݇T~hi)p;C]%2Иyl3-g o\ْ'm Dg!^&>dY83-f::|feeúI ./NZQVϬ"&)khq>Rl&e%Jޕ =*?4 ӥq˭R Q/g:#KR,7W͗3-Z,-Y MlٽRY5`j/;+|)^`I=aU9·KM*L Kص8_YdQܓ(0jPu'| Kh&),捖ggZmYv<++&.SEJYT,\+Ԍi^>e<3xUO~gonA23&(JfQdmOm;|pb6,TeYYa1Țf̢bk)FTJgʬ5CKRZuz.)0qٕKxŠ&Yɋ`ZTTvx?bgnLL!&iL!\ 8%^۟5چ^Y+SA!Lʻ>n 9K]f_eQz#x02ei3WW5^~u`k3WRR0W>%i aU?˔KCS2 Ɇ{TU]U74/˲ QA !˔ʺT2.N81%kKC41}qғ_>߇ZJUm붚)!'f;KJEgOV Q41!bɼnY//p$ )׶}Np/.|$?LJy5sB/N 816~lk?Vχcvt>O`+M)x &+:+!%irƯw󶡗ci%NYnp:ھ*%re.#,kZcP7\c5X4'@N$ aWApY5k^":_&=hXUK58du\6HpW*m.errVΓר3?-]|!^कmŐаVx(D~rb:2ew1J _3N}||`lj,rwyY5d@u+n"RNro Ϣ!|9^5i;k0w5-7yRR>Y/ ZQauזy)+IO}I<$Pcݍ멶4L}RJVM/5ցb}^pp3zTy3.סCR¡o5=XZw)^UR%<, /-sT|Da;*|ţ wm>S982哸;>^3>Hu%yRۤnөk{$¤B_9{A"I]e>YVzvn^#/ [jKW=.5Ɇ*/)YWԷIsdjTmR 0-9ǽd^ndSRW~*_)G4@1Sva 珮l2L*a_)*eLz2m%ݔvݎWJMX?~GtNSΤ1!8iV'yC`eR%zhP3.]A򠜭4\w5IEXed]/p)\jrխ;m7%Tl(!;pTjЋ̇V%$yWwmVaʇ<ԀeM9N8YC,)g֫Vg643 2hR'ɰ^h2 .^ۤ}ZNAKBF%|$ɽ4lםVwkmVVzE}#bk.)Vx>['NVݺ)܆]/]+!'ҘX-R NI}YZo(,Ma1S\>LgC6`]z=Ky]Rn޷jW6ɲɬU$Y ἁ(xQBkT+(]+Vk5QYimB")^屺?)xY'MܷڬJuWnBnx0@ݮMz/_sN=+1 >G6®"@7r1KjWV7o$O2Ӗ` UxD.214 +q,+*\ZnW:^*Ie lAڟ#O|R1vdҭa۸ vLڮ\j7nf)<ۊ0k7D$ ,OŽ~L;^޼=)IPemzm[]JT/*]/?ocC{0.נ AVn֝CU#_ v\\w I1IY6Iwm;$q 4iWN;f6]FCeaeSj]ݪxVr'pj~6 SAKCM=r_'I^'@\A٢Sk}ݏ{Q<*I|Vulz=ڨO_K73i dJmnw5;Wpr]v` |e^x3ߙp >7|H5 ,(x(v*Σg E#ke^B˵R,/7wmP {b +xRTv۝t}~(ZSfK&DMbZ&1rR6NjW~k\󳙂,4ʒLn\Z$vx>W^ݷU]V[Ez2]ϭwBYk9S G (~RTVI&fbf˙ab.$)6ɕjYWSOv<BgmXP>{T&6v+n6JWR,Jkΰ%MuO|i^$dzKAJbշܪtNL͢,ȢJ܂݆e̓Q/^e}6˟`BR Nw?ֺv+m:YVw2kr ۑ^s+8AӰ x1՞Y ʞN jfAYT C.J/)>4z2L1GKCոL2Yۘu_!(8mг뤠ݨ;}[Ir5\:W\Fyz=Zj:ܩ2Oޚ ?ް삂R޵?7?t^}'oMLV!,b=OUx/툇Ch5ԯ]wWjԶ",CP(SU/}$5TM+l*zeRn,*uή 3SlYl;$ >ݷ~}ܑ\OށL2ZnR.aPT\}۽n?+YJCU\()#.?%6?q<}_ށ żqy)x{VԶkl,ϮhQ3Id$/_͙?8&{,>.^r)i3E5J]>S?қQI\`3IZ=܃Rr]\/u~}0ld|x۪QZ Þ;YI?sA;|V[2kMʦeV7+~ͷ;oݹ6 k%X`Gc Yg=+ǕtdOE&: =dR)ƌ`<[%,mVX߷U{mTLM2aᖞ]teI$\p*X |G.2 1:`MRJJUYwj} rE{nLEPhL!HLRɕvrwJ0'| G>cxk]!0dʽtjWۭ~}i}۪[eyRBu=u||5}P  ?q|uXCͶDPP&MܔޕRoZz]ݶWR -LM+-ɕm5!rM[!cH_=wWp!)%~?QJEW\}7/>7m:֥.ְkfuC#Cq<v>8u/, Y?r-$z\{6rި[WJ&ɻ5_Jɢb(9S̳r=h a J6޲Ih`;/f0NN.4f@(K<(Y]AM9Mf7qkJB (QPS.鱊{T~sG++Gax{t/oKc~q^Rʌ/Ww%<[Wn}v.纼^zLL)jsC+ wʬ/˭V]j|2=,) w:LӶ5 2yrMͪvowq+X['u,Q! )jV[{vC\QVGݞ}}xǰojO! ~qۓe6fA}+t#\.Է纸:.˨fT3ֆ^,+{C))\cK+pZf{WhjBSTsYRr/.on׺?q}nd)rA3ʮRU+$@;yDž]= ~Gpo? p,;tm #9n;<>=3y `WԹ6wrk}.t~1brf9SGY͂PeeϪu_}yo>Lުdü/aW*$ɼTtyL9r׫]wj׭6Jַmjbd^52o/1"ܙ0P{fM8ݟ]&^1lqǶQaYWIzum~[۴Xhy纺>ήε8-5˔\aRVqm B< [5~*_kQ9IwշYͽ~ǭnju~ͲH)rTQXt520klMƅ;C/xkΌ㛍:ewew)I]}Z^]j7Iۍﵼ:YlJX&YS0l\-I`cCeW徤+YKwumVmz^F۵Vw+Zoԭ{KQM(S1s%cdN{CsxkV(yRN~շ7w3l5_δ<_bRfs͗s5FͬQlB c^eYm.y1e唕nөtjȵohhnծZuNݺW]\M!T]e{yfaRbV8rx+/wB/kdfV~jcr\)'圔ɲڬz5NerZgel1S3iJ`& ``a qbeW笔{圔g]nNͪfժ]me.m͢Em52iiߔp5^m$冐+t\Q2WPYQYʽkjzYTY,aWl4QM 1*ZeVaνrR>uJ} R.)R|U/&IQHR5B PT#ޖM]_>yX/^cbfA^l r/sNޗɓ%%UwŠb jb<^6^]^}ԧTն9eR2KVTyPyhKXG ƐklQDއ &- oYmsXz&ۋẏ9uWV rIMʖ՛,ՙa+.w<<*ڮ0ha$IVzx|^vB/Iu x;\$oeܗo$[{[TYI<\EvWs\ol+ll"ICUL6 1z[aFmt#g"/mHzvsxЧVmǁay uQ &^E,KJ,[AQfY,Zv&x=> N%i'_zևۖ5 CixVjcYYV/<6aʯj|,,H$Z)eK( |/p|R=?=T_~j 0μ*vçjW 䚄Y۝~6|Vqհ$Ȧ_޵N[2>޴ |$/p:r$?8[-W63ujPdJq4^ x{;uXv sO^I5£KڽTz)*pؑVRs}^ThxS#FO >5/|j^xS#FO >5/|j^xS#FO >5/|j^xS#FO >5/|j^xS#ְ|Y"a,_/r |A^vX,΂0 bNo/_Ǥ록B !Q7ވ B|R[vjhi|BTvEP./3 lx趼&/*5ּ^%'%* !wǶgA/fιCł#^ 3,~*X6Xl/x}נ _ʮ'k* 8A^|Tx+<*<8N1!f ~#| ލ /Mw%|zTvyUu,>tO.X/uL>4zBe|UxӻJ/ ]s<_u> Be4dys&IENDB`immutable-js-immutable-js-fa7d047/website/public/favicon.png000066400000000000000000000030351515165743500242000ustar00rootroot00000000000000PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<(iTXtXML:com.adobe.xmp {DKIDATxWMhA~v "zhAxA&=$M-bbhmED ( ); immutable-js-immutable-js-fa7d047/website/src/Defs.tsx000066400000000000000000000233171515165743500230040ustar00rootroot00000000000000import type { ReactFragment, ReactNode } from 'react'; import { Fragment, useCallback, useState } from 'react'; import Link from 'next/link'; import { TypeKind, Type, InterfaceDefinition, ObjectMember, CallSignature, CallParam, } from './TypeDefs'; export function InterfaceDef({ name, def, }: { name: string; def: InterfaceDefinition; }) { return ( type {name} {def.typeParams && ( <> {'<'} {interpose( ', ', def.typeParams.map((t, i) => ( {t} )) )} {'>'} )} {def.extends && ( <> extends {interpose( ', ', def.extends.map((e, i) => ) )} )} {def.implements && ( <> implements {interpose( ', ', def.implements.map((e, i) => ) )} )} ); } export function CallSigDef({ name, callSig, }: { name: string; callSig?: CallSignature; }) { const shouldWrap = callSigLength(name, callSig) > 80; return ( {name} {callSig?.typeParams && ( <> {'<'} {interpose( ', ', callSig.typeParams.map((t, i) => ( {t} )) )} {'>'} )} {'('} {callSig && functionParams(callSig.params, shouldWrap)} {')'} {callSig?.type && ( <> {': '} )} ); } export function TypeDef({ type, prefix }: { type: Type; prefix?: number }) { switch (type.k) { case TypeKind.Never: return wrap('primitive', 'never'); case TypeKind.Any: return wrap('primitive', 'any'); case TypeKind.Unknown: return wrap('primitive', 'unknown'); case TypeKind.This: return wrap('primitive', 'this'); case TypeKind.Undefined: return wrap('primitive', 'undefined'); case TypeKind.Boolean: return wrap('primitive', 'boolean'); case TypeKind.Number: return wrap('primitive', 'number'); case TypeKind.String: return wrap('primitive', 'string'); case TypeKind.Union: return wrap( 'union', interpose( ' | ', type.types.map((t, i) => ) ) ); case TypeKind.Intersection: return wrap( 'intersection', interpose( ' & ', type.types.map((t, i) => ) ) ); case TypeKind.Tuple: return wrap( 'tuple', <> {'['} {interpose( ', ', type.types.map((t, i) => ) )} {']'} ); case TypeKind.Object: if (!type.members) { return wrap('primitive', 'object'); } return wrap( 'object', <> {'{'} {interpose( ', ', type.members.map((t, i) => ) )} {'}'} ); case TypeKind.Indexed: return wrap( 'indexed', <> ,{'['} {']'} ); case TypeKind.Operator: return wrap( 'operator', <> {wrap('primitive', type.operator)} ); case TypeKind.Array: return wrap( 'array', <> {'[]'} ); case TypeKind.Function: { const shouldWrap = (prefix || 0) + funcLength(type) > 78; return wrap( 'function', <> {type.typeParams && ( <> {'<'} {interpose( ', ', type.typeParams.map((t, i) => ( {t} )) )} {'>'} )} {'('} {functionParams(type.params, shouldWrap)} {') => '} ); } case TypeKind.Param: return wrap('typeParam', type.param); case TypeKind.Type: { return wrap( 'type', <> {type.url ? ( {type.name} ) : ( {type.name} )} {type.args && ( <> {'<'} {interpose( ', ', type.args.map((a, i) => ) )} {'>'} )} ); } } throw new Error('Type with unknown kind ' + JSON.stringify(type)); } function wrap(className: string, child: ReactNode) { return {child}; } function Hover({ className, children, }: { className?: string; children: ReactNode; }) { const [isOver, setIsOver] = useState(false); const mouseOver = useCallback( event => { event.stopPropagation(); setIsOver(true); }, [setIsOver] ); const mouseOut = useCallback(() => { setIsOver(false); }, [setIsOver]); return ( {children} ); } export function MemberDef({ member }: { member: ObjectMember }) { return ( {member.index ? ( <>[{functionParams(member.params, false)}] ) : ( {member.name} )} {member.type && ( <> : )} ); } function functionParams(params: Array = [], shouldWrap: boolean) { const elements = interpose( shouldWrap ? ( <> {','}
) : ( ', ' ), params.map((t, i) => ( {t.varArgs ? '...' : null} {t.name} {t.optional ? '?: ' : ': '} )) ); return shouldWrap ? (
{elements}
) : ( elements ); } function callSigLength(name: string, sig?: CallSignature): number { return name.length + (sig ? funcLength(sig) : 2); } function funcLength(sig: CallSignature): number { return ( (sig.typeParams ? 2 + sig.typeParams.join(', ').length : 0) + 2 + (sig.params ? paramLength(sig.params) : 0) + (sig.type ? 2 + typeLength(sig.type) : 0) ); } function paramLength(params: Array): number { return params.reduce( (s, p) => s + (p.varArgs ? 3 : 0) + p.name.length + (p.optional ? 3 : 2) + typeLength(p.type), (params.length - 1) * 2 ); } function memberLength(members: Array): number { return members.reduce( (s, m) => s + (m.index ? paramLength(m.params || []) + 2 : m.name!.length) + (m.type ? typeLength(m.type) + 2 : 0), (members.length - 1) * 2 ); } function typeLength(type: Type): number { if (!type) { throw new Error('Expected type'); } switch (type.k) { case TypeKind.Never: return 5; case TypeKind.Any: return 3; case TypeKind.Unknown: return 7; case TypeKind.This: return 4; case TypeKind.Undefined: return 9; case TypeKind.Boolean: return 7; case TypeKind.Number: return 6; case TypeKind.String: return 6; case TypeKind.Union: case TypeKind.Intersection: return ( type.types.reduce((s, t) => s + typeLength(t), 0) + (type.types.length - 1) * 3 ); case TypeKind.Tuple: return ( 2 + type.types.reduce((s, t) => s + typeLength(t), 0) + (type.types.length - 1) * 2 ); case TypeKind.Object: return type.members ? 2 + memberLength(type.members) : 6; case TypeKind.Indexed: return 2 + typeLength(type.type) + typeLength(type.index); case TypeKind.Operator: return 1 + type.operator.length + typeLength(type.type); case TypeKind.Array: return typeLength(type.type) + 2; case TypeKind.Function: return 2 + funcLength(type); case TypeKind.Param: return type.param.length; case TypeKind.Type: return ( type.name.length + (!type.args ? 0 : type.args.reduce((s, a) => s + typeLength(a), type.args.length * 2)) ); } throw new Error('Type with unknown kind ' + JSON.stringify(type)); } function interpose( between: ReactNode, array: Array ): Array { const result = []; let i = 0; for (const value of array) { result.push(value, {between}); } result.pop(); return result; } immutable-js-immutable-js-fa7d047/website/src/DocHeader.tsx000066400000000000000000000007041515165743500237340ustar00rootroot00000000000000import { HeaderLinks, HeaderLogoLink } from './Header'; export function DocHeader({ versions, currentVersion, }: { versions: Array; currentVersion?: string; }) { return (
); } immutable-js-immutable-js-fa7d047/website/src/DocOverview.tsx000066400000000000000000000026331515165743500243550ustar00rootroot00000000000000import Link from 'next/link'; import { MarkdownContent } from './MarkdownContent'; import type { TypeDefs, TypeDoc } from './TypeDefs'; export type OverviewData = { doc: TypeDoc | null; api: Array; }; type APIMember = { label: string; url: string; synopsis?: string; }; // Static use only export function getOverviewData(defs: TypeDefs): OverviewData { return { doc: defs.doc || null, api: Object.values(defs.types).map(def => { const member: APIMember = { label: def.label, url: def.url }; const doc = def.doc || def.call?.doc; if (doc?.synopsis) { member.synopsis = doc?.synopsis; } return member; }), }; } export function DocOverview({ data }: { data: OverviewData }) { return (
{data.doc && (
{data.doc.description && ( )}
)}

API

{data.api.map(member => (

{member.label}

{member.synopsis && ( )}
))}
); } immutable-js-immutable-js-fa7d047/website/src/DocSearch.tsx000066400000000000000000000027051515165743500237540ustar00rootroot00000000000000'use client'; import { useEffect, useState } from 'react'; export function DocSearch() { const [enabled, setEnabled] = useState(null); useEffect(() => { const script = document.createElement('script'); const firstScript = document.getElementsByTagName('script')[0]; script.src = 'https://cdn.jsdelivr.net/npm/docsearch.js@2.5.2/dist/cdn/docsearch.min.js'; script.addEventListener( 'load', () => { // Initialize Algolia search. // @ts-ignore if (window.docsearch) { // @ts-ignore window.docsearch({ apiKey: '83f61f865ef4cb682e0432410c2f7809', indexName: 'immutable_js', inputSelector: '#algolia-docsearch', }); setEnabled(true); } else { setEnabled(false); } }, false ); firstScript?.parentNode?.insertBefore(script, firstScript); const link = document.createElement('link'); const firstLink = document.getElementsByTagName('link')[0]; link.rel = 'stylesheet'; link.href = 'https://cdn.jsdelivr.net/npm/docsearch.js@2.5.2/dist/cdn/docsearch.min.css'; firstLink?.parentNode?.insertBefore(link, firstLink); }, []); if (enabled === false) return null; return ( ); } immutable-js-immutable-js-fa7d047/website/src/Header.tsx000066400000000000000000000113141515165743500233050ustar00rootroot00000000000000'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { SVGSet } from './SVGSet'; import { Logo } from './Logo'; import { StarBtn } from './StarBtn'; import { isMobile } from './isMobile'; export function Header({ versions, currentVersion, }: { versions: Array; currentVersion?: string; }) { const [scroll, setScroll] = useState(0); useEffect(() => { let _pending = false; function handleScroll() { if (!_pending) { const headerHeight = Math.min( 800, Math.max(260, document.documentElement.clientHeight * 0.7) ); if (window.scrollY < headerHeight) { _pending = true; window.requestAnimationFrame(() => { _pending = false; setScroll(window.scrollY); }); } } } window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, []); const neg = scroll < 0; const s = neg ? 0 : scroll; const sp = isMobile() ? 35 : 70; return (
{[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].map((_, i) => ( ))}
); } export function HeaderLogoLink() { return ( ); } export function HeaderLinks({ versions, currentVersion, }: { versions: Array; currentVersion?: string; }) { return (
); } function DocsDropdown({ versions, currentVersion, }: { versions: Array; currentVersion?: string; }) { return (
Docs{currentVersion && ` (${currentVersion})`}
    {versions.map(v => (
  • {v}
  • ))}
); } function ty(s: number, p: number) { return (p < s ? p : s) * -0.55; } function o(s: number, p: number) { return Math.max(0, s > p ? 1 - (s - p) / 350 : 1); } function tz(s: number, p: number) { return Math.max(0, s > p ? 1 - (s - p) / 20000 : 1); } function t(y: number, z: number) { return { transform: 'translate3d(0, ' + y + 'px, 0) scale(' + z + ')' }; } immutable-js-immutable-js-fa7d047/website/src/ImmutableConsole.tsx000066400000000000000000000050641515165743500253640ustar00rootroot00000000000000'use client'; import { useEffect } from 'react'; type InstallSpace = { Immutable?: unknown; module?: unknown; exports?: unknown; }; let installingVersion: string | undefined; export function ImmutableConsole({ version }: { version: string }) { useEffect(() => { const installSpace = global as unknown as InstallSpace; if (installingVersion === version) { return; } installingVersion = version; installUMD(installSpace, getSourceURL(version)).then(Immutable => { installSpace.Immutable = Immutable; /* eslint-disable no-console */ // tslint:disable:no-console console.log( '\n' + ' ▄▟████▙▄ _ __ __ __ __ _ _ _______ ____ _ _____ \n' + ' ▟██████████▙ | | | \\ / | \\ / | | | |__ __|/\\ | _ \\| | | ___|\n' + '██████████████ | | | \\/ | \\/ | | | | | | / \\ | |_) | | | |__ \n' + '██████████████ | | | |\\ /| | |\\ /| | | | | | | / /\\ \\ | _ <| | | __| \n' + ' ▜██████████▛ | | | | \\/ | | | \\/ | | |__| | | |/ ____ \\| |_) | |___| |___ \n' + ' ▀▜████▛▀ |_| |_| |_|_| |_|\\____/ |_/_/ \\_\\____/|_____|_____|\n' + '\n' + `Version: ${version}\n` + '> console.log(Immutable);' ); console.log(Immutable); /* eslint-enable no-console */ // tslint:enable:no-console }); }, [version]); return null; } function getSourceURL(version: string) { if (version === 'latest@main') { return `https://cdn.jsdelivr.net/gh/immutable-js/immutable-js@npm/dist/immutable.js`; } const semver = version[0] === 'v' ? version.slice(1) : version; return `https://cdn.jsdelivr.net/npm/immutable@${semver}/dist/immutable.js`; } function installUMD(installSpace: InstallSpace, src: string): Promise { return new Promise(resolve => { const installedModule = (installSpace.module = { exports: (installSpace.exports = {}), }); const script = document.createElement('script'); const firstScript = document.getElementsByTagName('script')[0]; script.src = src; script.addEventListener( 'load', () => { installSpace.module = undefined; installSpace.exports = undefined; script.remove(); resolve(installedModule.exports); }, false ); firstScript?.parentNode?.insertBefore(script, firstScript); }); } immutable-js-immutable-js-fa7d047/website/src/Logo.tsx000066400000000000000000000111361515165743500230170ustar00rootroot00000000000000import { memo } from 'react'; export const Logo = memo(function _Logo({ opacity = 1, inline, color, }: { opacity?: number; inline?: boolean; color: string; }) { return !inline ? ( ) : ( ); }); immutable-js-immutable-js-fa7d047/website/src/MarkdownContent.tsx000066400000000000000000000013471515165743500252370ustar00rootroot00000000000000'use client'; import { memo, MouseEvent } from 'react'; import { useRouter } from 'next/navigation'; type Props = { contents: string; className?: string; }; // eslint-disable-next-line prefer-arrow-callback export const MarkdownContent = memo(function MarkdownContent({ contents, className, }) { const router = useRouter(); const handleClick = (event: MouseEvent) => { const link = event.target as HTMLAnchorElement; if (link.tagName === 'A' && link.target !== '_blank') { event.preventDefault(); router.push(link.href); } }; return (
); }); immutable-js-immutable-js-fa7d047/website/src/MemberDoc.tsx000066400000000000000000000063621515165743500237610ustar00rootroot00000000000000import Link from 'next/link'; import { Fragment } from 'react'; import { CallSigDef, MemberDef } from './Defs'; import { MarkdownContent } from './MarkdownContent'; import type { MemberDefinition } from './TypeDefs'; export function MemberDoc({ member }: { member: MemberDefinition }) { return (

{member.label}

{member.doc && ( )} {!member.signatures ? ( ) : ( {member.signatures.map((callSig, i) => ( {'\n'} ))} )} {member.inherited && (

Inherited from

{member.inherited.interface}#{member.inherited.label}
)} {member.overrides && (

Overrides

{member.overrides.interface}#{member.overrides.label}
)} {member.doc?.notes.map((note, i) => (

{note.name}

{note.name === 'alias' ? ( ) : ( )}
))} {member.doc?.description && (

{member.doc.description.slice(0, 5) === '

)}
); } // export type ParamTypeMap = { [param: string]: Type }; // function getParamTypeMap( // interfaceDef: InterfaceDefinition | undefined, // member: MemberDefinition // ): ParamTypeMap | undefined { // if (!member.inherited || !interfaceDef?.typeParamsMap) return; // const defining = member.inherited.split('#')[0] + '>'; // const paramTypeMap: ParamTypeMap = {}; // // Filter typeParamsMap down to only those relevant to the defining interface. // for (const [path, type] of Object.entries(interfaceDef.typeParamsMap)) { // if (path.startsWith(defining)) { // paramTypeMap[path.slice(defining.length)] = type; // } // } // return paramTypeMap; // } immutable-js-immutable-js-fa7d047/website/src/RunkitEmbed.tsx000066400000000000000000000065561515165743500243420ustar00rootroot00000000000000import Script from 'next/script'; export function RunkitEmbed() { return