Mirror: 🎩 A tiny but capable push & pull stream library for TypeScript and Flow

Compare changes

Choose any two refs to compare.

Changed files
+13169 -10191
.changeset
.github
__tests__
docs
perf
scripts
src
__tests__
operators
sinks
sources
web
+8
.changeset/README.md
··· 1 + # Changesets 2 + 3 + Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 + with multi-package repos, or single-package repos to help you version and publish your code. You can 5 + find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 + 7 + We have a quick list of common questions to get you started engaging with this project in 8 + [our documentation](https://github.com/changesets/changesets/blob/master/docs/common-questions.md)
+16
.changeset/config.json
··· 1 + { 2 + "$schema": "https://unpkg.com/@changesets/config@0.3.0/schema.json", 3 + "changelog": "../scripts/changelog.js", 4 + "commit": false, 5 + "access": "public", 6 + "baseBranch": "main", 7 + "updateInternalDependencies": "minor", 8 + "snapshot": { 9 + "prereleaseTemplate": "{tag}-{commit}", 10 + "useCalculatedVersion": true 11 + }, 12 + "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { 13 + "onlyUpdatePeerDependentsWhenOutOfRange": true, 14 + "updateInternalDependents": "out-of-range" 15 + } 16 + }
+3
.editorconfig
··· 7 7 indent_style = space 8 8 insert_final_newline = true 9 9 trim_trailing_whitespace = true 10 + 11 + [*.ts] 12 + max_line_length = 100
+42
.github/ISSUE_TEMPLATE/RFC.md
··· 1 + --- 2 + name: 'RFC' 3 + about: Propose an enhancement / feature and start a discussion 4 + title: 'RFC: Your Proposal' 5 + labels: "future \U0001F52E" 6 + --- 7 + 8 + <!-- 9 + 🚨 RFCs are for proposed changes (not bugs or questions) 10 + Specifically they are whenever you'd like to see new features 11 + being added, or enable new use-cases. 12 + 13 + Please open a Bug Report for issues/bugs, and use GitHub Discussions 14 + or the Discord channel for questions instead. 15 + --> 16 + 17 + ## Summary 18 + 19 + <!-- 20 + Describe in a couple of words *what* you're proposing. 21 + If relevant, include *why* this should be addressed now. 22 + The problem should be clearly stated and the solution 23 + should be summarised. 24 + --> 25 + 26 + ## Proposed Solution 27 + 28 + <!-- 29 + Explain the solution you're proposing in detail. 30 + *How* will this change be implemented, and how does it work? 31 + --> 32 + 33 + ## Requirements 34 + 35 + <!-- 36 + This section is *optional*. 37 + But if your proposed solution has multiple ways 38 + of being implemented, you don't want to state how 39 + it may be implemented, or you don't know yet how 40 + it will be implemented, then: 41 + *List* what the implementation needs to achieve to fulfil this RFC; 42 + -->
+46
.github/ISSUE_TEMPLATE/bug_report.yaml
··· 1 + name: "\U0001F41E Bug report" 2 + description: Report an issue with graphql.web 3 + labels: [] 4 + body: 5 + - type: markdown 6 + attributes: 7 + value: | 8 + Thanks for taking the time to fill out this bug report! 9 + - type: markdown 10 + attributes: 11 + value: | 12 + Thanks for taking the time to fill out this bug report! 13 + - type: textarea 14 + id: bug-description 15 + attributes: 16 + label: Describe the bug 17 + description: Please describe your bug clearly and concisely. 18 + placeholder: Bug description 19 + validations: 20 + required: true 21 + - type: input 22 + id: reproduction 23 + attributes: 24 + label: Reproduction 25 + description: Please provide a reproduction link, e.g. to a sandbox 26 + placeholder: Reproduction 27 + validations: 28 + required: true 29 + - type: textarea 30 + id: version 31 + attributes: 32 + label: Package version 33 + description: The versions of the relevant urql packages you are using 34 + placeholder: "wonka@6.2.5" 35 + validations: 36 + required: true 37 + - type: checkboxes 38 + id: checkboxes 39 + attributes: 40 + label: Validations 41 + description: Before submitting the issue, please make sure you do the following 42 + options: 43 + - label: I can confirm that this is a bug report, and not a feature request, RFC, question, or discussion, for which GitHub Discussions should be used 44 + required: true 45 + - label: Follow our [Code of Conduct](https://github.com/0no-co/graphql.web/blob/main/CODE_OF_CONDUCT.md) 46 + required: true
+8
.github/ISSUE_TEMPLATE/config.yml
··· 1 + blank_issues_enabled: true 2 + contact_links: 3 + - name: Ask a question 4 + url: https://github.com/@0no-co/wonka/discussions 5 + about: Ask questions and discuss with other community members 6 + - name: Join the Discord 7 + url: https://discord.gg/3EYgqrYJFS 8 + about: Chat with maintainers and other community members
+22
.github/PULL_REQUEST_TEMPLATE.md
··· 1 + <!-- 2 + Thanks for opening a pull request! We appreciate your dedication and help! 3 + Before submitting your pull request, please make sure to read our CONTRIBUTING guide. 4 + 5 + The best contribution is always a PR, but please make sure to open an issue or discuss 6 + your changes first, if you’re looking to submit a larger PR. 7 + 8 + If this PR is already related to an issue, please reference it like so: 9 + Resolves #123 10 + --> 11 + 12 + ## Summary 13 + 14 + <!-- What's the motivation of this change? What does it solve? --> 15 + 16 + ## Set of changes 17 + 18 + <!-- 19 + Roughly list the changes you've made and which packages are affected. 20 + Leave some notes on what may be noteworthy files you've changed. 21 + And lastly, please let us know if you think this is a breaking change. 22 + -->
+45
.github/workflows/ci.yml
··· 1 + name: CI 2 + 3 + on: 4 + pull_request: 5 + pull_request_review: 6 + types: [submitted, edited] 7 + branches: changeset-release/main 8 + 9 + jobs: 10 + check: 11 + name: Checks 12 + runs-on: ubuntu-latest 13 + timeout-minutes: 10 14 + steps: 15 + - name: Checkout Repo 16 + uses: actions/checkout@v3 17 + with: 18 + fetch-depth: 0 19 + 20 + - name: Setup pnpm 21 + uses: pnpm/action-setup@v3 22 + with: 23 + version: 9 24 + run_install: false 25 + 26 + - name: Setup Node 27 + uses: actions/setup-node@v4 28 + with: 29 + node-version: 22 30 + cache: 'pnpm' 31 + 32 + - name: Install Dependencies 33 + run: pnpm install --frozen-lockfile --prefer-offline 34 + 35 + - name: TypeScript 36 + run: pnpm run check 37 + 38 + - name: Linting 39 + run: pnpm run lint 40 + 41 + - name: Unit Tests 42 + run: pnpm run test 43 + 44 + - name: Build 45 + run: pnpm run build
+26
.github/workflows/mirror.yml
··· 1 + # Mirrors to https://tangled.sh/@kitten.sh (knot.kitten.sh) 2 + name: Mirror (Git Backup) 3 + on: 4 + push: 5 + branches: 6 + - main 7 + jobs: 8 + mirror: 9 + runs-on: ubuntu-latest 10 + steps: 11 + - name: Checkout repository 12 + uses: actions/checkout@v4 13 + with: 14 + fetch-depth: 0 15 + fetch-tags: true 16 + - name: Mirror 17 + env: 18 + MIRROR_SSH_KEY: ${{ secrets.MIRROR_SSH_KEY }} 19 + GIT_SSH_COMMAND: 'ssh -o StrictHostKeyChecking=yes' 20 + run: | 21 + mkdir -p ~/.ssh 22 + echo "$MIRROR_SSH_KEY" > ~/.ssh/id_rsa 23 + chmod 600 ~/.ssh/id_rsa 24 + ssh-keyscan -H knot.kitten.sh >> ~/.ssh/known_hosts 25 + git remote add mirror "git@knot.kitten.sh:kitten.sh/${GITHUB_REPOSITORY#*/}" 26 + git push --mirror mirror
+56
.github/workflows/release.yml
··· 1 + name: Release 2 + on: 3 + push: 4 + branches: 5 + - main 6 + jobs: 7 + release: 8 + name: Release 9 + runs-on: ubuntu-20.04 10 + timeout-minutes: 20 11 + permissions: 12 + contents: write 13 + id-token: write 14 + issues: write 15 + repository-projects: write 16 + deployments: write 17 + packages: write 18 + pull-requests: write 19 + steps: 20 + - name: Checkout Repo 21 + uses: actions/checkout@v3 22 + with: 23 + fetch-depth: 0 24 + 25 + - name: Setup pnpm 26 + uses: pnpm/action-setup@v3 27 + with: 28 + version: 9 29 + run_install: false 30 + 31 + - name: Setup Node 32 + uses: actions/setup-node@v4 33 + with: 34 + node-version: 22 35 + cache: 'pnpm' 36 + 37 + - name: Install Dependencies 38 + run: pnpm install --frozen-lockfile --prefer-offline 39 + 40 + - name: PR or Publish 41 + id: changesets 42 + uses: changesets/action@v1.5.3 43 + with: 44 + version: pnpm changeset:version 45 + publish: pnpm changeset:publish 46 + env: 47 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 48 + 49 + - name: Publish Prerelease 50 + if: steps.changesets.outputs.published != 'true' 51 + env: 52 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 53 + run: | 54 + git reset --hard origin/main 55 + pnpm changeset version --no-git-tag --snapshot canary 56 + pnpm changeset publish --no-git-tag --snapshot canary --tag canary
+8 -36
.gitignore
··· 1 - *.exe 2 - *.obj 3 - *.out 4 - *.compile 5 - *.native 6 - *.byte 7 - *.cmo 8 - *.annot 9 - *.cmi 10 - *.cmx 11 - *.cmt 12 - *.cmti 13 - *.cma 14 - *.a 15 - *.cmxa 16 - *.obj 17 - *~ 18 - *.annot 19 - *.cmj 20 - *.bak 21 - lib/bs 22 - *.mlast 23 - *.mliast 24 - .vscode 25 - .merlin 26 - .bsb.lock 27 - 28 - yarn-error.log 1 + /.idea 2 + /.vscode 3 + **/node_modules 4 + *.log 5 + .rts2_cache* 6 + .husky 29 7 dist/ 30 - node_modules/ 31 - lib/ 32 - src/**/*.js 33 - __tests__/**/*.js 34 - coverage/ 35 - 36 - !src/index.js 37 - !src/pipe.js 8 + package-lock.json 9 + .DS_Store
-8
.jest.coverage.json
··· 1 - { 2 - "moduleFileExtensions": [ 3 - "js" 4 - ], 5 - "testMatch": [ 6 - "**/lib/js/__tests__/*_test.js" 7 - ] 8 - }
-23
.terser.config.json
··· 1 - { 2 - "keep_fnames": true, 3 - "ie8": false, 4 - "compress": { 5 - "pure_getters": true, 6 - "toplevel": true, 7 - "booleans_as_integers": false, 8 - "keep_fnames": true, 9 - "keep_fargs": true, 10 - "if_return": false, 11 - "ie8": false, 12 - "sequences": false, 13 - "loops": false, 14 - "conditionals": false, 15 - "join_vars": false 16 - }, 17 - "mangle": false, 18 - "output": { 19 - "beautify": true, 20 - "braces": true, 21 - "indent_level": 2 22 - } 23 - }
-18
.travis.yml
··· 1 - dist: trusty 2 - language: node_js 3 - node_js: 4 - - "10" 5 - sudo: false 6 - branches: 7 - only: 8 - - master 9 - notifications: 10 - email: 11 - on_success: change 12 - on_failure: always 13 - cache: yarn 14 - script: 15 - - yarn run build 16 - - yarn run coverage 17 - - cat coverage/lcov.info | node_modules/.bin/coveralls || echo "Coveralls upload failed" 18 - - yarn run bundlesize
+102
CHANGELOG.md
··· 1 + # wonka 2 + 3 + ## 6.3.5 4 + 5 + ### Patch Changes 6 + 7 + - Exclude `sourcesContent` from published sourcemaps 8 + Submitted by [@kitten](https://github.com/kitten) (See [`68e608f`](https://github.com/0no-co/wonka/commit/68e608f46244e82d41c952ecfa1d7f0096e168f6)) 9 + 10 + ## 6.3.4 11 + 12 + ### Patch Changes 13 + 14 + - Add missing `Symbol.observable` global declaration back to typings 15 + Submitted by [@kitten](https://github.com/kitten) (See [#168](https://github.com/0no-co/wonka/pull/168)) 16 + 17 + ## 6.3.3 18 + 19 + ### Patch Changes 20 + 21 + - Improve compatibility of `fromAsyncIterable` and `toAsyncIterable`. The `toAsyncIterable` will now output an object that's both an `AsyncIterator` and an `AsyncIterable`. Both helpers will now use a polyfill for `Symbol.asyncIterator` to improve compatibility with the Hermes engine and Babel transpilation 22 + Submitted by [@kitten](https://github.com/kitten) (See [#165](https://github.com/0no-co/wonka/pull/165)) 23 + 24 + ## 6.3.2 25 + 26 + ### Patch Changes 27 + 28 + - Publish with npm provenance 29 + Submitted by [@kitten](https://github.com/kitten) (See [#161](https://github.com/0no-co/wonka/pull/161)) 30 + 31 + ## 6.3.1 32 + 33 + ### Patch Changes 34 + 35 + - ⚠️ Fix missing `declare` keyword on internal ambient enums 36 + Submitted by [@kitten](https://github.com/kitten) (See [#159](https://github.com/0no-co/wonka/pull/159)) 37 + 38 + ## 6.3.0 39 + 40 + ### Minor Changes 41 + 42 + - Add `addOne` argument to `takeWhile`, allowing an additional value to be issued 43 + Submitted by [@kitten](https://github.com/kitten) (See [#156](https://github.com/0no-co/wonka/pull/156)) 44 + 45 + ### Patch Changes 46 + 47 + - Convert `Push<T>` and `Start<T>` signals to `{ tag, 0: value }` objects, which are sufficiently backwards compatible and result in slightly faster execution in v8 48 + Submitted by [@kitten](https://github.com/kitten) (See [#155](https://github.com/0no-co/wonka/pull/155)) 49 + 50 + ## 6.2.6 51 + 52 + ### Patch Changes 53 + 54 + - ⚠️ Fix missing source contents in Wonka sourcemaps 55 + Submitted by [@kitten](https://github.com/kitten) (See [`56d9708`](https://github.com/0no-co/wonka/commit/56d970861424fddd403262bf85d7e1e3572b15e2)) 56 + - ⚠️ Fix internal `SignalKind` and `TalkbackKind` enums not compiling away 57 + Submitted by [@kitten](https://github.com/kitten) (See [#154](https://github.com/0no-co/wonka/pull/154)) 58 + 59 + ## 6.2.5 60 + 61 + ### Patch Changes 62 + 63 + - Make `closed: boolean` on `ObservableSubscription`s a required field to comply with the Observable proposal's type spec 64 + Submitted by [@naporin0624](https://github.com/naporin0624) (See [#151](https://github.com/0no-co/wonka/pull/151)) 65 + 66 + ## 6.2.4 67 + 68 + ### Patch Changes 69 + 70 + - Add missing overload definition for `filter`, which allows types to be narrowed, e.g. by specifying a type predicate return type 71 + Submitted by [@kitten](https://github.com/kitten) (See [#149](https://github.com/0no-co/wonka/pull/149)) 72 + 73 + ## 6.2.3 74 + 75 + ### Patch Changes 76 + 77 + - ⚠️ Fix overload of `pipe` type not being applied in bundled `d.ts` file, by [@kitten](https://github.com/kitten) (See [#144](https://github.com/0no-co/wonka/pull/144)) 78 + 79 + ## 6.2.2 80 + 81 + ### Patch Changes 82 + 83 + - ⚠️ Fix missing `Symbol.observable` typings and remove `const enum` exports, which aren't usable in isolated modules, by [@kitten](https://github.com/kitten) (See [#141](https://github.com/0no-co/wonka/pull/141)) 84 + 85 + ## 6.2.1 86 + 87 + ### Patch Changes 88 + 89 + - ⚠️ Fix accidental addition of `postinstall` script rather than `prepare` script, by [@kitten](https://github.com/kitten) (See [#138](https://github.com/0no-co/wonka/pull/138)) 90 + 91 + ## 6.2.0 92 + 93 + ### Minor Changes 94 + 95 + - Implement `toAsyncIterable`, converting a Wonka source to a JS Async Iterable, by [@kitten](https://github.com/kitten) (See [#133](https://github.com/0no-co/wonka/pull/133)) 96 + - Implement `d.ts` bundling. Only a single `wonka.d.ts` typings file will now be available to TypeScript, by [@kitten](https://github.com/kitten) (See [#135](https://github.com/0no-co/wonka/pull/135)) 97 + - Add extensive TSDoc documentation for all `wonka` internals and exports. This will replace the documentation and give consumers more guidance on each of the library's extensive utilities, by [@kitten](https://github.com/kitten) (See [#136](https://github.com/0no-co/wonka/pull/136)) 98 + 99 + ### Patch Changes 100 + 101 + - ⚠️ Fix promise timing by adding missing `Promise.resolve()` tick to `toPromise` sink function, by [@kitten](https://github.com/kitten) (See [#131](https://github.com/0no-co/wonka/pull/131)) 102 + - ⚠️ Fix implementation of Observable spec as such that Observable.subscribe(onNext, onError, onComplete) becomes valid, by [@kitten](https://github.com/kitten) (See [#132](https://github.com/0no-co/wonka/pull/132))
+163
CONTRIBUTING.md
··· 1 + # Development 2 + 3 + Thanks for contributing! We want to ensure that `wonka` evolves 4 + and fulfills its idea of being a tiny & capable push & pull stream library! 5 + 6 + ## How to contribute? 7 + 8 + We follow fairly standard but lenient rules around pull requests and issues. 9 + Please pick a title that describes your change briefly, optionally in the imperative 10 + mood if possible. 11 + 12 + If you have an idea for a feature or want to fix a bug, consider opening an issue 13 + first. We're also happy to discuss and help you open a PR and get your changes 14 + in! 15 + 16 + - If you have a question, try [creating a GitHub Discussions thread.](https://github.com/0no-co/wonka/discussions/new/choose) 17 + - If you think you've found a bug, [open a new issue.](https://github.com/0no-co/wonka/issues/new) 18 + - or, if you found a bug you'd like to fix, [open a PR.](https://github.com/0no-co/wonka/compare) 19 + - If you'd like to propose a change [open an RFC issue.](https://github.com/0no-co/wonka/issues/new?labels=future+%F0%9F%94%AE&template=RFC.md&title=RFC%3A+Your+Proposal) You can read more about the RFC process [below](#how-do-i-propose-changes). 20 + 21 + ### What are the issue conventions? 22 + 23 + There are **no strict conventions**, but we do have two templates in place that will fit most 24 + issues, since questions and other discussion start on GitHub Discussions. The bug template is fairly 25 + standard and the rule of thumb is to try to explain **what you expected** and **what you got 26 + instead.** Following this makes it very clear whether it's a known behavior, an unexpected issue, 27 + or an undocumented quirk. 28 + 29 + ### How do I propose changes? 30 + 31 + We follow an **RFC proposal process**. This allows anyone to propose a new feature or a change, and 32 + allows us to communicate our current planned features or changes, so any technical discussion, 33 + progress, or upcoming changes are always **documented transparently.** You can [find the RFC 34 + template](https://github.com/0no-co/wonka/issues/new/choose) in our issue creator. 35 + 36 + ### What are the PR conventions? 37 + 38 + This also comes with **no strict conventions**. We only ask you to follow the PR template we have 39 + in place more strictly here than the templates for issues, since it asks you to list a summary 40 + (maybe even with a short explanation) and a list of technical changes. 41 + 42 + If you're **resolving** an issue please don't forget to add `Resolve #123` to the description so that 43 + it's automatically linked, so that there's no ambiguity and which issue is being addressed (if any) 44 + 45 + You'll find that a comment by the "Changeset" bot may pop up. If you don't know what a **changeset** 46 + is and why it's asking you to document your changes, read on at ["How do I document a change for the 47 + changelog"](#how-do-i-document-a-change-for-the-changelog) 48 + 49 + We also typically **name** our PRs with a slightly descriptive title, e.g. `feat: Title`. 50 + 51 + ## How do I set up the project? 52 + 53 + Luckily it's not hard to get started. You can install dependencie 54 + [using `pnpm`](https://pnpm.io/installation#using-corepack). 55 + Please don't use `npm` or `yarn` to respect the lockfile. 56 + 57 + ```sh 58 + pnpm install 59 + ``` 60 + 61 + There are multiple commands you can run in the root folder to test your changes: 62 + 63 + ```sh 64 + # TypeScript checks: 65 + pnpm run check 66 + 67 + # Linting (prettier & eslint): 68 + pnpm run lint 69 + 70 + # Unit Tests: 71 + pnpm run test 72 + 73 + # Builds: 74 + pnpm run build 75 + ``` 76 + 77 + ## How do I test my changes? 78 + 79 + It's always good practice to run the tests when making changes. If you're unsure which packages 80 + may be affected by your new tests or changes you may run `pnpm test` in the root of 81 + the repository. 82 + 83 + If your editor is not set up with type checks you may also want to run `pnpm run check` on your 84 + changes. 85 + 86 + Additionally you can head to any example in the `examples/` folder 87 + and run them. There you'll also need to install their dependencies as they're isolated projects, 88 + without a lockfile and without linking to packages in the monorepos. 89 + All examples are started using the `package.json`'s `start` script. 90 + 91 + ## How do I lint my code? 92 + 93 + We ensure consistency in this codebase using `eslint` and `prettier`. 94 + They are run on a `precommit` hook, so if something's off they'll try 95 + to automatically fix up your code, or display an error. 96 + 97 + If you have them set up in your editor, even better! 98 + 99 + ## How do I document a change for the changelog? 100 + 101 + This project uses [changesets](https://github.com/atlassian/changesets). This means that for 102 + every PR there must be documentation for what has been changed and which package is affected. 103 + 104 + You can document a change by running `changeset`, which will ask you which packages 105 + have changed and whether the change is major/minor/patch. It will then ask you to write 106 + a change entry as markdown. 107 + 108 + ```sh 109 + # In the root of the urql repository call: 110 + pnpm changeset 111 + ``` 112 + 113 + This will create a new "changeset file" in the `.changeset` folder, which you should commit and 114 + push, so that it's added to your PR. 115 + This will eventually end up in the package's `CHANGELOG.md` file when we do a release. 116 + 117 + You won't need to add a changeset if you're simply making "non-visible" changes to the docs or other 118 + files that aren't published to the npm registry. 119 + 120 + [Read more about adding a `changeset` here.](https://github.com/atlassian/changesets/blob/master/docs/adding-a-changeset.md#i-am-in-a-multi-package-repository-a-mono-repo) 121 + 122 + ## How do I release new versions of our packages? 123 + 124 + Hold up, that's **automated**! Since we use `changeset` to document our changes, which determines what 125 + goes into the changelog and what kind of version bump a change should make, you can also use the 126 + tool to check what's currently posed to change after a release batch using: `pnpm changeset status`. 127 + 128 + We have a [GitHub Actions workflow](./.github/workflow/release.yml) which is triggered whenever new 129 + changes are merged. It will always open a **"Version Packages" PR** which is kept up-to-date. This PR 130 + documents all changes that are made and will show in its description what all new changelogs are 131 + going to contain for their new entries. 132 + 133 + Once a "Version Packages" PR is approved by a contributor and merged, the action will automatically 134 + take care of creating the release, publishing all updated packages to the npm registry, and creating 135 + appropriate tags on GitHub too. 136 + 137 + This process is automated, but the changelog should be checked for errors. 138 + 139 + As to **when** to merge the automated PR and publish? Maybe not after every change. Typically there 140 + are two release batches: hotfixes and release batches. We expect that a hotfix for a single package 141 + should go out as quickly as possible if it negatively affects users. For **release batches** 142 + however, it's common to assume that if one change is made to a package that more will follow in the 143 + same week. So waiting for **a day or two** when other changes are expected will make sense to keep the 144 + fatigue as low as possible for downstream maintainers. 145 + 146 + ## How do I upgrade all dependencies? 147 + 148 + It may be a good idea to keep all dependencies on this repository **up-to-date** every now and 149 + then. Typically we do this by running `pnpm update --interactive --latest` and checking one-by-one 150 + which dependencies will need to be bumped. In case of any security issues it may make sense to 151 + just run `pnpm update [package]`. 152 + 153 + While this is rare with `pnpm`, upgrading some transitive dependencies may accidentally duplicate 154 + them if two packages depend on different compatible version ranges. This can be fixed by running: 155 + 156 + ```sh 157 + pnpm dedupe 158 + pnpm install 159 + ``` 160 + 161 + It's common to then **create a PR** (with a changeset documenting the packages that need to reflect 162 + new changes if any `dependencies` have changed) with the name of 163 + "(chore) - Upgrade direct and transitive dependencies" or something similar.
+1 -1
LICENSE.md
··· 1 1 MIT License 2 2 3 - Copyright (c) 2018 Phil Plückthun 3 + Copyright (c) 0no.co 4 4 5 5 Permission is hereby granted, free of charge, to any person obtaining a copy 6 6 of this software and associated documentation files (the "Software"), to deal
+31 -106
README.md
··· 1 1 # Wonka 2 2 3 - A fast push & pull stream library for Reason, loosely following the [callbag spec](https://github.com/callbag/callbag) 3 + A tiny but capable push & pull stream library for TypeScript and Flow, 4 + loosely following the [callbag spec](https://github.com/callbag/callbag) 5 + 6 + > **NOTE:** The currently released version v6 is only compatible now with TypeScript, Flow, and JavaScript. 7 + > If you're looking for Reason/OCaml/esy/dune support, please check v5, and if you're looking for the legacy version 8 + > of this library check v4. 4 9 5 - [![Build Status](https://travis-ci.org/kitten/wonka.svg?branch=master)](https://travis-ci.org/kitten/wonka) 6 - [![Coverage Status](https://coveralls.io/repos/github/kitten/wonka/badge.svg?branch=master)](https://coveralls.io/github/kitten/wonka?branch=master) 7 - [![npm](https://img.shields.io/npm/v/wonka.svg)](https://www.npmjs.com/package/wonka) 8 - [![npm](https://img.shields.io/npm/l/wonka.svg)](https://www.npmjs.com/package/wonka) 10 + <br> 11 + <a href="https://npmjs.com/package/wonka"> 12 + <img alt="NPM Version" src="https://img.shields.io/npm/v/wonka.svg" /> 13 + </a> 14 + <a href="https://npmjs.com/package/wonka"> 15 + <img alt="License" src="https://img.shields.io/npm/l/wonka.svg" /> 16 + </a> 17 + <a href="https://coveralls.io/github/kitten/wonka?branch=master"> 18 + <img src="https://coveralls.io/repos/github/kitten/wonka/badge.svg?branch=master" alt="Test Coverage" /> 19 + </a> 20 + <a href="https://bundlephobia.com/result?p=wonka"> 21 + <img alt="Minified gzip size" src="https://img.shields.io/bundlephobia/minzip/wonka.svg?label=gzip%20size" /> 22 + </a> 23 + <br> 9 24 10 25 > “There’s no earthly way of knowing<br> 11 26 > Which direction we are going<br> ··· 16 31 17 32 ![Wonka](/docs/wonka.jpg?raw=true) 18 33 19 - * [What is `Wonka`](#what-is-wonka) 20 - * [Why it exists](#why-it-exists) 21 - * [Installation](#installation) 22 - * [Getting Started](#getting-started) 23 - * [Documentation (In Progress)](#documentation) 34 + Wonka is a lightweight iterable and observable library loosely based on 35 + the [callbag spec](https://github.com/callbag/callbag). It exposes a set of helpers to create streams, 36 + which are sources of multiple values, which allow you to create, transform 37 + and consume event streams or iterable sets of data. 24 38 25 - ## What is `Wonka` 39 + ## [Documentation](https://wonka.kitten.sh/) 26 40 27 - `Wonka` is a library for lightweight observables and iterables loosely based on the [callbag spec](https://github.com/callbag/callbag). 28 - It exposes a set of helpers to create and transform sources and output sinks, meaning it helps you to turn an event source or an 29 - iterable set of data into streams, and manipulate these streams. 30 - 31 - ## Why it exists 32 - 33 - Reason has been becoming increasingly popular, but it's missing a good pattern for streams that feels native to the language. 34 - The functional nature of callbags make them a perfect starting point to fix this, and to introduce a reactive programming 35 - pattern to a language that is well suited for it. 36 - 37 - Hence `Wonka` is a library that aims to make complex streams of data easy to deal with. 38 - 39 - ## Installation 40 - 41 - Install the library first: `yarn add wonka` or `npm install --save wonka`, 41 + **See the documentation at [wonka.kitten.sh](https://wonka.kitten.sh)** for more information about using `wonka`! 42 42 43 - Then add `wonka` to `bs-dependencies` in your `bsconfig.json` file like so: 43 + - [Introduction](https://wonka.kitten.sh/) 44 + - [**Getting started**](https://wonka.kitten.sh/getting-started) 45 + - [Basics](https://wonka.kitten.sh/basics/) 46 + - [API Reference](https://wonka.kitten.sh/api/) 44 47 45 - ```diff 46 - { 47 - "name": "<your name>", 48 - "version": "0.1.0", 49 - "sources": ["src"], 50 - "bsc-flags": ["-bs-super-errors"], 51 - "bs-dependencies": [ 52 - + "wonka" 53 - ] 54 - } 55 - ``` 56 - 57 - ## Getting Started 58 - 59 - Writing your first stream is very easy! Let's suppose you would like to create a stream from a list, filter out some values, 60 - then map over the remaining ones, and lastly iterate over the final values. 61 - 62 - This can be done with a few operators that might remind you of functions you would also call on iterables. 63 - 64 - ```reason 65 - let example = [1, 2, 3, 4, 5, 6]; 66 - 67 - Wonka.fromList(example) 68 - |> Wonka.filter(x => x mod 2 === 0) 69 - |> Wonka.map(x => x * 2) 70 - |> Wonka.forEach(x => print_endline(string_of_int(x))); 71 - 72 - /* prints: 4, 8, 12 */ 73 - ``` 74 - 75 - To explain what's going on: 76 - 77 - - `fromList` creates a pullable source with values from the list 78 - - `filter` only lets even values through 79 - - `map` multiplies the values by `2` 80 - - `forEach` pulls values from the resulting source and prints them 81 - 82 - As you can see, all helpers that we've used are exposed on the `Wonka` module. 83 - But if we would like to use JavaScript-based APIs, then we need to use the `WonkaJs` module. 84 - 85 - Let's look at the same example, but instead of a list we will use an `interval` stream. 86 - This stream will output ascending numbers starting from `0` indefinitely. 87 - 88 - We will code the same example as before but we'd like the `interval` to push 89 - a new number every `50ms` and to stop after seven values. 90 - 91 - ```reason 92 - WonkaJs.interval(50) 93 - |> Wonka.take(7) 94 - |> Wonka.filter(x => x mod 2 === 0) 95 - |> Wonka.map(x => x * 2) 96 - |> Wonka.forEach(x => print_endline(string_of_int(x))); 97 - 98 - /* prints: 4, 8, 12 */ 99 - ``` 100 - 101 - The last three functions stay the same, but we are now using `interval` as our source. 102 - This is a listenable source, meaning that it pushes values downwards when it sees fit. 103 - And the `take` operator tells our source to stop sending values after having received seven 104 - values. 105 - 106 - And already you have mastered all the basics of `Wonka` and learned about a couple of its operators! 107 - Go, you! :tada: 108 - 109 - ## Documentation 110 - 111 - I am currently still working on getting some documentation up and running. Those will contain: 112 - 113 - - The API, i.e. a list of all helpers 114 - - Examples 115 - - Usage Guides & Recipes 116 - - Developer Guides (How to write a source/operator/sink) 117 - - Modified Callbag spec 118 - 119 - Stay tuned and read the signature files in the meantime please: 120 - 121 - - [wonka.rei](./src/wonka.rei) 122 - - [wonkaJs.rei](./src/wonka.rei) 123 - 48 + The raw markdown files can be found [in this repository in the `docs` folder](https://github.com/kitten/wonka/tree/master/docs).
-1412
__tests__/wonka_test.re
··· 1 - open Jest; 2 - open Wonka_types; 3 - 4 - let it = test; 5 - 6 - describe("source factories", () => { 7 - describe("fromList", () => { 8 - open Expect; 9 - open! Expect.Operators; 10 - 11 - it("sends list items to a puller sink", () => { 12 - let source = Wonka.fromList([10, 20, 30]); 13 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 14 - let signals = [||]; 15 - 16 - source((.signal) => { 17 - switch (signal) { 18 - | Start(x) => talkback := x; 19 - | Push(_) => ignore(Js.Array.push(signal, signals)); 20 - | End => ignore(Js.Array.push(signal, signals)) 21 - }; 22 - }); 23 - 24 - talkback^(.Pull); 25 - talkback^(.Pull); 26 - talkback^(.Pull); 27 - talkback^(.Pull); 28 - 29 - expect(signals) == [| Push(10), Push(20), Push(30), End |]; 30 - }); 31 - }); 32 - 33 - describe("fromArray", () => { 34 - open Expect; 35 - open! Expect.Operators; 36 - 37 - it("sends array items to a puller sink", () => { 38 - let source = Wonka.fromArray([| 10, 20, 30 |]); 39 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 40 - let signals = ref([||]); 41 - 42 - source((.signal) => { 43 - switch (signal) { 44 - | Start(x) => { 45 - talkback := x; 46 - x(.Pull); 47 - } 48 - | Push(_) => { 49 - signals := Array.append(signals^, [|signal|]); 50 - talkback^(.Pull); 51 - } 52 - | End => signals := Array.append(signals^, [|signal|]); 53 - }; 54 - }); 55 - 56 - expect(signals^) == [| Push(10), Push(20), Push(30), End |]; 57 - }); 58 - 59 - it("does not blow up the stack when iterating something huge", () => { 60 - let arr = Array.make(100000, 123); 61 - let source = Wonka.fromArray(arr); 62 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 63 - let values = [||]; 64 - 65 - source((.signal) => { 66 - switch (signal) { 67 - | Start(x) => { 68 - talkback := x; 69 - x(.Pull); 70 - } 71 - | Push(x) => { 72 - ignore(Js.Array.push(x, values)); 73 - talkback^(.Pull); 74 - } 75 - | End => () 76 - }; 77 - }); 78 - 79 - expect(Array.length(values)) == Array.length(arr); 80 - }); 81 - }); 82 - 83 - describe("fromValue", () => { 84 - open Expect; 85 - open! Expect.Operators; 86 - 87 - it("sends a single item to a puller sink", () => { 88 - let source = Wonka.fromValue(123); 89 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 90 - let signals = [||]; 91 - 92 - source((.signal) => { 93 - switch (signal) { 94 - | Start(x) => talkback := x; 95 - | Push(_) => ignore(Js.Array.push(signal, signals)); 96 - | End => ignore(Js.Array.push(signal, signals)) 97 - }; 98 - }); 99 - 100 - talkback^(.Pull); 101 - talkback^(.Pull); 102 - talkback^(.Pull); /* one extra to check whether no signal comes back after it has ended */ 103 - 104 - expect(signals) == [| Push(123), End |]; 105 - }); 106 - }); 107 - 108 - describe("empty", () => { 109 - open Expect; 110 - open! Expect.Operators; 111 - 112 - it("ends immediately", () => { 113 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 114 - let signals = [||]; 115 - 116 - Wonka.empty((.signal) => { 117 - switch (signal) { 118 - | Start(x) => talkback := x; 119 - | _ => ignore(Js.Array.push(signal, signals)) 120 - }; 121 - }); 122 - 123 - let _signals = Array.copy(signals); 124 - 125 - talkback^(.Pull); 126 - talkback^(.Pull); 127 - 128 - expect((_signals, signals)) == ([| End |], [| End |]); 129 - }); 130 - }); 131 - 132 - describe("never", () => { 133 - open Expect; 134 - open! Expect.Operators; 135 - 136 - it("does not end", () => { 137 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 138 - let ended = ref(false); 139 - 140 - Wonka.never((.signal) => { 141 - switch (signal) { 142 - | Start(x) => talkback := x; 143 - | End => ended := true 144 - | _ => () 145 - }; 146 - }); 147 - 148 - talkback^(.Pull); 149 - talkback^(.Pull); 150 - 151 - expect(ended^) === false; 152 - }); 153 - }); 154 - }); 155 - 156 - describe("operator factories", () => { 157 - describe("map", () => { 158 - open Expect; 159 - 160 - it("maps all emissions of a source", () => { 161 - let num = ref(1); 162 - let nums = [||]; 163 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 164 - 165 - Wonka.map((._) => { 166 - let res = num^; 167 - num := num^ + 1; 168 - res 169 - }, sink => { 170 - sink(.Start((.signal) => { 171 - switch (signal) { 172 - | Pull => sink(.Push(1)); 173 - | _ => () 174 - } 175 - })); 176 - }, (.signal) => { 177 - switch (signal) { 178 - | Start(x) => { 179 - talkback := x; 180 - x(.Pull); 181 - } 182 - | Push(x) when num^ < 6 => { 183 - ignore(Js.Array.push(x, nums)); 184 - talkback^(.Pull); 185 - } 186 - | _ => () 187 - } 188 - }); 189 - 190 - expect(nums) |> toEqual([|1, 2, 3, 4|]) 191 - }); 192 - 193 - testPromise("follows the spec for listenables", () => { 194 - Wonka_thelpers.testWithListenable(Wonka.map((.x) => x)) 195 - |> Js.Promise.then_(x => { 196 - expect(x) 197 - |> toEqual(([||], [| Push(1), Push(2), End |])) 198 - |> Js.Promise.resolve 199 - }) 200 - }); 201 - 202 - testPromise("ends itself and source when its talkback receives the End signal", () => { 203 - let end_: talkbackT = Close; 204 - 205 - Wonka_thelpers.testTalkbackEnd(Wonka.map((.x) => x)) 206 - |> Js.Promise.then_(x => { 207 - expect(x) 208 - |> toEqual(([| end_ |], [| Push(1) |])) 209 - |> Js.Promise.resolve 210 - }) 211 - }); 212 - }); 213 - 214 - describe("filter", () => { 215 - open Expect; 216 - 217 - it("filters emissions according to a predicate", () => { 218 - let i = ref(1); 219 - let nums = [||]; 220 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 221 - 222 - Wonka.filter((.x) => x mod 2 === 0, sink => { 223 - sink(.Start((.signal) => { 224 - switch (signal) { 225 - | Pull => { 226 - let num = i^; 227 - i := i^ + 1; 228 - sink(.Push(num)); 229 - } 230 - | _ => () 231 - } 232 - })); 233 - }, (.signal) => { 234 - switch (signal) { 235 - | Start(x) => { 236 - talkback := x; 237 - x(.Pull); 238 - } 239 - | Push(x) when x < 6 => { 240 - ignore(Js.Array.push(x, nums)); 241 - talkback^(.Pull); 242 - } 243 - | _ => () 244 - } 245 - }); 246 - 247 - expect(nums) |> toEqual([|2, 4|]) 248 - }); 249 - 250 - testPromise("follows the spec for listenables", () => { 251 - Wonka_thelpers.testWithListenable(Wonka.filter((._) => true)) 252 - |> Js.Promise.then_(x => { 253 - expect(x) 254 - |> toEqual(([||], [| Push(1), Push(2), End |])) 255 - |> Js.Promise.resolve 256 - }) 257 - }); 258 - 259 - testPromise("follows the spec for listenables when filtering", () => { 260 - Wonka_thelpers.testWithListenable(Wonka.filter((._) => false)) 261 - |> Js.Promise.then_(x => { 262 - expect(x) 263 - |> toEqual(([| Pull, Pull |], [| End |])) 264 - |> Js.Promise.resolve 265 - }) 266 - }); 267 - 268 - testPromise("ends itself and source when its talkback receives the End signal", () => { 269 - let end_: talkbackT = Close; 270 - 271 - Wonka_thelpers.testTalkbackEnd(Wonka.filter((._) => true)) 272 - |> Js.Promise.then_(x => { 273 - expect(x) 274 - |> toEqual(([| end_ |], [| Push(1) |])) 275 - |> Js.Promise.resolve 276 - }) 277 - }); 278 - }); 279 - 280 - describe("scan", () => { 281 - open Expect; 282 - 283 - it("folds emissions using an initial seed value", () => { 284 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 285 - let num = ref(1); 286 - 287 - let source = Wonka.scan((.acc, x) => acc + x, 0, sink => sink(.Start((.signal) => { 288 - switch (signal) { 289 - | Pull => { 290 - let i = num^; 291 - if (i <= 3) { 292 - num := num^ + 1; 293 - sink(.Push(i)); 294 - } else { 295 - sink(.End); 296 - } 297 - } 298 - | _ => () 299 - } 300 - }))); 301 - 302 - let res = [||]; 303 - 304 - source((.signal) => { 305 - switch (signal) { 306 - | Start(x) => talkback := x 307 - | _ => ignore(Js.Array.push(signal, res)) 308 - } 309 - }); 310 - 311 - talkback^(.Pull); 312 - talkback^(.Pull); 313 - talkback^(.Pull); 314 - talkback^(.Pull); 315 - expect(res) |> toEqual([| Push(1), Push(3), Push(6), End |]); 316 - }); 317 - 318 - testPromise("follows the spec for listenables", () => { 319 - Wonka_thelpers.testWithListenable(Wonka.scan((._, x) => x, 0)) 320 - |> Js.Promise.then_(x => { 321 - expect(x) 322 - |> toEqual(([||], [| Push(1), Push(2), End |])) 323 - |> Js.Promise.resolve 324 - }) 325 - }); 326 - 327 - testPromise("ends itself and source when its talkback receives the End signal", () => { 328 - let end_: talkbackT = Close; 329 - 330 - Wonka_thelpers.testTalkbackEnd(Wonka.scan((._, x) => x, 0)) 331 - |> Js.Promise.then_(x => { 332 - expect(x) 333 - |> toEqual(([| end_ |], [| Push(1) |])) 334 - |> Js.Promise.resolve 335 - }) 336 - }); 337 - }); 338 - 339 - describe("merge", () => { 340 - open Expect; 341 - open! Expect.Operators; 342 - 343 - it("merges different sources into a single one", () => { 344 - let a = Wonka.fromList([1, 2, 3]); 345 - let b = Wonka.fromList([4, 5, 6]); 346 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 347 - let signals = [||]; 348 - let source = Wonka.merge([| a, b |]); 349 - 350 - source((.signal) => { 351 - switch (signal) { 352 - | Start(x) => { 353 - talkback := x; 354 - x(.Pull); 355 - } 356 - | Push(_) => { 357 - ignore(Js.Array.push(signal, signals)); 358 - talkback^(.Pull); 359 - } 360 - | End => ignore(Js.Array.push(signal, signals)) 361 - }; 362 - }); 363 - 364 - expect(signals) == [| Push(1), Push(2), Push(3), Push(4), Push(5), Push(6), End |]; 365 - }); 366 - 367 - testPromise("follows the spec for listenables", () => { 368 - Wonka_thelpers.testWithListenable(source => Wonka.merge([|source|])) 369 - |> Js.Promise.then_(x => { 370 - expect(x) 371 - |> toEqual(([| Pull, Pull, Pull |], [| Push(1), Push(2), End |])) 372 - |> Js.Promise.resolve 373 - }) 374 - }); 375 - 376 - testPromise("ends itself and source when its talkback receives the End signal", () => { 377 - Wonka_thelpers.testTalkbackEnd(source => Wonka.merge([|source|])) 378 - |> Js.Promise.then_(x => { 379 - expect(x) 380 - |> toEqual(([| Pull, Pull, Close |], [| Push(1) |])) 381 - |> Js.Promise.resolve 382 - }) 383 - }); 384 - }); 385 - 386 - describe("concat", () => { 387 - open Expect; 388 - open! Expect.Operators; 389 - 390 - it("concatenates different sources into a single one", () => { 391 - let a = Wonka.fromList([1, 2, 3]); 392 - let b = Wonka.fromList([4, 5, 6]); 393 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 394 - let signals = [||]; 395 - let source = Wonka.concat([| a, b |]); 396 - 397 - source((.signal) => { 398 - switch (signal) { 399 - | Start(x) => { 400 - talkback := x; 401 - x(.Pull); 402 - } 403 - | Push(_) => { 404 - ignore(Js.Array.push(signal, signals)); 405 - talkback^(.Pull); 406 - } 407 - | End => ignore(Js.Array.push(signal, signals)) 408 - }; 409 - }); 410 - 411 - expect(signals) == [| Push(1), Push(2), Push(3), Push(4), Push(5), Push(6), End |]; 412 - }); 413 - 414 - testPromise("follows the spec for listenables", () => { 415 - Wonka_thelpers.testWithListenable(source => Wonka.concat([|source|])) 416 - |> Js.Promise.then_(x => { 417 - expect(x) 418 - |> toEqual(([| Pull, Pull, Pull |], [| Push(1), Push(2), End |])) 419 - |> Js.Promise.resolve 420 - }) 421 - }); 422 - 423 - testPromise("ends itself and source when its talkback receives the End signal", () => { 424 - Wonka_thelpers.testTalkbackEnd(source => Wonka.concat([|source|])) 425 - |> Js.Promise.then_(x => { 426 - expect(x) 427 - |> toEqual(([| Pull, Pull, Close |], [| Push(1) |])) 428 - |> Js.Promise.resolve 429 - }) 430 - }); 431 - }); 432 - 433 - describe("share", () => { 434 - open Expect; 435 - 436 - it("shares an underlying source with all sinks", () => { 437 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 438 - let aborterTb = ref((._: Wonka_types.talkbackT) => ()); 439 - let num = ref(1); 440 - let nums = [||]; 441 - 442 - let source = Wonka.share(sink => { 443 - sink(.Start((.signal) => { 444 - switch (signal) { 445 - | Pull => { 446 - let i = num^; 447 - if (i <= 2) { 448 - num := num^ + 1; 449 - sink(.Push(i)); 450 - } else { 451 - sink(.End); 452 - } 453 - } 454 - | _ => () 455 - } 456 - })); 457 - }); 458 - 459 - source((.signal) => { 460 - switch (signal) { 461 - | Start(x) => talkback := x 462 - | _ => ignore(Js.Array.push(signal, nums)) 463 - } 464 - }); 465 - 466 - source((.signal) => { 467 - switch (signal) { 468 - | Start(_) => () 469 - | _ => ignore(Js.Array.push(signal, nums)) 470 - } 471 - }); 472 - 473 - source((.signal) => { 474 - switch (signal) { 475 - | Start(tb) => aborterTb := tb 476 - | _ => { 477 - ignore(Js.Array.push(signal, nums)); 478 - aborterTb^(.Close); 479 - } 480 - } 481 - }); 482 - 483 - talkback^(.Pull); 484 - let numsA = Array.copy(nums); 485 - talkback^(.Pull); 486 - talkback^(.Pull); 487 - talkback^(.Pull); 488 - expect((numsA, nums)) |> toEqual(([| Push(1), Push(1), Push(1) |], [| Push(1), Push(1), Push(1), Push(2), Push(2), End, End |])); 489 - }); 490 - 491 - testPromise("follows the spec for listenables", () => { 492 - Wonka_thelpers.testWithListenable(Wonka.share) 493 - |> Js.Promise.then_(x => { 494 - expect(x) 495 - |> toEqual(([||], [| Push(1), Push(2), End |])) 496 - |> Js.Promise.resolve 497 - }) 498 - }); 499 - 500 - testPromise("ends itself and source when its talkback receives the End signal", () => { 501 - let end_: talkbackT = Close; 502 - 503 - Wonka_thelpers.testTalkbackEnd(Wonka.share) 504 - |> Js.Promise.then_(x => { 505 - expect(x) 506 - |> toEqual(([| end_ |], [| Push(1) |])) 507 - |> Js.Promise.resolve 508 - }) 509 - }); 510 - }); 511 - 512 - describe("combine", () => { 513 - open Expect; 514 - 515 - it("combines the latest values of two sources", () => { 516 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 517 - 518 - let makeSource = (factor: int) => { 519 - let num = ref(1); 520 - 521 - sink => { 522 - sink(.Start((.signal) => { 523 - switch (signal) { 524 - | Pull => { 525 - if (num^ <= 2) { 526 - let i = num^ * factor; 527 - num := num^ + 1; 528 - sink(.Push(i)); 529 - } else { 530 - sink(.End); 531 - } 532 - } 533 - | _ => () 534 - } 535 - })); 536 - } 537 - }; 538 - 539 - let sourceA = makeSource(1); 540 - let sourceB = makeSource(2); 541 - let source = Wonka.combine(sourceA, sourceB); 542 - let res = [||]; 543 - 544 - source((.signal) => { 545 - switch (signal) { 546 - | Start(x) => talkback := x 547 - | _ => ignore(Js.Array.push(signal, res)) 548 - } 549 - }); 550 - 551 - talkback^(.Pull); 552 - talkback^(.Pull); 553 - talkback^(.Pull); 554 - talkback^(.Pull); 555 - expect(res) |> toEqual([| Push((1, 2)), Push((2, 2)), Push((2, 4)), End |]); 556 - }); 557 - 558 - testPromise("follows the spec for listenables", () => { 559 - Wonka_thelpers.testWithListenable(source => { 560 - let shared = Wonka.share(source); 561 - Wonka.combine(shared, shared) 562 - }) 563 - |> Js.Promise.then_(x => { 564 - expect(x) 565 - |> toEqual(([||], [| Push((1, 1)), Push((2, 1)), Push((2, 2)), End |])) 566 - |> Js.Promise.resolve 567 - }) 568 - }); 569 - 570 - testPromise("ends itself and source when its talkback receives the End signal", () => { 571 - let end_: talkbackT = Close; 572 - 573 - Wonka_thelpers.testTalkbackEnd(source => { 574 - let shared = Wonka.share(source); 575 - Wonka.combine(shared, shared) 576 - }) 577 - |> Js.Promise.then_(x => { 578 - expect(x) 579 - |> toEqual(([| end_ |], [| Push((1, 1)) |])) 580 - |> Js.Promise.resolve 581 - }) 582 - }); 583 - }); 584 - 585 - describe("take", () => { 586 - open Expect; 587 - 588 - it("only lets a maximum number of values through", () => { 589 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 590 - let num = ref(1); 591 - 592 - let source = Wonka.take(2, sink => sink(.Start((.signal) => { 593 - switch (signal) { 594 - | Pull => { 595 - let i = num^; 596 - num := num^ + 1; 597 - sink(.Push(i)); 598 - } 599 - | _ => () 600 - } 601 - }))); 602 - 603 - let res = [||]; 604 - 605 - source((.signal) => { 606 - switch (signal) { 607 - | Start(x) => talkback := x 608 - | _ => ignore(Js.Array.push(signal, res)) 609 - } 610 - }); 611 - 612 - talkback^(.Pull); 613 - talkback^(.Pull); 614 - talkback^(.Pull); 615 - talkback^(.Pull); 616 - expect(res) |> toEqual([| Push(1), Push(2), End |]); 617 - }); 618 - 619 - it("accepts the end of the source when max number of emissions is not reached", () => { 620 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 621 - let num = ref(1); 622 - 623 - let source = Wonka.take(2, sink => sink(.Start((.signal) => { 624 - switch (signal) { 625 - | Pull => { 626 - let i = num^; 627 - if (i < 2) { 628 - num := num^ + 1; 629 - sink(.Push(i)); 630 - } else { 631 - sink(.End); 632 - } 633 - } 634 - | _ => () 635 - } 636 - }))); 637 - 638 - let res = [||]; 639 - 640 - source((.signal) => { 641 - switch (signal) { 642 - | Start(x) => talkback := x 643 - | _ => ignore(Js.Array.push(signal, res)) 644 - } 645 - }); 646 - 647 - talkback^(.Pull); 648 - talkback^(.Pull); 649 - talkback^(.Pull); 650 - expect(res) |> toEqual([| Push(1), End |]); 651 - }); 652 - 653 - testPromise("follows the spec for listenables", () => { 654 - Wonka_thelpers.testWithListenable(Wonka.take(10)) 655 - |> Js.Promise.then_(x => { 656 - expect(x) 657 - |> toEqual(([||], [| Push(1), Push(2), End |])) 658 - |> Js.Promise.resolve 659 - }) 660 - }); 661 - 662 - testPromise("follows the spec for listenables when ending the source", () => { 663 - let end_: talkbackT = Close; 664 - 665 - Wonka_thelpers.testWithListenable(Wonka.take(1)) 666 - |> Js.Promise.then_(x => { 667 - expect(x) 668 - |> toEqual(([| end_ |], [| Push(1), End |])) 669 - |> Js.Promise.resolve 670 - }) 671 - }); 672 - 673 - testPromise("ends itself and source when its talkback receives the End signal", () => { 674 - let end_: talkbackT = Close; 675 - 676 - Wonka_thelpers.testTalkbackEnd(Wonka.take(10)) 677 - |> Js.Promise.then_(x => { 678 - expect(x) 679 - |> toEqual(([| end_ |], [| Push(1) |])) 680 - |> Js.Promise.resolve 681 - }) 682 - }); 683 - }); 684 - 685 - describe("takeLast", () => { 686 - open Expect; 687 - 688 - it("only lets the last n values through on an entirely new source", () => { 689 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 690 - let num = ref(1); 691 - 692 - let source = Wonka.takeLast(2, sink => sink(.Start((.signal) => { 693 - switch (signal) { 694 - | Pull when num^ <= 4 => { 695 - let i = num^; 696 - num := num^ + 1; 697 - sink(.Push(i)); 698 - } 699 - | Pull => sink(.End) 700 - | _ => () 701 - } 702 - }))); 703 - 704 - let res = [||]; 705 - 706 - source((.signal) => { 707 - switch (signal) { 708 - | Start(x) => talkback := x 709 - | _ => ignore(Js.Array.push(signal, res)) 710 - } 711 - }); 712 - 713 - talkback^(.Pull); 714 - talkback^(.Pull); 715 - talkback^(.Pull); 716 - expect(res) |> toEqual([| Push(3), Push(4), End |]); 717 - }); 718 - 719 - testPromise("follows the spec for listenables", () => { 720 - Wonka_thelpers.testWithListenable(Wonka.takeLast(10)) 721 - |> Js.Promise.then_(x => { 722 - expect(x) 723 - |> toEqual(([| Pull, Pull, Pull |], [| /* empty since the source is a pullable */ |])) 724 - |> Js.Promise.resolve 725 - }) 726 - }); 727 - 728 - testPromise("ends itself and source when its talkback receives the End signal", () => { 729 - Wonka_thelpers.testTalkbackEnd(Wonka.takeLast(10)) 730 - |> Js.Promise.then_(x => { 731 - expect(x) 732 - |> toEqual(([| Pull, Pull |], [| |])) 733 - |> Js.Promise.resolve 734 - }) 735 - }); 736 - }); 737 - 738 - describe("takeWhile", () => { 739 - open Expect; 740 - 741 - it("only lets the last n values through on an entirely new source", () => { 742 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 743 - let num = ref(1); 744 - 745 - let source = Wonka.takeWhile((.x) => x <= 2, sink => sink(.Start((.signal) => { 746 - switch (signal) { 747 - | Pull => { 748 - let i = num^; 749 - num := num^ + 1; 750 - sink(.Push(i)); 751 - } 752 - | _ => () 753 - } 754 - }))); 755 - 756 - let res = [||]; 757 - 758 - source((.signal) => { 759 - switch (signal) { 760 - | Start(x) => talkback := x 761 - | _ => ignore(Js.Array.push(signal, res)) 762 - } 763 - }); 764 - 765 - talkback^(.Pull); 766 - talkback^(.Pull); 767 - talkback^(.Pull); 768 - talkback^(.Pull); 769 - 770 - expect(res) |> toEqual([| Push(1), Push(2), End |]); 771 - }); 772 - 773 - it("accepts the end of the source when max number of emissions is not reached", () => { 774 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 775 - let num = ref(1); 776 - 777 - let source = Wonka.takeWhile((.x) => x <= 5, sink => sink(.Start((.signal) => { 778 - switch (signal) { 779 - | Pull => { 780 - let i = num^; 781 - if (i < 2) { 782 - num := num^ + 1; 783 - sink(.Push(i)); 784 - } else { 785 - sink(.End); 786 - } 787 - } 788 - | _ => () 789 - } 790 - }))); 791 - 792 - let res = [||]; 793 - 794 - source((.signal) => { 795 - switch (signal) { 796 - | Start(x) => talkback := x 797 - | _ => ignore(Js.Array.push(signal, res)) 798 - } 799 - }); 800 - 801 - talkback^(.Pull); 802 - talkback^(.Pull); 803 - talkback^(.Pull); 804 - 805 - expect(res) |> toEqual([| Push(1), End |]); 806 - }); 807 - 808 - testPromise("follows the spec for listenables", () => { 809 - Wonka_thelpers.testWithListenable(Wonka.takeWhile((._) => true)) 810 - |> Js.Promise.then_(x => { 811 - expect(x) 812 - |> toEqual(([||], [| Push(1), Push(2), End |])) 813 - |> Js.Promise.resolve 814 - }) 815 - }); 816 - 817 - testPromise("follows the spec for listenables when ending the source", () => { 818 - let end_: talkbackT = Close; 819 - 820 - Wonka_thelpers.testWithListenable(Wonka.takeWhile((._) => false)) 821 - |> Js.Promise.then_(x => { 822 - expect(x) 823 - |> toEqual(([| end_ |], [| End |])) 824 - |> Js.Promise.resolve 825 - }) 826 - }); 827 - 828 - testPromise("ends itself and source when its talkback receives the End signal", () => { 829 - let end_: talkbackT = Close; 830 - 831 - Wonka_thelpers.testTalkbackEnd(Wonka.takeWhile((._) => true)) 832 - |> Js.Promise.then_(x => { 833 - expect(x) 834 - |> toEqual(([| end_ |], [| Push(1) |])) 835 - |> Js.Promise.resolve 836 - }) 837 - }); 838 - }); 839 - 840 - describe("takeUntil", () => { 841 - open Expect; 842 - 843 - it("only lets the last n values through on an entirely new source", () => { 844 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 845 - let notify = ref((_: Wonka_types.talkbackT) => ()); 846 - let num = ref(1); 847 - 848 - let notifier = sink => { 849 - notify := signal => switch (signal) { 850 - | Pull => sink(.Push(0)); 851 - | _ => () 852 - }; 853 - 854 - sink(.Start(Wonka_helpers.talkbackPlaceholder)); 855 - }; 856 - 857 - let source = Wonka.takeUntil(notifier, sink => sink(.Start((.signal) => { 858 - switch (signal) { 859 - | Pull when num^ <= 4 => { 860 - let i = num^; 861 - if (i === 3) notify^(Pull); 862 - num := num^ + 1; 863 - sink(.Push(i)); 864 - } 865 - | _ => () 866 - } 867 - }))); 868 - 869 - let res = [||]; 870 - 871 - source((.signal) => { 872 - switch (signal) { 873 - | Start(x) => talkback := x 874 - | _ => ignore(Js.Array.push(signal, res)) 875 - } 876 - }); 877 - 878 - talkback^(.Pull); 879 - talkback^(.Pull); 880 - talkback^(.Pull); 881 - talkback^(.Pull); 882 - 883 - expect(res) |> toEqual([| Push(1), Push(2), End |]); 884 - }); 885 - 886 - it("accepts the end of the source when max number of emissions is not reached", () => { 887 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 888 - let num = ref(1); 889 - let notifier = sink => sink(.Start(Wonka_helpers.talkbackPlaceholder)); 890 - 891 - let source = Wonka.takeUntil(notifier, sink => sink(.Start((.signal) => { 892 - switch (signal) { 893 - | Pull => { 894 - let i = num^; 895 - if (num^ <= 2) { 896 - num := num^ + 1; 897 - sink(.Push(i)); 898 - } else { 899 - sink(.End); 900 - } 901 - } 902 - | _ => () 903 - } 904 - }))); 905 - 906 - let res = [||]; 907 - 908 - source((.signal) => { 909 - switch (signal) { 910 - | Start(x) => talkback := x 911 - | _ => ignore(Js.Array.push(signal, res)) 912 - } 913 - }); 914 - 915 - talkback^(.Pull); 916 - talkback^(.Pull); 917 - talkback^(.Pull); 918 - talkback^(.Pull); 919 - 920 - expect(res) |> toEqual([| Push(1), Push(2), End |]); 921 - }); 922 - 923 - testPromise("follows the spec for listenables", () => { 924 - Wonka_thelpers.testWithListenable(Wonka.takeUntil(Wonka.never)) 925 - |> Js.Promise.then_(x => { 926 - expect(x) 927 - |> toEqual(([||], [| Push(1), Push(2), End |])) 928 - |> Js.Promise.resolve 929 - }) 930 - }); 931 - 932 - testPromise("follows the spec for listenables when ending the source", () => { 933 - let end_: talkbackT = Close; 934 - 935 - Wonka_thelpers.testWithListenable(Wonka.takeUntil(Wonka.fromValue(0))) 936 - |> Js.Promise.then_(x => { 937 - expect(x) 938 - |> toEqual(([| end_ |], [| End |])) 939 - |> Js.Promise.resolve 940 - }) 941 - }); 942 - 943 - testPromise("ends itself and source when its talkback receives the End signal", () => { 944 - let end_: talkbackT = Close; 945 - 946 - Wonka_thelpers.testTalkbackEnd(Wonka.takeUntil(Wonka.never)) 947 - |> Js.Promise.then_(x => { 948 - expect(x) 949 - |> toEqual(([| end_ |], [| Push(1) |])) 950 - |> Js.Promise.resolve 951 - }) 952 - }); 953 - }); 954 - 955 - describe("skip", () => { 956 - open Expect; 957 - 958 - it("only lets values through after a number of values have been filtered out", () => { 959 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 960 - let num = ref(1); 961 - 962 - let source = Wonka.skip(2, sink => sink(.Start((.signal) => { 963 - switch (signal) { 964 - | Pull when num^ <= 4 => { 965 - let i = num^; 966 - num := num^ + 1; 967 - sink(.Push(i)); 968 - } 969 - | Pull => sink(.End) 970 - | _ => () 971 - } 972 - }))); 973 - 974 - let res = [||]; 975 - 976 - source((.signal) => { 977 - switch (signal) { 978 - | Start(x) => talkback := x 979 - | _ => ignore(Js.Array.push(signal, res)) 980 - } 981 - }); 982 - 983 - talkback^(.Pull); 984 - talkback^(.Pull); 985 - talkback^(.Pull); 986 - expect(res) |> toEqual([| Push(3), Push(4), End |]); 987 - }); 988 - 989 - testPromise("follows the spec for listenables", () => { 990 - Wonka_thelpers.testWithListenable(Wonka.skip(0)) 991 - |> Js.Promise.then_(x => { 992 - expect(x) 993 - |> toEqual(([||], [| Push(1), Push(2), End |])) 994 - |> Js.Promise.resolve 995 - }) 996 - }); 997 - 998 - testPromise("follows the spec for listenables when skipping the source", () => { 999 - Wonka_thelpers.testWithListenable(Wonka.skip(10)) 1000 - |> Js.Promise.then_(x => { 1001 - expect(x) 1002 - |> toEqual(([| Pull, Pull |], [| End |])) 1003 - |> Js.Promise.resolve 1004 - }) 1005 - }); 1006 - 1007 - testPromise("ends itself and source when its talkback receives the End signal", () => { 1008 - let end_: talkbackT = Close; 1009 - 1010 - Wonka_thelpers.testTalkbackEnd(Wonka.skip(10)) 1011 - |> Js.Promise.then_(x => { 1012 - expect(x) 1013 - |> toEqual(([| Pull, end_ |], [| |])) 1014 - |> Js.Promise.resolve 1015 - }) 1016 - }); 1017 - }); 1018 - 1019 - describe("skipWhile", () => { 1020 - open Expect; 1021 - 1022 - it("only lets values through after the predicate returned false, including the first such value", () => { 1023 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 1024 - let num = ref(1); 1025 - 1026 - let source = Wonka.skipWhile((.x) => x <= 2, sink => sink(.Start((.signal) => { 1027 - switch (signal) { 1028 - | Pull when num^ <= 4 => { 1029 - let i = num^; 1030 - num := num^ + 1; 1031 - sink(.Push(i)); 1032 - } 1033 - | Pull => sink(.End) 1034 - | _ => () 1035 - } 1036 - }))); 1037 - 1038 - let res = [||]; 1039 - 1040 - source((.signal) => { 1041 - switch (signal) { 1042 - | Start(x) => talkback := x 1043 - | _ => ignore(Js.Array.push(signal, res)) 1044 - } 1045 - }); 1046 - 1047 - talkback^(.Pull); 1048 - talkback^(.Pull); 1049 - talkback^(.Pull); 1050 - expect(res) |> toEqual([| Push(3), Push(4), End |]); 1051 - }); 1052 - 1053 - testPromise("follows the spec for listenables", () => { 1054 - Wonka_thelpers.testWithListenable(Wonka.skipWhile((._) => false)) 1055 - |> Js.Promise.then_(x => { 1056 - expect(x) 1057 - |> toEqual(([||], [| Push(1), Push(2), End |])) 1058 - |> Js.Promise.resolve 1059 - }) 1060 - }); 1061 - 1062 - testPromise("follows the spec for listenables when skipping the source", () => { 1063 - Wonka_thelpers.testWithListenable(Wonka.skipWhile((._) => true)) 1064 - |> Js.Promise.then_(x => { 1065 - expect(x) 1066 - |> toEqual(([| Pull, Pull |], [| End |])) 1067 - |> Js.Promise.resolve 1068 - }) 1069 - }); 1070 - 1071 - testPromise("ends itself and source when its talkback receives the End signal", () => { 1072 - let end_: talkbackT = Close; 1073 - 1074 - Wonka_thelpers.testTalkbackEnd(Wonka.skipWhile((._) => false)) 1075 - |> Js.Promise.then_(x => { 1076 - expect(x) 1077 - |> toEqual(([| end_ |], [| Push(1) |])) 1078 - |> Js.Promise.resolve 1079 - }) 1080 - }); 1081 - }); 1082 - 1083 - describe("skipUntil", () => { 1084 - open Expect; 1085 - 1086 - it("only lets values through after the notifier emits a value", () => { 1087 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 1088 - let notify = ref((_: Wonka_types.talkbackT) => ()); 1089 - let num = ref(1); 1090 - 1091 - let notifier = sink => { 1092 - notify := signal => switch (signal) { 1093 - | Pull => sink(.Push(0)); 1094 - | _ => () 1095 - }; 1096 - 1097 - sink(.Start(Wonka_helpers.talkbackPlaceholder)); 1098 - }; 1099 - 1100 - let source = Wonka.skipUntil(notifier, (sink) => sink(.Start((.signal) => { 1101 - switch (signal) { 1102 - | Pull when num^ <= 4 => { 1103 - let i = num^; 1104 - if (i === 3) notify^(Pull); 1105 - num := num^ + 1; 1106 - sink(.Push(i)); 1107 - } 1108 - | Pull => sink(.End) 1109 - | _ => () 1110 - } 1111 - }))); 1112 - 1113 - let res = [||]; 1114 - 1115 - source((.signal) => { 1116 - switch (signal) { 1117 - | Start(x) => talkback := x 1118 - | _ => ignore(Js.Array.push(signal, res)) 1119 - } 1120 - }); 1121 - 1122 - talkback^(.Pull); 1123 - talkback^(.Pull); 1124 - talkback^(.Pull); 1125 - talkback^(.Pull); 1126 - 1127 - expect(res) |> toEqual([| Push(3), Push(4), End |]); 1128 - }); 1129 - 1130 - it("accepts the end of the source when max number of emissions is not reached", () => { 1131 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 1132 - let num = ref(1); 1133 - let notifier = sink => sink(.Start(Wonka_helpers.talkbackPlaceholder)); 1134 - 1135 - let source = Wonka.skipUntil(notifier, (sink) => sink(.Start((.signal) => { 1136 - switch (signal) { 1137 - | Pull => { 1138 - let i = num^; 1139 - if (i < 2) { 1140 - num := num^ + 1; 1141 - sink(.Push(i)); 1142 - } else { 1143 - sink(.End); 1144 - } 1145 - } 1146 - | _ => () 1147 - } 1148 - }))); 1149 - 1150 - let res = [||]; 1151 - 1152 - source((.signal) => { 1153 - switch (signal) { 1154 - | Start(x) => talkback := x 1155 - | _ => ignore(Js.Array.push(signal, res)) 1156 - } 1157 - }); 1158 - 1159 - talkback^(.Pull); 1160 - talkback^(.Pull); 1161 - talkback^(.Pull); 1162 - 1163 - expect(res) |> toEqual([| End |]); 1164 - }); 1165 - 1166 - testPromise("follows the spec for listenables", () => { 1167 - Wonka_thelpers.testWithListenable(Wonka.skipUntil(Wonka.never)) 1168 - |> Js.Promise.then_(x => { 1169 - expect(x) 1170 - |> toEqual(([| Pull, Pull, Pull |], [| End |])) 1171 - |> Js.Promise.resolve 1172 - }) 1173 - }); 1174 - 1175 - testPromise("follows the spec for listenables when skipping the source", () => { 1176 - Wonka_thelpers.testWithListenable(Wonka.skipUntil(Wonka.fromValue(0))) 1177 - |> Js.Promise.then_(x => { 1178 - expect(x) 1179 - |> toEqual(([| Pull |], [| Push(1), Push(2), End |])) 1180 - |> Js.Promise.resolve 1181 - }) 1182 - }); 1183 - 1184 - testPromise("ends itself and source when its talkback receives the End signal", () => { 1185 - let end_: talkbackT = Close; 1186 - 1187 - Wonka_thelpers.testTalkbackEnd(Wonka.skipUntil(Wonka.fromValue(0))) 1188 - |> Js.Promise.then_(x => { 1189 - expect(x) 1190 - |> toEqual(([| Pull, end_ |], [| Push(1) |])) 1191 - |> Js.Promise.resolve 1192 - }) 1193 - }); 1194 - }); 1195 - 1196 - describe("flatten", () => { 1197 - open Expect; 1198 - 1199 - it("merges the result of multiple pullables into its source", () => { 1200 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 1201 - let source = Wonka.fromList([ Wonka.fromList([ 1, 2 ]), Wonka.fromList([ 1, 2 ]) ]) 1202 - |> Wonka.flatten; 1203 - 1204 - let res = [||]; 1205 - 1206 - source((.signal) => { 1207 - switch (signal) { 1208 - | Start(x) => talkback := x 1209 - | _ => ignore(Js.Array.push(signal, res)) 1210 - } 1211 - }); 1212 - 1213 - talkback^(.Pull); 1214 - talkback^(.Pull); 1215 - talkback^(.Pull); 1216 - talkback^(.Pull); 1217 - talkback^(.Pull); 1218 - expect(res) |> toEqual([| Push(1), Push(2), Push(1), Push(2), End |]); 1219 - }); 1220 - }); 1221 - }); 1222 - 1223 - describe("sink factories", () => { 1224 - describe("forEach", () => { 1225 - open Expect; 1226 - 1227 - it("calls a function for each emission of the passed source", () => { 1228 - let i = ref(0); 1229 - let nums = [||]; 1230 - 1231 - let source = sink => { 1232 - sink(.Start((.signal) => { 1233 - switch (signal) { 1234 - | Pull when i^ < 4 => { 1235 - let num = i^; 1236 - i := i^ + 1; 1237 - sink(.Push(num)); 1238 - } 1239 - | Pull => sink(.End) 1240 - | _ => () 1241 - } 1242 - })); 1243 - }; 1244 - 1245 - Wonka.forEach((.x) => ignore(Js.Array.push(x, nums)), source); 1246 - expect(nums) |> toEqual([| 0, 1, 2, 3 |]) 1247 - }); 1248 - }); 1249 - 1250 - describe("subscribe", () => { 1251 - open Expect; 1252 - 1253 - it("calls a function for each emission of the passed source and stops when unsubscribed", () => { 1254 - let i = ref(0); 1255 - let nums = [||]; 1256 - let push = ref(() => ()); 1257 - 1258 - let source = sink => { 1259 - push := () => { 1260 - let num = i^; 1261 - i := i^ + 1; 1262 - sink(.Push(num)); 1263 - }; 1264 - 1265 - sink(.Start(Wonka_helpers.talkbackPlaceholder)); 1266 - }; 1267 - 1268 - let { unsubscribe } = Wonka.subscribe((.x) => ignore(Js.Array.push(x, nums)), source); 1269 - 1270 - push^(); 1271 - push^(); 1272 - unsubscribe(); 1273 - push^(); 1274 - push^(); 1275 - 1276 - expect(nums) |> toEqual([| 0, 1 |]) 1277 - }); 1278 - }); 1279 - }); 1280 - 1281 - describe("chains (integration)", () => { 1282 - open Expect; 1283 - 1284 - it("fromArray, map, forEach", () => { 1285 - let input = Array.mapi((i, _) => i, Array.make(1000, 1)); 1286 - let output = Array.map(x => string_of_int(x)); 1287 - let actual = [||]; 1288 - 1289 - input 1290 - |> Wonka.fromArray 1291 - |> Wonka.map((.x) => string_of_int(x)) 1292 - |> Wonka.forEach((.x) => ignore(Js.Array.push(x, actual))); 1293 - 1294 - expect(output) |> toEqual(output) 1295 - }); 1296 - }); 1297 - 1298 - describe("subject", () => { 1299 - open Expect; 1300 - open! Expect.Operators; 1301 - 1302 - it("sends values passed to .next to puller sinks", () => { 1303 - let signals = [||]; 1304 - 1305 - let subject = Wonka.makeSubject(); 1306 - 1307 - subject.source((.signal) => 1308 - switch (signal) { 1309 - | Start(_) => ignore() 1310 - | Push(_) => ignore(Js.Array.push(signal, signals)) 1311 - | End => ignore(Js.Array.push(signal, signals)) 1312 - } 1313 - ); 1314 - 1315 - subject.next(10); 1316 - subject.next(20); 1317 - subject.next(30); 1318 - subject.next(40); 1319 - subject.complete(); 1320 - 1321 - expect(signals) == [|Push(10), Push(20), Push(30), Push(40), End|]; 1322 - }); 1323 - 1324 - it("handles multiple sinks", () => { 1325 - let talkback = ref((._: Wonka_types.talkbackT) => ()); 1326 - let signalsOne = [||]; 1327 - let signalsTwo = [||]; 1328 - 1329 - let subject = Wonka.makeSubject(); 1330 - 1331 - subject.source((.signal) => 1332 - switch (signal) { 1333 - | Start(x) => talkback := x 1334 - | Push(_) => ignore(Js.Array.push(signal, signalsOne)) 1335 - | End => ignore(Js.Array.push(signal, signalsOne)) 1336 - } 1337 - ); 1338 - 1339 - subject.source((.signal) => 1340 - switch (signal) { 1341 - | Start(_) => ignore() 1342 - | Push(_) => ignore(Js.Array.push(signal, signalsTwo)) 1343 - | End => ignore(Js.Array.push(signal, signalsTwo)) 1344 - } 1345 - ); 1346 - 1347 - subject.next(10); 1348 - subject.next(20); 1349 - subject.next(30); 1350 - 1351 - talkback^(.Close); 1352 - 1353 - subject.next(40); 1354 - subject.next(50); 1355 - 1356 - subject.complete(); 1357 - 1358 - expect((signalsOne, signalsTwo)) 1359 - == ( 1360 - [|Push(10), Push(20), Push(30)|], 1361 - [|Push(10), Push(20), Push(30), Push(40), Push(50), End|], 1362 - ); 1363 - }); 1364 - 1365 - it("handles multiple sinks that subscribe and close at different times", () => { 1366 - let talkbackOne = ref((._: Wonka_types.talkbackT) => ()); 1367 - let talkbackTwo = ref((._: Wonka_types.talkbackT) => ()); 1368 - let signalsOne = [||]; 1369 - let signalsTwo = [||]; 1370 - 1371 - let subject = Wonka.makeSubject(); 1372 - 1373 - subject.next(10); 1374 - subject.next(20); 1375 - 1376 - subject.source((.signal) => 1377 - switch (signal) { 1378 - | Start(x) => talkbackOne := x 1379 - | Push(_) => ignore(Js.Array.push(signal, signalsOne)) 1380 - | End => ignore(Js.Array.push(signal, signalsOne)) 1381 - } 1382 - ); 1383 - 1384 - subject.next(30); 1385 - 1386 - subject.source((.signal) => 1387 - switch (signal) { 1388 - | Start(x) => talkbackTwo := x 1389 - | Push(_) => ignore(Js.Array.push(signal, signalsTwo)) 1390 - | End => ignore(Js.Array.push(signal, signalsTwo)) 1391 - } 1392 - ); 1393 - 1394 - subject.next(40); 1395 - subject.next(50); 1396 - 1397 - talkbackTwo^(.Close); 1398 - 1399 - subject.next(60); 1400 - 1401 - talkbackOne^(.Close); 1402 - 1403 - subject.next(70); 1404 - subject.complete(); 1405 - 1406 - expect((signalsOne, signalsTwo)) 1407 - == ( 1408 - [|Push(30), Push(40), Push(50), Push(60)|], 1409 - [|Push(40), Push(50)|], 1410 - ); 1411 - }); 1412 - });
-62
__tests__/wonka_thelpers.re
··· 1 - open Wonka_types; 2 - 3 - let testWithListenable = operator => { 4 - let sink = ref((._: signalT(int)) => ()); 5 - let signals = [||]; 6 - let source = x => { 7 - sink := x; 8 - x(.Start((.signal) => { 9 - ignore(Js.Array.push(signal, signals)) 10 - })); 11 - }; 12 - 13 - let talkback = ref((._: talkbackT) => ()); 14 - let res = [||]; 15 - operator(source)((.signal) => { 16 - switch (signal) { 17 - | Start(x) => talkback := x 18 - | _ => ignore(Js.Array.push(signal, res)) 19 - } 20 - }); 21 - 22 - Js.Promise.make((~resolve, ~reject as _) => { 23 - sink^(.Push(1)); 24 - ignore(Js.Global.setTimeout(() => { 25 - sink^(.Push(2)); 26 - ignore(Js.Global.setTimeout(() => { 27 - sink^(.End); 28 - ignore(Js.Global.setTimeout(() => { 29 - resolve(.(signals, res)); 30 - }, 0)); 31 - }, 0)); 32 - }, 0)); 33 - }) 34 - }; 35 - 36 - let testTalkbackEnd = operator => { 37 - let sink = ref((._: signalT(int)) => ()); 38 - let signals: array(talkbackT) = [||]; 39 - let source = x => { 40 - x(.Start((.signal) => ignore(Js.Array.push(signal, signals)))); 41 - sink := x; 42 - }; 43 - 44 - let talkback = ref((._: talkbackT) => ()); 45 - let res = [||]; 46 - operator(source)((.signal) => { 47 - switch (signal) { 48 - | Start(x) => talkback := x 49 - | _ => ignore(Js.Array.push(signal, res)) 50 - } 51 - }); 52 - 53 - Js.Promise.make((~resolve, ~reject as _) => { 54 - sink^(.Push(1)); 55 - ignore(Js.Global.setTimeout(() => { 56 - talkback^(.Close); 57 - ignore(Js.Global.setTimeout(() => { 58 - resolve(.(signals, res)); 59 - }, 0)); 60 - }, 0)); 61 - }) 62 - };
-46
bsconfig.json
··· 1 - { 2 - "name": "wonka", 3 - "version": "0.1.0", 4 - "bsc-flags": ["-bs-super-errors", "-bs-no-version-header"], 5 - "refmt": 3, 6 - "package-specs": [ 7 - { 8 - "module": "commonjs" 9 - }, 10 - { 11 - "module": "es6", 12 - "in-source": true 13 - } 14 - ], 15 - "sources": [ 16 - { 17 - "dir": "src", 18 - "subdirs": [ 19 - { 20 - "dir": "operators" 21 - }, 22 - { 23 - "dir": "sources" 24 - }, 25 - { 26 - "dir": "sinks" 27 - }, 28 - { 29 - "dir": "web", 30 - "backend": ["js"] 31 - } 32 - ] 33 - }, 34 - { 35 - "dir": "__tests__", 36 - "type": "dev" 37 - } 38 - ], 39 - "bs-dependencies" : [ 40 - "bs-rebel" 41 - ], 42 - "bs-dev-dependencies": [ 43 - "@glennsl/bs-jest" 44 - ], 45 - "namespace": false 46 - }
+21
docs/api/index.md
··· 1 + --- 2 + title: API Reference 3 + order: 4 4 + --- 5 + 6 + Wonka, in essence, can be used to create sources, to transform sources with operators, 7 + and to consume values from a source with sinks. 8 + 9 + Looking at the type definition for what a sink is, it's just a function that can be 10 + called with a signal, which is either `Start`, `Push`, or `End`. 11 + Building on that, a source is just a function 12 + that takes a sink and calls it with signals over time. And lastly an operator is 13 + a function that accepts a source, alongside some options most of the time, and returns 14 + a new source. 15 + 16 + Wonka comes with plenty of sources, operators, and sinks built in. This section 17 + describes these and explains what they can be used for. 18 + 19 + - [Sources](./sources.md) — learn the Wonka source APIs 20 + - [Operators](./operators.md) — learn the Wonka operator APIs 21 + - [Sinks](./sinks.md) — learn the Wonka sink APIs
+553
docs/api/operators.md
··· 1 + --- 2 + title: Operators 3 + order: 1 4 + --- 5 + 6 + Operators in Wonka allow you to transform values from a source before they are sent to a sink. Wonka has the following operators. 7 + 8 + ## buffer 9 + 10 + Buffers emissions from an outer source and emits a buffer array of items every time an 11 + inner source (notifier) emits. 12 + 13 + This operator can be used to group values into a arrays on a source. The emitted values will 14 + be sent when a notifier fires and will be arrays of all items before the notification event. 15 + 16 + In combination with `interval` this can be used to group values in chunks regularly. 17 + 18 + ```typescript 19 + import { pipe, interval, buffer, take, subscribe } from 'wonka'; 20 + 21 + pipe( 22 + interval(50), 23 + buffer(interval(100)), 24 + take(2), 25 + subscribe((buffer) => { 26 + buffer.forEach((x) => console.log(x)); 27 + console.log(';'); 28 + }) 29 + ); // Prints 1 2; 2 3 to the console. 30 + ``` 31 + 32 + ## combine 33 + 34 + `combine` two sources together to a single source. The emitted value will be a combination of the two sources, with all values from the first source being emitted with the first value of the second source _before_ values of the second source are emitted. 35 + 36 + ```typescript 37 + import { fromArray, pipe, combine, subscribe } from 'wonka'; 38 + 39 + const sourceOne = fromArray([1, 2, 3]); 40 + const sourceTwo = fromArray([4, 5, 6]); 41 + 42 + pipe( 43 + combine(sourceOne, sourceTwo), 44 + subscribe(([valOne, valTwo]) => { 45 + console.log(valOne + valTwo); 46 + }) 47 + ); // Prints 56789 (1+4, 2+4, 3+4, 3+5, 3+6) to the console. 48 + ``` 49 + 50 + ## concat 51 + 52 + `concat` will combine two sources together, subscribing to the next source after the previous source completes. 53 + 54 + ```typescript 55 + import { fromArray, pipe, concat, subscribe } from 'wonka'; 56 + 57 + const sourceOne = fromArray([1, 2, 3]); 58 + const sourceTwo = fromArray([6, 5, 4]); 59 + 60 + pipe( 61 + concat([sourceOne, sourceTwo]), 62 + subscribe((val) => console.log(val)) 63 + ); // Prints 1 2 3 6 5 4 to the console. 64 + ``` 65 + 66 + ## concatAll 67 + 68 + `concatAll` will combine all sources emitted on an outer source together, subscribing to the 69 + next source after the previous source completes. 70 + 71 + It's very similar to `concat`, but instead accepts a source of sources as an input. 72 + 73 + ```typescript 74 + import { pipe, fromArray, concatAll, subscribe } from 'wonka'; 75 + 76 + const sourceOne = fromArray([1, 2, 3]); 77 + const sourceTwo = fromArray([6, 5, 4]); 78 + 79 + pipe( 80 + fromArray([sourceOne, sourceTwo]), 81 + concatAll, 82 + subscribe((val) => console.log(val)) 83 + ); // Prints 1 2 3 6 5 4 to the console. 84 + ``` 85 + 86 + ## concatMap 87 + 88 + `concatMap` allows you to map values of an outer source to an inner source. The sink will not dispatch the `Pull` signal until the previous value has been emitted. This is in contrast to `mergeMap`, which will dispatch the `Pull` signal for new values even if the previous value has not yet been emitted. 89 + 90 + ```typescript 91 + import { fromArray, pipe, concatMap, delay, fromValue, subscribe } from 'wonka'; 92 + 93 + const source = fromArray([1, 2, 3, 4, 5, 6]); 94 + 95 + pipe( 96 + source, 97 + concatMap((val) => { 98 + return pipe(fromValue(val), delay(val * 1000)); 99 + }), 100 + subscribe((val) => console.log(val)) 101 + ); 102 + ``` 103 + 104 + ## delay 105 + 106 + `delay` delays all emitted values of a source by the given amount of milliseconds. 107 + 108 + ```typescript 109 + import { pipe, fromArray, delay, subscribe } from 'wonka'; 110 + 111 + pipe( 112 + fromArray([1, 2]), 113 + delay(10) 114 + subscribe(val => console.log(val)) 115 + ); 116 + // waits 10ms then prints 1, waits 10ms then prints 2, waits 10ms then ends 117 + ``` 118 + 119 + ## debounce 120 + 121 + `debounce` doesn't emit values of a source until no values have been emitted after 122 + a given amount of milliseconds. Once this threshold of silence has been reached, the 123 + last value that has been received will be emitted. 124 + 125 + ```typescript 126 + import { pipe, interval, take, fromValue, concat, debounce, subscribe } from 'wonka'; 127 + 128 + const sourceA = pipe(interval(10), take(5)); 129 + const sourceB = fromValue(1); 130 + 131 + pipe( 132 + concat([sourceA, sourceB]) 133 + debounce(() => 20), 134 + subscribe(val => console.log(val)) 135 + ); 136 + 137 + // The five values from sourceA will be omitted 138 + // After these values and after 20ms `1` will be logged 139 + ``` 140 + 141 + ## filter 142 + 143 + `filter` will remove values from a source by passing them through an iteratee that returns a `bool`. 144 + 145 + ```typescript 146 + import { fromArray, filter, subscribe } from 'wonka'; 147 + 148 + const isEven = (n) => n % 2 === 0; 149 + 150 + pipe( 151 + fromArray([1, 2, 3, 4, 5, 6]), 152 + filter(isEven), 153 + subscribe((val) => console.log(val)) 154 + ); 155 + 156 + // Prints 246 to the console. 157 + ``` 158 + 159 + ## map 160 + 161 + `map` will transform values from a source by passing them through an iteratee that returns a new value. 162 + 163 + ```typescript 164 + import { fromArray, pipe, map, subscribe } from 'wonka'; 165 + 166 + const square = (n) => n * n; 167 + 168 + pipe( 169 + fromArray([1, 2, 3, 4, 5, 6]), 170 + map(square), 171 + subscribe((val) => console.log(val)) 172 + ); 173 + 174 + // Prints 1 4 9 16 25 36 to the console. 175 + ``` 176 + 177 + ## merge 178 + 179 + `merge` merges an array of sources together into a single source. It subscribes 180 + to all sources that it's passed and emits all their values on the output source. 181 + 182 + ```typescript 183 + import { fromArray, pipe, merge, subscribe } from 'wonka'; 184 + 185 + const sourceOne = fromArray([1, 2, 3]); 186 + const sourceTwo = fromArray([4, 5, 6]); 187 + 188 + pipe( 189 + merge(sourceOne, sourceTwo), 190 + subscribe((val) => console.log(val)) 191 + ); // Prints 1 2 3 4 5 6 to the console. 192 + ``` 193 + 194 + ## mergeAll 195 + 196 + `mergeAll` will merge all sources emitted on an outer source into a single one. 197 + It's very similar to `merge`, but instead accepts a source of sources as an input. 198 + 199 + > _Note:_ This operator is also exported as `flatten` which is just an alias for `mergeAll` 200 + 201 + ```typescript 202 + import { pipe, fromArray, mergeAll, subscribe } from 'wonka'; 203 + 204 + const sourceOne = fromArray([1, 2, 3]); 205 + const sourceTwo = fromArray([4, 5, 6]); 206 + 207 + pipe( 208 + fromArray([sourceOne, sourceTwo]), 209 + mergeAll, 210 + subscribe((val) => console.log(val)) 211 + ); // Prints 1 2 3 4 5 6 to the console. 212 + ``` 213 + 214 + ## mergeMap 215 + 216 + `mergeMap` allows you to map values of an outer source to an inner source. 217 + This allows you to create nested sources for each emitted value, which will 218 + all be merged into a single source, like with `mergeAll`. 219 + 220 + Unlike `concatMap` all inner sources will be subscribed to at the same time 221 + and all their values will be emitted on the output source as they come in. 222 + 223 + ```typescript 224 + import { pipe, fromArray, mergeMap, subscribe } from 'wonka'; 225 + 226 + pipe( 227 + fromArray([1, 2]), 228 + mergeMap((x) => fromArray([x - 1, x])), 229 + subscribe((val) => console.log(val)) 230 + ); // Prints 0 1 1 2 to the console. 231 + ``` 232 + 233 + ## onEnd 234 + 235 + Run a callback when the `End` signal has been sent to the sink by the source, whether by way of the talkback passing the `End` signal or the source being exhausted of values. 236 + 237 + ```typescript 238 + import { fromPromise, pipe, concat, onEnd, subscribe } from 'wonka'; 239 + 240 + const promiseOne = new Promise((resolve) => { 241 + setTimeout(() => { 242 + resolve('ResolveOne'); 243 + }, 1000); 244 + }); 245 + const promiseTwo = new Promise((resolve) => { 246 + setTimeout(() => { 247 + resolve('ResolveTwo'); 248 + }, 2000); 249 + }); 250 + 251 + const sourceOne = fromPromise(promiseOne); 252 + const sourceTwo = fromPromise(promiseTwo); 253 + 254 + pipe( 255 + concat([sourceOne, sourceTwo]), 256 + onEnd(() => console.log('onEnd')), 257 + subscribe((val) => console.log(val)) 258 + ); 259 + 260 + // Logs ResolveOne after one second, then ResolveTwo after an additional second, then onEnd immediately. 261 + ``` 262 + 263 + ## onPush 264 + 265 + Run a callback on each `Push` signal sent to the sink by the source. 266 + 267 + > _Note:_ This operator is also exported as `tap` which is just an alias for `onPush` 268 + 269 + ```typescript 270 + import { fromArray, pipe, onPush, subscribe } from 'wonka'; 271 + 272 + pipe( 273 + fromArray([1, 2, 3, 4, 5, 6]), 274 + onPush((val) => console.log(`Push ${val}`)), 275 + subscribe((val) => console.log(val)) 276 + ); // Prints Push 1 1 Push 2 2 Push 3 3 Push 4 4 Push 5 5 Push 6 6 to the console. 277 + ``` 278 + 279 + ## onStart 280 + 281 + Run a callback when the `Start` signal is sent to the sink by the source. 282 + 283 + ```typescript 284 + import { pipe, onStart, fromPromise, subscribe } from 'wonka'; 285 + 286 + const promise = new Promise((resolve) => { 287 + setTimeout(() => { 288 + resolve('Resolve'); 289 + }, 1000); 290 + }); 291 + 292 + pipe( 293 + fromPromise(promise), 294 + onStart(() => console.log('onStart')), 295 + subscribe((val) => console.log(val)) 296 + ); 297 + 298 + // Logs onStart to the console, pauses for one second to allow the timeout to finish, 299 + // then logs "Resolve" to the console. 300 + ``` 301 + 302 + ## sample 303 + 304 + `sample` emits the previously emitted value from an outer source every time 305 + an inner source (notifier) emits. 306 + 307 + In combination with `interval` it can be used to get values from a noisy source 308 + more regularly. 309 + 310 + ```typescript 311 + import { pipe, interval, sample, take, subscribe } from 'wonka'; 312 + 313 + pipe( 314 + interval(10), 315 + sample(interval(100)), 316 + take(2), 317 + subscribe((x) => console.log(x)) 318 + ); // Prints 10 20 to the console. 319 + ``` 320 + 321 + ## scan 322 + 323 + Accumulate emitted values of a source in a accumulator, similar to JavaScript `reduce`. 324 + 325 + ```typescript 326 + import { fromArray, pipe, scan, subscribe } from 'wonka'; 327 + 328 + pipe( 329 + fromArray([1, 2, 3, 4, 5, 6]), 330 + scan((acc, val) => acc + val, 0), 331 + subscribe((val) => console.log(val)) 332 + ); 333 + 334 + // Prints 1 3 6 10 15 21 to the console. 335 + ``` 336 + 337 + ## share 338 + 339 + `share` ensures that all subscriptions to the underlying source are shared. 340 + 341 + By default Wonka's sources are lazy. They only instantiate themselves and begin 342 + emitting signals when they're being subscribed to, since they're also immutable. 343 + This means that when a source is used in multiple places, their underlying subscription 344 + is not shared. Instead, the entire chain of sources and operators will be instantiated 345 + separately every time. 346 + 347 + The `share` operator prevents this by creating an output source that will reuse a single 348 + subscription to the parent source, which will be unsubscribed from when no sinks are 349 + listening to it anymore. 350 + 351 + This is especially useful if you introduce side-effects to your sources, 352 + for instance with `onStart`. 353 + 354 + ```typescript 355 + import { pipe, never, onStart, share, publish } from 'wonka'; 356 + 357 + const source = pipe( 358 + never 359 + onStart(() => console.log('start')), 360 + share 361 + ); 362 + 363 + // Without share this would print "start" twice: 364 + publish(source); 365 + publish(source); 366 + ``` 367 + 368 + ## skip 369 + 370 + `skip` the specified number of emissions from the source. 371 + 372 + ```typescript 373 + import { fromArray, pipe, skip, subscribe } from 'wonka'; 374 + 375 + pipe( 376 + fromArray([1, 2, 3, 4, 5, 6]), 377 + skip(2), 378 + subscribe((val) => console.log(val)) 379 + ); 380 + ``` 381 + 382 + ## skipUntil 383 + 384 + Skip emissions from an outer source until an inner source (notifier) emits. 385 + 386 + ```typescript 387 + import { interval, pipe, skipUntil, subscribe } from 'wonka'; 388 + 389 + const source = interval(100); 390 + const notifier = interval(500); 391 + 392 + pipe( 393 + source, 394 + skipUntil(notifier), 395 + subscribe((val) => console.log(val)) 396 + ); 397 + 398 + // Skips all values emitted by source (0, 1, 2, 3) until notifier emits at 500ms. 399 + // Then logs 4 5 6 7 8 9 10... to the console every 500ms. 400 + ``` 401 + 402 + ## skipWhile 403 + 404 + Skip values emitted from the source while they return `true` for the provided predicate function. 405 + 406 + ```typescript 407 + import { fromArray, pipe, skipWhile, subscribe } from 'wonka'; 408 + 409 + pipe( 410 + fromArray([1, 2, 3, 4, 5, 6]), 411 + skipWhile((val) => val < 5), 412 + subscribe((val) => console.log(val)) 413 + ); 414 + 415 + // Prints 5 6 to the console, as 1 2 3 4 all return true for the predicate function. 416 + ``` 417 + 418 + ## switchMap 419 + 420 + `switchMap` allows you to map values of an outer source to an inner source. 421 + The inner source's values will be emitted on the returned output source. If 422 + a new inner source is returned, because the outer source emitted a new value 423 + before the previous inner source completed, the inner source is closed and unsubscribed 424 + from. 425 + 426 + This is similar to `concatMap` but instead of waiting for the last inner source to complete 427 + before emitting values from the next, `switchMap` just cancels the previous inner source. 428 + 429 + ```typescript 430 + import { pipe, interval, switchMap, take, subscribe } from 'wonka'; 431 + 432 + pipe( 433 + interval(50), 434 + // The inner interval is cancelled after its first value every time 435 + switchMap((value) => interval(40)), 436 + take(3), 437 + subscribe((x) => console.log(x)) 438 + ); // Prints 1 2 3 to the console 439 + ``` 440 + 441 + ## switchAll 442 + 443 + `switchAll` will combined sources emitted on an outer source together, subscribing 444 + to only one source at a time, and cancelling the previous inner source, when it hasn't 445 + ended while the next inner source is created. 446 + 447 + It's very similar to `switchMap`, but instead accepts a source of sources. 448 + 449 + ```typescript 450 + import { pipe, interval, map, switchAll, take, subscribe } from 'wonka'; 451 + 452 + pipe( 453 + interval(50), 454 + map(() => interval(40)), 455 + switchAll, 456 + take(3), 457 + subscribe((x) => console.log(x)) 458 + ); // Prints 1 2 3 to the console 459 + ``` 460 + 461 + These examples are practically identical to the `switchMap` examples, but note 462 + that `map` was used instead of using `switchMap` directly. This is because combining 463 + `map` with a subsequent `switchAll` is the same as using `switchMap`. 464 + 465 + ## take 466 + 467 + `take` only a specified number of emissions from the source before completing. `take` is the opposite of `skip`. 468 + 469 + ```typescript 470 + import { fromArray, pipe, take, subscribe } from 'wonka'; 471 + 472 + pipe( 473 + fromArray([1, 2, 3, 4, 5, 6]), 474 + take(3), 475 + subscribe((val) => console.log(val)) 476 + ); 477 + 478 + // Prints 1 2 3 to the console. 479 + ``` 480 + 481 + ## takeLast 482 + 483 + `takeLast` will take only the last n emissions from the source. 484 + 485 + ```typescript 486 + import { fromArray, pipe, takeLast, subscribe } from 'wonka'; 487 + 488 + pipe( 489 + fromArray([1, 2, 3, 4, 5, 6]), 490 + takeLast(3), 491 + subscribe((val) => console.log(val)) 492 + ); 493 + 494 + // Prints 4 5 6 to the console. 495 + ``` 496 + 497 + ## takeUntil 498 + 499 + Take emissions from an outer source until an inner source (notifier) emits. 500 + 501 + ```typescript 502 + import { interval, pipe, takeUntil, subscribe } from 'wonka'; 503 + 504 + const source = interval(100); 505 + const notifier = interval(500); 506 + 507 + pipe( 508 + source, 509 + takeUntil(notifier), 510 + subscribe((val) => console.log(val)) 511 + ); 512 + 513 + // Pauses 100ms, prints 0, pauses 100ms, prints 1, pauses 100ms, prints 2, pauses 100ms, 514 + // prints 3, pauses 100, then completes (notifier emits). 515 + ``` 516 + 517 + ## takeWhile 518 + 519 + Take emissions from the stream while they return `true` for the provided predicate function. If the first emission does not return `true`, no values will be `Push`ed to the sink. 520 + 521 + ```typescript 522 + import { pipe, fromArray, takeWhile, subscribe } from 'wonka'; 523 + 524 + const source = fromArray([1, 2, 3, 4, 5, 6]); 525 + 526 + pipe( 527 + source, 528 + takeWhile((val) => val < 5), 529 + subscribe((val) => console.log(val)) 530 + ); 531 + 532 + // Prints 1 2 3 4 to the console. 533 + ``` 534 + 535 + ## throttle 536 + 537 + `throttle` emits values of a source, but after each value it will omit all values for 538 + the given amount of milliseconds. It enforces a time of silence after each value it 539 + receives and skips values while the silence is still ongoing. 540 + 541 + This is very similar to `debounce` but instead of waiting for leading time before a 542 + value it waits for trailing time after a value. 543 + 544 + ```typescript 545 + import { pipe, interval, throttle, take, subscribe } from 'wonka'; 546 + 547 + pipe( 548 + interval(10), 549 + throttle(() => 50) 550 + take(2), 551 + subscribe(val => console.log(val)) 552 + ); // Outputs 0 6 to the console. 553 + ```
+145
docs/api/sinks.md
··· 1 + --- 2 + title: Sinks 3 + order: 2 4 + --- 5 + 6 + A sink in Wonka expects to be delivered data. A `sink` communicates with a source via the "talkback" function provided by the source. Wonka has the following `sink` operators. 7 + 8 + ## subscribe 9 + 10 + `subscribe` accepts a callback function to execute when data is received from the source, in addition to the source itself. 11 + 12 + ```typescript 13 + import { pipe, fromArray, subscribe } from 'wonka'; 14 + 15 + pipe( 16 + fromArray([1, 2, 3]), 17 + subscribe((x) => console.log(x)) 18 + ); // Prints 123 to the console. 19 + ``` 20 + 21 + `subscribe` also returns a "subscription" type, which can be used to 22 + unsubscribe from the source. This allows you to cancel a source and stop receiving 23 + new incoming values. 24 + 25 + ```typescript 26 + import { pipe, subscribe } from 'wonka'; 27 + 28 + const { unsubscribe } = pipe( 29 + source, 30 + subscribe((x) => console.log(x)); 31 + ); 32 + 33 + unsubscribe(); 34 + ``` 35 + 36 + ## forEach 37 + 38 + `forEach` works the same as `subscribe` but doesn't return a subscription. 39 + It will just call the passed callback for each incoming value. 40 + 41 + ```typescript 42 + import { pipe, fromArray, forEach } from 'wonka'; 43 + 44 + pipe( 45 + fromArray([1, 2, 3]), 46 + forEach((x) => console.log(x)) 47 + ); // Returns undefined; Prints 123 to the console. 48 + ``` 49 + 50 + ## publish 51 + 52 + `publish` subscribes to a source, like `subscribe` does, but doesn't accept 53 + a callback function. It's useful for side-effects, where the values are already being 54 + used as part of the stream itself. 55 + 56 + In this example we're using [`onPush`](./operators.md#onpush) to pass a callback to react to incoming 57 + values instead. 58 + 59 + ```typescript 60 + import { pipe, fromArray, onPush, publish } from 'wonka'; 61 + 62 + pipe( 63 + fromArray([1, 2, 3]), 64 + onPush((x) => console.log(x)), 65 + publish 66 + ); // Prints 123 to the console. 67 + ``` 68 + 69 + ## toArray 70 + 71 + `toArray` returns an array, which contains all values from a pull source. 72 + This sink is primarily intended for synchronous pull streams. Passing it 73 + an asynchronous push streams may result in an empty array being returned. 74 + 75 + If you're passing an asynchronous push stream `toArray` will cancel it 76 + before it returns an array. 77 + 78 + > _Note:_ If you're using this sink, make sure that your input source streams 79 + > the values you're collecting partly or fully synchronously. 80 + 81 + ```typescript 82 + import { pipe, fromArray, map, toArray } from 'wonka'; 83 + 84 + pipe( 85 + fromArray([1, 2, 3]), 86 + map((x) => x * 2), 87 + toArray 88 + ); // Returns [2, 4, 6] 89 + ``` 90 + 91 + ## toPromise 92 + 93 + `toPromise` returns a promise, which resolves on the last value of a source. 94 + 95 + ```typescript 96 + import { pipe, fromArray, toPromise } from 'wonka'; 97 + 98 + const promise = pipe(fromArray([1, 2, 3]), toPromise); 99 + 100 + promise.then((x) => console.log(x)); 101 + // Prints 3 to the console. 102 + ``` 103 + 104 + If you have a source that doesn't complete and are looking to resolve on the first 105 + value instead of the last, you may have to apply `take(1)` to your source. 106 + 107 + ## toObservable 108 + 109 + `toObservable` returns a [spec-compliant JS Observable](https://github.com/tc39/proposal-observable), which emits the same 110 + values as a source. 111 + 112 + As per the specification, the Observable is annotated using `Symbol.observable`. 113 + 114 + ```typescript 115 + import { pipe, fromArray, toObservable } from 'wonka'; 116 + 117 + const observable = pipe(fromArray([1, 2, 3]), toObservable); 118 + 119 + observable.subscribe({ 120 + next: (value) => console.log(value), 121 + complete: () => {}, 122 + error: () => {}, 123 + }); // Prints 1 2 3 to the console. 124 + ``` 125 + 126 + ## toCallbag 127 + 128 + `toCallbag` returns a [spec-compliant JS Callbag](https://github.com/callbag/callbag), which emits the same signals 129 + as a Wonka source. 130 + 131 + Since Wonka's sources are very similar to callbags and only diverge from the specification 132 + minimally, Callbags map to Wonka's sources very closely and `toCallbag` only creates a thin 133 + wrapper which is mostly concerned with converting between the type signatures. 134 + 135 + ```typescript 136 + import { pipe, fromArray, toCallbag } from 'wonka'; 137 + 138 + // This example uses the callbag-iterate package for illustrative purposes 139 + import callbagIterate from 'callbag-iterate'; 140 + 141 + const callbag = pipe(fromArray([1, 2, 3]), toCallbag); 142 + 143 + callbagIterate((value) => console.log(value))(callbag); 144 + // Prints 1 2 3 to the console. 145 + ```
+209
docs/api/sources.md
··· 1 + --- 2 + title: Sources 3 + order: 0 4 + --- 5 + 6 + A "source" in Wonka is a provider of data. It provides data to a "sink" when the "sink" requests it. This is called a pull signal and for synchronous sources no time will pass between the sink pulling a new value and a source sending it. For asynchronous sources, the source may either ignore pull signals and just push values or send one some time after the pull signal. 7 + 8 + ## fromArray 9 + 10 + `fromArray` transforms an array into a source, emitting each item synchronously. 11 + 12 + ```typescript 13 + import { fromArray } from 'wonka'; 14 + fromArray([1, 2, 3]); 15 + ``` 16 + 17 + ## fromValue 18 + 19 + `fromValue` takes a single value and creates a source that emits the value and 20 + completes immediately afterwards. 21 + 22 + ```typescript 23 + import { fromValue } from 'wonka'; 24 + fromValue(1); 25 + ``` 26 + 27 + ## make 28 + 29 + `make` can be used to create an arbitrary source. It allows you to make a source 30 + from any other data. 31 + It accepts a function that receives an "observer" and should return a teardown 32 + function. It's very similar to creating an [Observable in `zen-observable`](https://github.com/zenparsing/zen-observable#new-observablesubscribe). 33 + 34 + The function you pass to `make` is called lazily when a sink subscribes to the 35 + source you're creating. The first argument `observer` is a tuple with two methods: 36 + 37 + - `next(value)` emits a value on the sink 38 + - `complete()` ends the source and completes the sink 39 + 40 + The subscriber function also needs to return a `teardown` function. This function 41 + is called when either `complete()` is called and the source ends, or if the source 42 + is being cancelled, since the sink unsubscribed. 43 + 44 + In this example we create a source that waits for a promise to resolve and emits 45 + values from the array of that promise. 46 + 47 + ```typescript 48 + import { make } from 'wonka'; 49 + 50 + const waitForArray = () => Promise.resolve([1, 2, 3]); 51 + 52 + const source = make((observer) => { 53 + const { next, complete } = observer; 54 + let cancelled = false; 55 + 56 + waitForArray().then((arr) => { 57 + if (!cancelled) { 58 + arr.forEach(next); 59 + complete(); 60 + } 61 + }); 62 + 63 + return () => { 64 + cancelled = true; 65 + }; 66 + }); 67 + ``` 68 + 69 + ## makeSubject 70 + 71 + `makeSubject` can be used to create a subject. This is similar to [`make`](#make) without 72 + having to define a source function. Instead a subject is a tuple of a source and 73 + the observer's `next` and `complete` functions combined. 74 + 75 + A subject can be very useful as a full event emitter. It allows you to pass a source 76 + around but also have access to the observer functions to emit events away from 77 + the source itself. 78 + 79 + ```typescript 80 + import { makeSubject } from 'wonka'; 81 + const subject = makeSubject(); 82 + const { source, next, complete } = subject; 83 + 84 + /* This will push the values synchronously to any subscribers of source */ 85 + next(1); 86 + next(2); 87 + next(complete); 88 + ``` 89 + 90 + ## fromDomEvent 91 + 92 + `fromDomEvent` will turn a DOM event into a Wonka source, emitting the DOM events 93 + on the source whenever the DOM emits them on the passed element. 94 + 95 + ```typescript 96 + import { pipe, fromDomEvent, subscribe } from 'wonka'; 97 + 98 + const element = document.getElementById('root'); 99 + 100 + pipe( 101 + fromDomEvent(element, 'click'), 102 + subscribe((e) => console.log(e)) 103 + ); 104 + ``` 105 + 106 + ## fromPromise 107 + 108 + `fromPromise` transforms a promise into a source, emitting the promisified value on 109 + the source once it resolves. 110 + 111 + ```typescript 112 + import { pipe, fromPromise, subscribe } from 'wonka'; 113 + 114 + const promise = Promise.resolve(1); // Just an example promise 115 + 116 + pipe( 117 + fromPromise(promise), 118 + subscribe((e) => console.log(e)) 119 + ); // Prints 1 to the console. 120 + ``` 121 + 122 + ## fromObservable 123 + 124 + `fromObservable` transforms a [spec-compliant JS Observable](https://github.com/tc39/proposal-observable) into a source. 125 + The resulting source will behave exactly the same as the Observable that it was 126 + passed, so it will start, end, and push values identically. 127 + 128 + ```typescript 129 + import { pipe, fromObservable, subscribe } from 'wonka'; 130 + 131 + // This example uses zen-observable for illustrative purposes 132 + import Observable from 'zen-observable'; 133 + 134 + const observable = Observable.from([1, 2, 3]); 135 + 136 + pipe( 137 + fromObservable(observable), 138 + subscribe((e) => console.log(e)) 139 + ); // Prints 1 2 3 to the console 140 + ``` 141 + 142 + ## fromCallbag 143 + 144 + `fromCallbag` transforms a [spec-compliant JS Callbag](https://github.com/callbag/callbag) into a source. 145 + 146 + Since Wonka's sources are very similar to callbags and only diverge from the specification 147 + minimally, Callbags map to Wonka's sources very closely and the `fromCallbag` wrapper 148 + is very thin and mostly concerned with converting between the type signatures. 149 + 150 + ```typescript 151 + import { pipe, fromCallbag, subscribe } from 'wonka'; 152 + 153 + // This example uses the callbag-from-iter package for illustrative purposes 154 + import callbagFromArray from 'callbag-from-iter'; 155 + 156 + const callbag = callbagFromArray([1, 2, 3]); 157 + 158 + pipe( 159 + fromCallbag(callbag), 160 + subscribe((e) => console.log(e)) 161 + ); // Prints 1 2 3 to the console. 162 + ``` 163 + 164 + ## interval 165 + 166 + `interval` creates a source that emits values after the given amount of milliseconds. 167 + Internally it uses `setInterval` to accomplish this. 168 + 169 + ```typescript 170 + import { pipe, interval, subscribe } from 'wonka'; 171 + 172 + pipe( 173 + interval(50), 174 + subscribe((e) => console.log(e)) 175 + ); // Prints 0 1 2... to the console. 176 + // The incrementing number is logged every 50ms 177 + ``` 178 + 179 + ## empty 180 + 181 + This is a source that doesn't emit any values when subscribed to and 182 + immediately completes. 183 + 184 + ```typescript 185 + import { pipe, empty, forEach } from 'wonka'; 186 + 187 + pipe( 188 + empty, 189 + forEach((value) => { 190 + /* This will never be called */ 191 + }) 192 + ); 193 + ``` 194 + 195 + ## never 196 + 197 + This is source is similar to [`empty`](#empty). 198 + It doesn't emit any values but also never completes. 199 + 200 + ```typescript 201 + import { pipe, never, forEach } from 'wonka'; 202 + 203 + pipe( 204 + never, 205 + forEach((value) => { 206 + /* This will never be called */ 207 + }) 208 + ); 209 + ```
+129
docs/basics/architecture.md
··· 1 + --- 2 + title: Architecture 3 + order: 1 4 + --- 5 + 6 + It may be useful to understand how Wonka's sources work internally 7 + if you want to write a new operator from scratch or contribute to it. 8 + 9 + This section explains how Wonka works internally and how it differs from 10 + the callbag specification. 11 + 12 + ## Just Functions 13 + 14 + Internally Wonka only uses functions with rather simple signatures to 15 + make its streams work. 16 + 17 + We have sinks on one end, which need to receive values, and sources 18 + on the other, which need to send values. 19 + The sink is therefore just a function that we call with values over time. 20 + This is called a "push" signal. 21 + 22 + Because a sink has a start, incoming values, and an end, there are three 23 + signals that a sink can receive: `Start`, `Push`, and `End`. 24 + 25 + ```typescript 26 + type Start = { tag: 0 }; // & [TalkbackFn] 27 + type Push<T> = { tag: 1 } & [T]; 28 + type End = 0; 29 + 30 + type Signal<T> = Start | Push<T> | End; 31 + 32 + type Sink<T> = (signal: Signal<T>) => void; 33 + ``` 34 + 35 + As shown, the sink is just a function accepting a signal as its argument. 36 + 37 + When the stream starts then the sink is called with `Start`, 38 + Then for every incoming, new value it's called with `Push<T>`, 39 + and when the stream ends it's finally called with `End`. 40 + 41 + Since we want a source to send these values to the sink, the source is 42 + also just a function and it accepts a sink as its argument. 43 + 44 + ```typescript 45 + type Source<T> = (sink: Sink<T>) => void; 46 + ``` 47 + 48 + This is completely sufficient to represent simple "push" streams, where 49 + values are pushed from the source to the sink. They essentially flow from 50 + the "top" to the "bottom". 51 + 52 + Operators are just functions that transform a source. They take a 53 + source and some number of arguments and return a new source. 54 + Internally they may also create a new sink function that wraps the 55 + sink that their source will be called with. 56 + 57 + The type signature of an operator with no other arguments is thus: 58 + 59 + ```typescript 60 + type Operator<In, Out> = (source: Source<In>) => Source<Out>; 61 + /* which is the same as: */ 62 + type Operator<In, Out> = (source: Source<In>) => (sink: Sink<Out>) => void; 63 + ``` 64 + 65 + ## Adding Callbacks 66 + 67 + To complete this pattern we're still missing a single piece: callbacks! 68 + 69 + Previously, we've looked at how sources are functions that accept sinks, which 70 + in turn are functions accepting a signal. What we're now missing is what makes 71 + Wonka's streams also work as iterables. 72 + 73 + We'd also like to be able to _cancel_ streams, so that we can interrupt 74 + them and not receive any more values. 75 + 76 + We can achieve this by passing a callback function on when a stream starts. 77 + In Wonka, a sink's `Start` signal also carries a callback that is used to communicate 78 + back to the source, making these "talkback signals" flow from the bottom to the top. 79 + 80 + ```typescript 81 + const enum TalkbackKind { 82 + Pull = 0, 83 + Close = 1, 84 + } 85 + 86 + type TalkbackFn = (signal: TalkbackKind) => void; 87 + type Start = { tag: 0 } & [TalkbackFn]; 88 + ``` 89 + 90 + This is like the previous `Signal<T>` definition, but the `Start` signal has the 91 + callback definition now. The callback accepts one of two signals: `Pull` or `Close`. 92 + 93 + `Close` is a signal that will cancel the stream. It tells the source to stop sending 94 + new values. 95 + 96 + The `Pull` signal is a signal that asks the source to send the next value. This is 97 + especially useful to represent iterables. In practice a user would never send this 98 + signal explicitly, but sinks would send the signal automatically after receiving the 99 + previous value from the stream. 100 + 101 + In asynchronous streams the `Pull` signal is of course a no-op. It won't do 102 + anything since we can't ask for asynchronous values. 103 + 104 + ## Comparison to Callbags 105 + 106 + This is the full pattern of Wonka's streams and it's a little different from callbags. 107 + These changes have been made to make Wonka's streams typesafe. But there's 108 + also a small omission that makes Wonka's streams easier to explain. 109 + 110 + In Callbags, sources don't just accept sinks as their only argument. In fact, in 111 + callbags the source would also receive three different signals. This can be useful 112 + to represent "subjects". 113 + 114 + A subject is a sink and source combined. It can be used to dispatch values imperatively, 115 + like an event dispatcher. 116 + 117 + In Wonka there's a separate type for subjects however, since this reduces the 118 + complexity of its streams a lot: 119 + 120 + ```reason 121 + interface Subject<T> { 122 + next(value: T): void; 123 + complete(): void; 124 + source: Source<T>; 125 + } 126 + ``` 127 + 128 + Hence in Wonka a subject is simply a wrapper around a source and a `next` and `complete` 129 + method.
+66
docs/basics/background.md
··· 1 + --- 2 + title: Background 3 + order: 0 4 + --- 5 + 6 + In a lot of daily tasks in programming we come across patterns where 7 + we deal with lists of values. In JavaScript we'd reach to arrays to 8 + collect them, and luckily there are plenty of methods built-in 9 + to modify such an array, such as `map`, `filter` and `reduce`. 10 + 11 + Things become more complex when we're dealing with lists that 12 + are infinite. In such a case we may reach to iterables. We could 13 + expect an iterable that continuously outputs numbers, counting up 14 + infinitely, or rather until it reaches the maximum integer. 15 + 16 + When we're dealing with asynchronous lists of values things also 17 + become more complex. We're often confronted with event streams, 18 + where events or even regular values come in over time. 19 + 20 + In either case what we're dealing with are essentially [immutable, 21 + asynchronous iterables](https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877). 22 + 23 + Wonka is a library to provide a primitive to solve these problems and 24 + is both an iterable programming library _and_ a reactive stream programming 25 + library. 26 + 27 + It can be compared to observables and iterables in one library, but is 28 + based on and essentially a ["callbag" library](https://staltz.com/why-we-need-callbags.html). 29 + 30 + ## Sources, Operators, and Sinks 31 + 32 + When we're thinking of solving problems with streams, it's always 33 + a good idea to look at how we're solving problems with arrays. 34 + 35 + Since Wonka's streams are an entirely new primitive, Wonka has to provide 36 + all utilities that you as a developer may need to work with them. 37 + Specifically we have to make sure that it's easy to _create_, _transform_, 38 + and _consume_ these streams. 39 + 40 + If we compare these utilities to arrays, _creating_ an array is similar to 41 + creating a stream. So Wonka has utilities such as [`fromArray`](../api/sources.md#fromArray) to 42 + create a new source. 43 + 44 + A **source** is what we call a stream in Wonka. This is because it 45 + doesn't strictly follow the definition or specification of observables nor 46 + iterables. So we're calling them **sources** since they're just a **source** 47 + of values over time. 48 + 49 + Next we would like to _transform_ sources to make them useful. 50 + Like with arrays we may want to map, filter, and reduce them, 51 + so Wonka has **operators** like [`filter`](../api/operators.md#filter) and [`map`](../api/operators.md#map). 52 + But since Wonka is like a toolkit, it comes with a lot more utilities than 53 + just that. 54 + 55 + In general, **operators** will accept some arguments and a source 56 + and output a new, transformed source. 57 + 58 + Lastly, the sources we create wouldn't be of much use if we weren't 59 + able to _consume_ them. This is similar to using `forEach` on an 60 + array to iterate over its values. Wonka has a [`subscribe`](../api/sinks.md#subscribe) function which 61 + works similarly to how an observable's subscribe method may work. 62 + This is because Wonka's sources are entirely cancellable. 63 + 64 + To summarise, Wonka's streams are _sources_ of values, which 65 + can be transformed using _operators_, which create new _sources_. 66 + If we want to consume a _source_ we use a _sink_.
+12
docs/basics/index.md
··· 1 + --- 2 + title: Basics 3 + order: 3 4 + --- 5 + 6 + Wonka introduces a new primitive for streams. 7 + This part of the documentation explains both the motivation 8 + behind creating and using a new stream primitive and how these 9 + work internally in Wonka. 10 + 11 + - [Background](./background.md) — learn what streams are 12 + - [Architecture](./architecture.md) — learn how Wonka's streams work internally
+136
docs/getting-started.md
··· 1 + --- 2 + title: Getting Started 3 + order: 1 4 + --- 5 + 6 + This page will explain how to install the Wonka package and 7 + its basic usage and helper functions. 8 + 9 + ## Installation 10 + 11 + The `wonka` package from `npm` is all you need to install to use 12 + Wonka. The process is the same with `yarn` and `esy`. 13 + 14 + ```bash 15 + yarn add wonka 16 + # or with npm: 17 + npm install --save wonka 18 + # or with esy: 19 + esy add wonka 20 + ``` 21 + 22 + For **JavaScript projects**, the package contains both CommonJS and 23 + ES Modules bundles. For Flow and TypeScript the package also contains 24 + typings files already, so if you're using either you're already done and 25 + ready to go. 26 + 27 + If you're using **BuckleScript** or `bs-native` you will need to add `"wonka"` 28 + to your `bs-dependencies` in your `bsconfig.json` configuration file: 29 + 30 + ```diff 31 + { 32 + "name": "<some_name>", 33 + "version": "0.1.0", 34 + "sources": ["src"], 35 + "bsc-flags": ["-bs-super-errors"], 36 + "bs-dependencies": [ 37 + + "wonka" 38 + ] 39 + } 40 + ``` 41 + 42 + If you're using **Dune** and **Esy** you will need to add `wonka` to 43 + your `libraries` entry in the respective `dune` configuration file: 44 + 45 + ```diff 46 + (library 47 + (name some_name) 48 + (public_name some_name) 49 + + (libraries wonka) 50 + ) 51 + ``` 52 + 53 + ## Usage with JavaScript 54 + 55 + In most cases you'll simply import or require `wonka` and use its exposed 56 + methods and utilities. In both CommonJS and ES Modules the Wonka package 57 + simply exposes all its utilities. 58 + 59 + ```js 60 + // With CommonJS 61 + const { fromArray } = require('wonka'); 62 + // With ES Modules 63 + import { fromArray } from 'wonka'; 64 + ``` 65 + 66 + There are also some special operators in Wonka that will only be exposed in 67 + Web/JavaScript environments, like `fromPromise`, `toPromise`, 68 + or `fromEvent`, or even `debounce` and `throttle`. 69 + In TypeScript and Flow the typings also expose all types. 70 + 71 + There's also a special utility in JavaScript environments to replace the pipeline 72 + operator. This function is called `pipe` and simply calls functions that it's 73 + being passed in order with the previous return value. 74 + 75 + ```js 76 + import { pipe } from 'wonka'; 77 + 78 + const output = pipe( 79 + 'test', 80 + (x) => x + ' this', 81 + (x) => x.toUpperCase() 82 + ); 83 + 84 + output; // "TEST THIS" 85 + ``` 86 + 87 + As shown above, the `pipe` function takes the first argument and passes it 88 + in order to the other function arguments. The return value of one function will 89 + be passed on to the next function. 90 + 91 + In TypeScript and Flow the `pipe` function is also typed to handle all generics 92 + in Wonka utilities correctly. Using it will ensure that most of the time you won't 93 + have to specify the types of any generics manually. 94 + 95 + If you're using Babel and the [pipeline proposal plugin](https://babeljs.io/docs/en/babel-plugin-proposal-pipeline-operator), you can just use 96 + the pipeline operator to do the same and not use the `pipe` helper. 97 + 98 + ## Usage with Reason 99 + 100 + Everything in the Wonka package is exposed under a single module called `Wonka`. 101 + This module also contains `Wonka.Types`, which contains all internal types of the Wonka 102 + library, but you will typically not need it. 103 + 104 + In `BuckleScript` when you're compiling to JavaScript you will also have access to 105 + more utilities like `fromPromise`, `toPromise`, `fromEvent`, or even `debounce` and `throttle`. 106 + These utilities are missing in native compilation, like Dune or `bsb-native`, since they're 107 + relying on JavaScript APIs like Promises, `window.addEventListener`, and `setTimeout`. 108 + 109 + When using Wonka you'd simply either open the module and use its utilities or just 110 + access them from the `Wonka` module: 111 + 112 + ```reason 113 + Wonka.fromValue("test") 114 + |> Wonka.map((.x) => x ++ " this") 115 + |> Wonka.forEach((.x) => print_endline(x)); 116 + ``` 117 + 118 + It's worth noting that most callbacks in Wonka need to be explicitly uncurried, since 119 + this will help them compile cleanly to JavaScript. 120 + 121 + ## Interoperability 122 + 123 + In JavaScript environments, Wonka comes with several utilities that make it easier 124 + to interoperate with JavaScript primitives and other libraries: 125 + 126 + - [`fromPromise`](./api/sources.md#frompromise) & [`toPromise`](./api/sinks.md#topromise) can be used to interoperate with Promises 127 + - [`fromObservable`](./api/sources.md#fromobservable) & [`toObservable`](./api/sinks.md#toobservable) can be used to interoperate with spec-compliant Observables 128 + - [`fromCallbag`](./api/sources.md#fromcallbag) & [`toCallbag`](./api/sinks.md#tocallbag) can be used to interoperate with spec-compliant Callbags 129 + 130 + Furthermore there are a couple of operators that only work in JavaScript environments 131 + since they need timing primitives, like `setTimeout` and `setInterval`: 132 + 133 + - [`delay`](./api/operators.md#delay) 134 + - [`debounce`](./api/operators.md#debounce) 135 + - [`throttle`](./api/operators.md#throttle) 136 + - [`interval`](./api/sources.md#interval)
+42
docs/index.md
··· 1 + --- 2 + title: Introduction 3 + order: 0 4 + --- 5 + 6 + Wonka is a lightweight iterable and observable library loosely based on 7 + the [callbag spec](https://github.com/callbag/callbag). It exposes a set of helpers to create streams, 8 + which are sources of multiple values, which allow you to create, transform 9 + and consume event streams or iterable sets of data. 10 + 11 + ## What it is 12 + 13 + Wonka is a library for streams _and_ iterables that behaves predictably 14 + and can be used for many problems where you're dealing with streams of 15 + values, asynchronous or not. 16 + 17 + It's similar to [RxJS](https://github.com/ReactiveX/rxjs) in that it enables asynchronous programming with 18 + observable streams, with an API that looks like functional programming on 19 + iterables, but it's also similar to [IxJS](https://github.com/ReactiveX/IxJS) since Wonka streams will run 20 + synchronously if an iterable source runs synchronously. 21 + 22 + It also comes with many operators that users from [RxJS](https://github.com/ReactiveX/rxjs) will be used to. 23 + 24 + ## Reason Support 25 + 26 + Wonka used to be written in [Reason](https://reasonml.github.io/),, a dialect of OCaml, and was usable 27 + for native development and compileable with [BuckleScript](https://bucklescript.github.io). 28 + Out of the box it supported usage with BuckleScript, `bs-native`, Dune, and Esy. 29 + 30 + If you're looking for the legacy version that supported this, you may want to install v4 or v5 rather 31 + than v6 onwards, which converted the project to TypeScript. 32 + 33 + ## About the docs 34 + 35 + As mentioned in the prior section, Wonka supports not one but a couple of 36 + environments and languages. To accommodate for this, most of the docs 37 + are written with examples and sections for TypeScript and Reason. 38 + 39 + We don't provide examples in most parts of the docs for Flow and OCaml because 40 + their respective usage is almost identical to TypeScript and Reason, so for 41 + the most part the examples mostly deal with the differences between a 42 + TypeScript and a Reason project.
+127
docs/migration.md
··· 1 + --- 2 + title: Migration 3 + order: 2 4 + --- 5 + 6 + This page lists breaking changes and migration guides for 7 + various major releases of Wonka. 8 + 9 + ## v6.0.0 10 + 11 + In `v6.0.0` of Wonka, we've migrated fully to TypeScript. 12 + If you're using this project with Reason or OCaml before, we're sorry for 13 + the inconvenience. However, v4 and v5-rc will remain usable for these 14 + platforms and languages. 15 + 16 + The internal API and data structures of Wonka haven't changed in `v6.0.0` 17 + compared to the prior releases and are based on `v4.0.14`. This means that 18 + from a TypeScript, Flow, and JS perspective, `v6.0.0` is backwards compatible 19 + and continues to function as before. 20 + 21 + However, the `fromList` API has been removed so far, and we reserve ourselves 22 + room to make more breaking changes were behaviour before was broken. 23 + 24 + We're also dropping IE11 support and are now bundling against an ES2015 target. 25 + 26 + ## v4.0.0 27 + 28 + In `v4.0.0` of Wonka, we've migrated to BuckleScript v7 and 29 + `genType` for automatic type generation for TypeScript. The 30 + Flow types are derived from the automatic types and are generated 31 + by `flowgen`. 32 + 33 + This may mean that `bsb-native` and Dune/Esy builds are temporarily 34 + broken, as they haven't been tested yet. If so, they will be fixed 35 + in a future minor release. Please stick with `v3.2.2` if you're having 36 + trouble. 37 + 38 + This release has no breaking changes for Reason/OCaml in terms of 39 + API changes. You can use the library exactly as you have before. 40 + 41 + **For TypeScript and Flow some APIs have changed**. 42 + 43 + ### New TypeScript and Flow typings 44 + 45 + The type for `Subscription`, `Observer`, and `Subject` have changed. 46 + These used to be exposed as tuples (fixed-size arrays) in the past, 47 + but are now compiled to objects, due to the upgrade to BuckleScript v7. 48 + 49 + If you're using `subscribe`, `makeSubject`, or `make` you will have 50 + to change some of your types. If you don't, you won't have to update 51 + any of your code and can even mix Wonka `v4.0.0` with `v3.2.2` in the 52 + same bundle. 53 + 54 + The `Subscription` type has changed from `[() => void]` to 55 + `{ unsubscribe: (_: void) => void }`: 56 + 57 + ```ts 58 + import { subscribe } from 'wonka'; 59 + 60 + // Before: 61 + const [unsubscribe] = subscribe(source); 62 + // After: 63 + const { unsubscribe } = subscribe(source); 64 + ``` 65 + 66 + The `Observer` type has changed similarly, so you'll have to 67 + update your code if you're using `make`: 68 + 69 + ```ts 70 + import { make } from 'wonka'; 71 + 72 + // Before: 73 + const source = make(([next, complete]) => /* ... */); 74 + // After: 75 + const source = make(({ next, complete }) => /* ... */); 76 + ``` 77 + 78 + And lastly the `Subject` type has changed as well, so update 79 + your usage of `makeSubject`: 80 + 81 + ```ts 82 + import { makeSubject } from 'wonka'; 83 + 84 + // Before: 85 + const [source, next, complete] = makeSubject(); 86 + // After: 87 + const { source, next, complete } = makeSubject(); 88 + ``` 89 + 90 + ### Improvements 91 + 92 + The test suite has been rewritten from scratch to improve our 93 + testing of some tricky edge cases. In most cases operators have 94 + been updated to behave more nicely and closer to the spec and 95 + as expected. This is especially true if you're using synchronous 96 + sources or iterables a lot. 97 + 98 + Wonka has reached a much higher test coverage and operators like 99 + `merge` and `switchMap` will now behave as expected with synchronous 100 + sources. 101 + 102 + This is the list of operators that have changed. If your code has 103 + been working before, you _shouldn't see any different behaviour_. 104 + The changed operators will simply have received bugfixes and will 105 + behave more predictably (and hopefully correctly) in certain edge cases! 106 + 107 + - [`buffer`](./api/operators.md#buffer) 108 + - [`combine`](./api/operators.md#combine) 109 + - [`debounce`](./api/operators.md#debounce) 110 + - [`delay`](./api/operators.md#delay) 111 + - [`sample`](./api/operators.md#sample) 112 + - [`skipUntil`](./api/operators.md#skipuntil) 113 + - [`take`](./api/operators.md#take) 114 + - [`takeLast`](./api/operators.md#takelast) 115 + - [`takeWhile`](./api/operators.md#takewhile) 116 + - [`switchMap`](./api/operators.md#switchmap) 117 + - [`mergeMap`](./api/operators.md#mergemap) 118 + - [`concatMap`](./api/operators.md#concatmap) 119 + - [`switchAll`](./api/operators.md#switchall) 120 + - [`mergeAll`](./api/operators.md#mergeall) 121 + - [`concatAll`](./api/operators.md#concatall) 122 + - [`merge`](./api/operators.md#merge) 123 + - [`concat`](./api/operators.md#concat) 124 + 125 + The `take` operator is the only one that has been changed to fix 126 + a notable new usage case. It can now accept a maximum of `0` or below, 127 + to close the source immediately.
+3
index.js.flow
··· 1 + // @flow 2 + 3 + declare export * from "./dist/wonka.js.flow"
+89 -58
package.json
··· 1 1 { 2 2 "name": "wonka", 3 - "version": "1.4.2", 4 - "author": "Phil Pluckthun <phil@kitten.sh>", 5 - "source": "./src/index.js", 6 - "main": "./dist/wonka.js", 7 - "module": "./dist/wonka.es.js", 8 - "jsnext:main": "./dist/wonka.es.js", 9 - "types": "./src/index.d.ts", 3 + "description": "A tiny but capable push & pull stream library for TypeScript and Flow", 4 + "version": "6.3.5", 5 + "author": "0no.co <hi@0no.co>", 6 + "source": "./src/index.ts", 7 + "main": "./dist/wonka", 8 + "module": "./dist/wonka.mjs", 9 + "types": "./dist/wonka.d.ts", 10 + "exports": { 11 + ".": { 12 + "types": "./dist/wonka.d.ts", 13 + "import": "./dist/wonka.mjs", 14 + "require": "./dist/wonka.js", 15 + "source": "./src/index.ts" 16 + }, 17 + "./package.json": "./package.json" 18 + }, 19 + "sideEffects": false, 10 20 "files": [ 11 21 "src", 12 - "lib/js", 13 22 "dist", 14 23 "docs/*.md", 15 - "*.md", 16 - "bsconfig.json" 24 + "index.js.flow", 25 + "*.md" 17 26 ], 18 - "scripts": { 19 - "clean": "bsb -clean-world", 20 - "build": "bsb -make-world", 21 - "watch": "bsb -make-world -w", 22 - "test": "jest", 23 - "coverage": "jest -c ./.jest.coverage.json --coverage", 24 - "test:watch": "jest --watch", 25 - "terser:es": "terser --config-file .terser.config.json --module -o ./dist/wonka.es.js ./dist/wonka.es.js", 26 - "terser:cjs": "terser --config-file .terser.config.json -o ./dist/wonka.js ./dist/wonka.js", 27 - "terser": "run-p terser:es terser:cjs", 28 - "prettier": "prettier --write ./dist/*.js", 29 - "prebundle": "rimraf ./dist", 30 - "bundle": "microbundle --external none --no-compress --no-sourcemap --format es,cjs", 31 - "postbundle": "run-s terser prettier", 32 - "prebundlesize": "run-s bundle", 33 - "bundlesize": "bundlesize", 34 - "prepublishOnly": "run-s clean build bundle test" 35 - }, 36 27 "keywords": [ 37 28 "wonka", 38 - "reason", 39 - "bucklescript", 29 + "typescript", 30 + "events", 40 31 "callbag", 41 32 "callback", 42 33 "observable", 43 34 "iterable", 44 35 "stream" 45 36 ], 46 - "repository": "https://github.com/kitten/wonka", 47 - "homepage": "https://github.com/kitten/wonka", 48 - "bugs": "https://github.com/kitten/wonka/issues", 49 - "license": "MIT", 50 - "dependencies": { 51 - "bs-rebel": "^0.2.3" 37 + "scripts": { 38 + "test": "vitest run", 39 + "check": "tsc", 40 + "lint": "eslint --ext=js,ts .", 41 + "build": "rollup -c scripts/rollup.config.mjs", 42 + "clean": "rimraf dist node_modules/.cache", 43 + "prepublishOnly": "run-s clean build check test", 44 + "prepare": "node ./scripts/prepare.js", 45 + "changeset:version": "changeset version && pnpm install --lockfile-only", 46 + "changeset:publish": "changeset publish" 52 47 }, 53 - "devDependencies": { 54 - "@glennsl/bs-jest": "^0.4.6", 55 - "bs-platform": "^4.0.17", 56 - "bundlesize": "^0.17.0", 57 - "coveralls": "^3.0.0", 58 - "microbundle": "^0.9.0", 59 - "npm-run-all": "^4.1.5", 60 - "prettier": "^1.15.3", 61 - "rimraf": "^2.6.3", 62 - "terser": "^3.14.1" 48 + "repository": "https://github.com/0no-co/wonka", 49 + "bugs": { 50 + "url": "https://github.com/0no-co/wonka/issues" 63 51 }, 52 + "license": "MIT", 64 53 "prettier": { 54 + "singleQuote": true, 55 + "tabWidth": 2, 65 56 "printWidth": 100 66 57 }, 67 - "jest": { 68 - "moduleFileExtensions": [ 69 - "js" 70 - ], 71 - "testMatch": [ 72 - "**/lib/js/__tests__/*_test.js" 58 + "lint-staged": { 59 + "*.{ts,js}": "eslint -c scripts/eslint-preset.js --fix", 60 + "*.json": "prettier --write", 61 + "*.md": "prettier --write" 62 + }, 63 + "husky": { 64 + "hooks": { 65 + "pre-commit": "lint-staged --quiet --relative" 66 + } 67 + }, 68 + "eslintConfig": { 69 + "root": true, 70 + "extends": [ 71 + "./scripts/eslint-preset.js" 73 72 ] 74 73 }, 75 - "bundlesize": [ 76 - { 77 - "path": "./dist/wonka.es.js", 78 - "maxSize": "9 kB" 79 - } 80 - ] 74 + "publishConfig": { 75 + "provenance": true 76 + }, 77 + "devDependencies": { 78 + "@changesets/cli": "^2.29.6", 79 + "@changesets/get-github-info": "^0.6.0", 80 + "@rollup/plugin-buble": "^1.0.1", 81 + "@rollup/plugin-commonjs": "^23.0.3", 82 + "@rollup/plugin-node-resolve": "^15.0.1", 83 + "@rollup/plugin-sucrase": "^5.0.1", 84 + "@rollup/plugin-terser": "^0.1.0", 85 + "@rollup/pluginutils": "^5.0.2", 86 + "@types/zen-observable": "^0.8.3", 87 + "@typescript-eslint/eslint-plugin": "^5.45.0", 88 + "@typescript-eslint/parser": "^5.45.0", 89 + "callbag-from-iter": "^1.3.0", 90 + "callbag-iterate": "^1.0.0", 91 + "callbag-take": "^1.5.0", 92 + "dotenv": "^16.0.3", 93 + "eslint": "^8.29.0", 94 + "eslint-config-prettier": "^8.5.0", 95 + "eslint-plugin-prettier": "^4.2.1", 96 + "eslint-plugin-tsdoc": "^0.2.17", 97 + "flowgen": "^1.21.0", 98 + "glob": "^8.0.3", 99 + "husky-v4": "^4.3.8", 100 + "lint-staged": "^13.0.4", 101 + "npm-run-all": "^4.1.5", 102 + "prettier": "^2.8.0", 103 + "rimraf": "^3.0.2", 104 + "rollup": "^3.5.1", 105 + "rollup-plugin-cjs-check": "^1.0.1", 106 + "rollup-plugin-dts": "^5.1.1", 107 + "tslib": "^2.4.1", 108 + "typescript": "^4.9.5", 109 + "vitest": "^1.2.2", 110 + "zen-observable": "^0.10.0" 111 + } 81 112 }
+18
perf/package.json
··· 1 + { 2 + "name": "@wonka/perf", 3 + "private": true, 4 + "version": "1.0.0", 5 + "main": "suite.js", 6 + "license": "MIT", 7 + "scripts": { 8 + "start": "benchr suite.js" 9 + }, 10 + "devDependencies": { 11 + "benchr": "^4.3.0" 12 + }, 13 + "dependencies": { 14 + "wonka-v4": "npm:wonka@^4.0.0", 15 + "most": "^1.7.3", 16 + "rxjs": "^6.3.3" 17 + } 18 + }
+222
perf/pnpm-lock.yaml
··· 1 + lockfileVersion: 5.4 2 + 3 + specifiers: 4 + benchr: ^4.3.0 5 + most: ^1.7.3 6 + rxjs: ^6.3.3 7 + wonka-v4: npm:wonka@^4.0.0 8 + 9 + dependencies: 10 + most: 1.9.0 11 + rxjs: 6.6.7 12 + wonka-v4: /wonka/4.0.15 13 + 14 + devDependencies: 15 + benchr: 4.3.0 16 + 17 + packages: 18 + 19 + /@most/multicast/1.3.0_most@1.9.0: 20 + resolution: {integrity: sha512-DWH8AShgp5bXn+auGzf5tzPxvpmEvQJd0CNsApOci1LDF4eAEcnw4HQOr2Jaa+L92NbDYFKBSXxll+i7r1ikvw==} 21 + peerDependencies: 22 + most: ^1.0.1 23 + dependencies: 24 + '@most/prelude': 1.8.0 25 + most: 1.9.0 26 + dev: false 27 + 28 + /@most/prelude/1.8.0: 29 + resolution: {integrity: sha512-t1CcURpZzfmBA6fEWwqmCqeNzWAj1w2WqEmCk/2yXMe/p8Ut000wFmVKMy8A1Rl9VVxZEZ5nBHd/pU0dR4bv/w==} 30 + dev: false 31 + 32 + /ansi-regex/5.0.1: 33 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 34 + engines: {node: '>=8'} 35 + dev: true 36 + 37 + /ansi-styles/3.2.1: 38 + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 39 + engines: {node: '>=4'} 40 + dependencies: 41 + color-convert: 1.9.3 42 + dev: true 43 + 44 + /benchmark/2.1.4: 45 + resolution: {integrity: sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==} 46 + dependencies: 47 + lodash: 4.17.21 48 + platform: 1.3.6 49 + dev: true 50 + 51 + /benchr/4.3.0: 52 + resolution: {integrity: sha512-ZOJkEOLOI4vyf34fnUSmh+xvg8P86cmVfyORBgIJHLfXMuvrfkMsUEThMaJND406KGCigtBO6sMjExGbp+WeLw==} 53 + engines: {node: '>=6.0.0'} 54 + hasBin: true 55 + dependencies: 56 + benchmark: 2.1.4 57 + chalk: 2.4.2 58 + docopt: 0.6.2 59 + easy-table: 1.2.0 60 + require-all: 2.2.0 61 + dev: true 62 + 63 + /chalk/2.4.2: 64 + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 65 + engines: {node: '>=4'} 66 + dependencies: 67 + ansi-styles: 3.2.1 68 + escape-string-regexp: 1.0.5 69 + supports-color: 5.5.0 70 + dev: true 71 + 72 + /clone/1.0.4: 73 + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 74 + engines: {node: '>=0.8'} 75 + dev: true 76 + optional: true 77 + 78 + /color-convert/1.9.3: 79 + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 80 + dependencies: 81 + color-name: 1.1.3 82 + dev: true 83 + 84 + /color-name/1.1.3: 85 + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 86 + dev: true 87 + 88 + /defaults/1.0.4: 89 + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} 90 + dependencies: 91 + clone: 1.0.4 92 + dev: true 93 + optional: true 94 + 95 + /define-properties/1.1.4: 96 + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} 97 + engines: {node: '>= 0.4'} 98 + dependencies: 99 + has-property-descriptors: 1.0.0 100 + object-keys: 1.1.1 101 + dev: false 102 + 103 + /docopt/0.6.2: 104 + resolution: {integrity: sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==} 105 + engines: {node: '>=0.10.0'} 106 + dev: true 107 + 108 + /easy-table/1.2.0: 109 + resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} 110 + dependencies: 111 + ansi-regex: 5.0.1 112 + optionalDependencies: 113 + wcwidth: 1.0.1 114 + dev: true 115 + 116 + /escape-string-regexp/1.0.5: 117 + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 118 + engines: {node: '>=0.8.0'} 119 + dev: true 120 + 121 + /function-bind/1.1.1: 122 + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 123 + dev: false 124 + 125 + /get-intrinsic/1.1.3: 126 + resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} 127 + dependencies: 128 + function-bind: 1.1.1 129 + has: 1.0.3 130 + has-symbols: 1.0.3 131 + dev: false 132 + 133 + /globalthis/1.0.3: 134 + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 135 + engines: {node: '>= 0.4'} 136 + dependencies: 137 + define-properties: 1.1.4 138 + dev: false 139 + 140 + /has-flag/3.0.0: 141 + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 142 + engines: {node: '>=4'} 143 + dev: true 144 + 145 + /has-property-descriptors/1.0.0: 146 + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 147 + dependencies: 148 + get-intrinsic: 1.1.3 149 + dev: false 150 + 151 + /has-symbols/1.0.3: 152 + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 153 + engines: {node: '>= 0.4'} 154 + dev: false 155 + 156 + /has/1.0.3: 157 + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 158 + engines: {node: '>= 0.4.0'} 159 + dependencies: 160 + function-bind: 1.1.1 161 + dev: false 162 + 163 + /lodash/4.17.21: 164 + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 165 + dev: true 166 + 167 + /most/1.9.0: 168 + resolution: {integrity: sha512-M7yHMcMGaclzEL6eg8Yh8PlAsaWfL/oSThF4+ZuWKM5CKXcbzmLh+qESwgZFzMKHJ+iVJwb28yFvDEOobI653w==} 169 + dependencies: 170 + '@most/multicast': 1.3.0_most@1.9.0 171 + '@most/prelude': 1.8.0 172 + globalthis: 1.0.3 173 + symbol-observable: 2.0.3 174 + dev: false 175 + 176 + /object-keys/1.1.1: 177 + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 178 + engines: {node: '>= 0.4'} 179 + dev: false 180 + 181 + /platform/1.3.6: 182 + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} 183 + dev: true 184 + 185 + /require-all/2.2.0: 186 + resolution: {integrity: sha512-YWj/WNCxs+KxppuN3j11Ztqzl8MI/oWj4ERwEwgJ5gsHzWi8OAK7FepPu8MLv/Rn8Pov6aPdpRkaoO2Tb6m+zQ==} 187 + dev: true 188 + 189 + /rxjs/6.6.7: 190 + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} 191 + engines: {npm: '>=2.0.0'} 192 + dependencies: 193 + tslib: 1.14.1 194 + dev: false 195 + 196 + /supports-color/5.5.0: 197 + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 198 + engines: {node: '>=4'} 199 + dependencies: 200 + has-flag: 3.0.0 201 + dev: true 202 + 203 + /symbol-observable/2.0.3: 204 + resolution: {integrity: sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==} 205 + engines: {node: '>=0.10'} 206 + dev: false 207 + 208 + /tslib/1.14.1: 209 + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 210 + dev: false 211 + 212 + /wcwidth/1.0.1: 213 + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 214 + requiresBuild: true 215 + dependencies: 216 + defaults: 1.0.4 217 + dev: true 218 + optional: true 219 + 220 + /wonka/4.0.15: 221 + resolution: {integrity: sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==} 222 + dev: false
+45
perf/suite.js
··· 1 + const Wonka = require('..'); 2 + const Wonka4 = require('wonka-v4'); 3 + const Rx = require('rxjs'); 4 + const RxOperators = require('rxjs/operators'); 5 + const most = require('most'); 6 + 7 + const input = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 8 + 9 + suite('Promisified map, filter, scan, last', () => { 10 + benchmark('Wonka', () => { 11 + return Wonka.pipe( 12 + Wonka.fromArray(input), 13 + Wonka.map(x => x * 2), 14 + Wonka.filter(x => x > 4), 15 + Wonka.scan((acc, x) => acc + x, 0), 16 + Wonka.toPromise 17 + ); 18 + }); 19 + 20 + benchmark('Wonka v4', () => { 21 + return Wonka4.pipe( 22 + Wonka4.fromArray(input), 23 + Wonka4.map(x => x * 2), 24 + Wonka4.filter(x => x > 4), 25 + Wonka4.scan((acc, x) => acc + x, 0), 26 + Wonka4.toPromise 27 + ); 28 + }); 29 + 30 + benchmark('RxJS', () => { 31 + return Rx.from(input).pipe( 32 + RxOperators.map(x => x * 2), 33 + RxOperators.filter(x => x > 4), 34 + RxOperators.scan((acc, x) => acc + x, 0) 35 + ).toPromise(); 36 + }); 37 + 38 + benchmark('most', () => { 39 + return most.from(input) 40 + .map(x => x * 2) 41 + .filter(x => x > 4) 42 + .scan((acc, x) => acc + x, 0) 43 + .thru(s => s.reduce((_, x) => x)) 44 + }); 45 + });
+5110
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + devDependencies: 11 + '@changesets/cli': 12 + specifier: ^2.29.6 13 + version: 2.29.6(@types/node@22.13.9) 14 + '@changesets/get-github-info': 15 + specifier: ^0.6.0 16 + version: 0.6.0 17 + '@rollup/plugin-buble': 18 + specifier: ^1.0.1 19 + version: 1.0.3(rollup@3.29.5) 20 + '@rollup/plugin-commonjs': 21 + specifier: ^23.0.3 22 + version: 23.0.7(rollup@3.29.5) 23 + '@rollup/plugin-node-resolve': 24 + specifier: ^15.0.1 25 + version: 15.3.1(rollup@3.29.5) 26 + '@rollup/plugin-sucrase': 27 + specifier: ^5.0.1 28 + version: 5.0.2(rollup@3.29.5) 29 + '@rollup/plugin-terser': 30 + specifier: ^0.1.0 31 + version: 0.1.0(rollup@3.29.5) 32 + '@rollup/pluginutils': 33 + specifier: ^5.0.2 34 + version: 5.1.4(rollup@3.29.5) 35 + '@types/zen-observable': 36 + specifier: ^0.8.3 37 + version: 0.8.7 38 + '@typescript-eslint/eslint-plugin': 39 + specifier: ^5.45.0 40 + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) 41 + '@typescript-eslint/parser': 42 + specifier: ^5.45.0 43 + version: 5.62.0(eslint@8.57.1)(typescript@4.9.5) 44 + callbag-from-iter: 45 + specifier: ^1.3.0 46 + version: 1.3.0 47 + callbag-iterate: 48 + specifier: ^1.0.0 49 + version: 1.0.0 50 + callbag-take: 51 + specifier: ^1.5.0 52 + version: 1.5.0 53 + dotenv: 54 + specifier: ^16.0.3 55 + version: 16.4.7 56 + eslint: 57 + specifier: ^8.29.0 58 + version: 8.57.1 59 + eslint-config-prettier: 60 + specifier: ^8.5.0 61 + version: 8.10.0(eslint@8.57.1) 62 + eslint-plugin-prettier: 63 + specifier: ^4.2.1 64 + version: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) 65 + eslint-plugin-tsdoc: 66 + specifier: ^0.2.17 67 + version: 0.2.17 68 + flowgen: 69 + specifier: ^1.21.0 70 + version: 1.21.0 71 + glob: 72 + specifier: ^8.0.3 73 + version: 8.1.0 74 + husky-v4: 75 + specifier: ^4.3.8 76 + version: 4.3.8 77 + lint-staged: 78 + specifier: ^13.0.4 79 + version: 13.3.0(enquirer@2.4.1) 80 + npm-run-all: 81 + specifier: ^4.1.5 82 + version: 4.1.5 83 + prettier: 84 + specifier: ^2.8.0 85 + version: 2.8.8 86 + rimraf: 87 + specifier: ^3.0.2 88 + version: 3.0.2 89 + rollup: 90 + specifier: ^3.5.1 91 + version: 3.29.5 92 + rollup-plugin-cjs-check: 93 + specifier: ^1.0.1 94 + version: 1.0.3(rollup@3.29.5) 95 + rollup-plugin-dts: 96 + specifier: ^5.1.1 97 + version: 5.3.1(rollup@3.29.5)(typescript@4.9.5) 98 + tslib: 99 + specifier: ^2.4.1 100 + version: 2.8.1 101 + typescript: 102 + specifier: ^4.9.5 103 + version: 4.9.5 104 + vitest: 105 + specifier: ^1.2.2 106 + version: 1.6.1(@types/node@22.13.9)(terser@5.39.0) 107 + zen-observable: 108 + specifier: ^0.10.0 109 + version: 0.10.0 110 + 111 + packages: 112 + 113 + '@babel/code-frame@7.26.2': 114 + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 115 + engines: {node: '>=6.9.0'} 116 + 117 + '@babel/helper-validator-identifier@7.25.9': 118 + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 119 + engines: {node: '>=6.9.0'} 120 + 121 + '@babel/highlight@7.25.9': 122 + resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} 123 + engines: {node: '>=6.9.0'} 124 + 125 + '@babel/runtime@7.26.9': 126 + resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} 127 + engines: {node: '>=6.9.0'} 128 + 129 + '@changesets/apply-release-plan@7.0.12': 130 + resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==} 131 + 132 + '@changesets/assemble-release-plan@6.0.9': 133 + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} 134 + 135 + '@changesets/changelog-git@0.2.1': 136 + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} 137 + 138 + '@changesets/cli@2.29.6': 139 + resolution: {integrity: sha512-6qCcVsIG1KQLhpQ5zE8N0PckIx4+9QlHK3z6/lwKnw7Tir71Bjw8BeOZaxA/4Jt00pcgCnCSWZnyuZf5Il05QQ==} 140 + hasBin: true 141 + 142 + '@changesets/config@3.1.1': 143 + resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} 144 + 145 + '@changesets/errors@0.2.0': 146 + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} 147 + 148 + '@changesets/get-dependents-graph@2.1.3': 149 + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} 150 + 151 + '@changesets/get-github-info@0.6.0': 152 + resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} 153 + 154 + '@changesets/get-release-plan@4.0.13': 155 + resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} 156 + 157 + '@changesets/get-version-range-type@0.4.0': 158 + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} 159 + 160 + '@changesets/git@3.0.4': 161 + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} 162 + 163 + '@changesets/logger@0.1.1': 164 + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} 165 + 166 + '@changesets/parse@0.4.1': 167 + resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} 168 + 169 + '@changesets/pre@2.0.2': 170 + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} 171 + 172 + '@changesets/read@0.6.5': 173 + resolution: {integrity: sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==} 174 + 175 + '@changesets/should-skip-package@0.1.2': 176 + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} 177 + 178 + '@changesets/types@4.1.0': 179 + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 180 + 181 + '@changesets/types@6.1.0': 182 + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} 183 + 184 + '@changesets/write@0.4.0': 185 + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} 186 + 187 + '@esbuild/aix-ppc64@0.21.5': 188 + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 189 + engines: {node: '>=12'} 190 + cpu: [ppc64] 191 + os: [aix] 192 + 193 + '@esbuild/android-arm64@0.21.5': 194 + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 195 + engines: {node: '>=12'} 196 + cpu: [arm64] 197 + os: [android] 198 + 199 + '@esbuild/android-arm@0.21.5': 200 + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 201 + engines: {node: '>=12'} 202 + cpu: [arm] 203 + os: [android] 204 + 205 + '@esbuild/android-x64@0.21.5': 206 + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 207 + engines: {node: '>=12'} 208 + cpu: [x64] 209 + os: [android] 210 + 211 + '@esbuild/darwin-arm64@0.21.5': 212 + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 213 + engines: {node: '>=12'} 214 + cpu: [arm64] 215 + os: [darwin] 216 + 217 + '@esbuild/darwin-x64@0.21.5': 218 + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 219 + engines: {node: '>=12'} 220 + cpu: [x64] 221 + os: [darwin] 222 + 223 + '@esbuild/freebsd-arm64@0.21.5': 224 + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 225 + engines: {node: '>=12'} 226 + cpu: [arm64] 227 + os: [freebsd] 228 + 229 + '@esbuild/freebsd-x64@0.21.5': 230 + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 231 + engines: {node: '>=12'} 232 + cpu: [x64] 233 + os: [freebsd] 234 + 235 + '@esbuild/linux-arm64@0.21.5': 236 + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 237 + engines: {node: '>=12'} 238 + cpu: [arm64] 239 + os: [linux] 240 + 241 + '@esbuild/linux-arm@0.21.5': 242 + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 243 + engines: {node: '>=12'} 244 + cpu: [arm] 245 + os: [linux] 246 + 247 + '@esbuild/linux-ia32@0.21.5': 248 + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 249 + engines: {node: '>=12'} 250 + cpu: [ia32] 251 + os: [linux] 252 + 253 + '@esbuild/linux-loong64@0.21.5': 254 + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 255 + engines: {node: '>=12'} 256 + cpu: [loong64] 257 + os: [linux] 258 + 259 + '@esbuild/linux-mips64el@0.21.5': 260 + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 261 + engines: {node: '>=12'} 262 + cpu: [mips64el] 263 + os: [linux] 264 + 265 + '@esbuild/linux-ppc64@0.21.5': 266 + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 267 + engines: {node: '>=12'} 268 + cpu: [ppc64] 269 + os: [linux] 270 + 271 + '@esbuild/linux-riscv64@0.21.5': 272 + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 273 + engines: {node: '>=12'} 274 + cpu: [riscv64] 275 + os: [linux] 276 + 277 + '@esbuild/linux-s390x@0.21.5': 278 + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 279 + engines: {node: '>=12'} 280 + cpu: [s390x] 281 + os: [linux] 282 + 283 + '@esbuild/linux-x64@0.21.5': 284 + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 285 + engines: {node: '>=12'} 286 + cpu: [x64] 287 + os: [linux] 288 + 289 + '@esbuild/netbsd-x64@0.21.5': 290 + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 291 + engines: {node: '>=12'} 292 + cpu: [x64] 293 + os: [netbsd] 294 + 295 + '@esbuild/openbsd-x64@0.21.5': 296 + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 297 + engines: {node: '>=12'} 298 + cpu: [x64] 299 + os: [openbsd] 300 + 301 + '@esbuild/sunos-x64@0.21.5': 302 + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 303 + engines: {node: '>=12'} 304 + cpu: [x64] 305 + os: [sunos] 306 + 307 + '@esbuild/win32-arm64@0.21.5': 308 + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 309 + engines: {node: '>=12'} 310 + cpu: [arm64] 311 + os: [win32] 312 + 313 + '@esbuild/win32-ia32@0.21.5': 314 + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 315 + engines: {node: '>=12'} 316 + cpu: [ia32] 317 + os: [win32] 318 + 319 + '@esbuild/win32-x64@0.21.5': 320 + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 321 + engines: {node: '>=12'} 322 + cpu: [x64] 323 + os: [win32] 324 + 325 + '@eslint-community/eslint-utils@4.4.1': 326 + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 327 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 328 + peerDependencies: 329 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 330 + 331 + '@eslint-community/regexpp@4.12.1': 332 + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 333 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 334 + 335 + '@eslint/eslintrc@2.1.4': 336 + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 337 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 338 + 339 + '@eslint/js@8.57.1': 340 + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} 341 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 342 + 343 + '@humanwhocodes/config-array@0.13.0': 344 + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} 345 + engines: {node: '>=10.10.0'} 346 + deprecated: Use @eslint/config-array instead 347 + 348 + '@humanwhocodes/module-importer@1.0.1': 349 + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 350 + engines: {node: '>=12.22'} 351 + 352 + '@humanwhocodes/object-schema@2.0.3': 353 + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 354 + deprecated: Use @eslint/object-schema instead 355 + 356 + '@inquirer/external-editor@1.0.1': 357 + resolution: {integrity: sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==} 358 + engines: {node: '>=18'} 359 + peerDependencies: 360 + '@types/node': '>=18' 361 + peerDependenciesMeta: 362 + '@types/node': 363 + optional: true 364 + 365 + '@isaacs/cliui@8.0.2': 366 + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 367 + engines: {node: '>=12'} 368 + 369 + '@jest/schemas@29.6.3': 370 + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 371 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 372 + 373 + '@jridgewell/gen-mapping@0.3.8': 374 + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 375 + engines: {node: '>=6.0.0'} 376 + 377 + '@jridgewell/resolve-uri@3.1.2': 378 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 379 + engines: {node: '>=6.0.0'} 380 + 381 + '@jridgewell/set-array@1.2.1': 382 + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 383 + engines: {node: '>=6.0.0'} 384 + 385 + '@jridgewell/source-map@0.3.6': 386 + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} 387 + 388 + '@jridgewell/sourcemap-codec@1.5.0': 389 + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 390 + 391 + '@jridgewell/trace-mapping@0.3.25': 392 + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 393 + 394 + '@manypkg/find-root@1.1.0': 395 + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 396 + 397 + '@manypkg/get-packages@1.1.3': 398 + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 399 + 400 + '@microsoft/tsdoc-config@0.16.2': 401 + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} 402 + 403 + '@microsoft/tsdoc@0.14.2': 404 + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} 405 + 406 + '@nodelib/fs.scandir@2.1.5': 407 + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 408 + engines: {node: '>= 8'} 409 + 410 + '@nodelib/fs.stat@2.0.5': 411 + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 412 + engines: {node: '>= 8'} 413 + 414 + '@nodelib/fs.walk@1.2.8': 415 + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 416 + engines: {node: '>= 8'} 417 + 418 + '@pkgjs/parseargs@0.11.0': 419 + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 420 + engines: {node: '>=14'} 421 + 422 + '@rollup/plugin-buble@1.0.3': 423 + resolution: {integrity: sha512-QYD9BKkJoof0FdCFeSYYhF6/Y8e0Mnf+098xGgmWOFJ4UPHlWujjqOYeVwEm2hJPOmlR5k7HPUdAjqtOWhN64Q==} 424 + engines: {node: '>=14.0.0'} 425 + peerDependencies: 426 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 427 + peerDependenciesMeta: 428 + rollup: 429 + optional: true 430 + 431 + '@rollup/plugin-commonjs@23.0.7': 432 + resolution: {integrity: sha512-hsSD5Qzyuat/swzrExGG5l7EuIlPhwTsT7KwKbSCQzIcJWjRxiimi/0tyMYY2bByitNb3i1p+6JWEDGa0NvT0Q==} 433 + engines: {node: '>=14.0.0'} 434 + peerDependencies: 435 + rollup: ^2.68.0||^3.0.0 436 + peerDependenciesMeta: 437 + rollup: 438 + optional: true 439 + 440 + '@rollup/plugin-node-resolve@15.3.1': 441 + resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} 442 + engines: {node: '>=14.0.0'} 443 + peerDependencies: 444 + rollup: ^2.78.0||^3.0.0||^4.0.0 445 + peerDependenciesMeta: 446 + rollup: 447 + optional: true 448 + 449 + '@rollup/plugin-sucrase@5.0.2': 450 + resolution: {integrity: sha512-4MhIVH9Dy2Hwose1/x5QMs0XF7yn9jDd/yozHqzdIrMWIolgFpGnrnVhQkqTaK1RALY/fpyrEKmwH/04vr1THA==} 451 + engines: {node: '>=14.0.0'} 452 + peerDependencies: 453 + rollup: ^2.53.1||^3.0.0||^4.0.0 454 + peerDependenciesMeta: 455 + rollup: 456 + optional: true 457 + 458 + '@rollup/plugin-terser@0.1.0': 459 + resolution: {integrity: sha512-N2KK+qUfHX2hBzVzM41UWGLrEmcjVC37spC8R3c9mt3oEDFKh3N2e12/lLp9aVSt86veR0TQiCNQXrm8C6aiUQ==} 460 + engines: {node: '>=14.0.0'} 461 + peerDependencies: 462 + rollup: ^2.x || ^3.x 463 + peerDependenciesMeta: 464 + rollup: 465 + optional: true 466 + 467 + '@rollup/pluginutils@5.1.4': 468 + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} 469 + engines: {node: '>=14.0.0'} 470 + peerDependencies: 471 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 472 + peerDependenciesMeta: 473 + rollup: 474 + optional: true 475 + 476 + '@rollup/rollup-android-arm-eabi@4.34.9': 477 + resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} 478 + cpu: [arm] 479 + os: [android] 480 + 481 + '@rollup/rollup-android-arm64@4.34.9': 482 + resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} 483 + cpu: [arm64] 484 + os: [android] 485 + 486 + '@rollup/rollup-darwin-arm64@4.34.9': 487 + resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} 488 + cpu: [arm64] 489 + os: [darwin] 490 + 491 + '@rollup/rollup-darwin-x64@4.34.9': 492 + resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} 493 + cpu: [x64] 494 + os: [darwin] 495 + 496 + '@rollup/rollup-freebsd-arm64@4.34.9': 497 + resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} 498 + cpu: [arm64] 499 + os: [freebsd] 500 + 501 + '@rollup/rollup-freebsd-x64@4.34.9': 502 + resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} 503 + cpu: [x64] 504 + os: [freebsd] 505 + 506 + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': 507 + resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} 508 + cpu: [arm] 509 + os: [linux] 510 + 511 + '@rollup/rollup-linux-arm-musleabihf@4.34.9': 512 + resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} 513 + cpu: [arm] 514 + os: [linux] 515 + 516 + '@rollup/rollup-linux-arm64-gnu@4.34.9': 517 + resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} 518 + cpu: [arm64] 519 + os: [linux] 520 + 521 + '@rollup/rollup-linux-arm64-musl@4.34.9': 522 + resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} 523 + cpu: [arm64] 524 + os: [linux] 525 + 526 + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': 527 + resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} 528 + cpu: [loong64] 529 + os: [linux] 530 + 531 + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': 532 + resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} 533 + cpu: [ppc64] 534 + os: [linux] 535 + 536 + '@rollup/rollup-linux-riscv64-gnu@4.34.9': 537 + resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} 538 + cpu: [riscv64] 539 + os: [linux] 540 + 541 + '@rollup/rollup-linux-s390x-gnu@4.34.9': 542 + resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} 543 + cpu: [s390x] 544 + os: [linux] 545 + 546 + '@rollup/rollup-linux-x64-gnu@4.34.9': 547 + resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} 548 + cpu: [x64] 549 + os: [linux] 550 + 551 + '@rollup/rollup-linux-x64-musl@4.34.9': 552 + resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} 553 + cpu: [x64] 554 + os: [linux] 555 + 556 + '@rollup/rollup-win32-arm64-msvc@4.34.9': 557 + resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} 558 + cpu: [arm64] 559 + os: [win32] 560 + 561 + '@rollup/rollup-win32-ia32-msvc@4.34.9': 562 + resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} 563 + cpu: [ia32] 564 + os: [win32] 565 + 566 + '@rollup/rollup-win32-x64-msvc@4.34.9': 567 + resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} 568 + cpu: [x64] 569 + os: [win32] 570 + 571 + '@sinclair/typebox@0.27.8': 572 + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 573 + 574 + '@types/buble@0.19.2': 575 + resolution: {integrity: sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q==} 576 + 577 + '@types/estree@1.0.6': 578 + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 579 + 580 + '@types/json-schema@7.0.15': 581 + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 582 + 583 + '@types/node@12.20.55': 584 + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 585 + 586 + '@types/node@22.13.9': 587 + resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} 588 + 589 + '@types/parse-json@4.0.2': 590 + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} 591 + 592 + '@types/resolve@1.20.2': 593 + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 594 + 595 + '@types/semver@7.5.8': 596 + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 597 + 598 + '@types/zen-observable@0.8.7': 599 + resolution: {integrity: sha512-LKzNTjj+2j09wAo/vvVjzgw5qckJJzhdGgWHW7j69QIGdq/KnZrMAMIHQiWGl3Ccflh5/CudBAntTPYdprPltA==} 600 + 601 + '@typescript-eslint/eslint-plugin@5.62.0': 602 + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} 603 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 604 + peerDependencies: 605 + '@typescript-eslint/parser': ^5.0.0 606 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 607 + typescript: '*' 608 + peerDependenciesMeta: 609 + typescript: 610 + optional: true 611 + 612 + '@typescript-eslint/parser@5.62.0': 613 + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} 614 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 615 + peerDependencies: 616 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 617 + typescript: '*' 618 + peerDependenciesMeta: 619 + typescript: 620 + optional: true 621 + 622 + '@typescript-eslint/scope-manager@5.62.0': 623 + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 624 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 625 + 626 + '@typescript-eslint/type-utils@5.62.0': 627 + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} 628 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 629 + peerDependencies: 630 + eslint: '*' 631 + typescript: '*' 632 + peerDependenciesMeta: 633 + typescript: 634 + optional: true 635 + 636 + '@typescript-eslint/types@5.62.0': 637 + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 638 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 639 + 640 + '@typescript-eslint/typescript-estree@5.62.0': 641 + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 642 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 643 + peerDependencies: 644 + typescript: '*' 645 + peerDependenciesMeta: 646 + typescript: 647 + optional: true 648 + 649 + '@typescript-eslint/utils@5.62.0': 650 + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 651 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 652 + peerDependencies: 653 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 654 + 655 + '@typescript-eslint/visitor-keys@5.62.0': 656 + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 657 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 658 + 659 + '@ungap/structured-clone@1.3.0': 660 + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 661 + 662 + '@vitest/expect@1.6.1': 663 + resolution: {integrity: sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==} 664 + 665 + '@vitest/runner@1.6.1': 666 + resolution: {integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==} 667 + 668 + '@vitest/snapshot@1.6.1': 669 + resolution: {integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==} 670 + 671 + '@vitest/spy@1.6.1': 672 + resolution: {integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==} 673 + 674 + '@vitest/utils@1.6.1': 675 + resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==} 676 + 677 + acorn-dynamic-import@4.0.0: 678 + resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==} 679 + deprecated: This is probably built in to whatever tool you're using. If you still need it... idk 680 + peerDependencies: 681 + acorn: ^6.0.0 682 + 683 + acorn-jsx@5.3.2: 684 + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 685 + peerDependencies: 686 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 687 + 688 + acorn-walk@8.3.4: 689 + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 690 + engines: {node: '>=0.4.0'} 691 + 692 + acorn@6.4.2: 693 + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} 694 + engines: {node: '>=0.4.0'} 695 + hasBin: true 696 + 697 + acorn@8.14.0: 698 + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 699 + engines: {node: '>=0.4.0'} 700 + hasBin: true 701 + 702 + ajv@6.12.6: 703 + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 704 + 705 + ansi-colors@4.1.3: 706 + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 707 + engines: {node: '>=6'} 708 + 709 + ansi-escapes@5.0.0: 710 + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} 711 + engines: {node: '>=12'} 712 + 713 + ansi-regex@5.0.1: 714 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 715 + engines: {node: '>=8'} 716 + 717 + ansi-regex@6.1.0: 718 + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 719 + engines: {node: '>=12'} 720 + 721 + ansi-styles@3.2.1: 722 + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 723 + engines: {node: '>=4'} 724 + 725 + ansi-styles@4.3.0: 726 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 727 + engines: {node: '>=8'} 728 + 729 + ansi-styles@5.2.0: 730 + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 731 + engines: {node: '>=10'} 732 + 733 + ansi-styles@6.2.1: 734 + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 735 + engines: {node: '>=12'} 736 + 737 + any-promise@1.3.0: 738 + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 739 + 740 + argparse@1.0.10: 741 + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 742 + 743 + argparse@2.0.1: 744 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 745 + 746 + array-buffer-byte-length@1.0.2: 747 + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 748 + engines: {node: '>= 0.4'} 749 + 750 + array-union@2.1.0: 751 + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 752 + engines: {node: '>=8'} 753 + 754 + arraybuffer.prototype.slice@1.0.4: 755 + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 756 + engines: {node: '>= 0.4'} 757 + 758 + assertion-error@1.1.0: 759 + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 760 + 761 + async-function@1.0.0: 762 + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} 763 + engines: {node: '>= 0.4'} 764 + 765 + available-typed-arrays@1.0.7: 766 + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 767 + engines: {node: '>= 0.4'} 768 + 769 + balanced-match@1.0.2: 770 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 771 + 772 + better-path-resolve@1.0.0: 773 + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 774 + engines: {node: '>=4'} 775 + 776 + brace-expansion@1.1.11: 777 + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 778 + 779 + brace-expansion@2.0.1: 780 + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 781 + 782 + braces@3.0.3: 783 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 784 + engines: {node: '>=8'} 785 + 786 + buble@0.20.0: 787 + resolution: {integrity: sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==} 788 + hasBin: true 789 + 790 + buffer-from@1.1.2: 791 + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 792 + 793 + cac@6.7.14: 794 + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 795 + engines: {node: '>=8'} 796 + 797 + call-bind-apply-helpers@1.0.2: 798 + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 799 + engines: {node: '>= 0.4'} 800 + 801 + call-bind@1.0.8: 802 + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 803 + engines: {node: '>= 0.4'} 804 + 805 + call-bound@1.0.4: 806 + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 807 + engines: {node: '>= 0.4'} 808 + 809 + callbag-from-iter@1.3.0: 810 + resolution: {integrity: sha512-iBc6O6DYDWQBjlOZzdU/SbJofK0pN3TjNWC4fDIQePBk5FWCZKVll/coXiVU6gpwbBaS0Om/d/PVbVK8Ki17Ew==} 811 + 812 + callbag-iterate@1.0.0: 813 + resolution: {integrity: sha512-bynCbDuqGZkj1mXAhGr8jMf8Vhifps+G+pF3xlcz3jcaZLNXHghVjValnJtBTg2N74cyl347UzagJ8niJpyF6Q==} 814 + 815 + callbag-take@1.5.0: 816 + resolution: {integrity: sha512-8aOxp+gzfVQtDe+tk9PhKbC9QR9Vap4KFA0xccUiXFK9VjIS0fSt/Yi454viPpMhJkhRcx1BsjyF34Cj57W89A==} 817 + 818 + callbag@1.5.1: 819 + resolution: {integrity: sha512-FGpkXYZ018Wpeevhsp7R2iABZuDamg54TaObKI48JBNGzMlkb9bRwS54eR0sgFksQpspsCan4iaaVbAbxm9MIg==} 820 + 821 + callsites@3.1.0: 822 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 823 + engines: {node: '>=6'} 824 + 825 + chai@4.5.0: 826 + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} 827 + engines: {node: '>=4'} 828 + 829 + chalk@2.4.2: 830 + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 831 + engines: {node: '>=4'} 832 + 833 + chalk@4.1.2: 834 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 835 + engines: {node: '>=10'} 836 + 837 + chalk@5.3.0: 838 + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 839 + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 840 + 841 + chardet@2.1.0: 842 + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} 843 + 844 + check-error@1.0.3: 845 + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 846 + 847 + ci-info@2.0.0: 848 + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} 849 + 850 + ci-info@3.9.0: 851 + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 852 + engines: {node: '>=8'} 853 + 854 + cjs-module-lexer@1.4.3: 855 + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} 856 + 857 + cli-cursor@4.0.0: 858 + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} 859 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 860 + 861 + cli-truncate@3.1.0: 862 + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} 863 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 864 + 865 + color-convert@1.9.3: 866 + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 867 + 868 + color-convert@2.0.1: 869 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 870 + engines: {node: '>=7.0.0'} 871 + 872 + color-name@1.1.3: 873 + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 874 + 875 + color-name@1.1.4: 876 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 877 + 878 + colorette@2.0.20: 879 + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 880 + 881 + commander@11.0.0: 882 + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} 883 + engines: {node: '>=16'} 884 + 885 + commander@2.20.3: 886 + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 887 + 888 + commander@4.1.1: 889 + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 890 + engines: {node: '>= 6'} 891 + 892 + commander@6.2.1: 893 + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} 894 + engines: {node: '>= 6'} 895 + 896 + commondir@1.0.1: 897 + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 898 + 899 + compare-versions@3.6.0: 900 + resolution: {integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==} 901 + 902 + concat-map@0.0.1: 903 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 904 + 905 + confbox@0.1.8: 906 + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 907 + 908 + cosmiconfig@7.1.0: 909 + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} 910 + engines: {node: '>=10'} 911 + 912 + cross-spawn@6.0.6: 913 + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} 914 + engines: {node: '>=4.8'} 915 + 916 + cross-spawn@7.0.6: 917 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 918 + engines: {node: '>= 8'} 919 + 920 + data-view-buffer@1.0.2: 921 + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 922 + engines: {node: '>= 0.4'} 923 + 924 + data-view-byte-length@1.0.2: 925 + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 926 + engines: {node: '>= 0.4'} 927 + 928 + data-view-byte-offset@1.0.1: 929 + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 930 + engines: {node: '>= 0.4'} 931 + 932 + dataloader@1.4.0: 933 + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} 934 + 935 + debug@4.3.4: 936 + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 937 + engines: {node: '>=6.0'} 938 + peerDependencies: 939 + supports-color: '*' 940 + peerDependenciesMeta: 941 + supports-color: 942 + optional: true 943 + 944 + debug@4.4.0: 945 + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 946 + engines: {node: '>=6.0'} 947 + peerDependencies: 948 + supports-color: '*' 949 + peerDependenciesMeta: 950 + supports-color: 951 + optional: true 952 + 953 + deep-eql@4.1.4: 954 + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} 955 + engines: {node: '>=6'} 956 + 957 + deep-is@0.1.4: 958 + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 959 + 960 + deepmerge@4.3.1: 961 + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 962 + engines: {node: '>=0.10.0'} 963 + 964 + define-data-property@1.1.4: 965 + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 966 + engines: {node: '>= 0.4'} 967 + 968 + define-properties@1.2.1: 969 + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 970 + engines: {node: '>= 0.4'} 971 + 972 + detect-indent@6.1.0: 973 + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 974 + engines: {node: '>=8'} 975 + 976 + diff-sequences@29.6.3: 977 + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 978 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 979 + 980 + dir-glob@3.0.1: 981 + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 982 + engines: {node: '>=8'} 983 + 984 + doctrine@3.0.0: 985 + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 986 + engines: {node: '>=6.0.0'} 987 + 988 + dotenv@16.4.7: 989 + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} 990 + engines: {node: '>=12'} 991 + 992 + dunder-proto@1.0.1: 993 + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 994 + engines: {node: '>= 0.4'} 995 + 996 + eastasianwidth@0.2.0: 997 + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 998 + 999 + emoji-regex@8.0.0: 1000 + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1001 + 1002 + emoji-regex@9.2.2: 1003 + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1004 + 1005 + enquirer@2.4.1: 1006 + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 1007 + engines: {node: '>=8.6'} 1008 + 1009 + error-ex@1.3.2: 1010 + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1011 + 1012 + es-abstract@1.23.9: 1013 + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} 1014 + engines: {node: '>= 0.4'} 1015 + 1016 + es-define-property@1.0.1: 1017 + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 1018 + engines: {node: '>= 0.4'} 1019 + 1020 + es-errors@1.3.0: 1021 + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1022 + engines: {node: '>= 0.4'} 1023 + 1024 + es-object-atoms@1.1.1: 1025 + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 1026 + engines: {node: '>= 0.4'} 1027 + 1028 + es-set-tostringtag@2.1.0: 1029 + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 1030 + engines: {node: '>= 0.4'} 1031 + 1032 + es-to-primitive@1.3.0: 1033 + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 1034 + engines: {node: '>= 0.4'} 1035 + 1036 + esbuild@0.21.5: 1037 + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 1038 + engines: {node: '>=12'} 1039 + hasBin: true 1040 + 1041 + escape-string-regexp@1.0.5: 1042 + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1043 + engines: {node: '>=0.8.0'} 1044 + 1045 + escape-string-regexp@4.0.0: 1046 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1047 + engines: {node: '>=10'} 1048 + 1049 + eslint-config-prettier@8.10.0: 1050 + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} 1051 + hasBin: true 1052 + peerDependencies: 1053 + eslint: '>=7.0.0' 1054 + 1055 + eslint-plugin-prettier@4.2.1: 1056 + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 1057 + engines: {node: '>=12.0.0'} 1058 + peerDependencies: 1059 + eslint: '>=7.28.0' 1060 + eslint-config-prettier: '*' 1061 + prettier: '>=2.0.0' 1062 + peerDependenciesMeta: 1063 + eslint-config-prettier: 1064 + optional: true 1065 + 1066 + eslint-plugin-tsdoc@0.2.17: 1067 + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} 1068 + 1069 + eslint-scope@5.1.1: 1070 + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1071 + engines: {node: '>=8.0.0'} 1072 + 1073 + eslint-scope@7.2.2: 1074 + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1075 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1076 + 1077 + eslint-visitor-keys@3.4.3: 1078 + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1079 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1080 + 1081 + eslint@8.57.1: 1082 + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} 1083 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1084 + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. 1085 + hasBin: true 1086 + 1087 + espree@9.6.1: 1088 + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1089 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1090 + 1091 + esprima@4.0.1: 1092 + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1093 + engines: {node: '>=4'} 1094 + hasBin: true 1095 + 1096 + esquery@1.6.0: 1097 + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1098 + engines: {node: '>=0.10'} 1099 + 1100 + esrecurse@4.3.0: 1101 + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1102 + engines: {node: '>=4.0'} 1103 + 1104 + estraverse@4.3.0: 1105 + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1106 + engines: {node: '>=4.0'} 1107 + 1108 + estraverse@5.3.0: 1109 + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1110 + engines: {node: '>=4.0'} 1111 + 1112 + estree-walker@2.0.2: 1113 + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1114 + 1115 + estree-walker@3.0.3: 1116 + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1117 + 1118 + esutils@2.0.3: 1119 + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1120 + engines: {node: '>=0.10.0'} 1121 + 1122 + eventemitter3@5.0.1: 1123 + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 1124 + 1125 + execa@7.2.0: 1126 + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} 1127 + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} 1128 + 1129 + execa@8.0.1: 1130 + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1131 + engines: {node: '>=16.17'} 1132 + 1133 + extendable-error@0.1.7: 1134 + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 1135 + 1136 + fast-deep-equal@3.1.3: 1137 + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1138 + 1139 + fast-diff@1.3.0: 1140 + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1141 + 1142 + fast-glob@3.3.3: 1143 + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1144 + engines: {node: '>=8.6.0'} 1145 + 1146 + fast-json-stable-stringify@2.1.0: 1147 + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1148 + 1149 + fast-levenshtein@2.0.6: 1150 + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1151 + 1152 + fastq@1.19.1: 1153 + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1154 + 1155 + file-entry-cache@6.0.1: 1156 + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1157 + engines: {node: ^10.12.0 || >=12.0.0} 1158 + 1159 + fill-range@7.1.1: 1160 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1161 + engines: {node: '>=8'} 1162 + 1163 + find-up@4.1.0: 1164 + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1165 + engines: {node: '>=8'} 1166 + 1167 + find-up@5.0.0: 1168 + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1169 + engines: {node: '>=10'} 1170 + 1171 + find-versions@4.0.0: 1172 + resolution: {integrity: sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==} 1173 + engines: {node: '>=10'} 1174 + 1175 + flat-cache@3.2.0: 1176 + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1177 + engines: {node: ^10.12.0 || >=12.0.0} 1178 + 1179 + flatted@3.3.3: 1180 + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1181 + 1182 + flowgen@1.21.0: 1183 + resolution: {integrity: sha512-pFNFFyMLRmW6njhOIm5TrbGUDTv64aujmys2KrkRE2NYD8sXwJUyicQRwU5SPRBRJnFSD/FNlnHo2NnHI5eJSw==} 1184 + hasBin: true 1185 + 1186 + for-each@0.3.5: 1187 + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 1188 + engines: {node: '>= 0.4'} 1189 + 1190 + foreground-child@3.3.1: 1191 + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 1192 + engines: {node: '>=14'} 1193 + 1194 + fs-extra@7.0.1: 1195 + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 1196 + engines: {node: '>=6 <7 || >=8'} 1197 + 1198 + fs-extra@8.1.0: 1199 + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 1200 + engines: {node: '>=6 <7 || >=8'} 1201 + 1202 + fs.realpath@1.0.0: 1203 + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1204 + 1205 + fsevents@2.3.3: 1206 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1207 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1208 + os: [darwin] 1209 + 1210 + function-bind@1.1.2: 1211 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1212 + 1213 + function.prototype.name@1.1.8: 1214 + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 1215 + engines: {node: '>= 0.4'} 1216 + 1217 + functions-have-names@1.2.3: 1218 + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1219 + 1220 + get-func-name@2.0.2: 1221 + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1222 + 1223 + get-intrinsic@1.3.0: 1224 + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 1225 + engines: {node: '>= 0.4'} 1226 + 1227 + get-proto@1.0.1: 1228 + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 1229 + engines: {node: '>= 0.4'} 1230 + 1231 + get-stream@6.0.1: 1232 + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1233 + engines: {node: '>=10'} 1234 + 1235 + get-stream@8.0.1: 1236 + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1237 + engines: {node: '>=16'} 1238 + 1239 + get-symbol-description@1.1.0: 1240 + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 1241 + engines: {node: '>= 0.4'} 1242 + 1243 + glob-parent@5.1.2: 1244 + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1245 + engines: {node: '>= 6'} 1246 + 1247 + glob-parent@6.0.2: 1248 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1249 + engines: {node: '>=10.13.0'} 1250 + 1251 + glob@10.4.5: 1252 + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 1253 + hasBin: true 1254 + 1255 + glob@7.2.3: 1256 + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1257 + deprecated: Glob versions prior to v9 are no longer supported 1258 + 1259 + glob@8.1.0: 1260 + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 1261 + engines: {node: '>=12'} 1262 + deprecated: Glob versions prior to v9 are no longer supported 1263 + 1264 + globals@13.24.0: 1265 + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1266 + engines: {node: '>=8'} 1267 + 1268 + globalthis@1.0.4: 1269 + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 1270 + engines: {node: '>= 0.4'} 1271 + 1272 + globby@11.1.0: 1273 + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1274 + engines: {node: '>=10'} 1275 + 1276 + gopd@1.2.0: 1277 + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 1278 + engines: {node: '>= 0.4'} 1279 + 1280 + graceful-fs@4.2.11: 1281 + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1282 + 1283 + graphemer@1.4.0: 1284 + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1285 + 1286 + has-bigints@1.1.0: 1287 + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 1288 + engines: {node: '>= 0.4'} 1289 + 1290 + has-flag@3.0.0: 1291 + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1292 + engines: {node: '>=4'} 1293 + 1294 + has-flag@4.0.0: 1295 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1296 + engines: {node: '>=8'} 1297 + 1298 + has-property-descriptors@1.0.2: 1299 + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1300 + 1301 + has-proto@1.2.0: 1302 + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 1303 + engines: {node: '>= 0.4'} 1304 + 1305 + has-symbols@1.1.0: 1306 + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 1307 + engines: {node: '>= 0.4'} 1308 + 1309 + has-tostringtag@1.0.2: 1310 + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1311 + engines: {node: '>= 0.4'} 1312 + 1313 + hasown@2.0.2: 1314 + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1315 + engines: {node: '>= 0.4'} 1316 + 1317 + hosted-git-info@2.8.9: 1318 + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1319 + 1320 + human-id@4.1.1: 1321 + resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} 1322 + hasBin: true 1323 + 1324 + human-signals@4.3.1: 1325 + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} 1326 + engines: {node: '>=14.18.0'} 1327 + 1328 + human-signals@5.0.0: 1329 + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1330 + engines: {node: '>=16.17.0'} 1331 + 1332 + husky-v4@4.3.8: 1333 + resolution: {integrity: sha512-M7A9u/t6BnT/qbDzKb7SdXhr8qLTGTkqZL6YLDDM20jfCdmpIMEuO384LvYXSBcgv50oIgNWI/IaO3g4A4ShjA==} 1334 + engines: {node: '>=10'} 1335 + hasBin: true 1336 + 1337 + iconv-lite@0.6.3: 1338 + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1339 + engines: {node: '>=0.10.0'} 1340 + 1341 + ignore@5.3.2: 1342 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1343 + engines: {node: '>= 4'} 1344 + 1345 + import-fresh@3.3.1: 1346 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1347 + engines: {node: '>=6'} 1348 + 1349 + imurmurhash@0.1.4: 1350 + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1351 + engines: {node: '>=0.8.19'} 1352 + 1353 + inflight@1.0.6: 1354 + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1355 + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 1356 + 1357 + inherits@2.0.4: 1358 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1359 + 1360 + internal-slot@1.1.0: 1361 + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 1362 + engines: {node: '>= 0.4'} 1363 + 1364 + interpret@1.4.0: 1365 + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} 1366 + engines: {node: '>= 0.10'} 1367 + 1368 + is-array-buffer@3.0.5: 1369 + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 1370 + engines: {node: '>= 0.4'} 1371 + 1372 + is-arrayish@0.2.1: 1373 + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1374 + 1375 + is-async-function@2.1.1: 1376 + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} 1377 + engines: {node: '>= 0.4'} 1378 + 1379 + is-bigint@1.1.0: 1380 + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 1381 + engines: {node: '>= 0.4'} 1382 + 1383 + is-boolean-object@1.2.2: 1384 + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} 1385 + engines: {node: '>= 0.4'} 1386 + 1387 + is-callable@1.2.7: 1388 + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1389 + engines: {node: '>= 0.4'} 1390 + 1391 + is-core-module@2.16.1: 1392 + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1393 + engines: {node: '>= 0.4'} 1394 + 1395 + is-data-view@1.0.2: 1396 + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 1397 + engines: {node: '>= 0.4'} 1398 + 1399 + is-date-object@1.1.0: 1400 + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 1401 + engines: {node: '>= 0.4'} 1402 + 1403 + is-extglob@2.1.1: 1404 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1405 + engines: {node: '>=0.10.0'} 1406 + 1407 + is-finalizationregistry@1.1.1: 1408 + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 1409 + engines: {node: '>= 0.4'} 1410 + 1411 + is-fullwidth-code-point@3.0.0: 1412 + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1413 + engines: {node: '>=8'} 1414 + 1415 + is-fullwidth-code-point@4.0.0: 1416 + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 1417 + engines: {node: '>=12'} 1418 + 1419 + is-generator-function@1.1.0: 1420 + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 1421 + engines: {node: '>= 0.4'} 1422 + 1423 + is-glob@4.0.3: 1424 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1425 + engines: {node: '>=0.10.0'} 1426 + 1427 + is-map@2.0.3: 1428 + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1429 + engines: {node: '>= 0.4'} 1430 + 1431 + is-module@1.0.0: 1432 + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 1433 + 1434 + is-number-object@1.1.1: 1435 + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 1436 + engines: {node: '>= 0.4'} 1437 + 1438 + is-number@7.0.0: 1439 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1440 + engines: {node: '>=0.12.0'} 1441 + 1442 + is-path-inside@3.0.3: 1443 + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1444 + engines: {node: '>=8'} 1445 + 1446 + is-reference@1.2.1: 1447 + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 1448 + 1449 + is-regex@1.2.1: 1450 + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 1451 + engines: {node: '>= 0.4'} 1452 + 1453 + is-set@2.0.3: 1454 + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1455 + engines: {node: '>= 0.4'} 1456 + 1457 + is-shared-array-buffer@1.0.4: 1458 + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 1459 + engines: {node: '>= 0.4'} 1460 + 1461 + is-stream@3.0.0: 1462 + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1463 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1464 + 1465 + is-string@1.1.1: 1466 + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 1467 + engines: {node: '>= 0.4'} 1468 + 1469 + is-subdir@1.2.0: 1470 + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 1471 + engines: {node: '>=4'} 1472 + 1473 + is-symbol@1.1.1: 1474 + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 1475 + engines: {node: '>= 0.4'} 1476 + 1477 + is-typed-array@1.1.15: 1478 + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 1479 + engines: {node: '>= 0.4'} 1480 + 1481 + is-weakmap@2.0.2: 1482 + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1483 + engines: {node: '>= 0.4'} 1484 + 1485 + is-weakref@1.1.1: 1486 + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} 1487 + engines: {node: '>= 0.4'} 1488 + 1489 + is-weakset@2.0.4: 1490 + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 1491 + engines: {node: '>= 0.4'} 1492 + 1493 + is-windows@1.0.2: 1494 + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1495 + engines: {node: '>=0.10.0'} 1496 + 1497 + isarray@2.0.5: 1498 + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1499 + 1500 + isexe@2.0.0: 1501 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1502 + 1503 + jackspeak@3.4.3: 1504 + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1505 + 1506 + jju@1.4.0: 1507 + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} 1508 + 1509 + js-tokens@4.0.0: 1510 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1511 + 1512 + js-tokens@9.0.1: 1513 + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 1514 + 1515 + js-yaml@3.14.1: 1516 + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1517 + hasBin: true 1518 + 1519 + js-yaml@4.1.0: 1520 + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1521 + hasBin: true 1522 + 1523 + jsesc@0.5.0: 1524 + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 1525 + hasBin: true 1526 + 1527 + json-buffer@3.0.1: 1528 + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1529 + 1530 + json-parse-better-errors@1.0.2: 1531 + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 1532 + 1533 + json-parse-even-better-errors@2.3.1: 1534 + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1535 + 1536 + json-schema-traverse@0.4.1: 1537 + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1538 + 1539 + json-stable-stringify-without-jsonify@1.0.1: 1540 + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1541 + 1542 + jsonfile@4.0.0: 1543 + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1544 + 1545 + keyv@4.5.4: 1546 + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1547 + 1548 + levn@0.4.1: 1549 + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1550 + engines: {node: '>= 0.8.0'} 1551 + 1552 + lilconfig@2.1.0: 1553 + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1554 + engines: {node: '>=10'} 1555 + 1556 + lines-and-columns@1.2.4: 1557 + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1558 + 1559 + lint-staged@13.3.0: 1560 + resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} 1561 + engines: {node: ^16.14.0 || >=18.0.0} 1562 + hasBin: true 1563 + 1564 + listr2@6.6.1: 1565 + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} 1566 + engines: {node: '>=16.0.0'} 1567 + peerDependencies: 1568 + enquirer: '>= 2.3.0 < 3' 1569 + peerDependenciesMeta: 1570 + enquirer: 1571 + optional: true 1572 + 1573 + load-json-file@4.0.0: 1574 + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} 1575 + engines: {node: '>=4'} 1576 + 1577 + local-pkg@0.5.1: 1578 + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} 1579 + engines: {node: '>=14'} 1580 + 1581 + locate-path@5.0.0: 1582 + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1583 + engines: {node: '>=8'} 1584 + 1585 + locate-path@6.0.0: 1586 + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1587 + engines: {node: '>=10'} 1588 + 1589 + lodash.merge@4.6.2: 1590 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1591 + 1592 + lodash.startcase@4.4.0: 1593 + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1594 + 1595 + lodash@4.17.21: 1596 + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1597 + 1598 + log-update@5.0.1: 1599 + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} 1600 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1601 + 1602 + loupe@2.3.7: 1603 + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1604 + 1605 + lru-cache@10.4.3: 1606 + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1607 + 1608 + magic-string@0.25.9: 1609 + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1610 + 1611 + magic-string@0.27.0: 1612 + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 1613 + engines: {node: '>=12'} 1614 + 1615 + magic-string@0.30.17: 1616 + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 1617 + 1618 + math-intrinsics@1.1.0: 1619 + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1620 + engines: {node: '>= 0.4'} 1621 + 1622 + memorystream@0.3.1: 1623 + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} 1624 + engines: {node: '>= 0.10.0'} 1625 + 1626 + merge-stream@2.0.0: 1627 + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1628 + 1629 + merge2@1.4.1: 1630 + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1631 + engines: {node: '>= 8'} 1632 + 1633 + micromatch@4.0.5: 1634 + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1635 + engines: {node: '>=8.6'} 1636 + 1637 + micromatch@4.0.8: 1638 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1639 + engines: {node: '>=8.6'} 1640 + 1641 + mimic-fn@2.1.0: 1642 + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1643 + engines: {node: '>=6'} 1644 + 1645 + mimic-fn@4.0.0: 1646 + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1647 + engines: {node: '>=12'} 1648 + 1649 + minimatch@3.1.2: 1650 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1651 + 1652 + minimatch@5.1.6: 1653 + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1654 + engines: {node: '>=10'} 1655 + 1656 + minimatch@9.0.5: 1657 + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1658 + engines: {node: '>=16 || 14 >=14.17'} 1659 + 1660 + minimist@1.2.8: 1661 + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1662 + 1663 + minipass@7.1.2: 1664 + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1665 + engines: {node: '>=16 || 14 >=14.17'} 1666 + 1667 + mlly@1.7.4: 1668 + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} 1669 + 1670 + mri@1.2.0: 1671 + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1672 + engines: {node: '>=4'} 1673 + 1674 + ms@2.1.2: 1675 + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1676 + 1677 + ms@2.1.3: 1678 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1679 + 1680 + mz@2.7.0: 1681 + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1682 + 1683 + nanoid@3.3.8: 1684 + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 1685 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1686 + hasBin: true 1687 + 1688 + natural-compare-lite@1.4.0: 1689 + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 1690 + 1691 + natural-compare@1.4.0: 1692 + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1693 + 1694 + nice-try@1.0.5: 1695 + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} 1696 + 1697 + node-fetch@2.7.0: 1698 + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1699 + engines: {node: 4.x || >=6.0.0} 1700 + peerDependencies: 1701 + encoding: ^0.1.0 1702 + peerDependenciesMeta: 1703 + encoding: 1704 + optional: true 1705 + 1706 + normalize-package-data@2.5.0: 1707 + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1708 + 1709 + npm-run-all@4.1.5: 1710 + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} 1711 + engines: {node: '>= 4'} 1712 + hasBin: true 1713 + 1714 + npm-run-path@5.3.0: 1715 + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 1716 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1717 + 1718 + object-assign@4.1.1: 1719 + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1720 + engines: {node: '>=0.10.0'} 1721 + 1722 + object-inspect@1.13.4: 1723 + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1724 + engines: {node: '>= 0.4'} 1725 + 1726 + object-keys@1.1.1: 1727 + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1728 + engines: {node: '>= 0.4'} 1729 + 1730 + object.assign@4.1.7: 1731 + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1732 + engines: {node: '>= 0.4'} 1733 + 1734 + once@1.4.0: 1735 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1736 + 1737 + onetime@5.1.2: 1738 + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1739 + engines: {node: '>=6'} 1740 + 1741 + onetime@6.0.0: 1742 + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1743 + engines: {node: '>=12'} 1744 + 1745 + opencollective-postinstall@2.0.3: 1746 + resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} 1747 + hasBin: true 1748 + 1749 + optionator@0.9.4: 1750 + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1751 + engines: {node: '>= 0.8.0'} 1752 + 1753 + outdent@0.5.0: 1754 + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 1755 + 1756 + own-keys@1.0.1: 1757 + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1758 + engines: {node: '>= 0.4'} 1759 + 1760 + p-filter@2.1.0: 1761 + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1762 + engines: {node: '>=8'} 1763 + 1764 + p-limit@2.3.0: 1765 + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1766 + engines: {node: '>=6'} 1767 + 1768 + p-limit@3.1.0: 1769 + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1770 + engines: {node: '>=10'} 1771 + 1772 + p-limit@5.0.0: 1773 + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 1774 + engines: {node: '>=18'} 1775 + 1776 + p-locate@4.1.0: 1777 + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1778 + engines: {node: '>=8'} 1779 + 1780 + p-locate@5.0.0: 1781 + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1782 + engines: {node: '>=10'} 1783 + 1784 + p-map@2.1.0: 1785 + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1786 + engines: {node: '>=6'} 1787 + 1788 + p-try@2.2.0: 1789 + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1790 + engines: {node: '>=6'} 1791 + 1792 + package-json-from-dist@1.0.1: 1793 + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1794 + 1795 + package-manager-detector@0.2.11: 1796 + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} 1797 + 1798 + parent-module@1.0.1: 1799 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1800 + engines: {node: '>=6'} 1801 + 1802 + parse-json@4.0.0: 1803 + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} 1804 + engines: {node: '>=4'} 1805 + 1806 + parse-json@5.2.0: 1807 + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1808 + engines: {node: '>=8'} 1809 + 1810 + path-exists@4.0.0: 1811 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1812 + engines: {node: '>=8'} 1813 + 1814 + path-is-absolute@1.0.1: 1815 + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1816 + engines: {node: '>=0.10.0'} 1817 + 1818 + path-key@2.0.1: 1819 + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 1820 + engines: {node: '>=4'} 1821 + 1822 + path-key@3.1.1: 1823 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1824 + engines: {node: '>=8'} 1825 + 1826 + path-key@4.0.0: 1827 + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1828 + engines: {node: '>=12'} 1829 + 1830 + path-parse@1.0.7: 1831 + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1832 + 1833 + path-scurry@1.11.1: 1834 + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1835 + engines: {node: '>=16 || 14 >=14.18'} 1836 + 1837 + path-type@3.0.0: 1838 + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} 1839 + engines: {node: '>=4'} 1840 + 1841 + path-type@4.0.0: 1842 + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1843 + engines: {node: '>=8'} 1844 + 1845 + pathe@1.1.2: 1846 + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1847 + 1848 + pathe@2.0.3: 1849 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1850 + 1851 + pathval@1.1.1: 1852 + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1853 + 1854 + picocolors@1.1.1: 1855 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1856 + 1857 + picomatch@2.3.1: 1858 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1859 + engines: {node: '>=8.6'} 1860 + 1861 + picomatch@4.0.2: 1862 + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1863 + engines: {node: '>=12'} 1864 + 1865 + pidtree@0.3.1: 1866 + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} 1867 + engines: {node: '>=0.10'} 1868 + hasBin: true 1869 + 1870 + pidtree@0.6.0: 1871 + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} 1872 + engines: {node: '>=0.10'} 1873 + hasBin: true 1874 + 1875 + pify@3.0.0: 1876 + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} 1877 + engines: {node: '>=4'} 1878 + 1879 + pify@4.0.1: 1880 + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1881 + engines: {node: '>=6'} 1882 + 1883 + pirates@4.0.6: 1884 + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1885 + engines: {node: '>= 6'} 1886 + 1887 + pkg-dir@5.0.0: 1888 + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} 1889 + engines: {node: '>=10'} 1890 + 1891 + pkg-types@1.3.1: 1892 + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 1893 + 1894 + please-upgrade-node@3.2.0: 1895 + resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} 1896 + 1897 + possible-typed-array-names@1.1.0: 1898 + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1899 + engines: {node: '>= 0.4'} 1900 + 1901 + postcss@8.5.3: 1902 + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1903 + engines: {node: ^10 || ^12 || >=14} 1904 + 1905 + prelude-ls@1.2.1: 1906 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1907 + engines: {node: '>= 0.8.0'} 1908 + 1909 + prettier-linter-helpers@1.0.0: 1910 + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1911 + engines: {node: '>=6.0.0'} 1912 + 1913 + prettier@2.8.8: 1914 + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1915 + engines: {node: '>=10.13.0'} 1916 + hasBin: true 1917 + 1918 + pretty-format@29.7.0: 1919 + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1920 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1921 + 1922 + punycode@2.3.1: 1923 + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1924 + engines: {node: '>=6'} 1925 + 1926 + quansync@0.2.8: 1927 + resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} 1928 + 1929 + queue-microtask@1.2.3: 1930 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1931 + 1932 + react-is@18.3.1: 1933 + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1934 + 1935 + read-pkg@3.0.0: 1936 + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} 1937 + engines: {node: '>=4'} 1938 + 1939 + read-yaml-file@1.1.0: 1940 + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 1941 + engines: {node: '>=6'} 1942 + 1943 + rechoir@0.6.2: 1944 + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} 1945 + engines: {node: '>= 0.10'} 1946 + 1947 + reflect.getprototypeof@1.0.10: 1948 + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1949 + engines: {node: '>= 0.4'} 1950 + 1951 + regenerate-unicode-properties@8.2.0: 1952 + resolution: {integrity: sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==} 1953 + engines: {node: '>=4'} 1954 + 1955 + regenerate@1.4.2: 1956 + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} 1957 + 1958 + regenerator-runtime@0.14.1: 1959 + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1960 + 1961 + regexp.prototype.flags@1.5.4: 1962 + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1963 + engines: {node: '>= 0.4'} 1964 + 1965 + regexpu-core@4.5.4: 1966 + resolution: {integrity: sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==} 1967 + engines: {node: '>=4'} 1968 + 1969 + regjsgen@0.5.2: 1970 + resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} 1971 + 1972 + regjsparser@0.6.9: 1973 + resolution: {integrity: sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==} 1974 + hasBin: true 1975 + 1976 + resolve-from@4.0.0: 1977 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1978 + engines: {node: '>=4'} 1979 + 1980 + resolve-from@5.0.0: 1981 + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1982 + engines: {node: '>=8'} 1983 + 1984 + resolve@1.19.0: 1985 + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} 1986 + 1987 + resolve@1.22.10: 1988 + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1989 + engines: {node: '>= 0.4'} 1990 + hasBin: true 1991 + 1992 + restore-cursor@4.0.0: 1993 + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} 1994 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1995 + 1996 + reusify@1.1.0: 1997 + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1998 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1999 + 2000 + rfdc@1.4.1: 2001 + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 2002 + 2003 + rimraf@3.0.2: 2004 + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2005 + deprecated: Rimraf versions prior to v4 are no longer supported 2006 + hasBin: true 2007 + 2008 + rollup-plugin-cjs-check@1.0.3: 2009 + resolution: {integrity: sha512-l8Gn8fm0YsAUuCVPmJ9CjwX5D98xyjc7iBlKfik5RGgXrV35nBwKCb+xbsK2oMrWMIRdLWsfyVUBM153e2zvYg==} 2010 + engines: {node: '>=14.0.0'} 2011 + peerDependencies: 2012 + rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 2013 + 2014 + rollup-plugin-dts@5.3.1: 2015 + resolution: {integrity: sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==} 2016 + engines: {node: '>=v14.21.3'} 2017 + peerDependencies: 2018 + rollup: ^3.0 2019 + typescript: ^4.1 || ^5.0 2020 + 2021 + rollup@3.29.5: 2022 + resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} 2023 + engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2024 + hasBin: true 2025 + 2026 + rollup@4.34.9: 2027 + resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} 2028 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2029 + hasBin: true 2030 + 2031 + run-parallel@1.2.0: 2032 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2033 + 2034 + safe-array-concat@1.1.3: 2035 + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 2036 + engines: {node: '>=0.4'} 2037 + 2038 + safe-push-apply@1.0.0: 2039 + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 2040 + engines: {node: '>= 0.4'} 2041 + 2042 + safe-regex-test@1.1.0: 2043 + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 2044 + engines: {node: '>= 0.4'} 2045 + 2046 + safer-buffer@2.1.2: 2047 + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2048 + 2049 + semver-compare@1.0.0: 2050 + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} 2051 + 2052 + semver-regex@3.1.4: 2053 + resolution: {integrity: sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==} 2054 + engines: {node: '>=8'} 2055 + 2056 + semver@5.7.2: 2057 + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 2058 + hasBin: true 2059 + 2060 + semver@7.7.1: 2061 + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 2062 + engines: {node: '>=10'} 2063 + hasBin: true 2064 + 2065 + set-function-length@1.2.2: 2066 + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 2067 + engines: {node: '>= 0.4'} 2068 + 2069 + set-function-name@2.0.2: 2070 + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 2071 + engines: {node: '>= 0.4'} 2072 + 2073 + set-proto@1.0.0: 2074 + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 2075 + engines: {node: '>= 0.4'} 2076 + 2077 + shebang-command@1.2.0: 2078 + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 2079 + engines: {node: '>=0.10.0'} 2080 + 2081 + shebang-command@2.0.0: 2082 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2083 + engines: {node: '>=8'} 2084 + 2085 + shebang-regex@1.0.0: 2086 + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 2087 + engines: {node: '>=0.10.0'} 2088 + 2089 + shebang-regex@3.0.0: 2090 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2091 + engines: {node: '>=8'} 2092 + 2093 + shell-quote@1.8.2: 2094 + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} 2095 + engines: {node: '>= 0.4'} 2096 + 2097 + shelljs@0.8.5: 2098 + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} 2099 + engines: {node: '>=4'} 2100 + hasBin: true 2101 + 2102 + side-channel-list@1.0.0: 2103 + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 2104 + engines: {node: '>= 0.4'} 2105 + 2106 + side-channel-map@1.0.1: 2107 + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 2108 + engines: {node: '>= 0.4'} 2109 + 2110 + side-channel-weakmap@1.0.2: 2111 + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 2112 + engines: {node: '>= 0.4'} 2113 + 2114 + side-channel@1.1.0: 2115 + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 2116 + engines: {node: '>= 0.4'} 2117 + 2118 + siginfo@2.0.0: 2119 + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 2120 + 2121 + signal-exit@3.0.7: 2122 + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2123 + 2124 + signal-exit@4.1.0: 2125 + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 2126 + engines: {node: '>=14'} 2127 + 2128 + slash@3.0.0: 2129 + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2130 + engines: {node: '>=8'} 2131 + 2132 + slice-ansi@5.0.0: 2133 + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 2134 + engines: {node: '>=12'} 2135 + 2136 + source-map-js@1.2.1: 2137 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 2138 + engines: {node: '>=0.10.0'} 2139 + 2140 + source-map-support@0.5.21: 2141 + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 2142 + 2143 + source-map@0.6.1: 2144 + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2145 + engines: {node: '>=0.10.0'} 2146 + 2147 + sourcemap-codec@1.4.8: 2148 + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 2149 + deprecated: Please use @jridgewell/sourcemap-codec instead 2150 + 2151 + spawndamnit@3.0.1: 2152 + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} 2153 + 2154 + spdx-correct@3.2.0: 2155 + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 2156 + 2157 + spdx-exceptions@2.5.0: 2158 + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 2159 + 2160 + spdx-expression-parse@3.0.1: 2161 + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 2162 + 2163 + spdx-license-ids@3.0.21: 2164 + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} 2165 + 2166 + sprintf-js@1.0.3: 2167 + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2168 + 2169 + stackback@0.0.2: 2170 + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 2171 + 2172 + std-env@3.8.1: 2173 + resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} 2174 + 2175 + string-argv@0.3.2: 2176 + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 2177 + engines: {node: '>=0.6.19'} 2178 + 2179 + string-width@4.2.3: 2180 + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2181 + engines: {node: '>=8'} 2182 + 2183 + string-width@5.1.2: 2184 + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 2185 + engines: {node: '>=12'} 2186 + 2187 + string.prototype.padend@3.1.6: 2188 + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} 2189 + engines: {node: '>= 0.4'} 2190 + 2191 + string.prototype.trim@1.2.10: 2192 + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 2193 + engines: {node: '>= 0.4'} 2194 + 2195 + string.prototype.trimend@1.0.9: 2196 + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 2197 + engines: {node: '>= 0.4'} 2198 + 2199 + string.prototype.trimstart@1.0.8: 2200 + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 2201 + engines: {node: '>= 0.4'} 2202 + 2203 + strip-ansi@6.0.1: 2204 + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2205 + engines: {node: '>=8'} 2206 + 2207 + strip-ansi@7.1.0: 2208 + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 2209 + engines: {node: '>=12'} 2210 + 2211 + strip-bom@3.0.0: 2212 + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2213 + engines: {node: '>=4'} 2214 + 2215 + strip-final-newline@3.0.0: 2216 + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2217 + engines: {node: '>=12'} 2218 + 2219 + strip-json-comments@3.1.1: 2220 + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2221 + engines: {node: '>=8'} 2222 + 2223 + strip-literal@2.1.1: 2224 + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} 2225 + 2226 + sucrase@3.35.0: 2227 + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 2228 + engines: {node: '>=16 || 14 >=14.17'} 2229 + hasBin: true 2230 + 2231 + supports-color@5.5.0: 2232 + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2233 + engines: {node: '>=4'} 2234 + 2235 + supports-color@7.2.0: 2236 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2237 + engines: {node: '>=8'} 2238 + 2239 + supports-preserve-symlinks-flag@1.0.0: 2240 + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2241 + engines: {node: '>= 0.4'} 2242 + 2243 + term-size@2.2.1: 2244 + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 2245 + engines: {node: '>=8'} 2246 + 2247 + terser@5.39.0: 2248 + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} 2249 + engines: {node: '>=10'} 2250 + hasBin: true 2251 + 2252 + text-table@0.2.0: 2253 + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2254 + 2255 + thenify-all@1.6.0: 2256 + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2257 + engines: {node: '>=0.8'} 2258 + 2259 + thenify@3.3.1: 2260 + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2261 + 2262 + tinybench@2.9.0: 2263 + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 2264 + 2265 + tinypool@0.8.4: 2266 + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} 2267 + engines: {node: '>=14.0.0'} 2268 + 2269 + tinyspy@2.2.1: 2270 + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} 2271 + engines: {node: '>=14.0.0'} 2272 + 2273 + to-regex-range@5.0.1: 2274 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2275 + engines: {node: '>=8.0'} 2276 + 2277 + tr46@0.0.3: 2278 + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 2279 + 2280 + ts-interface-checker@0.1.13: 2281 + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2282 + 2283 + tslib@1.14.1: 2284 + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2285 + 2286 + tslib@2.8.1: 2287 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 2288 + 2289 + tsutils@3.21.0: 2290 + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2291 + engines: {node: '>= 6'} 2292 + peerDependencies: 2293 + 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' 2294 + 2295 + type-check@0.4.0: 2296 + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2297 + engines: {node: '>= 0.8.0'} 2298 + 2299 + type-detect@4.1.0: 2300 + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} 2301 + engines: {node: '>=4'} 2302 + 2303 + type-fest@0.20.2: 2304 + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2305 + engines: {node: '>=10'} 2306 + 2307 + type-fest@1.4.0: 2308 + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} 2309 + engines: {node: '>=10'} 2310 + 2311 + typed-array-buffer@1.0.3: 2312 + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 2313 + engines: {node: '>= 0.4'} 2314 + 2315 + typed-array-byte-length@1.0.3: 2316 + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 2317 + engines: {node: '>= 0.4'} 2318 + 2319 + typed-array-byte-offset@1.0.4: 2320 + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 2321 + engines: {node: '>= 0.4'} 2322 + 2323 + typed-array-length@1.0.7: 2324 + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 2325 + engines: {node: '>= 0.4'} 2326 + 2327 + typescript-compiler@1.4.1-2: 2328 + resolution: {integrity: sha512-EMopKmoAEJqA4XXRFGOb7eSBhmQMbBahW6P1Koayeatp0b4AW2q/bBqYWkpG7QVQc9HGQUiS4trx2ZHcnAaZUg==} 2329 + 2330 + typescript@4.4.4: 2331 + resolution: {integrity: sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==} 2332 + engines: {node: '>=4.2.0'} 2333 + hasBin: true 2334 + 2335 + typescript@4.9.5: 2336 + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 2337 + engines: {node: '>=4.2.0'} 2338 + hasBin: true 2339 + 2340 + ufo@1.5.4: 2341 + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 2342 + 2343 + unbox-primitive@1.1.0: 2344 + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 2345 + engines: {node: '>= 0.4'} 2346 + 2347 + undici-types@6.20.0: 2348 + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 2349 + 2350 + unicode-canonical-property-names-ecmascript@1.0.4: 2351 + resolution: {integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==} 2352 + engines: {node: '>=4'} 2353 + 2354 + unicode-match-property-ecmascript@1.0.4: 2355 + resolution: {integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==} 2356 + engines: {node: '>=4'} 2357 + 2358 + unicode-match-property-value-ecmascript@1.2.0: 2359 + resolution: {integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==} 2360 + engines: {node: '>=4'} 2361 + 2362 + unicode-property-aliases-ecmascript@1.1.0: 2363 + resolution: {integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==} 2364 + engines: {node: '>=4'} 2365 + 2366 + universalify@0.1.2: 2367 + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 2368 + engines: {node: '>= 4.0.0'} 2369 + 2370 + uri-js@4.4.1: 2371 + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2372 + 2373 + validate-npm-package-license@3.0.4: 2374 + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 2375 + 2376 + vite-node@1.6.1: 2377 + resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} 2378 + engines: {node: ^18.0.0 || >=20.0.0} 2379 + hasBin: true 2380 + 2381 + vite@5.4.14: 2382 + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} 2383 + engines: {node: ^18.0.0 || >=20.0.0} 2384 + hasBin: true 2385 + peerDependencies: 2386 + '@types/node': ^18.0.0 || >=20.0.0 2387 + less: '*' 2388 + lightningcss: ^1.21.0 2389 + sass: '*' 2390 + sass-embedded: '*' 2391 + stylus: '*' 2392 + sugarss: '*' 2393 + terser: ^5.4.0 2394 + peerDependenciesMeta: 2395 + '@types/node': 2396 + optional: true 2397 + less: 2398 + optional: true 2399 + lightningcss: 2400 + optional: true 2401 + sass: 2402 + optional: true 2403 + sass-embedded: 2404 + optional: true 2405 + stylus: 2406 + optional: true 2407 + sugarss: 2408 + optional: true 2409 + terser: 2410 + optional: true 2411 + 2412 + vitest@1.6.1: 2413 + resolution: {integrity: sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==} 2414 + engines: {node: ^18.0.0 || >=20.0.0} 2415 + hasBin: true 2416 + peerDependencies: 2417 + '@edge-runtime/vm': '*' 2418 + '@types/node': ^18.0.0 || >=20.0.0 2419 + '@vitest/browser': 1.6.1 2420 + '@vitest/ui': 1.6.1 2421 + happy-dom: '*' 2422 + jsdom: '*' 2423 + peerDependenciesMeta: 2424 + '@edge-runtime/vm': 2425 + optional: true 2426 + '@types/node': 2427 + optional: true 2428 + '@vitest/browser': 2429 + optional: true 2430 + '@vitest/ui': 2431 + optional: true 2432 + happy-dom: 2433 + optional: true 2434 + jsdom: 2435 + optional: true 2436 + 2437 + webidl-conversions@3.0.1: 2438 + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 2439 + 2440 + whatwg-url@5.0.0: 2441 + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 2442 + 2443 + which-boxed-primitive@1.1.1: 2444 + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 2445 + engines: {node: '>= 0.4'} 2446 + 2447 + which-builtin-type@1.2.1: 2448 + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 2449 + engines: {node: '>= 0.4'} 2450 + 2451 + which-collection@1.0.2: 2452 + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 2453 + engines: {node: '>= 0.4'} 2454 + 2455 + which-pm-runs@1.1.0: 2456 + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} 2457 + engines: {node: '>=4'} 2458 + 2459 + which-typed-array@1.1.18: 2460 + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} 2461 + engines: {node: '>= 0.4'} 2462 + 2463 + which@1.3.1: 2464 + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 2465 + hasBin: true 2466 + 2467 + which@2.0.2: 2468 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2469 + engines: {node: '>= 8'} 2470 + hasBin: true 2471 + 2472 + why-is-node-running@2.3.0: 2473 + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 2474 + engines: {node: '>=8'} 2475 + hasBin: true 2476 + 2477 + word-wrap@1.2.5: 2478 + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2479 + engines: {node: '>=0.10.0'} 2480 + 2481 + wrap-ansi@7.0.0: 2482 + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2483 + engines: {node: '>=10'} 2484 + 2485 + wrap-ansi@8.1.0: 2486 + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2487 + engines: {node: '>=12'} 2488 + 2489 + wrappy@1.0.2: 2490 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2491 + 2492 + yaml@1.10.2: 2493 + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 2494 + engines: {node: '>= 6'} 2495 + 2496 + yaml@2.3.1: 2497 + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} 2498 + engines: {node: '>= 14'} 2499 + 2500 + yocto-queue@0.1.0: 2501 + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2502 + engines: {node: '>=10'} 2503 + 2504 + yocto-queue@1.1.1: 2505 + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} 2506 + engines: {node: '>=12.20'} 2507 + 2508 + zen-observable@0.10.0: 2509 + resolution: {integrity: sha512-iI3lT0iojZhKwT5DaFy2Ce42n3yFcLdFyOh01G7H0flMY60P8MJuVFEoJoNwXlmAyQ45GrjL6AcZmmlv8A5rbw==} 2510 + 2511 + snapshots: 2512 + 2513 + '@babel/code-frame@7.26.2': 2514 + dependencies: 2515 + '@babel/helper-validator-identifier': 7.25.9 2516 + js-tokens: 4.0.0 2517 + picocolors: 1.1.1 2518 + 2519 + '@babel/helper-validator-identifier@7.25.9': {} 2520 + 2521 + '@babel/highlight@7.25.9': 2522 + dependencies: 2523 + '@babel/helper-validator-identifier': 7.25.9 2524 + chalk: 2.4.2 2525 + js-tokens: 4.0.0 2526 + picocolors: 1.1.1 2527 + 2528 + '@babel/runtime@7.26.9': 2529 + dependencies: 2530 + regenerator-runtime: 0.14.1 2531 + 2532 + '@changesets/apply-release-plan@7.0.12': 2533 + dependencies: 2534 + '@changesets/config': 3.1.1 2535 + '@changesets/get-version-range-type': 0.4.0 2536 + '@changesets/git': 3.0.4 2537 + '@changesets/should-skip-package': 0.1.2 2538 + '@changesets/types': 6.1.0 2539 + '@manypkg/get-packages': 1.1.3 2540 + detect-indent: 6.1.0 2541 + fs-extra: 7.0.1 2542 + lodash.startcase: 4.4.0 2543 + outdent: 0.5.0 2544 + prettier: 2.8.8 2545 + resolve-from: 5.0.0 2546 + semver: 7.7.1 2547 + 2548 + '@changesets/assemble-release-plan@6.0.9': 2549 + dependencies: 2550 + '@changesets/errors': 0.2.0 2551 + '@changesets/get-dependents-graph': 2.1.3 2552 + '@changesets/should-skip-package': 0.1.2 2553 + '@changesets/types': 6.1.0 2554 + '@manypkg/get-packages': 1.1.3 2555 + semver: 7.7.1 2556 + 2557 + '@changesets/changelog-git@0.2.1': 2558 + dependencies: 2559 + '@changesets/types': 6.1.0 2560 + 2561 + '@changesets/cli@2.29.6(@types/node@22.13.9)': 2562 + dependencies: 2563 + '@changesets/apply-release-plan': 7.0.12 2564 + '@changesets/assemble-release-plan': 6.0.9 2565 + '@changesets/changelog-git': 0.2.1 2566 + '@changesets/config': 3.1.1 2567 + '@changesets/errors': 0.2.0 2568 + '@changesets/get-dependents-graph': 2.1.3 2569 + '@changesets/get-release-plan': 4.0.13 2570 + '@changesets/git': 3.0.4 2571 + '@changesets/logger': 0.1.1 2572 + '@changesets/pre': 2.0.2 2573 + '@changesets/read': 0.6.5 2574 + '@changesets/should-skip-package': 0.1.2 2575 + '@changesets/types': 6.1.0 2576 + '@changesets/write': 0.4.0 2577 + '@inquirer/external-editor': 1.0.1(@types/node@22.13.9) 2578 + '@manypkg/get-packages': 1.1.3 2579 + ansi-colors: 4.1.3 2580 + ci-info: 3.9.0 2581 + enquirer: 2.4.1 2582 + fs-extra: 7.0.1 2583 + mri: 1.2.0 2584 + p-limit: 2.3.0 2585 + package-manager-detector: 0.2.11 2586 + picocolors: 1.1.1 2587 + resolve-from: 5.0.0 2588 + semver: 7.7.1 2589 + spawndamnit: 3.0.1 2590 + term-size: 2.2.1 2591 + transitivePeerDependencies: 2592 + - '@types/node' 2593 + 2594 + '@changesets/config@3.1.1': 2595 + dependencies: 2596 + '@changesets/errors': 0.2.0 2597 + '@changesets/get-dependents-graph': 2.1.3 2598 + '@changesets/logger': 0.1.1 2599 + '@changesets/types': 6.1.0 2600 + '@manypkg/get-packages': 1.1.3 2601 + fs-extra: 7.0.1 2602 + micromatch: 4.0.8 2603 + 2604 + '@changesets/errors@0.2.0': 2605 + dependencies: 2606 + extendable-error: 0.1.7 2607 + 2608 + '@changesets/get-dependents-graph@2.1.3': 2609 + dependencies: 2610 + '@changesets/types': 6.1.0 2611 + '@manypkg/get-packages': 1.1.3 2612 + picocolors: 1.1.1 2613 + semver: 7.7.1 2614 + 2615 + '@changesets/get-github-info@0.6.0': 2616 + dependencies: 2617 + dataloader: 1.4.0 2618 + node-fetch: 2.7.0 2619 + transitivePeerDependencies: 2620 + - encoding 2621 + 2622 + '@changesets/get-release-plan@4.0.13': 2623 + dependencies: 2624 + '@changesets/assemble-release-plan': 6.0.9 2625 + '@changesets/config': 3.1.1 2626 + '@changesets/pre': 2.0.2 2627 + '@changesets/read': 0.6.5 2628 + '@changesets/types': 6.1.0 2629 + '@manypkg/get-packages': 1.1.3 2630 + 2631 + '@changesets/get-version-range-type@0.4.0': {} 2632 + 2633 + '@changesets/git@3.0.4': 2634 + dependencies: 2635 + '@changesets/errors': 0.2.0 2636 + '@manypkg/get-packages': 1.1.3 2637 + is-subdir: 1.2.0 2638 + micromatch: 4.0.8 2639 + spawndamnit: 3.0.1 2640 + 2641 + '@changesets/logger@0.1.1': 2642 + dependencies: 2643 + picocolors: 1.1.1 2644 + 2645 + '@changesets/parse@0.4.1': 2646 + dependencies: 2647 + '@changesets/types': 6.1.0 2648 + js-yaml: 3.14.1 2649 + 2650 + '@changesets/pre@2.0.2': 2651 + dependencies: 2652 + '@changesets/errors': 0.2.0 2653 + '@changesets/types': 6.1.0 2654 + '@manypkg/get-packages': 1.1.3 2655 + fs-extra: 7.0.1 2656 + 2657 + '@changesets/read@0.6.5': 2658 + dependencies: 2659 + '@changesets/git': 3.0.4 2660 + '@changesets/logger': 0.1.1 2661 + '@changesets/parse': 0.4.1 2662 + '@changesets/types': 6.1.0 2663 + fs-extra: 7.0.1 2664 + p-filter: 2.1.0 2665 + picocolors: 1.1.1 2666 + 2667 + '@changesets/should-skip-package@0.1.2': 2668 + dependencies: 2669 + '@changesets/types': 6.1.0 2670 + '@manypkg/get-packages': 1.1.3 2671 + 2672 + '@changesets/types@4.1.0': {} 2673 + 2674 + '@changesets/types@6.1.0': {} 2675 + 2676 + '@changesets/write@0.4.0': 2677 + dependencies: 2678 + '@changesets/types': 6.1.0 2679 + fs-extra: 7.0.1 2680 + human-id: 4.1.1 2681 + prettier: 2.8.8 2682 + 2683 + '@esbuild/aix-ppc64@0.21.5': 2684 + optional: true 2685 + 2686 + '@esbuild/android-arm64@0.21.5': 2687 + optional: true 2688 + 2689 + '@esbuild/android-arm@0.21.5': 2690 + optional: true 2691 + 2692 + '@esbuild/android-x64@0.21.5': 2693 + optional: true 2694 + 2695 + '@esbuild/darwin-arm64@0.21.5': 2696 + optional: true 2697 + 2698 + '@esbuild/darwin-x64@0.21.5': 2699 + optional: true 2700 + 2701 + '@esbuild/freebsd-arm64@0.21.5': 2702 + optional: true 2703 + 2704 + '@esbuild/freebsd-x64@0.21.5': 2705 + optional: true 2706 + 2707 + '@esbuild/linux-arm64@0.21.5': 2708 + optional: true 2709 + 2710 + '@esbuild/linux-arm@0.21.5': 2711 + optional: true 2712 + 2713 + '@esbuild/linux-ia32@0.21.5': 2714 + optional: true 2715 + 2716 + '@esbuild/linux-loong64@0.21.5': 2717 + optional: true 2718 + 2719 + '@esbuild/linux-mips64el@0.21.5': 2720 + optional: true 2721 + 2722 + '@esbuild/linux-ppc64@0.21.5': 2723 + optional: true 2724 + 2725 + '@esbuild/linux-riscv64@0.21.5': 2726 + optional: true 2727 + 2728 + '@esbuild/linux-s390x@0.21.5': 2729 + optional: true 2730 + 2731 + '@esbuild/linux-x64@0.21.5': 2732 + optional: true 2733 + 2734 + '@esbuild/netbsd-x64@0.21.5': 2735 + optional: true 2736 + 2737 + '@esbuild/openbsd-x64@0.21.5': 2738 + optional: true 2739 + 2740 + '@esbuild/sunos-x64@0.21.5': 2741 + optional: true 2742 + 2743 + '@esbuild/win32-arm64@0.21.5': 2744 + optional: true 2745 + 2746 + '@esbuild/win32-ia32@0.21.5': 2747 + optional: true 2748 + 2749 + '@esbuild/win32-x64@0.21.5': 2750 + optional: true 2751 + 2752 + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': 2753 + dependencies: 2754 + eslint: 8.57.1 2755 + eslint-visitor-keys: 3.4.3 2756 + 2757 + '@eslint-community/regexpp@4.12.1': {} 2758 + 2759 + '@eslint/eslintrc@2.1.4': 2760 + dependencies: 2761 + ajv: 6.12.6 2762 + debug: 4.4.0 2763 + espree: 9.6.1 2764 + globals: 13.24.0 2765 + ignore: 5.3.2 2766 + import-fresh: 3.3.1 2767 + js-yaml: 4.1.0 2768 + minimatch: 3.1.2 2769 + strip-json-comments: 3.1.1 2770 + transitivePeerDependencies: 2771 + - supports-color 2772 + 2773 + '@eslint/js@8.57.1': {} 2774 + 2775 + '@humanwhocodes/config-array@0.13.0': 2776 + dependencies: 2777 + '@humanwhocodes/object-schema': 2.0.3 2778 + debug: 4.4.0 2779 + minimatch: 3.1.2 2780 + transitivePeerDependencies: 2781 + - supports-color 2782 + 2783 + '@humanwhocodes/module-importer@1.0.1': {} 2784 + 2785 + '@humanwhocodes/object-schema@2.0.3': {} 2786 + 2787 + '@inquirer/external-editor@1.0.1(@types/node@22.13.9)': 2788 + dependencies: 2789 + chardet: 2.1.0 2790 + iconv-lite: 0.6.3 2791 + optionalDependencies: 2792 + '@types/node': 22.13.9 2793 + 2794 + '@isaacs/cliui@8.0.2': 2795 + dependencies: 2796 + string-width: 5.1.2 2797 + string-width-cjs: string-width@4.2.3 2798 + strip-ansi: 7.1.0 2799 + strip-ansi-cjs: strip-ansi@6.0.1 2800 + wrap-ansi: 8.1.0 2801 + wrap-ansi-cjs: wrap-ansi@7.0.0 2802 + 2803 + '@jest/schemas@29.6.3': 2804 + dependencies: 2805 + '@sinclair/typebox': 0.27.8 2806 + 2807 + '@jridgewell/gen-mapping@0.3.8': 2808 + dependencies: 2809 + '@jridgewell/set-array': 1.2.1 2810 + '@jridgewell/sourcemap-codec': 1.5.0 2811 + '@jridgewell/trace-mapping': 0.3.25 2812 + 2813 + '@jridgewell/resolve-uri@3.1.2': {} 2814 + 2815 + '@jridgewell/set-array@1.2.1': {} 2816 + 2817 + '@jridgewell/source-map@0.3.6': 2818 + dependencies: 2819 + '@jridgewell/gen-mapping': 0.3.8 2820 + '@jridgewell/trace-mapping': 0.3.25 2821 + 2822 + '@jridgewell/sourcemap-codec@1.5.0': {} 2823 + 2824 + '@jridgewell/trace-mapping@0.3.25': 2825 + dependencies: 2826 + '@jridgewell/resolve-uri': 3.1.2 2827 + '@jridgewell/sourcemap-codec': 1.5.0 2828 + 2829 + '@manypkg/find-root@1.1.0': 2830 + dependencies: 2831 + '@babel/runtime': 7.26.9 2832 + '@types/node': 12.20.55 2833 + find-up: 4.1.0 2834 + fs-extra: 8.1.0 2835 + 2836 + '@manypkg/get-packages@1.1.3': 2837 + dependencies: 2838 + '@babel/runtime': 7.26.9 2839 + '@changesets/types': 4.1.0 2840 + '@manypkg/find-root': 1.1.0 2841 + fs-extra: 8.1.0 2842 + globby: 11.1.0 2843 + read-yaml-file: 1.1.0 2844 + 2845 + '@microsoft/tsdoc-config@0.16.2': 2846 + dependencies: 2847 + '@microsoft/tsdoc': 0.14.2 2848 + ajv: 6.12.6 2849 + jju: 1.4.0 2850 + resolve: 1.19.0 2851 + 2852 + '@microsoft/tsdoc@0.14.2': {} 2853 + 2854 + '@nodelib/fs.scandir@2.1.5': 2855 + dependencies: 2856 + '@nodelib/fs.stat': 2.0.5 2857 + run-parallel: 1.2.0 2858 + 2859 + '@nodelib/fs.stat@2.0.5': {} 2860 + 2861 + '@nodelib/fs.walk@1.2.8': 2862 + dependencies: 2863 + '@nodelib/fs.scandir': 2.1.5 2864 + fastq: 1.19.1 2865 + 2866 + '@pkgjs/parseargs@0.11.0': 2867 + optional: true 2868 + 2869 + '@rollup/plugin-buble@1.0.3(rollup@3.29.5)': 2870 + dependencies: 2871 + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) 2872 + '@types/buble': 0.19.2 2873 + buble: 0.20.0 2874 + optionalDependencies: 2875 + rollup: 3.29.5 2876 + 2877 + '@rollup/plugin-commonjs@23.0.7(rollup@3.29.5)': 2878 + dependencies: 2879 + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) 2880 + commondir: 1.0.1 2881 + estree-walker: 2.0.2 2882 + glob: 8.1.0 2883 + is-reference: 1.2.1 2884 + magic-string: 0.27.0 2885 + optionalDependencies: 2886 + rollup: 3.29.5 2887 + 2888 + '@rollup/plugin-node-resolve@15.3.1(rollup@3.29.5)': 2889 + dependencies: 2890 + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) 2891 + '@types/resolve': 1.20.2 2892 + deepmerge: 4.3.1 2893 + is-module: 1.0.0 2894 + resolve: 1.22.10 2895 + optionalDependencies: 2896 + rollup: 3.29.5 2897 + 2898 + '@rollup/plugin-sucrase@5.0.2(rollup@3.29.5)': 2899 + dependencies: 2900 + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) 2901 + sucrase: 3.35.0 2902 + optionalDependencies: 2903 + rollup: 3.29.5 2904 + 2905 + '@rollup/plugin-terser@0.1.0(rollup@3.29.5)': 2906 + dependencies: 2907 + terser: 5.39.0 2908 + optionalDependencies: 2909 + rollup: 3.29.5 2910 + 2911 + '@rollup/pluginutils@5.1.4(rollup@3.29.5)': 2912 + dependencies: 2913 + '@types/estree': 1.0.6 2914 + estree-walker: 2.0.2 2915 + picomatch: 4.0.2 2916 + optionalDependencies: 2917 + rollup: 3.29.5 2918 + 2919 + '@rollup/rollup-android-arm-eabi@4.34.9': 2920 + optional: true 2921 + 2922 + '@rollup/rollup-android-arm64@4.34.9': 2923 + optional: true 2924 + 2925 + '@rollup/rollup-darwin-arm64@4.34.9': 2926 + optional: true 2927 + 2928 + '@rollup/rollup-darwin-x64@4.34.9': 2929 + optional: true 2930 + 2931 + '@rollup/rollup-freebsd-arm64@4.34.9': 2932 + optional: true 2933 + 2934 + '@rollup/rollup-freebsd-x64@4.34.9': 2935 + optional: true 2936 + 2937 + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': 2938 + optional: true 2939 + 2940 + '@rollup/rollup-linux-arm-musleabihf@4.34.9': 2941 + optional: true 2942 + 2943 + '@rollup/rollup-linux-arm64-gnu@4.34.9': 2944 + optional: true 2945 + 2946 + '@rollup/rollup-linux-arm64-musl@4.34.9': 2947 + optional: true 2948 + 2949 + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': 2950 + optional: true 2951 + 2952 + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': 2953 + optional: true 2954 + 2955 + '@rollup/rollup-linux-riscv64-gnu@4.34.9': 2956 + optional: true 2957 + 2958 + '@rollup/rollup-linux-s390x-gnu@4.34.9': 2959 + optional: true 2960 + 2961 + '@rollup/rollup-linux-x64-gnu@4.34.9': 2962 + optional: true 2963 + 2964 + '@rollup/rollup-linux-x64-musl@4.34.9': 2965 + optional: true 2966 + 2967 + '@rollup/rollup-win32-arm64-msvc@4.34.9': 2968 + optional: true 2969 + 2970 + '@rollup/rollup-win32-ia32-msvc@4.34.9': 2971 + optional: true 2972 + 2973 + '@rollup/rollup-win32-x64-msvc@4.34.9': 2974 + optional: true 2975 + 2976 + '@sinclair/typebox@0.27.8': {} 2977 + 2978 + '@types/buble@0.19.2': 2979 + dependencies: 2980 + magic-string: 0.25.9 2981 + 2982 + '@types/estree@1.0.6': {} 2983 + 2984 + '@types/json-schema@7.0.15': {} 2985 + 2986 + '@types/node@12.20.55': {} 2987 + 2988 + '@types/node@22.13.9': 2989 + dependencies: 2990 + undici-types: 6.20.0 2991 + optional: true 2992 + 2993 + '@types/parse-json@4.0.2': {} 2994 + 2995 + '@types/resolve@1.20.2': {} 2996 + 2997 + '@types/semver@7.5.8': {} 2998 + 2999 + '@types/zen-observable@0.8.7': {} 3000 + 3001 + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)': 3002 + dependencies: 3003 + '@eslint-community/regexpp': 4.12.1 3004 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) 3005 + '@typescript-eslint/scope-manager': 5.62.0 3006 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) 3007 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) 3008 + debug: 4.4.0 3009 + eslint: 8.57.1 3010 + graphemer: 1.4.0 3011 + ignore: 5.3.2 3012 + natural-compare-lite: 1.4.0 3013 + semver: 7.7.1 3014 + tsutils: 3.21.0(typescript@4.9.5) 3015 + optionalDependencies: 3016 + typescript: 4.9.5 3017 + transitivePeerDependencies: 3018 + - supports-color 3019 + 3020 + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5)': 3021 + dependencies: 3022 + '@typescript-eslint/scope-manager': 5.62.0 3023 + '@typescript-eslint/types': 5.62.0 3024 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 3025 + debug: 4.4.0 3026 + eslint: 8.57.1 3027 + optionalDependencies: 3028 + typescript: 4.9.5 3029 + transitivePeerDependencies: 3030 + - supports-color 3031 + 3032 + '@typescript-eslint/scope-manager@5.62.0': 3033 + dependencies: 3034 + '@typescript-eslint/types': 5.62.0 3035 + '@typescript-eslint/visitor-keys': 5.62.0 3036 + 3037 + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': 3038 + dependencies: 3039 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 3040 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@4.9.5) 3041 + debug: 4.4.0 3042 + eslint: 8.57.1 3043 + tsutils: 3.21.0(typescript@4.9.5) 3044 + optionalDependencies: 3045 + typescript: 4.9.5 3046 + transitivePeerDependencies: 3047 + - supports-color 3048 + 3049 + '@typescript-eslint/types@5.62.0': {} 3050 + 3051 + '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': 3052 + dependencies: 3053 + '@typescript-eslint/types': 5.62.0 3054 + '@typescript-eslint/visitor-keys': 5.62.0 3055 + debug: 4.4.0 3056 + globby: 11.1.0 3057 + is-glob: 4.0.3 3058 + semver: 7.7.1 3059 + tsutils: 3.21.0(typescript@4.9.5) 3060 + optionalDependencies: 3061 + typescript: 4.9.5 3062 + transitivePeerDependencies: 3063 + - supports-color 3064 + 3065 + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)': 3066 + dependencies: 3067 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) 3068 + '@types/json-schema': 7.0.15 3069 + '@types/semver': 7.5.8 3070 + '@typescript-eslint/scope-manager': 5.62.0 3071 + '@typescript-eslint/types': 5.62.0 3072 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) 3073 + eslint: 8.57.1 3074 + eslint-scope: 5.1.1 3075 + semver: 7.7.1 3076 + transitivePeerDependencies: 3077 + - supports-color 3078 + - typescript 3079 + 3080 + '@typescript-eslint/visitor-keys@5.62.0': 3081 + dependencies: 3082 + '@typescript-eslint/types': 5.62.0 3083 + eslint-visitor-keys: 3.4.3 3084 + 3085 + '@ungap/structured-clone@1.3.0': {} 3086 + 3087 + '@vitest/expect@1.6.1': 3088 + dependencies: 3089 + '@vitest/spy': 1.6.1 3090 + '@vitest/utils': 1.6.1 3091 + chai: 4.5.0 3092 + 3093 + '@vitest/runner@1.6.1': 3094 + dependencies: 3095 + '@vitest/utils': 1.6.1 3096 + p-limit: 5.0.0 3097 + pathe: 1.1.2 3098 + 3099 + '@vitest/snapshot@1.6.1': 3100 + dependencies: 3101 + magic-string: 0.30.17 3102 + pathe: 1.1.2 3103 + pretty-format: 29.7.0 3104 + 3105 + '@vitest/spy@1.6.1': 3106 + dependencies: 3107 + tinyspy: 2.2.1 3108 + 3109 + '@vitest/utils@1.6.1': 3110 + dependencies: 3111 + diff-sequences: 29.6.3 3112 + estree-walker: 3.0.3 3113 + loupe: 2.3.7 3114 + pretty-format: 29.7.0 3115 + 3116 + acorn-dynamic-import@4.0.0(acorn@6.4.2): 3117 + dependencies: 3118 + acorn: 6.4.2 3119 + 3120 + acorn-jsx@5.3.2(acorn@6.4.2): 3121 + dependencies: 3122 + acorn: 6.4.2 3123 + 3124 + acorn-jsx@5.3.2(acorn@8.14.0): 3125 + dependencies: 3126 + acorn: 8.14.0 3127 + 3128 + acorn-walk@8.3.4: 3129 + dependencies: 3130 + acorn: 8.14.0 3131 + 3132 + acorn@6.4.2: {} 3133 + 3134 + acorn@8.14.0: {} 3135 + 3136 + ajv@6.12.6: 3137 + dependencies: 3138 + fast-deep-equal: 3.1.3 3139 + fast-json-stable-stringify: 2.1.0 3140 + json-schema-traverse: 0.4.1 3141 + uri-js: 4.4.1 3142 + 3143 + ansi-colors@4.1.3: {} 3144 + 3145 + ansi-escapes@5.0.0: 3146 + dependencies: 3147 + type-fest: 1.4.0 3148 + 3149 + ansi-regex@5.0.1: {} 3150 + 3151 + ansi-regex@6.1.0: {} 3152 + 3153 + ansi-styles@3.2.1: 3154 + dependencies: 3155 + color-convert: 1.9.3 3156 + 3157 + ansi-styles@4.3.0: 3158 + dependencies: 3159 + color-convert: 2.0.1 3160 + 3161 + ansi-styles@5.2.0: {} 3162 + 3163 + ansi-styles@6.2.1: {} 3164 + 3165 + any-promise@1.3.0: {} 3166 + 3167 + argparse@1.0.10: 3168 + dependencies: 3169 + sprintf-js: 1.0.3 3170 + 3171 + argparse@2.0.1: {} 3172 + 3173 + array-buffer-byte-length@1.0.2: 3174 + dependencies: 3175 + call-bound: 1.0.4 3176 + is-array-buffer: 3.0.5 3177 + 3178 + array-union@2.1.0: {} 3179 + 3180 + arraybuffer.prototype.slice@1.0.4: 3181 + dependencies: 3182 + array-buffer-byte-length: 1.0.2 3183 + call-bind: 1.0.8 3184 + define-properties: 1.2.1 3185 + es-abstract: 1.23.9 3186 + es-errors: 1.3.0 3187 + get-intrinsic: 1.3.0 3188 + is-array-buffer: 3.0.5 3189 + 3190 + assertion-error@1.1.0: {} 3191 + 3192 + async-function@1.0.0: {} 3193 + 3194 + available-typed-arrays@1.0.7: 3195 + dependencies: 3196 + possible-typed-array-names: 1.1.0 3197 + 3198 + balanced-match@1.0.2: {} 3199 + 3200 + better-path-resolve@1.0.0: 3201 + dependencies: 3202 + is-windows: 1.0.2 3203 + 3204 + brace-expansion@1.1.11: 3205 + dependencies: 3206 + balanced-match: 1.0.2 3207 + concat-map: 0.0.1 3208 + 3209 + brace-expansion@2.0.1: 3210 + dependencies: 3211 + balanced-match: 1.0.2 3212 + 3213 + braces@3.0.3: 3214 + dependencies: 3215 + fill-range: 7.1.1 3216 + 3217 + buble@0.20.0: 3218 + dependencies: 3219 + acorn: 6.4.2 3220 + acorn-dynamic-import: 4.0.0(acorn@6.4.2) 3221 + acorn-jsx: 5.3.2(acorn@6.4.2) 3222 + chalk: 2.4.2 3223 + magic-string: 0.25.9 3224 + minimist: 1.2.8 3225 + regexpu-core: 4.5.4 3226 + 3227 + buffer-from@1.1.2: {} 3228 + 3229 + cac@6.7.14: {} 3230 + 3231 + call-bind-apply-helpers@1.0.2: 3232 + dependencies: 3233 + es-errors: 1.3.0 3234 + function-bind: 1.1.2 3235 + 3236 + call-bind@1.0.8: 3237 + dependencies: 3238 + call-bind-apply-helpers: 1.0.2 3239 + es-define-property: 1.0.1 3240 + get-intrinsic: 1.3.0 3241 + set-function-length: 1.2.2 3242 + 3243 + call-bound@1.0.4: 3244 + dependencies: 3245 + call-bind-apply-helpers: 1.0.2 3246 + get-intrinsic: 1.3.0 3247 + 3248 + callbag-from-iter@1.3.0: 3249 + dependencies: 3250 + callbag: 1.5.1 3251 + 3252 + callbag-iterate@1.0.0: {} 3253 + 3254 + callbag-take@1.5.0: 3255 + dependencies: 3256 + callbag: 1.5.1 3257 + 3258 + callbag@1.5.1: {} 3259 + 3260 + callsites@3.1.0: {} 3261 + 3262 + chai@4.5.0: 3263 + dependencies: 3264 + assertion-error: 1.1.0 3265 + check-error: 1.0.3 3266 + deep-eql: 4.1.4 3267 + get-func-name: 2.0.2 3268 + loupe: 2.3.7 3269 + pathval: 1.1.1 3270 + type-detect: 4.1.0 3271 + 3272 + chalk@2.4.2: 3273 + dependencies: 3274 + ansi-styles: 3.2.1 3275 + escape-string-regexp: 1.0.5 3276 + supports-color: 5.5.0 3277 + 3278 + chalk@4.1.2: 3279 + dependencies: 3280 + ansi-styles: 4.3.0 3281 + supports-color: 7.2.0 3282 + 3283 + chalk@5.3.0: {} 3284 + 3285 + chardet@2.1.0: {} 3286 + 3287 + check-error@1.0.3: 3288 + dependencies: 3289 + get-func-name: 2.0.2 3290 + 3291 + ci-info@2.0.0: {} 3292 + 3293 + ci-info@3.9.0: {} 3294 + 3295 + cjs-module-lexer@1.4.3: {} 3296 + 3297 + cli-cursor@4.0.0: 3298 + dependencies: 3299 + restore-cursor: 4.0.0 3300 + 3301 + cli-truncate@3.1.0: 3302 + dependencies: 3303 + slice-ansi: 5.0.0 3304 + string-width: 5.1.2 3305 + 3306 + color-convert@1.9.3: 3307 + dependencies: 3308 + color-name: 1.1.3 3309 + 3310 + color-convert@2.0.1: 3311 + dependencies: 3312 + color-name: 1.1.4 3313 + 3314 + color-name@1.1.3: {} 3315 + 3316 + color-name@1.1.4: {} 3317 + 3318 + colorette@2.0.20: {} 3319 + 3320 + commander@11.0.0: {} 3321 + 3322 + commander@2.20.3: {} 3323 + 3324 + commander@4.1.1: {} 3325 + 3326 + commander@6.2.1: {} 3327 + 3328 + commondir@1.0.1: {} 3329 + 3330 + compare-versions@3.6.0: {} 3331 + 3332 + concat-map@0.0.1: {} 3333 + 3334 + confbox@0.1.8: {} 3335 + 3336 + cosmiconfig@7.1.0: 3337 + dependencies: 3338 + '@types/parse-json': 4.0.2 3339 + import-fresh: 3.3.1 3340 + parse-json: 5.2.0 3341 + path-type: 4.0.0 3342 + yaml: 1.10.2 3343 + 3344 + cross-spawn@6.0.6: 3345 + dependencies: 3346 + nice-try: 1.0.5 3347 + path-key: 2.0.1 3348 + semver: 5.7.2 3349 + shebang-command: 1.2.0 3350 + which: 1.3.1 3351 + 3352 + cross-spawn@7.0.6: 3353 + dependencies: 3354 + path-key: 3.1.1 3355 + shebang-command: 2.0.0 3356 + which: 2.0.2 3357 + 3358 + data-view-buffer@1.0.2: 3359 + dependencies: 3360 + call-bound: 1.0.4 3361 + es-errors: 1.3.0 3362 + is-data-view: 1.0.2 3363 + 3364 + data-view-byte-length@1.0.2: 3365 + dependencies: 3366 + call-bound: 1.0.4 3367 + es-errors: 1.3.0 3368 + is-data-view: 1.0.2 3369 + 3370 + data-view-byte-offset@1.0.1: 3371 + dependencies: 3372 + call-bound: 1.0.4 3373 + es-errors: 1.3.0 3374 + is-data-view: 1.0.2 3375 + 3376 + dataloader@1.4.0: {} 3377 + 3378 + debug@4.3.4: 3379 + dependencies: 3380 + ms: 2.1.2 3381 + 3382 + debug@4.4.0: 3383 + dependencies: 3384 + ms: 2.1.3 3385 + 3386 + deep-eql@4.1.4: 3387 + dependencies: 3388 + type-detect: 4.1.0 3389 + 3390 + deep-is@0.1.4: {} 3391 + 3392 + deepmerge@4.3.1: {} 3393 + 3394 + define-data-property@1.1.4: 3395 + dependencies: 3396 + es-define-property: 1.0.1 3397 + es-errors: 1.3.0 3398 + gopd: 1.2.0 3399 + 3400 + define-properties@1.2.1: 3401 + dependencies: 3402 + define-data-property: 1.1.4 3403 + has-property-descriptors: 1.0.2 3404 + object-keys: 1.1.1 3405 + 3406 + detect-indent@6.1.0: {} 3407 + 3408 + diff-sequences@29.6.3: {} 3409 + 3410 + dir-glob@3.0.1: 3411 + dependencies: 3412 + path-type: 4.0.0 3413 + 3414 + doctrine@3.0.0: 3415 + dependencies: 3416 + esutils: 2.0.3 3417 + 3418 + dotenv@16.4.7: {} 3419 + 3420 + dunder-proto@1.0.1: 3421 + dependencies: 3422 + call-bind-apply-helpers: 1.0.2 3423 + es-errors: 1.3.0 3424 + gopd: 1.2.0 3425 + 3426 + eastasianwidth@0.2.0: {} 3427 + 3428 + emoji-regex@8.0.0: {} 3429 + 3430 + emoji-regex@9.2.2: {} 3431 + 3432 + enquirer@2.4.1: 3433 + dependencies: 3434 + ansi-colors: 4.1.3 3435 + strip-ansi: 6.0.1 3436 + 3437 + error-ex@1.3.2: 3438 + dependencies: 3439 + is-arrayish: 0.2.1 3440 + 3441 + es-abstract@1.23.9: 3442 + dependencies: 3443 + array-buffer-byte-length: 1.0.2 3444 + arraybuffer.prototype.slice: 1.0.4 3445 + available-typed-arrays: 1.0.7 3446 + call-bind: 1.0.8 3447 + call-bound: 1.0.4 3448 + data-view-buffer: 1.0.2 3449 + data-view-byte-length: 1.0.2 3450 + data-view-byte-offset: 1.0.1 3451 + es-define-property: 1.0.1 3452 + es-errors: 1.3.0 3453 + es-object-atoms: 1.1.1 3454 + es-set-tostringtag: 2.1.0 3455 + es-to-primitive: 1.3.0 3456 + function.prototype.name: 1.1.8 3457 + get-intrinsic: 1.3.0 3458 + get-proto: 1.0.1 3459 + get-symbol-description: 1.1.0 3460 + globalthis: 1.0.4 3461 + gopd: 1.2.0 3462 + has-property-descriptors: 1.0.2 3463 + has-proto: 1.2.0 3464 + has-symbols: 1.1.0 3465 + hasown: 2.0.2 3466 + internal-slot: 1.1.0 3467 + is-array-buffer: 3.0.5 3468 + is-callable: 1.2.7 3469 + is-data-view: 1.0.2 3470 + is-regex: 1.2.1 3471 + is-shared-array-buffer: 1.0.4 3472 + is-string: 1.1.1 3473 + is-typed-array: 1.1.15 3474 + is-weakref: 1.1.1 3475 + math-intrinsics: 1.1.0 3476 + object-inspect: 1.13.4 3477 + object-keys: 1.1.1 3478 + object.assign: 4.1.7 3479 + own-keys: 1.0.1 3480 + regexp.prototype.flags: 1.5.4 3481 + safe-array-concat: 1.1.3 3482 + safe-push-apply: 1.0.0 3483 + safe-regex-test: 1.1.0 3484 + set-proto: 1.0.0 3485 + string.prototype.trim: 1.2.10 3486 + string.prototype.trimend: 1.0.9 3487 + string.prototype.trimstart: 1.0.8 3488 + typed-array-buffer: 1.0.3 3489 + typed-array-byte-length: 1.0.3 3490 + typed-array-byte-offset: 1.0.4 3491 + typed-array-length: 1.0.7 3492 + unbox-primitive: 1.1.0 3493 + which-typed-array: 1.1.18 3494 + 3495 + es-define-property@1.0.1: {} 3496 + 3497 + es-errors@1.3.0: {} 3498 + 3499 + es-object-atoms@1.1.1: 3500 + dependencies: 3501 + es-errors: 1.3.0 3502 + 3503 + es-set-tostringtag@2.1.0: 3504 + dependencies: 3505 + es-errors: 1.3.0 3506 + get-intrinsic: 1.3.0 3507 + has-tostringtag: 1.0.2 3508 + hasown: 2.0.2 3509 + 3510 + es-to-primitive@1.3.0: 3511 + dependencies: 3512 + is-callable: 1.2.7 3513 + is-date-object: 1.1.0 3514 + is-symbol: 1.1.1 3515 + 3516 + esbuild@0.21.5: 3517 + optionalDependencies: 3518 + '@esbuild/aix-ppc64': 0.21.5 3519 + '@esbuild/android-arm': 0.21.5 3520 + '@esbuild/android-arm64': 0.21.5 3521 + '@esbuild/android-x64': 0.21.5 3522 + '@esbuild/darwin-arm64': 0.21.5 3523 + '@esbuild/darwin-x64': 0.21.5 3524 + '@esbuild/freebsd-arm64': 0.21.5 3525 + '@esbuild/freebsd-x64': 0.21.5 3526 + '@esbuild/linux-arm': 0.21.5 3527 + '@esbuild/linux-arm64': 0.21.5 3528 + '@esbuild/linux-ia32': 0.21.5 3529 + '@esbuild/linux-loong64': 0.21.5 3530 + '@esbuild/linux-mips64el': 0.21.5 3531 + '@esbuild/linux-ppc64': 0.21.5 3532 + '@esbuild/linux-riscv64': 0.21.5 3533 + '@esbuild/linux-s390x': 0.21.5 3534 + '@esbuild/linux-x64': 0.21.5 3535 + '@esbuild/netbsd-x64': 0.21.5 3536 + '@esbuild/openbsd-x64': 0.21.5 3537 + '@esbuild/sunos-x64': 0.21.5 3538 + '@esbuild/win32-arm64': 0.21.5 3539 + '@esbuild/win32-ia32': 0.21.5 3540 + '@esbuild/win32-x64': 0.21.5 3541 + 3542 + escape-string-regexp@1.0.5: {} 3543 + 3544 + escape-string-regexp@4.0.0: {} 3545 + 3546 + eslint-config-prettier@8.10.0(eslint@8.57.1): 3547 + dependencies: 3548 + eslint: 8.57.1 3549 + 3550 + eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8): 3551 + dependencies: 3552 + eslint: 8.57.1 3553 + prettier: 2.8.8 3554 + prettier-linter-helpers: 1.0.0 3555 + optionalDependencies: 3556 + eslint-config-prettier: 8.10.0(eslint@8.57.1) 3557 + 3558 + eslint-plugin-tsdoc@0.2.17: 3559 + dependencies: 3560 + '@microsoft/tsdoc': 0.14.2 3561 + '@microsoft/tsdoc-config': 0.16.2 3562 + 3563 + eslint-scope@5.1.1: 3564 + dependencies: 3565 + esrecurse: 4.3.0 3566 + estraverse: 4.3.0 3567 + 3568 + eslint-scope@7.2.2: 3569 + dependencies: 3570 + esrecurse: 4.3.0 3571 + estraverse: 5.3.0 3572 + 3573 + eslint-visitor-keys@3.4.3: {} 3574 + 3575 + eslint@8.57.1: 3576 + dependencies: 3577 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) 3578 + '@eslint-community/regexpp': 4.12.1 3579 + '@eslint/eslintrc': 2.1.4 3580 + '@eslint/js': 8.57.1 3581 + '@humanwhocodes/config-array': 0.13.0 3582 + '@humanwhocodes/module-importer': 1.0.1 3583 + '@nodelib/fs.walk': 1.2.8 3584 + '@ungap/structured-clone': 1.3.0 3585 + ajv: 6.12.6 3586 + chalk: 4.1.2 3587 + cross-spawn: 7.0.6 3588 + debug: 4.4.0 3589 + doctrine: 3.0.0 3590 + escape-string-regexp: 4.0.0 3591 + eslint-scope: 7.2.2 3592 + eslint-visitor-keys: 3.4.3 3593 + espree: 9.6.1 3594 + esquery: 1.6.0 3595 + esutils: 2.0.3 3596 + fast-deep-equal: 3.1.3 3597 + file-entry-cache: 6.0.1 3598 + find-up: 5.0.0 3599 + glob-parent: 6.0.2 3600 + globals: 13.24.0 3601 + graphemer: 1.4.0 3602 + ignore: 5.3.2 3603 + imurmurhash: 0.1.4 3604 + is-glob: 4.0.3 3605 + is-path-inside: 3.0.3 3606 + js-yaml: 4.1.0 3607 + json-stable-stringify-without-jsonify: 1.0.1 3608 + levn: 0.4.1 3609 + lodash.merge: 4.6.2 3610 + minimatch: 3.1.2 3611 + natural-compare: 1.4.0 3612 + optionator: 0.9.4 3613 + strip-ansi: 6.0.1 3614 + text-table: 0.2.0 3615 + transitivePeerDependencies: 3616 + - supports-color 3617 + 3618 + espree@9.6.1: 3619 + dependencies: 3620 + acorn: 8.14.0 3621 + acorn-jsx: 5.3.2(acorn@8.14.0) 3622 + eslint-visitor-keys: 3.4.3 3623 + 3624 + esprima@4.0.1: {} 3625 + 3626 + esquery@1.6.0: 3627 + dependencies: 3628 + estraverse: 5.3.0 3629 + 3630 + esrecurse@4.3.0: 3631 + dependencies: 3632 + estraverse: 5.3.0 3633 + 3634 + estraverse@4.3.0: {} 3635 + 3636 + estraverse@5.3.0: {} 3637 + 3638 + estree-walker@2.0.2: {} 3639 + 3640 + estree-walker@3.0.3: 3641 + dependencies: 3642 + '@types/estree': 1.0.6 3643 + 3644 + esutils@2.0.3: {} 3645 + 3646 + eventemitter3@5.0.1: {} 3647 + 3648 + execa@7.2.0: 3649 + dependencies: 3650 + cross-spawn: 7.0.6 3651 + get-stream: 6.0.1 3652 + human-signals: 4.3.1 3653 + is-stream: 3.0.0 3654 + merge-stream: 2.0.0 3655 + npm-run-path: 5.3.0 3656 + onetime: 6.0.0 3657 + signal-exit: 3.0.7 3658 + strip-final-newline: 3.0.0 3659 + 3660 + execa@8.0.1: 3661 + dependencies: 3662 + cross-spawn: 7.0.6 3663 + get-stream: 8.0.1 3664 + human-signals: 5.0.0 3665 + is-stream: 3.0.0 3666 + merge-stream: 2.0.0 3667 + npm-run-path: 5.3.0 3668 + onetime: 6.0.0 3669 + signal-exit: 4.1.0 3670 + strip-final-newline: 3.0.0 3671 + 3672 + extendable-error@0.1.7: {} 3673 + 3674 + fast-deep-equal@3.1.3: {} 3675 + 3676 + fast-diff@1.3.0: {} 3677 + 3678 + fast-glob@3.3.3: 3679 + dependencies: 3680 + '@nodelib/fs.stat': 2.0.5 3681 + '@nodelib/fs.walk': 1.2.8 3682 + glob-parent: 5.1.2 3683 + merge2: 1.4.1 3684 + micromatch: 4.0.8 3685 + 3686 + fast-json-stable-stringify@2.1.0: {} 3687 + 3688 + fast-levenshtein@2.0.6: {} 3689 + 3690 + fastq@1.19.1: 3691 + dependencies: 3692 + reusify: 1.1.0 3693 + 3694 + file-entry-cache@6.0.1: 3695 + dependencies: 3696 + flat-cache: 3.2.0 3697 + 3698 + fill-range@7.1.1: 3699 + dependencies: 3700 + to-regex-range: 5.0.1 3701 + 3702 + find-up@4.1.0: 3703 + dependencies: 3704 + locate-path: 5.0.0 3705 + path-exists: 4.0.0 3706 + 3707 + find-up@5.0.0: 3708 + dependencies: 3709 + locate-path: 6.0.0 3710 + path-exists: 4.0.0 3711 + 3712 + find-versions@4.0.0: 3713 + dependencies: 3714 + semver-regex: 3.1.4 3715 + 3716 + flat-cache@3.2.0: 3717 + dependencies: 3718 + flatted: 3.3.3 3719 + keyv: 4.5.4 3720 + rimraf: 3.0.2 3721 + 3722 + flatted@3.3.3: {} 3723 + 3724 + flowgen@1.21.0: 3725 + dependencies: 3726 + '@babel/code-frame': 7.26.2 3727 + '@babel/highlight': 7.25.9 3728 + commander: 6.2.1 3729 + lodash: 4.17.21 3730 + prettier: 2.8.8 3731 + shelljs: 0.8.5 3732 + typescript: 4.4.4 3733 + typescript-compiler: 1.4.1-2 3734 + 3735 + for-each@0.3.5: 3736 + dependencies: 3737 + is-callable: 1.2.7 3738 + 3739 + foreground-child@3.3.1: 3740 + dependencies: 3741 + cross-spawn: 7.0.6 3742 + signal-exit: 4.1.0 3743 + 3744 + fs-extra@7.0.1: 3745 + dependencies: 3746 + graceful-fs: 4.2.11 3747 + jsonfile: 4.0.0 3748 + universalify: 0.1.2 3749 + 3750 + fs-extra@8.1.0: 3751 + dependencies: 3752 + graceful-fs: 4.2.11 3753 + jsonfile: 4.0.0 3754 + universalify: 0.1.2 3755 + 3756 + fs.realpath@1.0.0: {} 3757 + 3758 + fsevents@2.3.3: 3759 + optional: true 3760 + 3761 + function-bind@1.1.2: {} 3762 + 3763 + function.prototype.name@1.1.8: 3764 + dependencies: 3765 + call-bind: 1.0.8 3766 + call-bound: 1.0.4 3767 + define-properties: 1.2.1 3768 + functions-have-names: 1.2.3 3769 + hasown: 2.0.2 3770 + is-callable: 1.2.7 3771 + 3772 + functions-have-names@1.2.3: {} 3773 + 3774 + get-func-name@2.0.2: {} 3775 + 3776 + get-intrinsic@1.3.0: 3777 + dependencies: 3778 + call-bind-apply-helpers: 1.0.2 3779 + es-define-property: 1.0.1 3780 + es-errors: 1.3.0 3781 + es-object-atoms: 1.1.1 3782 + function-bind: 1.1.2 3783 + get-proto: 1.0.1 3784 + gopd: 1.2.0 3785 + has-symbols: 1.1.0 3786 + hasown: 2.0.2 3787 + math-intrinsics: 1.1.0 3788 + 3789 + get-proto@1.0.1: 3790 + dependencies: 3791 + dunder-proto: 1.0.1 3792 + es-object-atoms: 1.1.1 3793 + 3794 + get-stream@6.0.1: {} 3795 + 3796 + get-stream@8.0.1: {} 3797 + 3798 + get-symbol-description@1.1.0: 3799 + dependencies: 3800 + call-bound: 1.0.4 3801 + es-errors: 1.3.0 3802 + get-intrinsic: 1.3.0 3803 + 3804 + glob-parent@5.1.2: 3805 + dependencies: 3806 + is-glob: 4.0.3 3807 + 3808 + glob-parent@6.0.2: 3809 + dependencies: 3810 + is-glob: 4.0.3 3811 + 3812 + glob@10.4.5: 3813 + dependencies: 3814 + foreground-child: 3.3.1 3815 + jackspeak: 3.4.3 3816 + minimatch: 9.0.5 3817 + minipass: 7.1.2 3818 + package-json-from-dist: 1.0.1 3819 + path-scurry: 1.11.1 3820 + 3821 + glob@7.2.3: 3822 + dependencies: 3823 + fs.realpath: 1.0.0 3824 + inflight: 1.0.6 3825 + inherits: 2.0.4 3826 + minimatch: 3.1.2 3827 + once: 1.4.0 3828 + path-is-absolute: 1.0.1 3829 + 3830 + glob@8.1.0: 3831 + dependencies: 3832 + fs.realpath: 1.0.0 3833 + inflight: 1.0.6 3834 + inherits: 2.0.4 3835 + minimatch: 5.1.6 3836 + once: 1.4.0 3837 + 3838 + globals@13.24.0: 3839 + dependencies: 3840 + type-fest: 0.20.2 3841 + 3842 + globalthis@1.0.4: 3843 + dependencies: 3844 + define-properties: 1.2.1 3845 + gopd: 1.2.0 3846 + 3847 + globby@11.1.0: 3848 + dependencies: 3849 + array-union: 2.1.0 3850 + dir-glob: 3.0.1 3851 + fast-glob: 3.3.3 3852 + ignore: 5.3.2 3853 + merge2: 1.4.1 3854 + slash: 3.0.0 3855 + 3856 + gopd@1.2.0: {} 3857 + 3858 + graceful-fs@4.2.11: {} 3859 + 3860 + graphemer@1.4.0: {} 3861 + 3862 + has-bigints@1.1.0: {} 3863 + 3864 + has-flag@3.0.0: {} 3865 + 3866 + has-flag@4.0.0: {} 3867 + 3868 + has-property-descriptors@1.0.2: 3869 + dependencies: 3870 + es-define-property: 1.0.1 3871 + 3872 + has-proto@1.2.0: 3873 + dependencies: 3874 + dunder-proto: 1.0.1 3875 + 3876 + has-symbols@1.1.0: {} 3877 + 3878 + has-tostringtag@1.0.2: 3879 + dependencies: 3880 + has-symbols: 1.1.0 3881 + 3882 + hasown@2.0.2: 3883 + dependencies: 3884 + function-bind: 1.1.2 3885 + 3886 + hosted-git-info@2.8.9: {} 3887 + 3888 + human-id@4.1.1: {} 3889 + 3890 + human-signals@4.3.1: {} 3891 + 3892 + human-signals@5.0.0: {} 3893 + 3894 + husky-v4@4.3.8: 3895 + dependencies: 3896 + chalk: 4.1.2 3897 + ci-info: 2.0.0 3898 + compare-versions: 3.6.0 3899 + cosmiconfig: 7.1.0 3900 + find-versions: 4.0.0 3901 + opencollective-postinstall: 2.0.3 3902 + pkg-dir: 5.0.0 3903 + please-upgrade-node: 3.2.0 3904 + slash: 3.0.0 3905 + which-pm-runs: 1.1.0 3906 + 3907 + iconv-lite@0.6.3: 3908 + dependencies: 3909 + safer-buffer: 2.1.2 3910 + 3911 + ignore@5.3.2: {} 3912 + 3913 + import-fresh@3.3.1: 3914 + dependencies: 3915 + parent-module: 1.0.1 3916 + resolve-from: 4.0.0 3917 + 3918 + imurmurhash@0.1.4: {} 3919 + 3920 + inflight@1.0.6: 3921 + dependencies: 3922 + once: 1.4.0 3923 + wrappy: 1.0.2 3924 + 3925 + inherits@2.0.4: {} 3926 + 3927 + internal-slot@1.1.0: 3928 + dependencies: 3929 + es-errors: 1.3.0 3930 + hasown: 2.0.2 3931 + side-channel: 1.1.0 3932 + 3933 + interpret@1.4.0: {} 3934 + 3935 + is-array-buffer@3.0.5: 3936 + dependencies: 3937 + call-bind: 1.0.8 3938 + call-bound: 1.0.4 3939 + get-intrinsic: 1.3.0 3940 + 3941 + is-arrayish@0.2.1: {} 3942 + 3943 + is-async-function@2.1.1: 3944 + dependencies: 3945 + async-function: 1.0.0 3946 + call-bound: 1.0.4 3947 + get-proto: 1.0.1 3948 + has-tostringtag: 1.0.2 3949 + safe-regex-test: 1.1.0 3950 + 3951 + is-bigint@1.1.0: 3952 + dependencies: 3953 + has-bigints: 1.1.0 3954 + 3955 + is-boolean-object@1.2.2: 3956 + dependencies: 3957 + call-bound: 1.0.4 3958 + has-tostringtag: 1.0.2 3959 + 3960 + is-callable@1.2.7: {} 3961 + 3962 + is-core-module@2.16.1: 3963 + dependencies: 3964 + hasown: 2.0.2 3965 + 3966 + is-data-view@1.0.2: 3967 + dependencies: 3968 + call-bound: 1.0.4 3969 + get-intrinsic: 1.3.0 3970 + is-typed-array: 1.1.15 3971 + 3972 + is-date-object@1.1.0: 3973 + dependencies: 3974 + call-bound: 1.0.4 3975 + has-tostringtag: 1.0.2 3976 + 3977 + is-extglob@2.1.1: {} 3978 + 3979 + is-finalizationregistry@1.1.1: 3980 + dependencies: 3981 + call-bound: 1.0.4 3982 + 3983 + is-fullwidth-code-point@3.0.0: {} 3984 + 3985 + is-fullwidth-code-point@4.0.0: {} 3986 + 3987 + is-generator-function@1.1.0: 3988 + dependencies: 3989 + call-bound: 1.0.4 3990 + get-proto: 1.0.1 3991 + has-tostringtag: 1.0.2 3992 + safe-regex-test: 1.1.0 3993 + 3994 + is-glob@4.0.3: 3995 + dependencies: 3996 + is-extglob: 2.1.1 3997 + 3998 + is-map@2.0.3: {} 3999 + 4000 + is-module@1.0.0: {} 4001 + 4002 + is-number-object@1.1.1: 4003 + dependencies: 4004 + call-bound: 1.0.4 4005 + has-tostringtag: 1.0.2 4006 + 4007 + is-number@7.0.0: {} 4008 + 4009 + is-path-inside@3.0.3: {} 4010 + 4011 + is-reference@1.2.1: 4012 + dependencies: 4013 + '@types/estree': 1.0.6 4014 + 4015 + is-regex@1.2.1: 4016 + dependencies: 4017 + call-bound: 1.0.4 4018 + gopd: 1.2.0 4019 + has-tostringtag: 1.0.2 4020 + hasown: 2.0.2 4021 + 4022 + is-set@2.0.3: {} 4023 + 4024 + is-shared-array-buffer@1.0.4: 4025 + dependencies: 4026 + call-bound: 1.0.4 4027 + 4028 + is-stream@3.0.0: {} 4029 + 4030 + is-string@1.1.1: 4031 + dependencies: 4032 + call-bound: 1.0.4 4033 + has-tostringtag: 1.0.2 4034 + 4035 + is-subdir@1.2.0: 4036 + dependencies: 4037 + better-path-resolve: 1.0.0 4038 + 4039 + is-symbol@1.1.1: 4040 + dependencies: 4041 + call-bound: 1.0.4 4042 + has-symbols: 1.1.0 4043 + safe-regex-test: 1.1.0 4044 + 4045 + is-typed-array@1.1.15: 4046 + dependencies: 4047 + which-typed-array: 1.1.18 4048 + 4049 + is-weakmap@2.0.2: {} 4050 + 4051 + is-weakref@1.1.1: 4052 + dependencies: 4053 + call-bound: 1.0.4 4054 + 4055 + is-weakset@2.0.4: 4056 + dependencies: 4057 + call-bound: 1.0.4 4058 + get-intrinsic: 1.3.0 4059 + 4060 + is-windows@1.0.2: {} 4061 + 4062 + isarray@2.0.5: {} 4063 + 4064 + isexe@2.0.0: {} 4065 + 4066 + jackspeak@3.4.3: 4067 + dependencies: 4068 + '@isaacs/cliui': 8.0.2 4069 + optionalDependencies: 4070 + '@pkgjs/parseargs': 0.11.0 4071 + 4072 + jju@1.4.0: {} 4073 + 4074 + js-tokens@4.0.0: {} 4075 + 4076 + js-tokens@9.0.1: {} 4077 + 4078 + js-yaml@3.14.1: 4079 + dependencies: 4080 + argparse: 1.0.10 4081 + esprima: 4.0.1 4082 + 4083 + js-yaml@4.1.0: 4084 + dependencies: 4085 + argparse: 2.0.1 4086 + 4087 + jsesc@0.5.0: {} 4088 + 4089 + json-buffer@3.0.1: {} 4090 + 4091 + json-parse-better-errors@1.0.2: {} 4092 + 4093 + json-parse-even-better-errors@2.3.1: {} 4094 + 4095 + json-schema-traverse@0.4.1: {} 4096 + 4097 + json-stable-stringify-without-jsonify@1.0.1: {} 4098 + 4099 + jsonfile@4.0.0: 4100 + optionalDependencies: 4101 + graceful-fs: 4.2.11 4102 + 4103 + keyv@4.5.4: 4104 + dependencies: 4105 + json-buffer: 3.0.1 4106 + 4107 + levn@0.4.1: 4108 + dependencies: 4109 + prelude-ls: 1.2.1 4110 + type-check: 0.4.0 4111 + 4112 + lilconfig@2.1.0: {} 4113 + 4114 + lines-and-columns@1.2.4: {} 4115 + 4116 + lint-staged@13.3.0(enquirer@2.4.1): 4117 + dependencies: 4118 + chalk: 5.3.0 4119 + commander: 11.0.0 4120 + debug: 4.3.4 4121 + execa: 7.2.0 4122 + lilconfig: 2.1.0 4123 + listr2: 6.6.1(enquirer@2.4.1) 4124 + micromatch: 4.0.5 4125 + pidtree: 0.6.0 4126 + string-argv: 0.3.2 4127 + yaml: 2.3.1 4128 + transitivePeerDependencies: 4129 + - enquirer 4130 + - supports-color 4131 + 4132 + listr2@6.6.1(enquirer@2.4.1): 4133 + dependencies: 4134 + cli-truncate: 3.1.0 4135 + colorette: 2.0.20 4136 + eventemitter3: 5.0.1 4137 + log-update: 5.0.1 4138 + rfdc: 1.4.1 4139 + wrap-ansi: 8.1.0 4140 + optionalDependencies: 4141 + enquirer: 2.4.1 4142 + 4143 + load-json-file@4.0.0: 4144 + dependencies: 4145 + graceful-fs: 4.2.11 4146 + parse-json: 4.0.0 4147 + pify: 3.0.0 4148 + strip-bom: 3.0.0 4149 + 4150 + local-pkg@0.5.1: 4151 + dependencies: 4152 + mlly: 1.7.4 4153 + pkg-types: 1.3.1 4154 + 4155 + locate-path@5.0.0: 4156 + dependencies: 4157 + p-locate: 4.1.0 4158 + 4159 + locate-path@6.0.0: 4160 + dependencies: 4161 + p-locate: 5.0.0 4162 + 4163 + lodash.merge@4.6.2: {} 4164 + 4165 + lodash.startcase@4.4.0: {} 4166 + 4167 + lodash@4.17.21: {} 4168 + 4169 + log-update@5.0.1: 4170 + dependencies: 4171 + ansi-escapes: 5.0.0 4172 + cli-cursor: 4.0.0 4173 + slice-ansi: 5.0.0 4174 + strip-ansi: 7.1.0 4175 + wrap-ansi: 8.1.0 4176 + 4177 + loupe@2.3.7: 4178 + dependencies: 4179 + get-func-name: 2.0.2 4180 + 4181 + lru-cache@10.4.3: {} 4182 + 4183 + magic-string@0.25.9: 4184 + dependencies: 4185 + sourcemap-codec: 1.4.8 4186 + 4187 + magic-string@0.27.0: 4188 + dependencies: 4189 + '@jridgewell/sourcemap-codec': 1.5.0 4190 + 4191 + magic-string@0.30.17: 4192 + dependencies: 4193 + '@jridgewell/sourcemap-codec': 1.5.0 4194 + 4195 + math-intrinsics@1.1.0: {} 4196 + 4197 + memorystream@0.3.1: {} 4198 + 4199 + merge-stream@2.0.0: {} 4200 + 4201 + merge2@1.4.1: {} 4202 + 4203 + micromatch@4.0.5: 4204 + dependencies: 4205 + braces: 3.0.3 4206 + picomatch: 2.3.1 4207 + 4208 + micromatch@4.0.8: 4209 + dependencies: 4210 + braces: 3.0.3 4211 + picomatch: 2.3.1 4212 + 4213 + mimic-fn@2.1.0: {} 4214 + 4215 + mimic-fn@4.0.0: {} 4216 + 4217 + minimatch@3.1.2: 4218 + dependencies: 4219 + brace-expansion: 1.1.11 4220 + 4221 + minimatch@5.1.6: 4222 + dependencies: 4223 + brace-expansion: 2.0.1 4224 + 4225 + minimatch@9.0.5: 4226 + dependencies: 4227 + brace-expansion: 2.0.1 4228 + 4229 + minimist@1.2.8: {} 4230 + 4231 + minipass@7.1.2: {} 4232 + 4233 + mlly@1.7.4: 4234 + dependencies: 4235 + acorn: 8.14.0 4236 + pathe: 2.0.3 4237 + pkg-types: 1.3.1 4238 + ufo: 1.5.4 4239 + 4240 + mri@1.2.0: {} 4241 + 4242 + ms@2.1.2: {} 4243 + 4244 + ms@2.1.3: {} 4245 + 4246 + mz@2.7.0: 4247 + dependencies: 4248 + any-promise: 1.3.0 4249 + object-assign: 4.1.1 4250 + thenify-all: 1.6.0 4251 + 4252 + nanoid@3.3.8: {} 4253 + 4254 + natural-compare-lite@1.4.0: {} 4255 + 4256 + natural-compare@1.4.0: {} 4257 + 4258 + nice-try@1.0.5: {} 4259 + 4260 + node-fetch@2.7.0: 4261 + dependencies: 4262 + whatwg-url: 5.0.0 4263 + 4264 + normalize-package-data@2.5.0: 4265 + dependencies: 4266 + hosted-git-info: 2.8.9 4267 + resolve: 1.22.10 4268 + semver: 5.7.2 4269 + validate-npm-package-license: 3.0.4 4270 + 4271 + npm-run-all@4.1.5: 4272 + dependencies: 4273 + ansi-styles: 3.2.1 4274 + chalk: 2.4.2 4275 + cross-spawn: 6.0.6 4276 + memorystream: 0.3.1 4277 + minimatch: 3.1.2 4278 + pidtree: 0.3.1 4279 + read-pkg: 3.0.0 4280 + shell-quote: 1.8.2 4281 + string.prototype.padend: 3.1.6 4282 + 4283 + npm-run-path@5.3.0: 4284 + dependencies: 4285 + path-key: 4.0.0 4286 + 4287 + object-assign@4.1.1: {} 4288 + 4289 + object-inspect@1.13.4: {} 4290 + 4291 + object-keys@1.1.1: {} 4292 + 4293 + object.assign@4.1.7: 4294 + dependencies: 4295 + call-bind: 1.0.8 4296 + call-bound: 1.0.4 4297 + define-properties: 1.2.1 4298 + es-object-atoms: 1.1.1 4299 + has-symbols: 1.1.0 4300 + object-keys: 1.1.1 4301 + 4302 + once@1.4.0: 4303 + dependencies: 4304 + wrappy: 1.0.2 4305 + 4306 + onetime@5.1.2: 4307 + dependencies: 4308 + mimic-fn: 2.1.0 4309 + 4310 + onetime@6.0.0: 4311 + dependencies: 4312 + mimic-fn: 4.0.0 4313 + 4314 + opencollective-postinstall@2.0.3: {} 4315 + 4316 + optionator@0.9.4: 4317 + dependencies: 4318 + deep-is: 0.1.4 4319 + fast-levenshtein: 2.0.6 4320 + levn: 0.4.1 4321 + prelude-ls: 1.2.1 4322 + type-check: 0.4.0 4323 + word-wrap: 1.2.5 4324 + 4325 + outdent@0.5.0: {} 4326 + 4327 + own-keys@1.0.1: 4328 + dependencies: 4329 + get-intrinsic: 1.3.0 4330 + object-keys: 1.1.1 4331 + safe-push-apply: 1.0.0 4332 + 4333 + p-filter@2.1.0: 4334 + dependencies: 4335 + p-map: 2.1.0 4336 + 4337 + p-limit@2.3.0: 4338 + dependencies: 4339 + p-try: 2.2.0 4340 + 4341 + p-limit@3.1.0: 4342 + dependencies: 4343 + yocto-queue: 0.1.0 4344 + 4345 + p-limit@5.0.0: 4346 + dependencies: 4347 + yocto-queue: 1.1.1 4348 + 4349 + p-locate@4.1.0: 4350 + dependencies: 4351 + p-limit: 2.3.0 4352 + 4353 + p-locate@5.0.0: 4354 + dependencies: 4355 + p-limit: 3.1.0 4356 + 4357 + p-map@2.1.0: {} 4358 + 4359 + p-try@2.2.0: {} 4360 + 4361 + package-json-from-dist@1.0.1: {} 4362 + 4363 + package-manager-detector@0.2.11: 4364 + dependencies: 4365 + quansync: 0.2.8 4366 + 4367 + parent-module@1.0.1: 4368 + dependencies: 4369 + callsites: 3.1.0 4370 + 4371 + parse-json@4.0.0: 4372 + dependencies: 4373 + error-ex: 1.3.2 4374 + json-parse-better-errors: 1.0.2 4375 + 4376 + parse-json@5.2.0: 4377 + dependencies: 4378 + '@babel/code-frame': 7.26.2 4379 + error-ex: 1.3.2 4380 + json-parse-even-better-errors: 2.3.1 4381 + lines-and-columns: 1.2.4 4382 + 4383 + path-exists@4.0.0: {} 4384 + 4385 + path-is-absolute@1.0.1: {} 4386 + 4387 + path-key@2.0.1: {} 4388 + 4389 + path-key@3.1.1: {} 4390 + 4391 + path-key@4.0.0: {} 4392 + 4393 + path-parse@1.0.7: {} 4394 + 4395 + path-scurry@1.11.1: 4396 + dependencies: 4397 + lru-cache: 10.4.3 4398 + minipass: 7.1.2 4399 + 4400 + path-type@3.0.0: 4401 + dependencies: 4402 + pify: 3.0.0 4403 + 4404 + path-type@4.0.0: {} 4405 + 4406 + pathe@1.1.2: {} 4407 + 4408 + pathe@2.0.3: {} 4409 + 4410 + pathval@1.1.1: {} 4411 + 4412 + picocolors@1.1.1: {} 4413 + 4414 + picomatch@2.3.1: {} 4415 + 4416 + picomatch@4.0.2: {} 4417 + 4418 + pidtree@0.3.1: {} 4419 + 4420 + pidtree@0.6.0: {} 4421 + 4422 + pify@3.0.0: {} 4423 + 4424 + pify@4.0.1: {} 4425 + 4426 + pirates@4.0.6: {} 4427 + 4428 + pkg-dir@5.0.0: 4429 + dependencies: 4430 + find-up: 5.0.0 4431 + 4432 + pkg-types@1.3.1: 4433 + dependencies: 4434 + confbox: 0.1.8 4435 + mlly: 1.7.4 4436 + pathe: 2.0.3 4437 + 4438 + please-upgrade-node@3.2.0: 4439 + dependencies: 4440 + semver-compare: 1.0.0 4441 + 4442 + possible-typed-array-names@1.1.0: {} 4443 + 4444 + postcss@8.5.3: 4445 + dependencies: 4446 + nanoid: 3.3.8 4447 + picocolors: 1.1.1 4448 + source-map-js: 1.2.1 4449 + 4450 + prelude-ls@1.2.1: {} 4451 + 4452 + prettier-linter-helpers@1.0.0: 4453 + dependencies: 4454 + fast-diff: 1.3.0 4455 + 4456 + prettier@2.8.8: {} 4457 + 4458 + pretty-format@29.7.0: 4459 + dependencies: 4460 + '@jest/schemas': 29.6.3 4461 + ansi-styles: 5.2.0 4462 + react-is: 18.3.1 4463 + 4464 + punycode@2.3.1: {} 4465 + 4466 + quansync@0.2.8: {} 4467 + 4468 + queue-microtask@1.2.3: {} 4469 + 4470 + react-is@18.3.1: {} 4471 + 4472 + read-pkg@3.0.0: 4473 + dependencies: 4474 + load-json-file: 4.0.0 4475 + normalize-package-data: 2.5.0 4476 + path-type: 3.0.0 4477 + 4478 + read-yaml-file@1.1.0: 4479 + dependencies: 4480 + graceful-fs: 4.2.11 4481 + js-yaml: 3.14.1 4482 + pify: 4.0.1 4483 + strip-bom: 3.0.0 4484 + 4485 + rechoir@0.6.2: 4486 + dependencies: 4487 + resolve: 1.22.10 4488 + 4489 + reflect.getprototypeof@1.0.10: 4490 + dependencies: 4491 + call-bind: 1.0.8 4492 + define-properties: 1.2.1 4493 + es-abstract: 1.23.9 4494 + es-errors: 1.3.0 4495 + es-object-atoms: 1.1.1 4496 + get-intrinsic: 1.3.0 4497 + get-proto: 1.0.1 4498 + which-builtin-type: 1.2.1 4499 + 4500 + regenerate-unicode-properties@8.2.0: 4501 + dependencies: 4502 + regenerate: 1.4.2 4503 + 4504 + regenerate@1.4.2: {} 4505 + 4506 + regenerator-runtime@0.14.1: {} 4507 + 4508 + regexp.prototype.flags@1.5.4: 4509 + dependencies: 4510 + call-bind: 1.0.8 4511 + define-properties: 1.2.1 4512 + es-errors: 1.3.0 4513 + get-proto: 1.0.1 4514 + gopd: 1.2.0 4515 + set-function-name: 2.0.2 4516 + 4517 + regexpu-core@4.5.4: 4518 + dependencies: 4519 + regenerate: 1.4.2 4520 + regenerate-unicode-properties: 8.2.0 4521 + regjsgen: 0.5.2 4522 + regjsparser: 0.6.9 4523 + unicode-match-property-ecmascript: 1.0.4 4524 + unicode-match-property-value-ecmascript: 1.2.0 4525 + 4526 + regjsgen@0.5.2: {} 4527 + 4528 + regjsparser@0.6.9: 4529 + dependencies: 4530 + jsesc: 0.5.0 4531 + 4532 + resolve-from@4.0.0: {} 4533 + 4534 + resolve-from@5.0.0: {} 4535 + 4536 + resolve@1.19.0: 4537 + dependencies: 4538 + is-core-module: 2.16.1 4539 + path-parse: 1.0.7 4540 + 4541 + resolve@1.22.10: 4542 + dependencies: 4543 + is-core-module: 2.16.1 4544 + path-parse: 1.0.7 4545 + supports-preserve-symlinks-flag: 1.0.0 4546 + 4547 + restore-cursor@4.0.0: 4548 + dependencies: 4549 + onetime: 5.1.2 4550 + signal-exit: 3.0.7 4551 + 4552 + reusify@1.1.0: {} 4553 + 4554 + rfdc@1.4.1: {} 4555 + 4556 + rimraf@3.0.2: 4557 + dependencies: 4558 + glob: 7.2.3 4559 + 4560 + rollup-plugin-cjs-check@1.0.3(rollup@3.29.5): 4561 + dependencies: 4562 + '@rollup/pluginutils': 5.1.4(rollup@3.29.5) 4563 + cjs-module-lexer: 1.4.3 4564 + rollup: 3.29.5 4565 + 4566 + rollup-plugin-dts@5.3.1(rollup@3.29.5)(typescript@4.9.5): 4567 + dependencies: 4568 + magic-string: 0.30.17 4569 + rollup: 3.29.5 4570 + typescript: 4.9.5 4571 + optionalDependencies: 4572 + '@babel/code-frame': 7.26.2 4573 + 4574 + rollup@3.29.5: 4575 + optionalDependencies: 4576 + fsevents: 2.3.3 4577 + 4578 + rollup@4.34.9: 4579 + dependencies: 4580 + '@types/estree': 1.0.6 4581 + optionalDependencies: 4582 + '@rollup/rollup-android-arm-eabi': 4.34.9 4583 + '@rollup/rollup-android-arm64': 4.34.9 4584 + '@rollup/rollup-darwin-arm64': 4.34.9 4585 + '@rollup/rollup-darwin-x64': 4.34.9 4586 + '@rollup/rollup-freebsd-arm64': 4.34.9 4587 + '@rollup/rollup-freebsd-x64': 4.34.9 4588 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 4589 + '@rollup/rollup-linux-arm-musleabihf': 4.34.9 4590 + '@rollup/rollup-linux-arm64-gnu': 4.34.9 4591 + '@rollup/rollup-linux-arm64-musl': 4.34.9 4592 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 4593 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 4594 + '@rollup/rollup-linux-riscv64-gnu': 4.34.9 4595 + '@rollup/rollup-linux-s390x-gnu': 4.34.9 4596 + '@rollup/rollup-linux-x64-gnu': 4.34.9 4597 + '@rollup/rollup-linux-x64-musl': 4.34.9 4598 + '@rollup/rollup-win32-arm64-msvc': 4.34.9 4599 + '@rollup/rollup-win32-ia32-msvc': 4.34.9 4600 + '@rollup/rollup-win32-x64-msvc': 4.34.9 4601 + fsevents: 2.3.3 4602 + 4603 + run-parallel@1.2.0: 4604 + dependencies: 4605 + queue-microtask: 1.2.3 4606 + 4607 + safe-array-concat@1.1.3: 4608 + dependencies: 4609 + call-bind: 1.0.8 4610 + call-bound: 1.0.4 4611 + get-intrinsic: 1.3.0 4612 + has-symbols: 1.1.0 4613 + isarray: 2.0.5 4614 + 4615 + safe-push-apply@1.0.0: 4616 + dependencies: 4617 + es-errors: 1.3.0 4618 + isarray: 2.0.5 4619 + 4620 + safe-regex-test@1.1.0: 4621 + dependencies: 4622 + call-bound: 1.0.4 4623 + es-errors: 1.3.0 4624 + is-regex: 1.2.1 4625 + 4626 + safer-buffer@2.1.2: {} 4627 + 4628 + semver-compare@1.0.0: {} 4629 + 4630 + semver-regex@3.1.4: {} 4631 + 4632 + semver@5.7.2: {} 4633 + 4634 + semver@7.7.1: {} 4635 + 4636 + set-function-length@1.2.2: 4637 + dependencies: 4638 + define-data-property: 1.1.4 4639 + es-errors: 1.3.0 4640 + function-bind: 1.1.2 4641 + get-intrinsic: 1.3.0 4642 + gopd: 1.2.0 4643 + has-property-descriptors: 1.0.2 4644 + 4645 + set-function-name@2.0.2: 4646 + dependencies: 4647 + define-data-property: 1.1.4 4648 + es-errors: 1.3.0 4649 + functions-have-names: 1.2.3 4650 + has-property-descriptors: 1.0.2 4651 + 4652 + set-proto@1.0.0: 4653 + dependencies: 4654 + dunder-proto: 1.0.1 4655 + es-errors: 1.3.0 4656 + es-object-atoms: 1.1.1 4657 + 4658 + shebang-command@1.2.0: 4659 + dependencies: 4660 + shebang-regex: 1.0.0 4661 + 4662 + shebang-command@2.0.0: 4663 + dependencies: 4664 + shebang-regex: 3.0.0 4665 + 4666 + shebang-regex@1.0.0: {} 4667 + 4668 + shebang-regex@3.0.0: {} 4669 + 4670 + shell-quote@1.8.2: {} 4671 + 4672 + shelljs@0.8.5: 4673 + dependencies: 4674 + glob: 7.2.3 4675 + interpret: 1.4.0 4676 + rechoir: 0.6.2 4677 + 4678 + side-channel-list@1.0.0: 4679 + dependencies: 4680 + es-errors: 1.3.0 4681 + object-inspect: 1.13.4 4682 + 4683 + side-channel-map@1.0.1: 4684 + dependencies: 4685 + call-bound: 1.0.4 4686 + es-errors: 1.3.0 4687 + get-intrinsic: 1.3.0 4688 + object-inspect: 1.13.4 4689 + 4690 + side-channel-weakmap@1.0.2: 4691 + dependencies: 4692 + call-bound: 1.0.4 4693 + es-errors: 1.3.0 4694 + get-intrinsic: 1.3.0 4695 + object-inspect: 1.13.4 4696 + side-channel-map: 1.0.1 4697 + 4698 + side-channel@1.1.0: 4699 + dependencies: 4700 + es-errors: 1.3.0 4701 + object-inspect: 1.13.4 4702 + side-channel-list: 1.0.0 4703 + side-channel-map: 1.0.1 4704 + side-channel-weakmap: 1.0.2 4705 + 4706 + siginfo@2.0.0: {} 4707 + 4708 + signal-exit@3.0.7: {} 4709 + 4710 + signal-exit@4.1.0: {} 4711 + 4712 + slash@3.0.0: {} 4713 + 4714 + slice-ansi@5.0.0: 4715 + dependencies: 4716 + ansi-styles: 6.2.1 4717 + is-fullwidth-code-point: 4.0.0 4718 + 4719 + source-map-js@1.2.1: {} 4720 + 4721 + source-map-support@0.5.21: 4722 + dependencies: 4723 + buffer-from: 1.1.2 4724 + source-map: 0.6.1 4725 + 4726 + source-map@0.6.1: {} 4727 + 4728 + sourcemap-codec@1.4.8: {} 4729 + 4730 + spawndamnit@3.0.1: 4731 + dependencies: 4732 + cross-spawn: 7.0.6 4733 + signal-exit: 4.1.0 4734 + 4735 + spdx-correct@3.2.0: 4736 + dependencies: 4737 + spdx-expression-parse: 3.0.1 4738 + spdx-license-ids: 3.0.21 4739 + 4740 + spdx-exceptions@2.5.0: {} 4741 + 4742 + spdx-expression-parse@3.0.1: 4743 + dependencies: 4744 + spdx-exceptions: 2.5.0 4745 + spdx-license-ids: 3.0.21 4746 + 4747 + spdx-license-ids@3.0.21: {} 4748 + 4749 + sprintf-js@1.0.3: {} 4750 + 4751 + stackback@0.0.2: {} 4752 + 4753 + std-env@3.8.1: {} 4754 + 4755 + string-argv@0.3.2: {} 4756 + 4757 + string-width@4.2.3: 4758 + dependencies: 4759 + emoji-regex: 8.0.0 4760 + is-fullwidth-code-point: 3.0.0 4761 + strip-ansi: 6.0.1 4762 + 4763 + string-width@5.1.2: 4764 + dependencies: 4765 + eastasianwidth: 0.2.0 4766 + emoji-regex: 9.2.2 4767 + strip-ansi: 7.1.0 4768 + 4769 + string.prototype.padend@3.1.6: 4770 + dependencies: 4771 + call-bind: 1.0.8 4772 + define-properties: 1.2.1 4773 + es-abstract: 1.23.9 4774 + es-object-atoms: 1.1.1 4775 + 4776 + string.prototype.trim@1.2.10: 4777 + dependencies: 4778 + call-bind: 1.0.8 4779 + call-bound: 1.0.4 4780 + define-data-property: 1.1.4 4781 + define-properties: 1.2.1 4782 + es-abstract: 1.23.9 4783 + es-object-atoms: 1.1.1 4784 + has-property-descriptors: 1.0.2 4785 + 4786 + string.prototype.trimend@1.0.9: 4787 + dependencies: 4788 + call-bind: 1.0.8 4789 + call-bound: 1.0.4 4790 + define-properties: 1.2.1 4791 + es-object-atoms: 1.1.1 4792 + 4793 + string.prototype.trimstart@1.0.8: 4794 + dependencies: 4795 + call-bind: 1.0.8 4796 + define-properties: 1.2.1 4797 + es-object-atoms: 1.1.1 4798 + 4799 + strip-ansi@6.0.1: 4800 + dependencies: 4801 + ansi-regex: 5.0.1 4802 + 4803 + strip-ansi@7.1.0: 4804 + dependencies: 4805 + ansi-regex: 6.1.0 4806 + 4807 + strip-bom@3.0.0: {} 4808 + 4809 + strip-final-newline@3.0.0: {} 4810 + 4811 + strip-json-comments@3.1.1: {} 4812 + 4813 + strip-literal@2.1.1: 4814 + dependencies: 4815 + js-tokens: 9.0.1 4816 + 4817 + sucrase@3.35.0: 4818 + dependencies: 4819 + '@jridgewell/gen-mapping': 0.3.8 4820 + commander: 4.1.1 4821 + glob: 10.4.5 4822 + lines-and-columns: 1.2.4 4823 + mz: 2.7.0 4824 + pirates: 4.0.6 4825 + ts-interface-checker: 0.1.13 4826 + 4827 + supports-color@5.5.0: 4828 + dependencies: 4829 + has-flag: 3.0.0 4830 + 4831 + supports-color@7.2.0: 4832 + dependencies: 4833 + has-flag: 4.0.0 4834 + 4835 + supports-preserve-symlinks-flag@1.0.0: {} 4836 + 4837 + term-size@2.2.1: {} 4838 + 4839 + terser@5.39.0: 4840 + dependencies: 4841 + '@jridgewell/source-map': 0.3.6 4842 + acorn: 8.14.0 4843 + commander: 2.20.3 4844 + source-map-support: 0.5.21 4845 + 4846 + text-table@0.2.0: {} 4847 + 4848 + thenify-all@1.6.0: 4849 + dependencies: 4850 + thenify: 3.3.1 4851 + 4852 + thenify@3.3.1: 4853 + dependencies: 4854 + any-promise: 1.3.0 4855 + 4856 + tinybench@2.9.0: {} 4857 + 4858 + tinypool@0.8.4: {} 4859 + 4860 + tinyspy@2.2.1: {} 4861 + 4862 + to-regex-range@5.0.1: 4863 + dependencies: 4864 + is-number: 7.0.0 4865 + 4866 + tr46@0.0.3: {} 4867 + 4868 + ts-interface-checker@0.1.13: {} 4869 + 4870 + tslib@1.14.1: {} 4871 + 4872 + tslib@2.8.1: {} 4873 + 4874 + tsutils@3.21.0(typescript@4.9.5): 4875 + dependencies: 4876 + tslib: 1.14.1 4877 + typescript: 4.9.5 4878 + 4879 + type-check@0.4.0: 4880 + dependencies: 4881 + prelude-ls: 1.2.1 4882 + 4883 + type-detect@4.1.0: {} 4884 + 4885 + type-fest@0.20.2: {} 4886 + 4887 + type-fest@1.4.0: {} 4888 + 4889 + typed-array-buffer@1.0.3: 4890 + dependencies: 4891 + call-bound: 1.0.4 4892 + es-errors: 1.3.0 4893 + is-typed-array: 1.1.15 4894 + 4895 + typed-array-byte-length@1.0.3: 4896 + dependencies: 4897 + call-bind: 1.0.8 4898 + for-each: 0.3.5 4899 + gopd: 1.2.0 4900 + has-proto: 1.2.0 4901 + is-typed-array: 1.1.15 4902 + 4903 + typed-array-byte-offset@1.0.4: 4904 + dependencies: 4905 + available-typed-arrays: 1.0.7 4906 + call-bind: 1.0.8 4907 + for-each: 0.3.5 4908 + gopd: 1.2.0 4909 + has-proto: 1.2.0 4910 + is-typed-array: 1.1.15 4911 + reflect.getprototypeof: 1.0.10 4912 + 4913 + typed-array-length@1.0.7: 4914 + dependencies: 4915 + call-bind: 1.0.8 4916 + for-each: 0.3.5 4917 + gopd: 1.2.0 4918 + is-typed-array: 1.1.15 4919 + possible-typed-array-names: 1.1.0 4920 + reflect.getprototypeof: 1.0.10 4921 + 4922 + typescript-compiler@1.4.1-2: {} 4923 + 4924 + typescript@4.4.4: {} 4925 + 4926 + typescript@4.9.5: {} 4927 + 4928 + ufo@1.5.4: {} 4929 + 4930 + unbox-primitive@1.1.0: 4931 + dependencies: 4932 + call-bound: 1.0.4 4933 + has-bigints: 1.1.0 4934 + has-symbols: 1.1.0 4935 + which-boxed-primitive: 1.1.1 4936 + 4937 + undici-types@6.20.0: 4938 + optional: true 4939 + 4940 + unicode-canonical-property-names-ecmascript@1.0.4: {} 4941 + 4942 + unicode-match-property-ecmascript@1.0.4: 4943 + dependencies: 4944 + unicode-canonical-property-names-ecmascript: 1.0.4 4945 + unicode-property-aliases-ecmascript: 1.1.0 4946 + 4947 + unicode-match-property-value-ecmascript@1.2.0: {} 4948 + 4949 + unicode-property-aliases-ecmascript@1.1.0: {} 4950 + 4951 + universalify@0.1.2: {} 4952 + 4953 + uri-js@4.4.1: 4954 + dependencies: 4955 + punycode: 2.3.1 4956 + 4957 + validate-npm-package-license@3.0.4: 4958 + dependencies: 4959 + spdx-correct: 3.2.0 4960 + spdx-expression-parse: 3.0.1 4961 + 4962 + vite-node@1.6.1(@types/node@22.13.9)(terser@5.39.0): 4963 + dependencies: 4964 + cac: 6.7.14 4965 + debug: 4.4.0 4966 + pathe: 1.1.2 4967 + picocolors: 1.1.1 4968 + vite: 5.4.14(@types/node@22.13.9)(terser@5.39.0) 4969 + transitivePeerDependencies: 4970 + - '@types/node' 4971 + - less 4972 + - lightningcss 4973 + - sass 4974 + - sass-embedded 4975 + - stylus 4976 + - sugarss 4977 + - supports-color 4978 + - terser 4979 + 4980 + vite@5.4.14(@types/node@22.13.9)(terser@5.39.0): 4981 + dependencies: 4982 + esbuild: 0.21.5 4983 + postcss: 8.5.3 4984 + rollup: 4.34.9 4985 + optionalDependencies: 4986 + '@types/node': 22.13.9 4987 + fsevents: 2.3.3 4988 + terser: 5.39.0 4989 + 4990 + vitest@1.6.1(@types/node@22.13.9)(terser@5.39.0): 4991 + dependencies: 4992 + '@vitest/expect': 1.6.1 4993 + '@vitest/runner': 1.6.1 4994 + '@vitest/snapshot': 1.6.1 4995 + '@vitest/spy': 1.6.1 4996 + '@vitest/utils': 1.6.1 4997 + acorn-walk: 8.3.4 4998 + chai: 4.5.0 4999 + debug: 4.4.0 5000 + execa: 8.0.1 5001 + local-pkg: 0.5.1 5002 + magic-string: 0.30.17 5003 + pathe: 1.1.2 5004 + picocolors: 1.1.1 5005 + std-env: 3.8.1 5006 + strip-literal: 2.1.1 5007 + tinybench: 2.9.0 5008 + tinypool: 0.8.4 5009 + vite: 5.4.14(@types/node@22.13.9)(terser@5.39.0) 5010 + vite-node: 1.6.1(@types/node@22.13.9)(terser@5.39.0) 5011 + why-is-node-running: 2.3.0 5012 + optionalDependencies: 5013 + '@types/node': 22.13.9 5014 + transitivePeerDependencies: 5015 + - less 5016 + - lightningcss 5017 + - sass 5018 + - sass-embedded 5019 + - stylus 5020 + - sugarss 5021 + - supports-color 5022 + - terser 5023 + 5024 + webidl-conversions@3.0.1: {} 5025 + 5026 + whatwg-url@5.0.0: 5027 + dependencies: 5028 + tr46: 0.0.3 5029 + webidl-conversions: 3.0.1 5030 + 5031 + which-boxed-primitive@1.1.1: 5032 + dependencies: 5033 + is-bigint: 1.1.0 5034 + is-boolean-object: 1.2.2 5035 + is-number-object: 1.1.1 5036 + is-string: 1.1.1 5037 + is-symbol: 1.1.1 5038 + 5039 + which-builtin-type@1.2.1: 5040 + dependencies: 5041 + call-bound: 1.0.4 5042 + function.prototype.name: 1.1.8 5043 + has-tostringtag: 1.0.2 5044 + is-async-function: 2.1.1 5045 + is-date-object: 1.1.0 5046 + is-finalizationregistry: 1.1.1 5047 + is-generator-function: 1.1.0 5048 + is-regex: 1.2.1 5049 + is-weakref: 1.1.1 5050 + isarray: 2.0.5 5051 + which-boxed-primitive: 1.1.1 5052 + which-collection: 1.0.2 5053 + which-typed-array: 1.1.18 5054 + 5055 + which-collection@1.0.2: 5056 + dependencies: 5057 + is-map: 2.0.3 5058 + is-set: 2.0.3 5059 + is-weakmap: 2.0.2 5060 + is-weakset: 2.0.4 5061 + 5062 + which-pm-runs@1.1.0: {} 5063 + 5064 + which-typed-array@1.1.18: 5065 + dependencies: 5066 + available-typed-arrays: 1.0.7 5067 + call-bind: 1.0.8 5068 + call-bound: 1.0.4 5069 + for-each: 0.3.5 5070 + gopd: 1.2.0 5071 + has-tostringtag: 1.0.2 5072 + 5073 + which@1.3.1: 5074 + dependencies: 5075 + isexe: 2.0.0 5076 + 5077 + which@2.0.2: 5078 + dependencies: 5079 + isexe: 2.0.0 5080 + 5081 + why-is-node-running@2.3.0: 5082 + dependencies: 5083 + siginfo: 2.0.0 5084 + stackback: 0.0.2 5085 + 5086 + word-wrap@1.2.5: {} 5087 + 5088 + wrap-ansi@7.0.0: 5089 + dependencies: 5090 + ansi-styles: 4.3.0 5091 + string-width: 4.2.3 5092 + strip-ansi: 6.0.1 5093 + 5094 + wrap-ansi@8.1.0: 5095 + dependencies: 5096 + ansi-styles: 6.2.1 5097 + string-width: 5.1.2 5098 + strip-ansi: 7.1.0 5099 + 5100 + wrappy@1.0.2: {} 5101 + 5102 + yaml@1.10.2: {} 5103 + 5104 + yaml@2.3.1: {} 5105 + 5106 + yocto-queue@0.1.0: {} 5107 + 5108 + yocto-queue@1.1.1: {} 5109 + 5110 + zen-observable@0.10.0: {}
+125
scripts/changelog.js
··· 1 + const { config } = require('dotenv'); 2 + const { getInfo } = require('@changesets/get-github-info'); 3 + 4 + config(); 5 + 6 + const REPO = '0no-co/wonka'; 7 + const SEE_LINE = /^See:\s*(.*)/i; 8 + const TRAILING_CHAR = /[.;:]$/g; 9 + const listFormatter = new Intl.ListFormat('en-US'); 10 + 11 + const getSummaryLines = cs => { 12 + let lines = cs.summary.trim().split(/\r?\n/); 13 + if (!lines.some(line => /```/.test(line))) { 14 + lines = lines.map(l => l.trim()).filter(Boolean); 15 + const size = lines.length; 16 + if (size > 0) { 17 + lines[size - 1] = lines[size - 1].replace(TRAILING_CHAR, ''); 18 + } 19 + } 20 + return lines; 21 + }; 22 + 23 + /** Creates a "(See X)" string from a template */ 24 + const templateSeeRef = links => { 25 + const humanReadableLinks = links.filter(Boolean).map(link => { 26 + if (typeof link === 'string') return link; 27 + return link.pull || link.commit; 28 + }); 29 + 30 + const size = humanReadableLinks.length; 31 + if (size === 0) return ''; 32 + 33 + const str = listFormatter.format(humanReadableLinks); 34 + return `(See ${str})`; 35 + }; 36 + 37 + const changelogFunctions = { 38 + getDependencyReleaseLine: async (changesets, dependenciesUpdated) => { 39 + if (dependenciesUpdated.length === 0) return ''; 40 + 41 + const dependenciesLinks = await Promise.all( 42 + changesets.map(async cs => { 43 + if (!cs.commit) return undefined; 44 + 45 + const lines = getSummaryLines(cs); 46 + const prLine = lines.find(line => SEE_LINE.test(line)); 47 + if (prLine) { 48 + const match = prLine.match(SEE_LINE); 49 + return (match && match[1].trim()) || undefined; 50 + } 51 + 52 + const { links } = await getInfo({ 53 + repo: REPO, 54 + commit: cs.commit, 55 + }); 56 + 57 + return links; 58 + }) 59 + ); 60 + 61 + let changesetLink = '- Updated dependencies'; 62 + 63 + const seeRef = templateSeeRef(dependenciesLinks); 64 + if (seeRef) changesetLink += ` ${seeRef}`; 65 + 66 + const detailsLinks = dependenciesUpdated.map(dep => { 67 + return ` - ${dep.name}@${dep.newVersion}`; 68 + }); 69 + 70 + return [changesetLink, ...detailsLinks].join('\n'); 71 + }, 72 + getReleaseLine: async (changeset, type) => { 73 + let pull, commit, user; 74 + 75 + const lines = getSummaryLines(changeset); 76 + const prLineIndex = lines.findIndex(line => SEE_LINE.test(line)); 77 + if (prLineIndex > -1) { 78 + const match = lines[prLineIndex].match(SEE_LINE); 79 + pull = (match && match[1].trim()) || undefined; 80 + lines.splice(prLineIndex, 1); 81 + } 82 + 83 + const [firstLine, ...futureLines] = lines; 84 + 85 + if (changeset.commit && !pull) { 86 + const { links } = await getInfo({ 87 + repo: REPO, 88 + commit: changeset.commit, 89 + }); 90 + 91 + pull = links.pull || undefined; 92 + commit = links.commit || undefined; 93 + user = links.user || undefined; 94 + } 95 + 96 + let annotation = ''; 97 + if (type === 'patch' && /^\s*fix/i.test(firstLine)) { 98 + annotation = '⚠️ '; 99 + } 100 + 101 + let str = `- ${annotation}${firstLine}`; 102 + if (futureLines.length > 0) { 103 + str += `\n${futureLines.map(l => ` ${l}`).join('\n')}`; 104 + } 105 + 106 + const endsWithParagraph = /(?<=(?:[!;?.]|```) *)$/g; 107 + if (user && !endsWithParagraph) { 108 + str += `, by ${user}`; 109 + } else { 110 + str += `\nSubmitted by ${user}`; 111 + } 112 + 113 + if (pull || commit) { 114 + const seeRef = templateSeeRef([pull || commit]); 115 + if (seeRef) str += ` ${seeRef}`; 116 + } 117 + 118 + return str; 119 + }, 120 + }; 121 + 122 + module.exports = { 123 + ...changelogFunctions, 124 + default: changelogFunctions, 125 + };
+54
scripts/eslint-preset.js
··· 1 + module.exports = { 2 + parserOptions: { 3 + ecmaVersion: 9, 4 + sourceType: 'module', 5 + ecmaFeatures: { 6 + modules: true, 7 + }, 8 + }, 9 + extends: ['prettier'], 10 + plugins: ['prettier', 'tsdoc'], 11 + ignorePatterns: ['node_modules/', 'dist/', 'coverage/', 'perf/'], 12 + rules: { 13 + 'sort-keys': 'off', 14 + 'no-console': ['error', { allow: ['warn', 'error'] }], 15 + 'prefer-arrow/prefer-arrow-functions': 'off', 16 + 'prefer-rest-params': 'off', 17 + 18 + 'prettier/prettier': [ 19 + 'error', 20 + { 21 + singleQuote: true, 22 + arrowParens: 'avoid', 23 + trailingComma: 'es5', 24 + }, 25 + ], 26 + }, 27 + 28 + overrides: [ 29 + { 30 + files: ['*.ts'], 31 + parser: '@typescript-eslint/parser', 32 + extends: ['plugin:@typescript-eslint/recommended', 'prettier'], 33 + rules: { 34 + '@typescript-eslint/explicit-module-boundary-types': 'off', 35 + '@typescript-eslint/no-use-before-define': 'off', 36 + '@typescript-eslint/ban-types': 'off', 37 + '@typescript-eslint/ban-ts-comment': 'off', 38 + '@typescript-eslint/member-ordering': 'off', 39 + '@typescript-eslint/explicit-member-accessibility': 'off', 40 + '@typescript-eslint/no-object-literal-type-assertion': 'off', 41 + '@typescript-eslint/explicit-function-return-type': 'off', 42 + '@typescript-eslint/interface-name-prefix': 'off', 43 + '@typescript-eslint/no-non-null-assertion': 'off', 44 + '@typescript-eslint/no-misused-new': 'off', 45 + '@typescript-eslint/no-explicit-any': 'off', 46 + '@typescript-eslint/array-type': 'off', 47 + '@typescript-eslint/no-empty-function': 'off', 48 + '@typescript-eslint/no-unused-vars': 'off', 49 + 'prefer-rest-params': 'off', 50 + 'tsdoc/syntax': 'error', 51 + }, 52 + }, 53 + ], 54 + };
+32
scripts/flow-typings-plugin.mjs
··· 1 + import { compiler, beautify } from 'flowgen'; 2 + 3 + function flowTypings() { 4 + return { 5 + name: 'flow-typings', 6 + async renderChunk(code, chunk) { 7 + if (chunk.fileName.endsWith('d.ts')) { 8 + // NOTE: Computed property names will be omitted 9 + code = code.replace(/\[Symbol\.\w+\][?()]*:(?:.*);\n?/g, ''); 10 + 11 + let flowdef = compiler.compileDefinitionString(code, { 12 + jsdoc: false, 13 + }); 14 + 15 + flowdef = beautify(flowdef); 16 + flowdef = flowdef.replace(/import/g, 'import type'); 17 + flowdef = `// @flow\n\n${flowdef}`; 18 + 19 + this.emitFile({ 20 + type: 'asset', 21 + name: chunk.name, 22 + fileName: `${chunk.name}.js.flow`, 23 + source: flowdef, 24 + }); 25 + } 26 + 27 + return null; 28 + }, 29 + }; 30 + } 31 + 32 + export default flowTypings;
+18
scripts/prepare.js
··· 1 + const path = require('path'); 2 + const fs = require('fs'); 3 + 4 + const hookSource = path.resolve(__dirname, '../node_modules/husky-v4/sh/husky.sh'); 5 + const hook = path.resolve(__dirname, '../.git/hooks/husky.sh'); 6 + const localHook = path.resolve(__dirname, '../.git/hooks/husky.local.sh'); 7 + const gitConfig = path.resolve(__dirname, '../.git/config'); 8 + 9 + let script = fs.readFileSync(hookSource, { encoding: 'utf-8' }); 10 + script = script.replace(`$(basename "$0")`, `$(basename "$0" .sh)`); 11 + 12 + let config = fs.readFileSync(gitConfig, { encoding: 'utf-8' }); 13 + config = config.replace(/\s*hooksPath\s*=\s*\.husky\n?/g, '\n'); 14 + 15 + fs.writeFileSync(hook, script); 16 + fs.writeFileSync(gitConfig, config); 17 + 18 + fs.writeFileSync(localHook, 'packageManager=yarn\n' + 'cd "."\n');
+179
scripts/rollup.config.mjs
··· 1 + import commonjs from '@rollup/plugin-commonjs'; 2 + import resolve from '@rollup/plugin-node-resolve'; 3 + import sucrase from '@rollup/plugin-sucrase'; 4 + import buble from '@rollup/plugin-buble'; 5 + import terser from '@rollup/plugin-terser'; 6 + import cjsCheck from 'rollup-plugin-cjs-check'; 7 + import dts from 'rollup-plugin-dts'; 8 + 9 + import flowTypings from './flow-typings-plugin.mjs'; 10 + import * as types from '../src/types.mjs'; 11 + 12 + const minify = terser({ 13 + warnings: true, 14 + ecma: 2015, 15 + keep_fnames: true, 16 + ie8: false, 17 + compress: { 18 + pure_getters: true, 19 + toplevel: true, 20 + booleans_as_integers: false, 21 + keep_fnames: true, 22 + keep_fargs: true, 23 + if_return: false, 24 + ie8: false, 25 + sequences: false, 26 + loops: false, 27 + conditionals: false, 28 + join_vars: false, 29 + }, 30 + mangle: { 31 + module: true, 32 + keep_fnames: true, 33 + }, 34 + output: { 35 + beautify: true, 36 + braces: true, 37 + indent_level: 2, 38 + }, 39 + }); 40 + 41 + const commonPlugins = [ 42 + resolve({ 43 + extensions: ['.mjs', '.js', '.ts'], 44 + mainFields: ['module', 'jsnext', 'main'], 45 + preferBuiltins: false, 46 + browser: true, 47 + }), 48 + 49 + commonjs({ 50 + ignoreGlobal: true, 51 + include: /\/node_modules\//, 52 + extensions: ['.mjs', '.js', '.ts'], 53 + }), 54 + 55 + sucrase({ 56 + exclude: ['node_modules/**'], 57 + transforms: ['typescript'] 58 + }), 59 + ]; 60 + 61 + const jsPlugins = [ 62 + ...commonPlugins, 63 + cjsCheck(), 64 + 65 + buble({ 66 + transforms: { 67 + unicodeRegExp: false, 68 + defaultParameter: false, 69 + dangerousForOf: true, 70 + dangerousTaggedTemplateString: true, 71 + destructuring: false, 72 + asyncAwait: false, 73 + arrow: false, 74 + classes: false, 75 + computedProperty: false, 76 + conciseMethodProperty: false, 77 + templateString: false, 78 + objectRestSpread: false, 79 + parameterDestructuring: false, 80 + spreadRest: false, 81 + }, 82 + exclude: 'node_modules/**', 83 + }), 84 + ]; 85 + 86 + const dtsPlugins = [ 87 + ...commonPlugins, 88 + dts(), 89 + flowTypings(), 90 + ]; 91 + 92 + const output = format => { 93 + const extension = format === 'esm' ? '.mjs' : '.js'; 94 + return { 95 + chunkFileNames: '[hash]' + extension, 96 + entryFileNames: '[name]' + extension, 97 + dir: './dist', 98 + exports: 'named', 99 + sourcemap: true, 100 + sourcemapExcludeSources: true, 101 + indent: false, 102 + freeze: false, 103 + strict: false, 104 + format, 105 + // NOTE: All below settings are important for cjs-module-lexer to detect the export 106 + // When this changes (and terser mangles the output) this will interfere with Node.js ESM intercompatibility 107 + esModule: format !== 'esm', 108 + externalLiveBindings: format !== 'esm', 109 + generatedCode: { 110 + preset: 'es5', 111 + reservedNamesAsProps: false, 112 + objectShorthand: false, 113 + constBindings: false, 114 + }, 115 + plugins: [ 116 + { 117 + renderChunk(code, _chunk) { 118 + const kinds = Object.keys(types); 119 + const members = Object.values(types) 120 + .reduce((acc, item) => [...acc, ...Object.keys(item)], []) 121 + const enumRe = new RegExp(`(${kinds.join('|')})[.](${members.join('|')})`, 'g') 122 + return code.replace(enumRe, (match, kind, member) => { 123 + const value = (types[kind] && types[kind][member]); 124 + return value != null ? '' + value : match; 125 + }); 126 + }, 127 + }, 128 + 129 + minify, 130 + ] 131 + }; 132 + }; 133 + 134 + const commonConfig = { 135 + input: { 136 + wonka: './src/index.ts', 137 + }, 138 + onwarn: () => {}, 139 + external: () => false, 140 + treeshake: { 141 + unknownGlobalSideEffects: false, 142 + tryCatchDeoptimization: false, 143 + moduleSideEffects: false, 144 + }, 145 + }; 146 + 147 + const jsConfig = { 148 + ...commonConfig, 149 + plugins: jsPlugins, 150 + output: [ 151 + output('esm'), 152 + output('cjs'), 153 + ], 154 + }; 155 + 156 + const dtsConfig = { 157 + ...commonConfig, 158 + input: { 159 + wonka: './src/index.ts', 160 + }, 161 + onwarn: () => {}, 162 + external: () => false, 163 + plugins: dtsPlugins, 164 + treeshake: { 165 + unknownGlobalSideEffects: false, 166 + tryCatchDeoptimization: false, 167 + moduleSideEffects: false, 168 + }, 169 + output: { 170 + dir: './dist', 171 + entryFileNames: '[name].d.ts', 172 + format: 'es' 173 + }, 174 + }; 175 + 176 + export default [ 177 + jsConfig, 178 + dtsConfig, 179 + ];
+76
src/__tests__/combine.test.ts
··· 1 + import { describe, it, expect, beforeEach, vi } from 'vitest'; 2 + 3 + import { Source } from '../types'; 4 + import { fromValue, makeSubject } from '../sources'; 5 + import { forEach } from '../sinks'; 6 + 7 + import { 8 + passesPassivePull, 9 + passesActivePush, 10 + passesSinkClose, 11 + passesSourceEnd, 12 + passesSingleStart, 13 + passesStrictEnd, 14 + } from './compliance'; 15 + 16 + import { combine, zip } from '../combine'; 17 + 18 + beforeEach(() => { 19 + vi.useFakeTimers(); 20 + }); 21 + 22 + describe('zip', () => { 23 + const noop = (source: Source<any>) => zip([fromValue(0), source]); 24 + 25 + passesPassivePull(noop, [0, 0]); 26 + passesActivePush(noop, [0, 0]); 27 + passesSinkClose(noop); 28 + passesSourceEnd(noop, [0, 0]); 29 + passesSingleStart(noop); 30 + passesStrictEnd(noop); 31 + 32 + it('emits the zipped values of two sources', () => { 33 + const { source: sourceA, next: nextA } = makeSubject<number>(); 34 + const { source: sourceB, next: nextB } = makeSubject<number>(); 35 + const fn = vi.fn(); 36 + 37 + const combined = combine(sourceA, sourceB); 38 + forEach(fn)(combined); 39 + 40 + nextA(1); 41 + expect(fn).not.toHaveBeenCalled(); 42 + nextB(2); 43 + expect(fn).toHaveBeenCalledWith([1, 2]); 44 + }); 45 + 46 + it('emits the zipped values of three sources', () => { 47 + const { source: sourceA, next: nextA } = makeSubject<number>(); 48 + const { source: sourceB, next: nextB } = makeSubject<number>(); 49 + const { source: sourceC, next: nextC } = makeSubject<number>(); 50 + const fn = vi.fn(); 51 + 52 + const combined = zip([sourceA, sourceB, sourceC]); 53 + forEach(fn)(combined); 54 + 55 + nextA(1); 56 + expect(fn).not.toHaveBeenCalled(); 57 + nextB(2); 58 + expect(fn).not.toHaveBeenCalled(); 59 + nextC(3); 60 + expect(fn).toHaveBeenCalledWith([1, 2, 3]); 61 + }); 62 + 63 + it('emits the zipped values of a dictionary of two sources', () => { 64 + const { source: sourceA, next: nextA } = makeSubject<number>(); 65 + const { source: sourceB, next: nextB } = makeSubject<number>(); 66 + const fn = vi.fn(); 67 + 68 + const combined = zip({ a: sourceA, b: sourceB }); 69 + forEach(fn)(combined); 70 + 71 + nextA(1); 72 + expect(fn).not.toHaveBeenCalled(); 73 + nextB(2); 74 + expect(fn).toHaveBeenCalledWith({ a: 1, b: 2 }); 75 + }); 76 + });
+406
src/__tests__/compliance.ts
··· 1 + import { it, expect, vi } from 'vitest'; 2 + 3 + import { Source, Sink, Operator, Signal, SignalKind, TalkbackKind, TalkbackFn } from '../types'; 4 + import { push, start } from '../helpers'; 5 + 6 + /* This tests a noop operator for passive Pull talkback signals. 7 + A Pull will be sent from the sink upwards and should pass through 8 + the operator until the source receives it, which then pushes a 9 + value down. */ 10 + export const passesPassivePull = (operator: Operator<any, any>, output: any = 0) => { 11 + it('responds to Pull talkback signals (spec)', () => { 12 + let talkback: TalkbackFn | null = null; 13 + let pushes = 0; 14 + const values: any[] = []; 15 + 16 + const source: Source<any> = sink => { 17 + sink( 18 + start(signal => { 19 + if (!pushes && signal === TalkbackKind.Pull) { 20 + pushes++; 21 + sink(push(0)); 22 + } 23 + }) 24 + ); 25 + }; 26 + 27 + const sink: Sink<any> = signal => { 28 + expect(signal).not.toBe(SignalKind.End); 29 + if (signal === SignalKind.End) { 30 + /*noop*/ 31 + } else if (signal.tag === SignalKind.Push) { 32 + values.push(signal[0]); 33 + } else { 34 + talkback = signal[0]; 35 + } 36 + }; 37 + 38 + operator(source)(sink); 39 + // The Start signal should always come in immediately 40 + expect(talkback).not.toBe(null); 41 + // No Push signals should be issued initially 42 + expect(values).toEqual([]); 43 + 44 + // When pulling a value we expect an immediate response 45 + talkback!(TalkbackKind.Pull); 46 + vi.runAllTimers(); 47 + expect(values).toEqual([output]); 48 + }); 49 + }; 50 + 51 + /* This tests a noop operator for regular, active Push signals. 52 + A Push will be sent downwards from the source, through the 53 + operator to the sink. Pull events should be let through from 54 + the sink after every Push event. */ 55 + export const passesActivePush = (operator: Operator<any, any>, result: any = 0) => { 56 + it('responds to eager Push signals (spec)', () => { 57 + const values: any[] = []; 58 + let talkback: TalkbackFn | null = null; 59 + let sink: Sink<any> | null = null; 60 + let pulls = 0; 61 + 62 + const source: Source<any> = _sink => { 63 + (sink = _sink)( 64 + start(signal => { 65 + if (signal === TalkbackKind.Pull) pulls++; 66 + }) 67 + ); 68 + }; 69 + 70 + operator(source)(signal => { 71 + expect(signal).not.toBe(SignalKind.End); 72 + if (signal === SignalKind.End) { 73 + /*noop*/ 74 + } else if (signal.tag === SignalKind.Start) { 75 + talkback = signal[0]; 76 + } else if (signal.tag === SignalKind.Push) { 77 + values.push(signal[0]); 78 + talkback!(TalkbackKind.Pull); 79 + } 80 + }); 81 + 82 + // No Pull signals should be issued initially 83 + expect(pulls).toBe(0); 84 + 85 + // When pushing a value we expect an immediate response 86 + sink!(push(0)); 87 + vi.runAllTimers(); 88 + expect(values).toEqual([result]); 89 + // Subsequently the Pull signal should have travelled upwards 90 + expect(pulls).toBe(1); 91 + }); 92 + }; 93 + 94 + /* This tests a noop operator for Close talkback signals from the sink. 95 + A Close signal will be sent, which should be forwarded to the source, 96 + which then ends the communication without sending an End signal. */ 97 + export const passesSinkClose = (operator: Operator<any, any>) => { 98 + it('responds to Close signals from sink (spec)', () => { 99 + let talkback: TalkbackFn | null = null; 100 + let closing = 0; 101 + 102 + const source: Source<any> = sink => { 103 + sink( 104 + start(signal => { 105 + if (signal === TalkbackKind.Pull && !closing) { 106 + sink(push(0)); 107 + } else if (signal === TalkbackKind.Close) { 108 + closing++; 109 + } 110 + }) 111 + ); 112 + }; 113 + 114 + const sink: Sink<any> = signal => { 115 + expect(signal).not.toBe(SignalKind.End); 116 + if (signal === SignalKind.End) { 117 + /*noop*/ 118 + } else if (signal.tag === SignalKind.Push) { 119 + talkback!(TalkbackKind.Close); 120 + } else { 121 + talkback = signal[0]; 122 + } 123 + }; 124 + 125 + operator(source)(sink); 126 + 127 + // When pushing a value we expect an immediate close signal 128 + talkback!(TalkbackKind.Pull); 129 + vi.runAllTimers(); 130 + expect(closing).toBe(1); 131 + }); 132 + }; 133 + 134 + /* This tests a noop operator for End signals from the source. 135 + A Push and End signal will be sent after the first Pull talkback 136 + signal from the sink, which shouldn't lead to any extra Close or Pull 137 + talkback signals. */ 138 + export const passesSourceEnd = (operator: Operator<any, any>, result: any = 0) => { 139 + it('passes on immediate Push then End signals from source (spec)', () => { 140 + const signals: Signal<any>[] = []; 141 + let talkback: TalkbackFn | null = null; 142 + let pulls = 0; 143 + let ending = 0; 144 + 145 + const source: Source<any> = sink => { 146 + sink( 147 + start(signal => { 148 + expect(signal).not.toBe(TalkbackKind.Close); 149 + if (signal === TalkbackKind.Pull) { 150 + pulls++; 151 + if (pulls === 1) { 152 + sink(push(0)); 153 + sink(SignalKind.End); 154 + } 155 + } 156 + }) 157 + ); 158 + }; 159 + 160 + const sink: Sink<any> = signal => { 161 + if (signal === SignalKind.End) { 162 + signals.push(signal); 163 + ending++; 164 + } else if (signal.tag === SignalKind.Push) { 165 + signals.push(signal); 166 + } else { 167 + talkback = signal[0]; 168 + } 169 + }; 170 + 171 + operator(source)(sink); 172 + 173 + // When pushing a value we expect an immediate Push then End signal 174 + talkback!(TalkbackKind.Pull); 175 + vi.runAllTimers(); 176 + expect(ending).toBe(1); 177 + expect(signals).toEqual([push(result), SignalKind.End]); 178 + // Also no additional pull event should be created by the operator 179 + expect(pulls).toBe(1); 180 + }); 181 + }; 182 + 183 + /* This tests a noop operator for End signals from the source 184 + after the first pull in response to another. 185 + This is similar to passesSourceEnd but more well behaved since 186 + mergeMap/switchMap/concatMap are eager operators. */ 187 + export const passesSourcePushThenEnd = (operator: Operator<any, any>, result: any = 0) => { 188 + it('passes on End signals from source (spec)', () => { 189 + const signals: Signal<any>[] = []; 190 + let talkback: TalkbackFn | null = null; 191 + let pulls = 0; 192 + let ending = 0; 193 + 194 + const source: Source<any> = sink => { 195 + sink( 196 + start(signal => { 197 + expect(signal).not.toBe(TalkbackKind.Close); 198 + if (signal === TalkbackKind.Pull) { 199 + pulls++; 200 + if (pulls <= 2) { 201 + sink(push(0)); 202 + } else { 203 + sink(SignalKind.End); 204 + } 205 + } 206 + }) 207 + ); 208 + }; 209 + 210 + const sink: Sink<any> = signal => { 211 + if (signal === SignalKind.End) { 212 + signals.push(signal); 213 + ending++; 214 + } else if (signal.tag === SignalKind.Push) { 215 + signals.push(signal); 216 + talkback!(TalkbackKind.Pull); 217 + } else { 218 + talkback = signal[0]; 219 + } 220 + }; 221 + 222 + operator(source)(sink); 223 + 224 + // When pushing a value we expect an immediate Push then End signal 225 + talkback!(TalkbackKind.Pull); 226 + vi.runAllTimers(); 227 + expect(ending).toBe(1); 228 + expect(pulls).toBe(3); 229 + expect(signals).toEqual([push(result), push(result), SignalKind.End]); 230 + }); 231 + }; 232 + 233 + /* This tests a noop operator for Start signals from the source. 234 + When the operator's sink is started by the source it'll receive 235 + a Start event. As a response it should never send more than one 236 + Start signals to the sink. */ 237 + export const passesSingleStart = (operator: Operator<any, any>) => { 238 + it('sends a single Start event to the incoming sink (spec)', () => { 239 + let starts = 0; 240 + 241 + const source: Source<any> = sink => { 242 + sink(start(() => {})); 243 + }; 244 + 245 + const sink: Sink<any> = signal => { 246 + if (signal !== SignalKind.End && signal.tag === SignalKind.Start) { 247 + starts++; 248 + } 249 + }; 250 + 251 + // When starting the operator we expect a single start event on the sink 252 + operator(source)(sink); 253 + expect(starts).toBe(1); 254 + }); 255 + }; 256 + 257 + /* This tests a noop operator for silence after End signals from the source. 258 + When the operator receives the End signal it shouldn't forward any other 259 + signals to the sink anymore. 260 + This isn't a strict requirement, but some operators should ensure that 261 + all sources are well behaved. This is particularly true for operators 262 + that either Close sources themselves or may operate on multiple sources. */ 263 + export const passesStrictEnd = (operator: Operator<any, any>) => { 264 + it('stops all signals after End has been received (spec: strict end)', () => { 265 + let pulls = 0; 266 + const signals: Signal<any>[] = []; 267 + 268 + const source: Source<any> = sink => { 269 + sink( 270 + start(signal => { 271 + if (signal === TalkbackKind.Pull) { 272 + pulls++; 273 + sink(SignalKind.End); 274 + sink(push(123)); 275 + } 276 + }) 277 + ); 278 + }; 279 + 280 + const sink: Sink<any> = signal => { 281 + if (signal === SignalKind.End) { 282 + signals.push(signal); 283 + } else if (signal.tag === SignalKind.Push) { 284 + signals.push(signal); 285 + } else { 286 + signal[0](TalkbackKind.Pull); 287 + } 288 + }; 289 + 290 + operator(source)(sink); 291 + 292 + // The Push signal should've been dropped 293 + vi.runAllTimers(); 294 + expect(signals).toEqual([SignalKind.End]); 295 + expect(pulls).toBe(1); 296 + }); 297 + 298 + it('stops all signals after Close has been received (spec: strict close)', () => { 299 + const signals: Signal<any>[] = []; 300 + 301 + const source: Source<any> = sink => { 302 + sink( 303 + start(signal => { 304 + if (signal === TalkbackKind.Close) { 305 + sink(push(123)); 306 + } 307 + }) 308 + ); 309 + }; 310 + 311 + const sink: Sink<any> = signal => { 312 + if (signal === SignalKind.End) { 313 + signals.push(signal); 314 + } else if (signal.tag === SignalKind.Push) { 315 + signals.push(signal); 316 + } else { 317 + signal[0](TalkbackKind.Close); 318 + } 319 + }; 320 + 321 + operator(source)(sink); 322 + 323 + // The Push signal should've been dropped 324 + vi.runAllTimers(); 325 + expect(signals).toEqual([]); 326 + }); 327 + }; 328 + 329 + /* This tests an immediately closing operator for End signals to 330 + the sink and Close signals to the source. 331 + When an operator closes immediately we expect to see a Close 332 + signal at the source and an End signal to the sink, since the 333 + closing operator is expected to end the entire chain. */ 334 + export const passesCloseAndEnd = (closingOperator: Operator<any, any>) => { 335 + it('closes the source and ends the sink correctly (spec: ending operator)', () => { 336 + let closing = 0; 337 + let ending = 0; 338 + 339 + const source: Source<any> = sink => { 340 + sink( 341 + start(signal => { 342 + // For some operator tests we do need to send a single value 343 + if (signal === TalkbackKind.Pull) { 344 + sink(push(null)); 345 + } else { 346 + closing++; 347 + } 348 + }) 349 + ); 350 + }; 351 + 352 + const sink: Sink<any> = signal => { 353 + if (signal === SignalKind.End) { 354 + ending++; 355 + } else if (signal.tag === SignalKind.Start) { 356 + signal[0](TalkbackKind.Pull); 357 + } 358 + }; 359 + 360 + // We expect the operator to immediately end and close 361 + closingOperator(source)(sink); 362 + expect(closing).toBe(1); 363 + expect(ending).toBe(1); 364 + }); 365 + }; 366 + 367 + export const passesAsyncSequence = (operator: Operator<any, any>, result: any = 0) => { 368 + it('passes an async push with an async end (spec)', () => { 369 + let hasPushed = false; 370 + const signals: Signal<any>[] = []; 371 + 372 + const source: Source<any> = sink => { 373 + sink( 374 + start(signal => { 375 + if (signal === TalkbackKind.Pull && !hasPushed) { 376 + hasPushed = true; 377 + setTimeout(() => sink(push(0)), 10); 378 + setTimeout(() => sink(SignalKind.End), 20); 379 + } 380 + }) 381 + ); 382 + }; 383 + 384 + const sink: Sink<any> = signal => { 385 + if (signal === SignalKind.End) { 386 + signals.push(signal); 387 + } else if (signal.tag === SignalKind.Push) { 388 + signals.push(signal); 389 + } else { 390 + setTimeout(() => { 391 + signal[0](TalkbackKind.Pull); 392 + }, 5); 393 + } 394 + }; 395 + 396 + // We initially expect to see the push signal 397 + // Afterwards after all timers all other signals come in 398 + operator(source)(sink); 399 + expect(signals.length).toBe(0); 400 + vi.advanceTimersByTime(5); 401 + expect(hasPushed).toBeTruthy(); 402 + vi.runAllTimers(); 403 + 404 + expect(signals).toEqual([push(result), SignalKind.End]); 405 + }); 406 + };
+854
src/__tests__/operators.test.ts
··· 1 + import { describe, it, expect, beforeEach, vi } from 'vitest'; 2 + 3 + import { Source, Sink, Signal, SignalKind, TalkbackKind, TalkbackFn } from '../types'; 4 + import { push, start } from '../helpers'; 5 + 6 + import { 7 + passesPassivePull, 8 + passesActivePush, 9 + passesSinkClose, 10 + passesSourceEnd, 11 + passesSingleStart, 12 + passesStrictEnd, 13 + passesSourcePushThenEnd, 14 + passesAsyncSequence, 15 + passesCloseAndEnd, 16 + } from './compliance'; 17 + 18 + import * as sources from '../sources'; 19 + import * as sinks from '../sinks'; 20 + import * as operators from '../operators'; 21 + 22 + beforeEach(() => { 23 + vi.useFakeTimers(); 24 + }); 25 + 26 + describe('buffer', () => { 27 + const valueThenNever: Source<any> = sink => 28 + sink( 29 + start(signal => { 30 + if (signal === TalkbackKind.Pull) sink(push(null)); 31 + }) 32 + ); 33 + 34 + const noop = operators.buffer(valueThenNever); 35 + 36 + passesPassivePull(noop, [0]); 37 + passesActivePush(noop, [0]); 38 + passesSinkClose(noop); 39 + passesSourcePushThenEnd(noop, [0]); 40 + passesSingleStart(noop); 41 + passesStrictEnd(noop); 42 + 43 + it('emits batches of input values when a notifier emits', () => { 44 + const { source: notifier$, next: notify } = sources.makeSubject(); 45 + const { source: input$, next } = sources.makeSubject(); 46 + const fn = vi.fn(); 47 + 48 + sinks.forEach(fn)(operators.buffer(notifier$)(input$)); 49 + 50 + next(1); 51 + next(2); 52 + expect(fn).not.toHaveBeenCalled(); 53 + 54 + notify(null); 55 + expect(fn).toHaveBeenCalledWith([1, 2]); 56 + 57 + next(3); 58 + notify(null); 59 + expect(fn).toHaveBeenCalledWith([3]); 60 + }); 61 + }); 62 + 63 + describe('concatMap', () => { 64 + const noop = operators.concatMap(x => sources.fromValue(x)); 65 + passesPassivePull(noop); 66 + passesActivePush(noop); 67 + passesSinkClose(noop); 68 + passesSourcePushThenEnd(noop); 69 + passesSingleStart(noop); 70 + passesStrictEnd(noop); 71 + passesAsyncSequence(noop); 72 + 73 + // This synchronous test for concatMap will behave the same as mergeMap & switchMap 74 + it('emits values from each flattened synchronous source', () => { 75 + const { source, next, complete } = sources.makeSubject<number>(); 76 + const fn = vi.fn(); 77 + 78 + operators.concatMap((x: number) => sources.fromArray([x, x + 1]))(source)(fn); 79 + 80 + next(1); 81 + next(3); 82 + complete(); 83 + 84 + expect(fn).toHaveBeenCalledTimes(6); 85 + expect(fn.mock.calls).toEqual([ 86 + [start(expect.any(Function))], 87 + [push(1)], 88 + [push(2)], 89 + [push(3)], 90 + [push(4)], 91 + [SignalKind.End], 92 + ]); 93 + }); 94 + 95 + // This synchronous test for concatMap will behave the same as mergeMap & switchMap 96 + it('lets inner sources finish when outer source ends', () => { 97 + const signals: Signal<any>[] = []; 98 + const teardown = vi.fn(); 99 + const fn = (signal: Signal<any>) => { 100 + signals.push(signal); 101 + if (signal !== SignalKind.End && signal.tag === SignalKind.Start) { 102 + signal[0](TalkbackKind.Pull); 103 + signal[0](TalkbackKind.Close); 104 + } 105 + }; 106 + 107 + operators.concatMap(() => { 108 + return sources.make(() => teardown); 109 + })(sources.fromValue(null))(fn); 110 + 111 + expect(teardown).toHaveBeenCalled(); 112 + expect(signals).toEqual([start(expect.any(Function))]); 113 + }); 114 + 115 + // This asynchronous test for concatMap will behave differently than mergeMap & switchMap 116 + it('emits values from each flattened asynchronous source, one at a time', () => { 117 + const source = operators.delay<number>(4)(sources.fromArray([1, 10])); 118 + const fn = vi.fn(); 119 + 120 + sinks.forEach(fn)( 121 + operators.concatMap((x: number) => { 122 + return operators.delay(5)(sources.fromArray([x, x * 2])); 123 + })(source) 124 + ); 125 + 126 + vi.advanceTimersByTime(14); 127 + expect(fn.mock.calls).toEqual([[1], [2]]); 128 + 129 + vi.runAllTimers(); 130 + expect(fn.mock.calls).toEqual([[1], [2], [10], [20]]); 131 + }); 132 + 133 + it('works for fully asynchronous sources', () => { 134 + const fn = vi.fn(); 135 + 136 + sinks.forEach(fn)( 137 + operators.concatMap(() => { 138 + return sources.make(observer => { 139 + setTimeout(() => observer.next(1)); 140 + return () => {}; 141 + }); 142 + })(sources.fromValue(null)) 143 + ); 144 + 145 + vi.runAllTimers(); 146 + expect(fn).toHaveBeenCalledWith(1); 147 + }); 148 + 149 + it('emits synchronous values in order', () => { 150 + const values: any[] = []; 151 + 152 + sinks.forEach(x => values.push(x))( 153 + operators.concat([sources.fromArray([1, 2]), sources.fromArray([3, 4])]) 154 + ); 155 + 156 + expect(values).toEqual([1, 2, 3, 4]); 157 + }); 158 + }); 159 + 160 + describe('debounce', () => { 161 + const noop = operators.debounce(() => 0); 162 + passesPassivePull(noop); 163 + passesActivePush(noop); 164 + passesSinkClose(noop); 165 + passesSourceEnd(noop); 166 + passesSingleStart(noop); 167 + passesStrictEnd(noop); 168 + passesAsyncSequence(noop); 169 + 170 + it('waits for a specified amount of silence before emitting the last value', () => { 171 + const { source, next } = sources.makeSubject<number>(); 172 + const fn = vi.fn(); 173 + 174 + sinks.forEach(fn)(operators.debounce(() => 100)(source)); 175 + 176 + next(1); 177 + vi.advanceTimersByTime(50); 178 + expect(fn).not.toHaveBeenCalled(); 179 + 180 + next(2); 181 + vi.advanceTimersByTime(99); 182 + expect(fn).not.toHaveBeenCalled(); 183 + 184 + vi.advanceTimersByTime(1); 185 + expect(fn).toHaveBeenCalledWith(2); 186 + }); 187 + 188 + it('emits debounced value with delayed End signal', () => { 189 + const { source, next, complete } = sources.makeSubject<number>(); 190 + const fn = vi.fn(); 191 + 192 + sinks.forEach(fn)(operators.debounce(() => 100)(source)); 193 + 194 + next(1); 195 + complete(); 196 + vi.advanceTimersByTime(100); 197 + expect(fn).toHaveBeenCalled(); 198 + }); 199 + }); 200 + 201 + describe('delay', () => { 202 + const noop = operators.delay(0); 203 + passesPassivePull(noop); 204 + passesActivePush(noop); 205 + passesSinkClose(noop); 206 + passesSourceEnd(noop); 207 + passesSingleStart(noop); 208 + passesAsyncSequence(noop); 209 + 210 + it('delays outputs by a specified delay timeout value', () => { 211 + const { source, next } = sources.makeSubject(); 212 + const fn = vi.fn(); 213 + 214 + sinks.forEach(fn)(operators.delay(100)(source)); 215 + 216 + next(1); 217 + expect(fn).not.toHaveBeenCalled(); 218 + 219 + vi.advanceTimersByTime(100); 220 + expect(fn).toHaveBeenCalledWith(1); 221 + }); 222 + }); 223 + 224 + describe('filter', () => { 225 + const noop = operators.filter(() => true); 226 + passesPassivePull(noop); 227 + passesActivePush(noop); 228 + passesSinkClose(noop); 229 + passesSourceEnd(noop); 230 + passesSingleStart(noop); 231 + passesAsyncSequence(noop); 232 + 233 + it('prevents emissions for which a predicate fails', () => { 234 + const { source, next } = sources.makeSubject<boolean>(); 235 + const fn = vi.fn(); 236 + 237 + sinks.forEach((x: true) => { 238 + fn(x); 239 + })(operators.filter((x): x is true => !!x)(source)); 240 + 241 + next(false); 242 + expect(fn).not.toHaveBeenCalled(); 243 + 244 + next(true); 245 + expect(fn).toHaveBeenCalledWith(true); 246 + }); 247 + }); 248 + 249 + describe('map', () => { 250 + const noop = operators.map(x => x); 251 + passesPassivePull(noop); 252 + passesActivePush(noop); 253 + passesSinkClose(noop); 254 + passesSourceEnd(noop); 255 + passesSingleStart(noop); 256 + passesAsyncSequence(noop); 257 + 258 + it('maps over values given a transform function', () => { 259 + const { source, next } = sources.makeSubject<number>(); 260 + const fn = vi.fn(); 261 + 262 + sinks.forEach(fn)(operators.map((x: number) => x + 1)(source)); 263 + 264 + next(1); 265 + expect(fn).toHaveBeenCalledWith(2); 266 + }); 267 + }); 268 + 269 + describe('mergeMap', () => { 270 + const noop = operators.mergeMap(x => sources.fromValue(x)); 271 + passesPassivePull(noop); 272 + passesActivePush(noop); 273 + passesSinkClose(noop); 274 + passesSourcePushThenEnd(noop); 275 + passesSingleStart(noop); 276 + passesStrictEnd(noop); 277 + passesAsyncSequence(noop); 278 + 279 + // This synchronous test for mergeMap will behave the same as concatMap & switchMap 280 + it('emits values from each flattened synchronous source', () => { 281 + const { source, next, complete } = sources.makeSubject<number>(); 282 + const fn = vi.fn(); 283 + 284 + operators.mergeMap((x: number) => sources.fromArray([x, x + 1]))(source)(fn); 285 + 286 + next(1); 287 + next(3); 288 + complete(); 289 + 290 + expect(fn.mock.calls).toEqual([ 291 + [start(expect.any(Function))], 292 + [push(1)], 293 + [push(2)], 294 + [push(3)], 295 + [push(4)], 296 + [SignalKind.End], 297 + ]); 298 + }); 299 + 300 + // This synchronous test for mergeMap will behave the same as concatMap & switchMap 301 + it('lets inner sources finish when outer source ends', () => { 302 + const values: Signal<any>[] = []; 303 + const teardown = vi.fn(); 304 + const fn = (signal: Signal<any>) => { 305 + values.push(signal); 306 + if (signal !== SignalKind.End && signal.tag === SignalKind.Start) { 307 + signal[0](TalkbackKind.Pull); 308 + signal[0](TalkbackKind.Close); 309 + } 310 + }; 311 + 312 + operators.mergeMap(() => { 313 + return sources.make(() => teardown); 314 + })(sources.fromValue(null))(fn); 315 + 316 + expect(teardown).toHaveBeenCalled(); 317 + expect(values).toEqual([start(expect.any(Function))]); 318 + }); 319 + 320 + // This asynchronous test for mergeMap will behave differently than concatMap & switchMap 321 + it('emits values from each flattened asynchronous source simultaneously', () => { 322 + const source = operators.delay<number>(4)(sources.fromArray([1, 10])); 323 + const fn = vi.fn(); 324 + 325 + sinks.forEach(fn)( 326 + operators.mergeMap((x: number) => { 327 + return operators.delay(5)(sources.fromArray([x, x * 2])); 328 + })(source) 329 + ); 330 + 331 + vi.runAllTimers(); 332 + expect(fn.mock.calls).toEqual([[1], [10], [2], [20]]); 333 + }); 334 + 335 + it('emits synchronous values in order', () => { 336 + const values: any[] = []; 337 + 338 + sinks.forEach(x => values.push(x))( 339 + operators.merge([sources.fromArray([1, 2]), sources.fromArray([3, 4])]) 340 + ); 341 + 342 + expect(values).toEqual([1, 2, 3, 4]); 343 + }); 344 + }); 345 + 346 + describe('onEnd', () => { 347 + const noop = operators.onEnd(() => {}); 348 + passesPassivePull(noop); 349 + passesActivePush(noop); 350 + passesSinkClose(noop); 351 + passesSourceEnd(noop); 352 + passesStrictEnd(noop); 353 + passesSingleStart(noop); 354 + passesAsyncSequence(noop); 355 + 356 + it('calls a callback when the source ends', () => { 357 + const { source, next, complete } = sources.makeSubject<any>(); 358 + const fn = vi.fn(); 359 + 360 + sinks.forEach(() => {})(operators.onEnd(fn)(source)); 361 + 362 + next(null); 363 + expect(fn).not.toHaveBeenCalled(); 364 + 365 + complete(); 366 + expect(fn).toHaveBeenCalled(); 367 + }); 368 + }); 369 + 370 + describe('onPush', () => { 371 + const noop = operators.onPush(() => {}); 372 + passesPassivePull(noop); 373 + passesActivePush(noop); 374 + passesSinkClose(noop); 375 + passesSourceEnd(noop); 376 + passesStrictEnd(noop); 377 + passesSingleStart(noop); 378 + passesAsyncSequence(noop); 379 + 380 + it('calls a callback when the source emits', () => { 381 + const { source, next } = sources.makeSubject<number>(); 382 + const fn = vi.fn(); 383 + 384 + sinks.forEach(() => {})(operators.onPush(fn)(source)); 385 + 386 + next(1); 387 + expect(fn).toHaveBeenCalledWith(1); 388 + next(2); 389 + expect(fn).toHaveBeenCalledWith(2); 390 + }); 391 + 392 + it('is the same as `tap`', () => { 393 + expect(operators.onPush).toBe(operators.tap); 394 + }); 395 + }); 396 + 397 + describe('onStart', () => { 398 + const noop = operators.onStart(() => {}); 399 + passesPassivePull(noop); 400 + passesActivePush(noop); 401 + passesSinkClose(noop); 402 + passesSourceEnd(noop); 403 + passesSingleStart(noop); 404 + passesAsyncSequence(noop); 405 + 406 + it('is called when the source starts', () => { 407 + let sink: Sink<any>; 408 + 409 + const fn = vi.fn(); 410 + const source: Source<any> = _sink => { 411 + sink = _sink; 412 + }; 413 + 414 + sinks.forEach(() => {})(operators.onStart(fn)(source)); 415 + 416 + expect(fn).not.toHaveBeenCalled(); 417 + 418 + sink!(start(() => {})); 419 + expect(fn).toHaveBeenCalled(); 420 + }); 421 + }); 422 + 423 + describe('sample', () => { 424 + const valueThenNever: Source<any> = sink => 425 + sink( 426 + start(signal => { 427 + if (signal === TalkbackKind.Pull) sink(push(null)); 428 + }) 429 + ); 430 + 431 + const noop = operators.sample(valueThenNever); 432 + 433 + passesPassivePull(noop); 434 + passesActivePush(noop); 435 + passesSinkClose(noop); 436 + passesSourcePushThenEnd(noop); 437 + passesSingleStart(noop); 438 + passesStrictEnd(noop); 439 + 440 + it('emits the latest value when a notifier source emits', () => { 441 + const { source: notifier$, next: notify } = sources.makeSubject(); 442 + const { source: input$, next } = sources.makeSubject(); 443 + const fn = vi.fn(); 444 + 445 + sinks.forEach(fn)(operators.sample(notifier$)(input$)); 446 + 447 + next(1); 448 + next(2); 449 + expect(fn).not.toHaveBeenCalled(); 450 + 451 + notify(null); 452 + expect(fn).toHaveBeenCalledWith(2); 453 + }); 454 + }); 455 + 456 + describe('scan', () => { 457 + const noop = operators.scan<any, any>((_acc, x) => x, null); 458 + passesPassivePull(noop); 459 + passesActivePush(noop); 460 + passesSinkClose(noop); 461 + passesSourceEnd(noop); 462 + passesSingleStart(noop); 463 + passesAsyncSequence(noop); 464 + 465 + it('folds values continuously with a reducer and initial value', () => { 466 + const { source: input$, next } = sources.makeSubject<number>(); 467 + const fn = vi.fn(); 468 + 469 + const reducer = (acc: number, x: number) => acc + x; 470 + sinks.forEach(fn)(operators.scan(reducer, 0)(input$)); 471 + 472 + next(1); 473 + expect(fn).toHaveBeenCalledWith(1); 474 + next(2); 475 + expect(fn).toHaveBeenCalledWith(3); 476 + }); 477 + }); 478 + 479 + describe('share', () => { 480 + const noop = operators.share; 481 + passesPassivePull(noop); 482 + passesActivePush(noop); 483 + passesSinkClose(noop); 484 + passesSourceEnd(noop); 485 + passesSingleStart(noop); 486 + passesStrictEnd(noop); 487 + passesAsyncSequence(noop); 488 + 489 + it('shares output values between sinks', () => { 490 + let onPush = () => {}; 491 + 492 + const source: Source<any> = operators.share(sink => { 493 + sink(start(() => {})); 494 + onPush = () => { 495 + sink(push([0])); 496 + sink(SignalKind.End); 497 + }; 498 + }); 499 + 500 + const fnA = vi.fn(); 501 + const fnB = vi.fn(); 502 + 503 + sinks.forEach(fnA)(source); 504 + sinks.forEach(fnB)(source); 505 + onPush(); 506 + 507 + expect(fnA).toHaveBeenCalledWith([0]); 508 + expect(fnB).toHaveBeenCalledWith([0]); 509 + expect(fnA.mock.calls[0][0]).toBe(fnB.mock.calls[0][0]); 510 + }); 511 + 512 + it('completes the source when no more sink is listening', () => { 513 + let onPush = () => {}; 514 + 515 + const talkback = vi.fn(); 516 + const source: Source<any> = operators.share(sink => { 517 + sink(start(talkback)); 518 + onPush = () => { 519 + sink(push([0])); 520 + sink(push([1])); 521 + sink(SignalKind.End); 522 + }; 523 + }); 524 + 525 + const fnA = vi.fn(); 526 + const fnB = vi.fn(); 527 + 528 + sinks.forEach(fnA)(operators.take(1)(source)); 529 + sinks.forEach(fnB)(operators.take(1)(source)); 530 + onPush(); 531 + 532 + expect(fnA).toHaveBeenCalledWith([0]); 533 + expect(fnB).toHaveBeenCalledWith([0]); 534 + expect(fnA.mock.calls[0][0]).toBe(fnB.mock.calls[0][0]); 535 + expect(talkback).toHaveBeenCalledWith(TalkbackKind.Close); 536 + }); 537 + }); 538 + 539 + describe('skip', () => { 540 + const noop = operators.skip(0); 541 + passesPassivePull(noop); 542 + passesActivePush(noop); 543 + passesSinkClose(noop); 544 + passesSourceEnd(noop); 545 + passesSingleStart(noop); 546 + passesAsyncSequence(noop); 547 + 548 + it('skips a number of values before emitting normally', () => { 549 + const { source, next } = sources.makeSubject<number>(); 550 + const fn = vi.fn(); 551 + 552 + sinks.forEach(fn)(operators.skip(1)(source)); 553 + 554 + next(1); 555 + expect(fn).not.toHaveBeenCalled(); 556 + next(2); 557 + expect(fn).toHaveBeenCalledWith(2); 558 + }); 559 + }); 560 + 561 + describe('skipUntil', () => { 562 + const noop = operators.skipUntil(sources.fromValue(null)); 563 + passesPassivePull(noop); 564 + passesActivePush(noop); 565 + passesSinkClose(noop); 566 + passesSourceEnd(noop); 567 + passesSingleStart(noop); 568 + passesAsyncSequence(noop); 569 + passesStrictEnd(noop); 570 + 571 + it('skips values until the notifier source emits', () => { 572 + const { source: notifier$, next: notify } = sources.makeSubject(); 573 + const { source: input$, next } = sources.makeSubject<number>(); 574 + const fn = vi.fn(); 575 + 576 + sinks.forEach(fn)(operators.skipUntil(notifier$)(input$)); 577 + 578 + next(1); 579 + expect(fn).not.toHaveBeenCalled(); 580 + notify(null); 581 + next(2); 582 + expect(fn).toHaveBeenCalledWith(2); 583 + }); 584 + }); 585 + 586 + describe('skipWhile', () => { 587 + const noop = operators.skipWhile(() => false); 588 + passesPassivePull(noop); 589 + passesActivePush(noop); 590 + passesSinkClose(noop); 591 + passesSourceEnd(noop); 592 + passesSingleStart(noop); 593 + passesAsyncSequence(noop); 594 + 595 + it('skips values until one fails a predicate', () => { 596 + const { source, next } = sources.makeSubject<number>(); 597 + const fn = vi.fn(); 598 + 599 + sinks.forEach(fn)(operators.skipWhile((x: any) => x <= 1)(source)); 600 + 601 + next(1); 602 + expect(fn).not.toHaveBeenCalled(); 603 + next(2); 604 + expect(fn).toHaveBeenCalledWith(2); 605 + }); 606 + }); 607 + 608 + describe('switchMap', () => { 609 + const noop = operators.switchMap(x => sources.fromValue(x)); 610 + passesPassivePull(noop); 611 + passesActivePush(noop); 612 + passesSinkClose(noop); 613 + passesSourcePushThenEnd(noop); 614 + passesSingleStart(noop); 615 + passesStrictEnd(noop); 616 + passesAsyncSequence(noop); 617 + 618 + // This synchronous test for switchMap will behave the same as concatMap & mergeMap 619 + it('emits values from each flattened synchronous source', () => { 620 + const { source, next, complete } = sources.makeSubject<number>(); 621 + const fn = vi.fn(); 622 + 623 + operators.switchMap((x: number) => sources.fromArray([x, x + 1]))(source)(fn); 624 + 625 + next(1); 626 + next(3); 627 + complete(); 628 + 629 + expect(fn).toHaveBeenCalledTimes(6); 630 + expect(fn.mock.calls).toEqual([ 631 + [start(expect.any(Function))], 632 + [push(1)], 633 + [push(2)], 634 + [push(3)], 635 + [push(4)], 636 + [SignalKind.End], 637 + ]); 638 + }); 639 + 640 + // This synchronous test for switchMap will behave the same as concatMap & mergeMap 641 + it('lets inner sources finish when outer source ends', () => { 642 + const signals: Signal<any>[] = []; 643 + const teardown = vi.fn(); 644 + const fn = (signal: Signal<any>) => { 645 + signals.push(signal); 646 + if (signal !== SignalKind.End && signal.tag === SignalKind.Start) { 647 + signal[0](TalkbackKind.Pull); 648 + signal[0](TalkbackKind.Close); 649 + } 650 + }; 651 + 652 + operators.switchMap(() => { 653 + return sources.make(() => teardown); 654 + })(sources.fromValue(null))(fn); 655 + 656 + expect(teardown).toHaveBeenCalled(); 657 + expect(signals).toEqual([start(expect.any(Function))]); 658 + }); 659 + 660 + // This asynchronous test for switchMap will behave differently than concatMap & mergeMap 661 + it('emits values from each flattened asynchronous source, one at a time', () => { 662 + const source = operators.delay<number>(4)(sources.fromArray([1, 10])); 663 + const fn = vi.fn(); 664 + 665 + sinks.forEach(fn)( 666 + operators.switchMap((x: number) => 667 + operators.take(2)(operators.map((y: number) => x * (y + 1))(sources.interval(5))) 668 + )(source) 669 + ); 670 + 671 + vi.runAllTimers(); 672 + expect(fn.mock.calls).toEqual([[1], [10], [20]]); 673 + }); 674 + }); 675 + 676 + describe('take', () => { 677 + const noop = operators.take(10); 678 + passesPassivePull(noop); 679 + passesActivePush(noop); 680 + passesSinkClose(noop); 681 + passesSourceEnd(noop); 682 + passesSingleStart(noop); 683 + passesStrictEnd(noop); 684 + passesAsyncSequence(noop); 685 + 686 + passesCloseAndEnd(operators.take(0)); 687 + 688 + it('emits values until a maximum is reached', () => { 689 + const { source, next } = sources.makeSubject<number>(); 690 + const fn = vi.fn(); 691 + 692 + operators.take(1)(source)(fn); 693 + next(1); 694 + 695 + expect(fn).toHaveBeenCalledTimes(3); 696 + expect(fn.mock.calls).toEqual([[start(expect.any(Function))], [push(1)], [SignalKind.End]]); 697 + }); 698 + }); 699 + 700 + describe('takeUntil', () => { 701 + const noop = operators.takeUntil(sources.never); 702 + passesPassivePull(noop); 703 + passesActivePush(noop); 704 + passesSinkClose(noop); 705 + passesSourcePushThenEnd(noop); 706 + passesSingleStart(noop); 707 + passesStrictEnd(noop); 708 + passesAsyncSequence(noop); 709 + 710 + const ending = operators.takeUntil(sources.fromValue(null)); 711 + passesCloseAndEnd(ending); 712 + 713 + it('emits values until a notifier emits', () => { 714 + const { source: notifier$, next: notify } = sources.makeSubject<any>(); 715 + const { source: input$, next } = sources.makeSubject<number>(); 716 + const fn = vi.fn(); 717 + 718 + operators.takeUntil(notifier$)(input$)(fn); 719 + next(1); 720 + 721 + expect(fn).toHaveBeenCalledTimes(2); 722 + expect(fn.mock.calls).toEqual([[start(expect.any(Function))], [push(1)]]); 723 + 724 + notify(null); 725 + expect(fn).toHaveBeenCalledTimes(3); 726 + expect(fn.mock.calls[2][0]).toEqual(SignalKind.End); 727 + }); 728 + 729 + it('emits values until a notifier emits', () => { 730 + const { source: input$, next } = sources.makeSubject<number>(); 731 + const fn = vi.fn(); 732 + 733 + let hasClosed = false; 734 + 735 + operators.takeUntil(sink => { 736 + sink( 737 + start(talkback => { 738 + if (talkback === TalkbackKind.Close) { 739 + hasClosed = true; 740 + } else if (talkback === TalkbackKind.Pull && !hasClosed) { 741 + sink(push(1)); 742 + } 743 + }) 744 + ); 745 + })(input$)(fn); 746 + 747 + next(1); 748 + 749 + expect(fn).toHaveBeenCalledTimes(2); 750 + expect(fn.mock.calls).toEqual([[0], [start(expect.any(Function))]]); 751 + 752 + expect(hasClosed).toBe(true); 753 + }); 754 + }); 755 + 756 + describe('takeWhile', () => { 757 + const noop = operators.takeWhile(() => true); 758 + passesPassivePull(noop); 759 + passesActivePush(noop); 760 + passesSinkClose(noop); 761 + passesSourceEnd(noop); 762 + passesSingleStart(noop); 763 + passesAsyncSequence(noop); 764 + 765 + const ending = operators.takeWhile(() => false); 766 + passesCloseAndEnd(ending); 767 + 768 + it('emits values while a predicate passes for all values', () => { 769 + const { source, next } = sources.makeSubject<number>(); 770 + const fn = vi.fn(); 771 + 772 + operators.takeWhile((x: any) => x < 2)(source)(fn); 773 + next(1); 774 + next(2); 775 + next(3); 776 + 777 + expect(fn.mock.calls).toEqual([[start(expect.any(Function))], [push(1)], [SignalKind.End]]); 778 + }); 779 + 780 + it('emits values while a predicate passes for all values plus an additional one', () => { 781 + const { source, next } = sources.makeSubject<number>(); 782 + const fn = vi.fn(); 783 + 784 + operators.takeWhile((x: any) => x < 2, true)(source)(fn); 785 + next(1); 786 + next(2); 787 + next(3); 788 + 789 + expect(fn.mock.calls).toEqual([ 790 + [start(expect.any(Function))], 791 + [push(1)], 792 + [push(2)], 793 + [SignalKind.End], 794 + ]); 795 + }); 796 + }); 797 + 798 + describe('takeLast', () => { 799 + passesCloseAndEnd(operators.takeLast(0)); 800 + 801 + it('emits the last max values of an ended source', () => { 802 + const { source, next, complete } = sources.makeSubject<number>(); 803 + const signals: Signal<any>[] = []; 804 + 805 + let talkback: TalkbackFn; 806 + 807 + operators.takeLast(1)(source)(signal => { 808 + signals.push(signal); 809 + if (signal === SignalKind.End) { 810 + /*noop*/ 811 + } else if (signal.tag === SignalKind.Start) { 812 + (talkback = signal[0])(TalkbackKind.Pull); 813 + } else { 814 + talkback!(TalkbackKind.Pull); 815 + } 816 + }); 817 + 818 + next(1); 819 + next(2); 820 + 821 + expect(signals.length).toBe(0); 822 + complete(); 823 + 824 + expect(signals).toEqual([start(expect.any(Function)), push(2), SignalKind.End]); 825 + }); 826 + }); 827 + 828 + describe('throttle', () => { 829 + const noop = operators.throttle(() => 0); 830 + passesPassivePull(noop); 831 + passesActivePush(noop); 832 + passesSinkClose(noop); 833 + passesSourceEnd(noop); 834 + passesSingleStart(noop); 835 + passesAsyncSequence(noop); 836 + 837 + it('should ignore emissions for a period of time after a value', () => { 838 + const { source, next } = sources.makeSubject<number>(); 839 + const fn = vi.fn(); 840 + 841 + sinks.forEach(fn)(operators.throttle(() => 100)(source)); 842 + 843 + next(1); 844 + expect(fn).toHaveBeenCalledWith(1); 845 + vi.advanceTimersByTime(50); 846 + 847 + next(2); 848 + expect(fn).toHaveBeenCalledTimes(1); 849 + vi.advanceTimersByTime(50); 850 + 851 + next(3); 852 + expect(fn).toHaveBeenCalledWith(3); 853 + }); 854 + });
+487
src/__tests__/sinks.test.ts
··· 1 + import { describe, it, expect, vi } from 'vitest'; 2 + 3 + import { Source, Sink, SignalKind, TalkbackKind } from '../types'; 4 + import { push, start } from '../helpers'; 5 + 6 + import * as sinks from '../sinks'; 7 + import * as sources from '../sources'; 8 + import * as callbag from '../callbag'; 9 + import * as observable from '../observable'; 10 + 11 + import Observable from 'zen-observable'; 12 + import callbagIterate from 'callbag-iterate'; 13 + import callbagTake from 'callbag-take'; 14 + 15 + describe('subscribe', () => { 16 + it('sends Pull talkback signals every Push signal', () => { 17 + let pulls = 0; 18 + const fn = vi.fn(); 19 + 20 + const source: Source<any> = sink => { 21 + sink( 22 + start(signal => { 23 + if (signal === TalkbackKind.Pull) { 24 + if (pulls < 3) { 25 + pulls++; 26 + sink(push(0)); 27 + } else { 28 + sink(SignalKind.End); 29 + expect(pulls).toBe(3); 30 + } 31 + } 32 + }) 33 + ); 34 + }; 35 + 36 + sinks.subscribe(fn)(source); 37 + expect(fn).toHaveBeenCalledTimes(3); 38 + expect(pulls).toBe(3); 39 + }); 40 + 41 + it('cancels when unsubscribe is called', () => { 42 + let pulls = 0; 43 + let closing = 0; 44 + 45 + const source: Source<any> = sink => { 46 + sink( 47 + start(signal => { 48 + if (signal === TalkbackKind.Pull) { 49 + if (!pulls) { 50 + pulls++; 51 + sink(push(0)); 52 + } 53 + } else { 54 + closing++; 55 + } 56 + }) 57 + ); 58 + }; 59 + 60 + const sub = sinks.subscribe(() => {})(source); 61 + expect(pulls).toBe(1); 62 + 63 + sub.unsubscribe(); 64 + expect(closing).toBe(1); 65 + }); 66 + 67 + it('ignores cancellation when the source has already ended', () => { 68 + let pulls = 0; 69 + let closing = 0; 70 + 71 + const source: Source<any> = sink => { 72 + sink( 73 + start(signal => { 74 + if (signal === TalkbackKind.Pull) { 75 + pulls++; 76 + sink(SignalKind.End); 77 + } else { 78 + closing++; 79 + } 80 + }) 81 + ); 82 + }; 83 + 84 + const sub = sinks.subscribe(() => {})(source); 85 + expect(pulls).toBe(1); 86 + sub.unsubscribe(); 87 + expect(closing).toBe(0); 88 + }); 89 + 90 + it('ignores Push signals after the source has ended', () => { 91 + const fn = vi.fn(); 92 + const source: Source<any> = sink => { 93 + sink( 94 + start(signal => { 95 + if (signal === TalkbackKind.Pull) { 96 + sink(SignalKind.End); 97 + sink(push(0)); 98 + } 99 + }) 100 + ); 101 + }; 102 + 103 + sinks.subscribe(fn)(source); 104 + expect(fn).not.toHaveBeenCalled(); 105 + }); 106 + 107 + it('ignores Push signals after cancellation', () => { 108 + const fn = vi.fn(); 109 + const source: Source<any> = sink => { 110 + sink( 111 + start(signal => { 112 + if (signal === TalkbackKind.Close) { 113 + sink(push(0)); 114 + } 115 + }) 116 + ); 117 + }; 118 + 119 + sinks.subscribe(fn)(source).unsubscribe(); 120 + expect(fn).not.toHaveBeenCalled(); 121 + }); 122 + }); 123 + 124 + describe('publish', () => { 125 + it('sends Pull talkback signals every Push signal', () => { 126 + let pulls = 0; 127 + const source: Source<any> = sink => { 128 + sink( 129 + start(signal => { 130 + if (signal === TalkbackKind.Pull) { 131 + if (pulls < 3) { 132 + pulls++; 133 + sink(push(0)); 134 + } else { 135 + sink(SignalKind.End); 136 + expect(pulls).toBe(3); 137 + } 138 + } 139 + }) 140 + ); 141 + }; 142 + 143 + sinks.publish(source); 144 + expect(pulls).toBe(3); 145 + }); 146 + }); 147 + 148 + describe('toArray', () => { 149 + it('sends Pull talkback signals every Push signal', () => { 150 + let pulls = 0; 151 + const source: Source<any> = sink => { 152 + sink( 153 + start(signal => { 154 + if (signal === TalkbackKind.Pull) { 155 + if (pulls < 3) { 156 + pulls++; 157 + sink(push(0)); 158 + } else { 159 + sink(SignalKind.End); 160 + expect(pulls).toBe(3); 161 + } 162 + } 163 + }) 164 + ); 165 + }; 166 + 167 + const array = sinks.toArray(source); 168 + expect(array).toEqual([0, 0, 0]); 169 + expect(pulls).toBe(3); 170 + }); 171 + 172 + it('sends a Close talkback signal after all synchronous values have been pulled', () => { 173 + let pulls = 0; 174 + let ending = 0; 175 + 176 + const source: Source<any> = sink => { 177 + sink( 178 + start(signal => { 179 + if (signal === TalkbackKind.Pull) { 180 + if (!pulls) { 181 + pulls++; 182 + sink(push(0)); 183 + } 184 + } else { 185 + ending++; 186 + } 187 + }) 188 + ); 189 + }; 190 + 191 + const array = sinks.toArray(source); 192 + expect(array).toEqual([0]); 193 + expect(ending).toBe(1); 194 + }); 195 + }); 196 + 197 + describe('toPromise', () => { 198 + it('creates a Promise that resolves on the last value', async () => { 199 + let pulls = 0; 200 + let sink: Sink<any> | null = null; 201 + 202 + const source: Source<any> = _sink => { 203 + sink = _sink; 204 + sink( 205 + start(signal => { 206 + if (signal === TalkbackKind.Pull) pulls++; 207 + }) 208 + ); 209 + }; 210 + 211 + const fn = vi.fn(); 212 + const promise = sinks.toPromise(source).then(fn); 213 + 214 + expect(pulls).toBe(1); 215 + sink!(push(0)); 216 + expect(pulls).toBe(2); 217 + sink!(push(1)); 218 + sink!(SignalKind.End); 219 + expect(fn).not.toHaveBeenCalled(); 220 + 221 + await promise; 222 + expect(fn).toHaveBeenCalledWith(1); 223 + }); 224 + 225 + it('creates a Promise for synchronous sources', async () => { 226 + const fn = vi.fn(); 227 + await sinks.toPromise(sources.fromArray([1, 2, 3])).then(fn); 228 + expect(fn).toHaveBeenCalledWith(3); 229 + }); 230 + }); 231 + 232 + describe('toAsyncIterable', () => { 233 + it('creates an async iterable mirroring the Wonka source', async () => { 234 + let pulls = 0; 235 + let sink: Sink<any> | null = null; 236 + 237 + const source: Source<any> = _sink => { 238 + sink = _sink; 239 + sink( 240 + start(signal => { 241 + if (signal === TalkbackKind.Pull) pulls++; 242 + }) 243 + ); 244 + }; 245 + 246 + const asyncIterator = sinks.toAsyncIterable(source)[Symbol.asyncIterator](); 247 + const next$ = asyncIterator.next(); 248 + 249 + sink!(push(0)); 250 + expect(await next$).toEqual({ value: 0, done: false }); 251 + expect(pulls).toBe(1); 252 + 253 + sink!(push(1)); 254 + expect(await asyncIterator.next()).toEqual({ value: 1, done: false }); 255 + expect(pulls).toBe(2); 256 + 257 + sink!(SignalKind.End); 258 + expect(await asyncIterator.next()).toEqual({ done: true }); 259 + expect(pulls).toBe(2); 260 + }); 261 + 262 + it('buffers actively pushed values', async () => { 263 + let pulls = 0; 264 + let sink: Sink<any> | null = null; 265 + 266 + const source: Source<any> = _sink => { 267 + sink = _sink; 268 + sink( 269 + start(signal => { 270 + if (signal === TalkbackKind.Pull) pulls++; 271 + }) 272 + ); 273 + }; 274 + 275 + const asyncIterator = sinks.toAsyncIterable(source)[Symbol.asyncIterator](); 276 + const next$ = asyncIterator.next(); 277 + 278 + sink!(push(0)); 279 + sink!(push(1)); 280 + sink!(SignalKind.End); 281 + 282 + expect(pulls).toBe(1); 283 + expect(await next$).toEqual({ value: 0, done: false }); 284 + expect(await asyncIterator.next()).toEqual({ value: 1, done: false }); 285 + expect(await asyncIterator.next()).toEqual({ done: true }); 286 + }); 287 + 288 + it('asynchronously waits for pulled values', async () => { 289 + let pulls = 0; 290 + let sink: Sink<any> | null = null; 291 + 292 + const source: Source<any> = _sink => { 293 + sink = _sink; 294 + sink( 295 + start(signal => { 296 + if (signal === TalkbackKind.Pull) pulls++; 297 + }) 298 + ); 299 + }; 300 + 301 + const asyncIterator = sinks.toAsyncIterable(source)[Symbol.asyncIterator](); 302 + asyncIterator.next(); 303 + expect(pulls).toBe(1); 304 + 305 + let resolved = false; 306 + 307 + const promise = asyncIterator.next().then(value => { 308 + resolved = true; 309 + return value; 310 + }); 311 + 312 + await Promise.resolve(); 313 + expect(resolved).toBe(false); 314 + 315 + sink!(push(0)); 316 + sink!(SignalKind.End); 317 + expect(await promise).toEqual({ value: 0, done: false }); 318 + expect(await asyncIterator.next()).toEqual({ done: true }); 319 + }); 320 + 321 + it('supports cancellation via return', async () => { 322 + let ended = false; 323 + let sink: Sink<any> | null = null; 324 + 325 + const source: Source<any> = _sink => { 326 + sink = _sink; 327 + sink( 328 + start(signal => { 329 + if (signal === TalkbackKind.Close) ended = true; 330 + }) 331 + ); 332 + }; 333 + 334 + const asyncIterator = sinks.toAsyncIterable(source)[Symbol.asyncIterator](); 335 + const next$ = asyncIterator.next(); 336 + 337 + sink!(push(0)); 338 + expect(await next$).toEqual({ value: 0, done: false }); 339 + expect(await asyncIterator.return!()).toEqual({ done: true }); 340 + 341 + sink!(push(1)); 342 + expect(await asyncIterator.next()).toEqual({ done: true }); 343 + 344 + expect(ended).toBeTruthy(); 345 + }); 346 + 347 + it('supports for-await-of', async () => { 348 + let pulls = 0; 349 + 350 + const source: Source<any> = sink => { 351 + sink( 352 + start(signal => { 353 + if (signal === TalkbackKind.Pull) { 354 + sink(pulls < 3 ? push(pulls++) : SignalKind.End); 355 + } 356 + }) 357 + ); 358 + }; 359 + 360 + const iterable = sinks.toAsyncIterable(source); 361 + const values: any[] = []; 362 + for await (const value of iterable) { 363 + values.push(value); 364 + } 365 + 366 + expect(values).toEqual([0, 1, 2]); 367 + }); 368 + 369 + it('supports for-await-of with early break', async () => { 370 + let pulls = 0; 371 + let closed = false; 372 + 373 + const source: Source<any> = sink => { 374 + sink( 375 + start(signal => { 376 + if (signal === TalkbackKind.Pull) { 377 + sink(pulls < 3 ? push(pulls++) : SignalKind.End); 378 + } else { 379 + closed = true; 380 + } 381 + }) 382 + ); 383 + }; 384 + 385 + const iterable = sinks.toAsyncIterable(source); 386 + for await (const value of iterable) { 387 + expect(value).toBe(0); 388 + break; 389 + } 390 + 391 + expect(closed).toBe(true); 392 + }); 393 + }); 394 + 395 + describe('toObservable', () => { 396 + it('creates an Observable mirroring the Wonka source', () => { 397 + const next = vi.fn(); 398 + const complete = vi.fn(); 399 + let pulls = 0; 400 + let sink: Sink<any> | null = null; 401 + 402 + const source: Source<any> = _sink => { 403 + sink = _sink; 404 + sink( 405 + start(signal => { 406 + if (signal === TalkbackKind.Pull) pulls++; 407 + }) 408 + ); 409 + }; 410 + 411 + Observable.from(observable.toObservable(source) as any).subscribe({ 412 + next, 413 + complete, 414 + }); 415 + 416 + expect(pulls).toBe(1); 417 + sink!(push(0)); 418 + expect(next).toHaveBeenCalledWith(0); 419 + sink!(push(1)); 420 + expect(next).toHaveBeenCalledWith(1); 421 + sink!(SignalKind.End); 422 + expect(complete).toHaveBeenCalled(); 423 + }); 424 + 425 + it('forwards cancellations from the Observable as a talkback', () => { 426 + let ending = 0; 427 + const source: Source<any> = sink => 428 + sink( 429 + start(signal => { 430 + if (signal === TalkbackKind.Close) ending++; 431 + }) 432 + ); 433 + 434 + const sub = Observable.from(observable.toObservable(source) as any).subscribe({}); 435 + 436 + expect(ending).toBe(0); 437 + sub.unsubscribe(); 438 + expect(ending).toBe(1); 439 + }); 440 + }); 441 + 442 + describe('toCallbag', () => { 443 + it('creates a Callbag mirroring the Wonka source', () => { 444 + const fn = vi.fn(); 445 + let pulls = 0; 446 + let sink: Sink<any> | null = null; 447 + 448 + const source: Source<any> = _sink => { 449 + sink = _sink; 450 + sink( 451 + start(signal => { 452 + if (signal === TalkbackKind.Pull) pulls++; 453 + }) 454 + ); 455 + }; 456 + 457 + callbagIterate(fn)(callbag.toCallbag(source)); 458 + 459 + expect(pulls).toBe(1); 460 + sink!(push(0)); 461 + expect(fn).toHaveBeenCalledWith(0); 462 + sink!(push(1)); 463 + expect(fn).toHaveBeenCalledWith(1); 464 + sink!(SignalKind.End); 465 + }); 466 + 467 + it('forwards cancellations from the Callbag as a talkback', () => { 468 + let ending = 0; 469 + const fn = vi.fn(); 470 + 471 + const source: Source<any> = sink => 472 + sink( 473 + start(signal => { 474 + if (signal === TalkbackKind.Pull) { 475 + sink(push(0)); 476 + } else { 477 + ending++; 478 + } 479 + }) 480 + ); 481 + 482 + callbagIterate(fn)(callbagTake(1)(callbag.toCallbag(source) as any)); 483 + 484 + expect(fn.mock.calls).toEqual([[0]]); 485 + expect(ending).toBe(1); 486 + }); 487 + });
+386
src/__tests__/sources.test.ts
··· 1 + import { describe, it, expect, beforeEach, vi } from 'vitest'; 2 + 3 + import { Source, Sink, Signal, SignalKind, TalkbackKind, TalkbackFn } from '../types'; 4 + import { push, start, talkbackPlaceholder } from '../helpers'; 5 + 6 + import * as sources from '../sources'; 7 + import * as operators from '../operators'; 8 + import * as callbag from '../callbag'; 9 + import * as observable from '../observable'; 10 + 11 + import callbagFromArray from 'callbag-from-iter'; 12 + import Observable from 'zen-observable'; 13 + 14 + const collectSignals = (source: Source<any>, onStart?: (talkbackCb: TalkbackFn) => void) => { 15 + let talkback = talkbackPlaceholder; 16 + const signals: Signal<any>[] = []; 17 + source(signal => { 18 + signals.push(signal); 19 + if (signal === SignalKind.End) { 20 + /*noop*/ 21 + } else if (signal.tag === SignalKind.Start) { 22 + talkback = signal[0]; 23 + if (onStart) onStart(talkback); 24 + talkback(TalkbackKind.Pull); 25 + } else { 26 + talkback(TalkbackKind.Pull); 27 + } 28 + }); 29 + 30 + return signals; 31 + }; 32 + 33 + /* When a Close talkback signal is sent the source should immediately end */ 34 + const passesActiveClose = (source: Source<any>) => { 35 + it('stops emitting when a Close talkback signal is received (spec)', () => { 36 + let talkback: TalkbackFn | null = null; 37 + const sink: Sink<any> = signal => { 38 + expect(signal).not.toBe(SignalKind.End); 39 + expect((signal as any).tag).not.toBe(SignalKind.Push); 40 + if ((signal as any).tag === SignalKind.Start) { 41 + (talkback = signal[0])(TalkbackKind.Close); 42 + } 43 + }; 44 + source(sink); 45 + expect(talkback).not.toBe(null); 46 + }); 47 + }; 48 + 49 + /* All synchronous, cold sources won't send anything unless a Pull signal 50 + has been received. */ 51 + const passesColdPull = (source: Source<any>) => { 52 + it('sends nothing when no Pull talkback signal has been sent (spec)', () => { 53 + let talkback: TalkbackFn | null = null; 54 + let pushes = 0; 55 + 56 + const sink: Sink<any> = signal => { 57 + if (signal === SignalKind.End) { 58 + /*noop*/ 59 + } else if (signal.tag === SignalKind.Push) { 60 + pushes++; 61 + } else { 62 + talkback = signal[0]; 63 + } 64 + }; 65 + 66 + source(sink); 67 + expect(talkback).not.toBe(null); 68 + expect(pushes).toBe(0); 69 + 70 + setTimeout(() => { 71 + expect(pushes).toBe(0); 72 + talkback!(TalkbackKind.Pull); 73 + }, 10); 74 + 75 + vi.runAllTimers(); 76 + expect(pushes).toBe(1); 77 + }); 78 + }; 79 + 80 + /* All synchronous, cold sources need to use trampoline scheduling to avoid 81 + recursively sending more and more Push signals which would eventually lead 82 + to a call stack overflow when too many values are emitted. */ 83 + const passesTrampoline = (source: Source<any>) => { 84 + it('uses trampoline scheduling instead of recursive push signals (spec)', () => { 85 + let talkback: TalkbackFn | null = null; 86 + let pushes = 0; 87 + 88 + const signals: Signal<any>[] = []; 89 + const sink: Sink<any> = signal => { 90 + if (signal === SignalKind.End) { 91 + signals.push(signal); 92 + expect(pushes).toBe(2); 93 + } else if (signal.tag === SignalKind.Push) { 94 + const lastPushes = ++pushes; 95 + signals.push(signal); 96 + talkback!(TalkbackKind.Pull); 97 + expect(lastPushes).toBe(pushes); 98 + } else if (signal.tag === SignalKind.Start) { 99 + (talkback = signal[0])(TalkbackKind.Pull); 100 + expect(pushes).toBe(2); 101 + } 102 + }; 103 + 104 + source(sink); 105 + expect(signals).toEqual([push(1), push(2), SignalKind.End]); 106 + }); 107 + }; 108 + 109 + beforeEach(() => { 110 + vi.useFakeTimers(); 111 + }); 112 + 113 + describe('fromArray', () => { 114 + passesTrampoline(sources.fromArray([1, 2])); 115 + passesColdPull(sources.fromArray([0])); 116 + passesActiveClose(sources.fromArray([0])); 117 + }); 118 + 119 + describe('fromValue', () => { 120 + passesColdPull(sources.fromValue(0)); 121 + passesActiveClose(sources.fromValue(0)); 122 + 123 + it('sends a single value and ends', () => { 124 + expect(collectSignals(sources.fromValue(1))).toEqual([ 125 + start(expect.any(Function)), 126 + push(1), 127 + SignalKind.End, 128 + ]); 129 + }); 130 + }); 131 + 132 + describe('merge', () => { 133 + const source = operators.merge<any>([sources.fromValue(0), sources.empty]); 134 + 135 + passesColdPull(source); 136 + passesActiveClose(source); 137 + 138 + it('correctly merges two sources where the second is empty', () => { 139 + const source = operators.merge<any>([sources.fromValue(0), sources.empty]); 140 + 141 + expect(collectSignals(source)).toEqual([start(expect.any(Function)), push(0), SignalKind.End]); 142 + }); 143 + 144 + it('correctly merges hot sources', () => { 145 + const onStart = vi.fn(); 146 + const source = operators.merge<any>([ 147 + operators.onStart(onStart)(sources.never), 148 + operators.onStart(onStart)(sources.fromArray([1, 2])), 149 + ]); 150 + 151 + const signals = collectSignals(source); 152 + expect(onStart).toHaveBeenCalledTimes(2); 153 + 154 + expect(signals).toEqual([start(expect.any(Function)), push(1), push(2)]); 155 + }); 156 + 157 + it('correctly merges asynchronous sources', () => { 158 + vi.useFakeTimers(); 159 + 160 + const onStart = vi.fn(); 161 + const source = operators.merge<any>([ 162 + operators.onStart(onStart)(sources.fromValue(-1)), 163 + operators.onStart(onStart)(operators.take(2)(sources.interval(50))), 164 + ]); 165 + 166 + const signals = collectSignals(source); 167 + vi.advanceTimersByTime(100); 168 + expect(onStart).toHaveBeenCalledTimes(2); 169 + 170 + expect(signals).toEqual([ 171 + start(expect.any(Function)), 172 + push(-1), 173 + push(0), 174 + push(1), 175 + SignalKind.End, 176 + ]); 177 + }); 178 + }); 179 + 180 + describe('concat', () => { 181 + const source = operators.concat<any>([sources.fromValue(0), sources.empty]); 182 + 183 + passesColdPull(source); 184 + passesActiveClose(source); 185 + 186 + it('correctly concats two sources where the second is empty', () => { 187 + const source = operators.concat<any>([sources.fromValue(0), sources.empty]); 188 + 189 + expect(collectSignals(source)).toEqual([start(expect.any(Function)), push(0), SignalKind.End]); 190 + }); 191 + }); 192 + 193 + describe('make', () => { 194 + it('may be used to create async sources', () => { 195 + const teardown = vi.fn(); 196 + const source = sources.make(observer => { 197 + setTimeout(() => observer.next(1), 10); 198 + setTimeout(() => observer.complete(), 20); 199 + return teardown; 200 + }); 201 + 202 + const signals = collectSignals(source); 203 + expect(signals).toEqual([start(expect.any(Function))]); 204 + vi.runAllTimers(); 205 + 206 + expect(signals).toEqual([start(expect.any(Function)), push(1), SignalKind.End]); 207 + }); 208 + 209 + it('supports active cancellation', () => { 210 + const teardown = vi.fn(); 211 + const source = sources.make(() => teardown); 212 + 213 + const sink: Sink<any> = signal => { 214 + expect(signal).not.toBe(SignalKind.End); 215 + expect((signal as any).tag).not.toBe(SignalKind.Push); 216 + setTimeout(() => signal[0](TalkbackKind.Close)); 217 + }; 218 + 219 + source(sink); 220 + expect(teardown).not.toHaveBeenCalled(); 221 + vi.runAllTimers(); 222 + expect(teardown).toHaveBeenCalled(); 223 + }); 224 + }); 225 + 226 + describe('makeSubject', () => { 227 + it('may be used to emit signals programmatically', () => { 228 + const { source, next, complete } = sources.makeSubject(); 229 + const signals = collectSignals(source); 230 + 231 + expect(signals).toEqual([start(expect.any(Function))]); 232 + 233 + next(1); 234 + 235 + expect(signals).toEqual([start(expect.any(Function)), push(1)]); 236 + 237 + complete(); 238 + 239 + expect(signals).toEqual([start(expect.any(Function)), push(1), SignalKind.End]); 240 + }); 241 + 242 + it('ignores signals after complete has been called', () => { 243 + const { source, next, complete } = sources.makeSubject(); 244 + const signals = collectSignals(source); 245 + complete(); 246 + 247 + expect(signals).toEqual([start(expect.any(Function)), SignalKind.End]); 248 + 249 + next(1); 250 + complete(); 251 + expect(signals.length).toBe(2); 252 + }); 253 + }); 254 + 255 + describe('never', () => { 256 + it('emits nothing and ends immediately', () => { 257 + const signals = collectSignals(sources.never); 258 + expect(signals).toEqual([start(expect.any(Function))]); 259 + }); 260 + }); 261 + 262 + describe('empty', () => { 263 + it('emits nothing and ends immediately', () => { 264 + const signals = collectSignals(sources.empty); 265 + 266 + expect(signals).toEqual([start(expect.any(Function)), SignalKind.End]); 267 + }); 268 + }); 269 + 270 + describe('fromPromise', () => { 271 + passesActiveClose(sources.fromPromise(Promise.resolve(null))); 272 + 273 + it('emits a value when the promise resolves', async () => { 274 + const promise = Promise.resolve(1); 275 + const signals = collectSignals(sources.fromPromise(promise)); 276 + 277 + expect(signals).toEqual([start(expect.any(Function))]); 278 + 279 + await Promise.resolve(); 280 + await promise; 281 + await Promise.resolve(); 282 + 283 + expect(signals).toEqual([start(expect.any(Function)), push(1), SignalKind.End]); 284 + }); 285 + }); 286 + 287 + describe('fromObservable', () => { 288 + beforeEach(() => { 289 + vi.useRealTimers(); 290 + }); 291 + 292 + it('converts an Observable to a Wonka source', async () => { 293 + const source = observable.fromObservable(Observable.from([1, 2])); 294 + const signals = collectSignals(source); 295 + 296 + await new Promise(resolve => setTimeout(resolve)); 297 + 298 + expect(signals).toEqual([start(expect.any(Function)), push(1), push(2), SignalKind.End]); 299 + }); 300 + 301 + it('supports cancellation on converted Observables', async () => { 302 + const source = observable.fromObservable(Observable.from([1, 2])); 303 + const signals = collectSignals(source, talkback => { 304 + talkback(TalkbackKind.Close); 305 + }); 306 + 307 + await new Promise(resolve => setTimeout(resolve)); 308 + 309 + expect(signals).toEqual([start(expect.any(Function))]); 310 + }); 311 + }); 312 + 313 + describe('fromCallbag', () => { 314 + it('converts a Callbag to a Wonka source', () => { 315 + const source = callbag.fromCallbag(callbagFromArray([1, 2]) as any); 316 + const signals = collectSignals(source); 317 + 318 + expect(signals).toEqual([start(expect.any(Function)), push(1), push(2), SignalKind.End]); 319 + }); 320 + 321 + it('supports cancellation on converted Observables', () => { 322 + const source = callbag.fromCallbag(callbagFromArray([1, 2]) as any); 323 + const signals = collectSignals(source, talkback => { 324 + talkback(TalkbackKind.Close); 325 + }); 326 + 327 + expect(signals).toEqual([start(expect.any(Function))]); 328 + }); 329 + }); 330 + 331 + describe('interval', () => { 332 + it('emits Push signals until Cancel is sent', () => { 333 + let pushes = 0; 334 + let talkback: TalkbackFn | null = null; 335 + 336 + const sink: Sink<any> = signal => { 337 + if (signal === SignalKind.End) { 338 + /*noop*/ 339 + } else if (signal.tag === SignalKind.Push) { 340 + pushes++; 341 + } else { 342 + talkback = signal[0]; 343 + } 344 + }; 345 + 346 + sources.interval(100)(sink); 347 + expect(talkback).not.toBe(null); 348 + expect(pushes).toBe(0); 349 + 350 + vi.advanceTimersByTime(100); 351 + expect(pushes).toBe(1); 352 + vi.advanceTimersByTime(100); 353 + expect(pushes).toBe(2); 354 + 355 + talkback!(TalkbackKind.Close); 356 + vi.advanceTimersByTime(100); 357 + expect(pushes).toBe(2); 358 + }); 359 + }); 360 + 361 + describe('fromDomEvent', () => { 362 + it('emits Push signals for events on a DOM element', () => { 363 + let talkback: TalkbackFn | null = null; 364 + 365 + const element = { 366 + addEventListener: vi.fn(), 367 + removeEventListener: vi.fn(), 368 + }; 369 + 370 + const sink: Sink<any> = signal => { 371 + expect(signal).not.toBe(SignalKind.End); 372 + if ((signal as any).tag === SignalKind.Start) talkback = signal[0]; 373 + }; 374 + 375 + sources.fromDomEvent(element as any, 'click')(sink); 376 + 377 + expect(element.addEventListener).toHaveBeenCalledWith('click', expect.any(Function)); 378 + expect(element.removeEventListener).not.toHaveBeenCalled(); 379 + const listener = element.addEventListener.mock.calls[0][1]; 380 + 381 + listener(1); 382 + listener(2); 383 + talkback!(TalkbackKind.Close); 384 + expect(element.removeEventListener).toHaveBeenCalledWith('click', listener); 385 + }); 386 + });
+64
src/callbag.ts
··· 1 + import { Source, SignalKind } from './types'; 2 + import { push, start } from './helpers'; 3 + 4 + /** A definition of the Callbag type as per its specification. 5 + * @see {@link https://github.com/callbag/callbag} for the Callbag specification. 6 + */ 7 + interface Callbag<I, O> { 8 + (t: 0, d: Callbag<O, I>): void; 9 + (t: 1, d: I): void; 10 + (t: 2, d?: any): void; 11 + } 12 + 13 + /** Converts a Callbag to a {@link Source}. 14 + * @param callbag - The {@link Callbag} object that will be converted. 15 + * @returns A {@link Source} wrapping the passed Callbag. 16 + * 17 + * @remarks 18 + * This converts a Callbag to a {@link Source}. When this Source receives a {@link Sink} and 19 + * the subscription starts, internally, it'll subscribe to the passed Callbag, passing through 20 + * all of its emitted values. 21 + */ 22 + export function fromCallbag<T>(callbag: Callbag<any, T>): Source<T> { 23 + return sink => { 24 + callbag(0, (signal: number, data: any) => { 25 + if (signal === 0) { 26 + sink( 27 + start(signal => { 28 + data(signal + 1); 29 + }) 30 + ); 31 + } else if (signal === 1) { 32 + sink(push(data)); 33 + } else { 34 + sink(SignalKind.End); 35 + } 36 + }); 37 + }; 38 + } 39 + 40 + /** Converts a {@link Source} to a Callbag. 41 + * @param source - The {@link Source} that will be converted. 42 + * @returns A {@link Callbag} wrapping the passed Source. 43 + * 44 + * @remarks 45 + * This converts a {@link Source} to a {@link Callbag}. When this Callbag is subscribed to, it 46 + * internally subscribes to the Wonka Source and pulls new values. 47 + */ 48 + export function toCallbag<T>(source: Source<T>): Callbag<any, T> { 49 + return (signal: number, sink: any) => { 50 + if (signal === 0) { 51 + source(signal => { 52 + if (signal === SignalKind.End) { 53 + sink(2); 54 + } else if (signal.tag === SignalKind.Start) { 55 + sink(0, (num: number) => { 56 + if (num < 3) signal[0](num - 1); 57 + }); 58 + } else { 59 + sink(1, signal[0]); 60 + } 61 + }); 62 + } 63 + }; 64 + }
+137
src/combine.ts
··· 1 + import { Source, TypeOfSource, SignalKind, TalkbackKind, TalkbackFn } from './types'; 2 + import { push, start, talkbackPlaceholder } from './helpers'; 3 + 4 + type TypeOfSourceArray<T extends readonly [...any[]]> = T extends [infer Head, ...infer Tail] 5 + ? [TypeOfSource<Head>, ...TypeOfSourceArray<Tail>] 6 + : []; 7 + 8 + /** Combines the latest values of several sources into a Source issuing either tuple or dictionary 9 + * values. 10 + * 11 + * @param sources - Either an array or dictionary object of Sources. 12 + * @returns A {@link Source} issuing a zipped value whenever any input Source updates. 13 + * 14 + * @remarks 15 + * `zip` combines several {@link Source | Sources}. The resulting Source will issue its first value 16 + * once all input Sources have at least issued one value, and will subsequently issue a new value 17 + * each time any of the Sources emits a new value. 18 + * 19 + * Depending on whether an array or dictionary object of Sources is passed to `zip`, its emitted 20 + * values will be arrays or dictionary objects of the Sources' values. 21 + * 22 + * @example 23 + * An example of passing a dictionary object to `zip`. If an array is passed, the resulting 24 + * values will output arrays of the sources' values instead. 25 + * 26 + * ```ts 27 + * pipe( 28 + * zip({ 29 + * x: fromValue(1), 30 + * y: fromArray([2, 3]), 31 + * }), 32 + * subscribe(result => { 33 + * // logs { x: 1, y: 2 } then { x: 1, y: 3 } 34 + * console.log(result); 35 + * }) 36 + * ); 37 + * ``` 38 + */ 39 + interface zip { 40 + <Sources extends readonly [...Source<any>[]]>(sources: [...Sources]): Source< 41 + TypeOfSourceArray<Sources> 42 + >; 43 + 44 + <Sources extends { [prop: string]: Source<any> }>(sources: Sources): Source<{ 45 + [Property in keyof Sources]: TypeOfSource<Sources[Property]>; 46 + }>; 47 + } 48 + 49 + function zip<T>(sources: Source<T>[] | Record<string, Source<T>>): Source<T[] | Record<string, T>> { 50 + const size = Object.keys(sources).length; 51 + return sink => { 52 + const filled: Set<string | number> = new Set(); 53 + 54 + const talkbacks: TalkbackFn[] | Record<string, TalkbackFn | void> = Array.isArray(sources) 55 + ? new Array(size).fill(talkbackPlaceholder) 56 + : {}; 57 + const buffer: T[] | Record<string, T> = Array.isArray(sources) ? new Array(size) : {}; 58 + 59 + let gotBuffer = false; 60 + let gotSignal = false; 61 + let ended = false; 62 + let endCount = 0; 63 + 64 + for (const key in sources) { 65 + (sources[key] as Source<T>)(signal => { 66 + if (signal === SignalKind.End) { 67 + if (endCount >= size - 1) { 68 + ended = true; 69 + sink(SignalKind.End); 70 + } else { 71 + endCount++; 72 + } 73 + } else if (signal.tag === SignalKind.Start) { 74 + talkbacks[key] = signal[0]; 75 + } else if (!ended) { 76 + buffer[key] = signal[0]; 77 + filled.add(key); 78 + if (!gotBuffer && filled.size < size) { 79 + if (!gotSignal) { 80 + for (const key in sources) 81 + if (!filled.has(key)) (talkbacks[key] || talkbackPlaceholder)(TalkbackKind.Pull); 82 + } else { 83 + gotSignal = false; 84 + } 85 + } else { 86 + gotBuffer = true; 87 + gotSignal = false; 88 + sink(push(Array.isArray(buffer) ? buffer.slice() : { ...buffer })); 89 + } 90 + } 91 + }); 92 + } 93 + sink( 94 + start(signal => { 95 + if (ended) { 96 + /*noop*/ 97 + } else if (signal === TalkbackKind.Close) { 98 + ended = true; 99 + for (const key in talkbacks) talkbacks[key](TalkbackKind.Close); 100 + } else if (!gotSignal) { 101 + gotSignal = true; 102 + for (const key in talkbacks) talkbacks[key](TalkbackKind.Pull); 103 + } 104 + }) 105 + ); 106 + }; 107 + } 108 + 109 + export { zip }; 110 + 111 + /** Combines the latest values of all passed sources into a Source issuing tuple values. 112 + * 113 + * @see {@link zip | `zip`} which this helper wraps and uses. 114 + * @param sources - A variadic list of {@link Source} parameters. 115 + * @returns A {@link Source} issuing a zipped value whenever any input Source updates. 116 + * 117 + * @remarks 118 + * `combine` takes one or more {@link Source | Sources} as arguments. Once all input Sources have at 119 + * least issued one value it will issue an array of all of the Sources' values. Subsequently, it 120 + * will issue a new array value whenever any of the Sources update. 121 + * 122 + * @example 123 + * 124 + * ```ts 125 + * pipe( 126 + * combine(fromValue(1), fromValue(2)), 127 + * subscribe(result => { 128 + * console.log(result); // logs [1, 2] 129 + * }) 130 + * ); 131 + * ``` 132 + */ 133 + export function combine<Sources extends Source<any>[]>( 134 + ...sources: Sources 135 + ): Source<TypeOfSourceArray<Sources>> { 136 + return zip(sources) as Source<any>; 137 + }
+62
src/helpers.ts
··· 1 + import { TalkbackFn, TeardownFn, Start, Push, SignalKind } from './types'; 2 + 3 + /** Placeholder {@link TeardownFn | teardown functions} that's a no-op. 4 + * @see {@link TeardownFn} for the definition and usage of teardowns. 5 + * @internal 6 + */ 7 + export const teardownPlaceholder: TeardownFn = () => { 8 + /*noop*/ 9 + }; 10 + 11 + /** Placeholder {@link TalkbackFn | talkback function} that's a no-op. 12 + * @privateRemarks 13 + * This is frequently used in the codebase as a no-op initializer value for talkback functions in 14 + * the implementation of {@link Operator | Operators}. This is cheaper than initializing the 15 + * variables of talkbacks to `undefined` or `null` and performing an extra check before calling 16 + * them. Since the {@link Start | Start signal} is assumed to come first and carry a talkback, we can 17 + * use this to our advantage and use a no-op placeholder before {@link Start} is received. 18 + * 19 + * @internal 20 + */ 21 + export const talkbackPlaceholder: TalkbackFn = teardownPlaceholder; 22 + 23 + /** Wraps the passed {@link TalkbackFn | talkback function} in a {@link Start | Start signal}. 24 + * @internal 25 + */ 26 + export function start<T>(talkback: TalkbackFn): Start<T> { 27 + return { 28 + tag: SignalKind.Start, 29 + 0: talkback, 30 + } as Start<T>; 31 + } 32 + 33 + /** Wraps the passed value in a {@link Push | Push signal}. 34 + * @internal 35 + */ 36 + export function push<T>(value: T): Push<T> { 37 + return { 38 + tag: SignalKind.Push, 39 + 0: value, 40 + } as Push<T>; 41 + } 42 + 43 + /** Returns the well-known symbol specifying the default AsyncIterator. 44 + * @internal 45 + */ 46 + export const asyncIteratorSymbol = (): typeof Symbol.asyncIterator => 47 + (typeof Symbol === 'function' && Symbol.asyncIterator) || ('@@asyncIterator' as any); 48 + 49 + /** Returns the well-known symbol specifying the default ES Observable. 50 + * @privateRemarks 51 + * This symbol is used to mark an object as a default ES Observable. By the specification, an object 52 + * that abides by the default Observable implementation must carry a method set to this well-known 53 + * symbol that returns the Observable implementation. It's common for this object to be an 54 + * Observable itself and return itself on this method. 55 + * 56 + * @see {@link https://github.com/0no-co/wonka/issues/122} for notes on the intercompatibility 57 + * between Observable implementations. 58 + * 59 + * @internal 60 + */ 61 + export const observableSymbol = (): typeof Symbol.observable => 62 + (typeof Symbol === 'function' && Symbol.observable) || ('@@observable' as any);
-4
src/index.d.ts
··· 1 - export * from './pipe'; 2 - export * from './wonka_types'; 3 - export * from './wonka'; 4 - export * from './web/wonkaJs';
-2
src/index.js
··· 1 - export * from './pipe'; 2 - export * from './wonka';
+31
src/index.ts
··· 1 + /** 2 + * A tiny but capable push & pull stream library for TypeScript and Flow. 3 + * 4 + * @remarks 5 + * Wonka is a lightweight iterable and observable library and exposes a set of helpers to create 6 + * streams, which are sources emitting multiple values, which allow you to create, transform, and 7 + * consume event streams or iterable sets of data. 8 + * 9 + * It's loosely based on the Callbag spec: {@link https://github.com/callbag/callbag} 10 + * @packageDocumentation 11 + */ 12 + 13 + export type { 14 + TeardownFn, 15 + Signal, 16 + Sink, 17 + Source, 18 + Operator, 19 + TypeOfSource, 20 + Subscription, 21 + Observer, 22 + Subject, 23 + } from './types'; 24 + 25 + export * from './sources'; 26 + export * from './operators'; 27 + export * from './sinks'; 28 + export * from './combine'; 29 + export * from './observable'; 30 + export * from './callbag'; 31 + export * from './pipe';
+207
src/observable.ts
··· 1 + import { Source, SignalKind, TalkbackKind } from './types'; 2 + import { push, start, talkbackPlaceholder, observableSymbol } from './helpers'; 3 + 4 + // NOTE: This must be placed in an exported file for `rollup-plugin-dts` 5 + // to include it in output typings files 6 + declare global { 7 + interface SymbolConstructor { 8 + readonly observable: symbol; 9 + } 10 + } 11 + 12 + /** A definition of the ES Observable Subscription type that is returned by 13 + * {@link Observable.subscribe} 14 + * 15 + * @remarks 16 + * The Subscription in ES Observables is a handle that is held while the Observable is actively 17 + * streaming values. As such, it's used to indicate with {@link ObservableSubscription.closed} 18 + * whether it's active, and {@link ObservableSubscription.unsubscribe} may be used to cancel the 19 + * ongoing subscription and end the {@link Observable} early. 20 + * 21 + * @see {@link https://github.com/tc39/proposal-observable} for the ES Observable specification. 22 + */ 23 + interface ObservableSubscription { 24 + /** A boolean flag indicating whether the subscription is closed. 25 + * @remarks 26 + * When `true`, the subscription will not issue new values to the {@link ObservableObserver} and 27 + * has terminated. No new values are expected. 28 + * 29 + * @readonly 30 + */ 31 + closed: boolean; 32 + /** Cancels the subscription. 33 + * @remarks 34 + * This cancels the ongoing subscription and the {@link ObservableObserver}'s callbacks will 35 + * subsequently not be called at all. The subscription will be terminated and become inactive. 36 + */ 37 + unsubscribe(): void; 38 + } 39 + 40 + /** A definition of the ES Observable Observer type that is used to receive data from an 41 + * {@link Observable}. 42 + * 43 + * @remarks 44 + * The Observer in ES Observables is supplied to {@link Observable.subscribe} to receive events from 45 + * an {@link Observable} as it issues them. 46 + * 47 + * @see {@link https://github.com/tc39/proposal-observable#observer} for the ES Observable 48 + * specification of an Observer. 49 + */ 50 + interface ObservableObserver<T> { 51 + /** Callback for the Observable issuing new values. 52 + * @param value - The value that the {@link Observable} is sending. 53 + */ 54 + next(value: T): void; 55 + /** Callback for the Observable encountering an error, terminating it. 56 + * @param error - The error that the {@link Observable} has encountered. 57 + */ 58 + error?(error: any): void; 59 + /** Callback for the Observable ending, after all values have been issued. */ 60 + complete?(): void; 61 + } 62 + 63 + /** A looser definition of ES Observable-like types that is used for interoperability. 64 + * @remarks 65 + * The Observable is often used by multiple libraries supporting or creating streams to provide 66 + * interoperability for push-based streams. When converting from an Observable to a {@link Source}, 67 + * this looser type is accepted as an input. 68 + * 69 + * @see {@link https://github.com/tc39/proposal-observable} for the ES Observable specification. 70 + * @see {@link Observable} for the full ES Observable type. 71 + */ 72 + interface ObservableLike<T> { 73 + /** 74 + * Subscribes to new signals from an {@link Observable} via callbacks. 75 + * @param observer - An object containing callbacks for the various events of an Observable. 76 + * @returns Subscription handle of type {@link ObservableSubscription}. 77 + * 78 + * @see {@link ObservableObserver} for the callbacks in an object that are called as Observables 79 + * issue events. 80 + */ 81 + subscribe(observer: ObservableObserver<T>): { unsubscribe(): void }; 82 + 83 + /** The well-known symbol specifying the default ES Observable for an object. */ 84 + [Symbol.observable]?(): Observable<T>; 85 + } 86 + 87 + /** An ES Observable type that is a de-facto standard for push-based data sources across the JS 88 + * ecosystem. 89 + * 90 + * @remarks 91 + * The Observable is often used by multiple libraries supporting or creating streams to provide 92 + * interoperability for push-based streams. As Wonka's {@link Source | Sources} are similar in 93 + * functionality to Observables, it provides utilities to cleanly convert to and from Observables. 94 + * 95 + * @see {@link https://github.com/tc39/proposal-observable} for the ES Observable specification. 96 + */ 97 + interface Observable<T> { 98 + /** Subscribes to new signals from an {@link Observable} via callbacks. 99 + * @param observer - An object containing callbacks for the various events of an Observable. 100 + * @returns Subscription handle of type {@link ObservableSubscription}. 101 + * 102 + * @see {@link ObservableObserver} for the callbacks in an object that are called as Observables 103 + * issue events. 104 + */ 105 + subscribe(observer: ObservableObserver<T>): ObservableSubscription; 106 + 107 + /** Subscribes to new signals from an {@link Observable} via callbacks. 108 + * @param onNext - Callback for the Observable issuing new values. 109 + * @param onError - Callback for the Observable encountering an error, terminating it. 110 + * @param onComplete - Callback for the Observable ending, after all values have been issued. 111 + * @returns Subscription handle of type {@link ObservableSubscription}. 112 + */ 113 + subscribe( 114 + onNext: (value: T) => any, 115 + onError?: (error: any) => any, 116 + onComplete?: () => any 117 + ): ObservableSubscription; 118 + 119 + /** The well-known symbol specifying the default ES Observable for an object. */ 120 + [Symbol.observable](): Observable<T>; 121 + } 122 + 123 + /** Converts an ES Observable to a {@link Source}. 124 + * @param input - The {@link ObservableLike} object that will be converted. 125 + * @returns A {@link Source} wrapping the passed Observable. 126 + * 127 + * @remarks 128 + * This converts an ES Observable to a {@link Source}. When this Source receives a {@link Sink} and 129 + * the subscription starts, internally, it'll subscribe to the passed Observable, passing through 130 + * all of the Observable's values. As such, this utility provides intercompatibility converting from 131 + * standard Observables to Wonka Sources. 132 + * 133 + * @throws 134 + * When the passed ES Observable throws, the error is simply re-thrown as {@link Source} does 135 + * not support or expect errors to be handled by streams. 136 + */ 137 + export function fromObservable<T>(input: ObservableLike<T>): Source<T> { 138 + return sink => { 139 + const subscription = ( 140 + input[observableSymbol()] ? input[observableSymbol()]!() : input 141 + ).subscribe({ 142 + next(value: T) { 143 + sink(push(value)); 144 + }, 145 + complete() { 146 + sink(SignalKind.End); 147 + }, 148 + error(error) { 149 + throw error; 150 + }, 151 + }); 152 + sink( 153 + start(signal => { 154 + if (signal === TalkbackKind.Close) subscription.unsubscribe(); 155 + }) 156 + ); 157 + }; 158 + } 159 + 160 + /** Converts a {@link Source} to an ES Observable. 161 + * @param source - The {@link Source} that will be converted. 162 + * @returns An {@link Observable} wrapping the passed Source. 163 + * 164 + * @remarks 165 + * This converts a {@link Source} to an {@link Observable}. When this Observable is subscribed to, it 166 + * internally subscribes to the Wonka Source and pulls new values. As such, this utility provides 167 + * intercompatibility converting from Wonka Sources to standard ES Observables. 168 + */ 169 + export function toObservable<T>(source: Source<T>): Observable<T> { 170 + return { 171 + subscribe( 172 + next: ObservableObserver<T> | ((value: T) => any), 173 + error?: (error: any) => any | undefined, 174 + complete?: () => any | undefined 175 + ) { 176 + const observer: ObservableObserver<T> = 177 + typeof next == 'object' ? next : { next, error, complete }; 178 + let talkback = talkbackPlaceholder; 179 + let ended = false; 180 + source(signal => { 181 + if (ended) { 182 + /*noop*/ 183 + } else if (signal === SignalKind.End) { 184 + ended = true; 185 + if (observer.complete) observer.complete(); 186 + } else if (signal.tag === SignalKind.Start) { 187 + (talkback = signal[0])(TalkbackKind.Pull); 188 + } else { 189 + observer.next(signal[0]); 190 + talkback(TalkbackKind.Pull); 191 + } 192 + }); 193 + const subscription = { 194 + closed: false, 195 + unsubscribe() { 196 + subscription.closed = true; 197 + ended = true; 198 + talkback(TalkbackKind.Close); 199 + }, 200 + }; 201 + return subscription; 202 + }, 203 + [observableSymbol()]() { 204 + return this; 205 + }, 206 + }; 207 + }
-3
src/operators/wonka_operator_combine.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const combine: <A, B>(a: Source<A>) => (b: Source<B>) => Source<[A, B]>;
-86
src/operators/wonka_operator_combine.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type combineStateT('a, 'b) = { 5 - mutable talkbackA: (.talkbackT) => unit, 6 - mutable talkbackB: (.talkbackT) => unit, 7 - mutable lastValA: option('a), 8 - mutable lastValB: option('b), 9 - mutable gotSignal: bool, 10 - mutable endCounter: int, 11 - mutable ended: bool, 12 - }; 13 - 14 - let combine = sourceA => curry(sourceB => curry(sink => { 15 - let state = { 16 - talkbackA: talkbackPlaceholder, 17 - talkbackB: talkbackPlaceholder, 18 - lastValA: None, 19 - lastValB: None, 20 - gotSignal: false, 21 - endCounter: 0, 22 - ended: false 23 - }; 24 - 25 - sourceA((.signal) => { 26 - switch (signal, state.lastValB) { 27 - | (Start(tb), _) => state.talkbackA = tb 28 - | (Push(a), None) => { 29 - state.lastValA = Some(a); 30 - state.gotSignal = false; 31 - } 32 - | (Push(a), Some(b)) when !state.ended => { 33 - state.lastValA = Some(a); 34 - state.gotSignal = false; 35 - sink(.Push((a, b))); 36 - } 37 - | (End, _) when state.endCounter < 1 => 38 - state.endCounter = state.endCounter + 1 39 - | (End, _) when !state.ended => { 40 - state.ended = true; 41 - sink(.End); 42 - } 43 - | _ => () 44 - } 45 - }); 46 - 47 - sourceB((.signal) => { 48 - switch (signal, state.lastValA) { 49 - | (Start(tb), _) => state.talkbackB = tb 50 - | (Push(b), None) => { 51 - state.lastValB = Some(b); 52 - state.gotSignal = false; 53 - } 54 - | (Push(b), Some(a)) when !state.ended => { 55 - state.lastValB = Some(b); 56 - state.gotSignal = false; 57 - sink(.Push((a, b))); 58 - } 59 - | (End, _) when state.endCounter < 1 => 60 - state.endCounter = state.endCounter + 1 61 - | (End, _) when !state.ended => { 62 - state.ended = true; 63 - sink(.End); 64 - } 65 - | _ => () 66 - } 67 - }); 68 - 69 - sink(.Start((.signal) => { 70 - if (!state.ended) { 71 - switch (signal) { 72 - | Close => { 73 - state.ended = true; 74 - state.talkbackA(.Close); 75 - state.talkbackB(.Close); 76 - } 77 - | Pull when !state.gotSignal => { 78 - state.gotSignal = true; 79 - state.talkbackA(.signal); 80 - state.talkbackB(.signal); 81 - } 82 - | Pull => () 83 - } 84 - }; 85 - })); 86 - }));
-3
src/operators/wonka_operator_combine.rei
··· 1 - open Wonka_types; 2 - 3 - let combine: (sourceT('a), sourceT('b), sinkT(('a, 'b))) => unit;
-5
src/operators/wonka_operator_concatMap.d.ts
··· 1 - import { Source, Operator } from '../wonka_types'; 2 - 3 - export const concatMap: <A, B>(f: (value: A) => Source<B>) => Operator<A, B>; 4 - export const concat: <A>(sources: Array<Source<A>>) => Source<A>; 5 - export const concatAll: <A>(source: Source<Source<A>>) => Source<A>;
-96
src/operators/wonka_operator_concatMap.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type concatMapStateT('a) = { 5 - inputQueue: Rebel.MutableQueue.t('a), 6 - mutable outerTalkback: (.talkbackT) => unit, 7 - mutable innerTalkback: (.talkbackT) => unit, 8 - mutable innerActive: bool, 9 - mutable closed: bool, 10 - mutable ended: bool 11 - }; 12 - 13 - let concatMap = f => curry(source => curry(sink => { 14 - let state: concatMapStateT('a) = { 15 - inputQueue: Rebel.MutableQueue.make(), 16 - outerTalkback: talkbackPlaceholder, 17 - innerTalkback: talkbackPlaceholder, 18 - innerActive: false, 19 - closed: false, 20 - ended: false 21 - }; 22 - 23 - let rec applyInnerSource = innerSource => 24 - innerSource((.signal) => { 25 - switch (signal) { 26 - | End => { 27 - state.innerActive = false; 28 - state.innerTalkback = talkbackPlaceholder; 29 - 30 - switch (Rebel.MutableQueue.pop(state.inputQueue)) { 31 - | Some(input) => applyInnerSource(f(.input)) 32 - | None when state.ended => sink(.End) 33 - | None => () 34 - }; 35 - } 36 - | Start(tb) => { 37 - state.innerActive = true; 38 - state.innerTalkback = tb; 39 - tb(.Pull); 40 - } 41 - | Push(x) when !state.closed => { 42 - sink(.Push(x)); 43 - state.innerTalkback(.Pull); 44 - } 45 - | Push(_) => () 46 - } 47 - }); 48 - 49 - source((.signal) => { 50 - switch (signal) { 51 - | End when !state.ended => { 52 - state.ended = true; 53 - if (!state.innerActive && Rebel.MutableQueue.isEmpty(state.inputQueue)) { 54 - sink(.End); 55 - } 56 - } 57 - | End => () 58 - | Start(tb) => { 59 - state.outerTalkback = tb; 60 - tb(.Pull); 61 - } 62 - | Push(x) when !state.ended => { 63 - if (state.innerActive) { 64 - Rebel.MutableQueue.add(state.inputQueue, x); 65 - } else { 66 - applyInnerSource(f(.x)); 67 - } 68 - 69 - state.outerTalkback(.Pull); 70 - } 71 - | Push(_) => () 72 - } 73 - }); 74 - 75 - sink(.Start((.signal) => { 76 - switch (signal) { 77 - | Pull => if (!state.ended) state.innerTalkback(.Pull) 78 - | Close => { 79 - state.innerTalkback(.Close); 80 - if (!state.ended) { 81 - state.ended = true; 82 - state.closed = true; 83 - state.outerTalkback(.Close); 84 - state.innerTalkback = talkbackPlaceholder; 85 - } 86 - } 87 - } 88 - })); 89 - })); 90 - 91 - let concatAll = source => concatMap((.x) => x, source); 92 - 93 - let concat = sources => { 94 - open Wonka_source_fromArray; 95 - concatMap((.x) => x, fromArray(sources)); 96 - };
-5
src/operators/wonka_operator_concatMap.rei
··· 1 - open Wonka_types; 2 - 3 - let concatMap: ((.'a) => sourceT('b), sourceT('a), sinkT('b)) => unit; 4 - let concat: (array(sourceT('a)), sinkT('a)) => unit; 5 - let concatAll: (sourceT(sourceT('a)), sinkT('a)) => unit;
-3
src/operators/wonka_operator_filter.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const filter: <A>(f: (value: A) => boolean) => Operator<A, A>;
-11
src/operators/wonka_operator_filter.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - let filter = f => curry(source => curry(sink => { 5 - captureTalkback(source, (.signal, talkback) => { 6 - switch (signal) { 7 - | Push(x) when !f(.x) => talkback(.Pull) 8 - | _ => sink(.signal) 9 - } 10 - }); 11 - }));
-3
src/operators/wonka_operator_filter.rei
··· 1 - open Wonka_types; 2 - 3 - let filter: ((.'a) => bool, sourceT('a), sinkT('a)) => unit;
-3
src/operators/wonka_operator_map.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const map: <A, B>(f: (value: A) => B) => Operator<A, B>;
-11
src/operators/wonka_operator_map.re
··· 1 - open Wonka_types; 2 - 3 - let map = f => curry(source => curry(sink => { 4 - source((.signal) => sink(. 5 - switch (signal) { 6 - | Start(x) => Start(x) 7 - | Push(x) => Push(f(.x)) 8 - | End => End 9 - } 10 - )); 11 - }));
-3
src/operators/wonka_operator_map.rei
··· 1 - open Wonka_types; 2 - 3 - let map: ((.'a) => 'b, sourceT('a), sinkT('b)) => unit;
-6
src/operators/wonka_operator_mergeMap.d.ts
··· 1 - import { Source, Operator } from '../wonka_types'; 2 - 3 - export const mergeMap: <A, B>(f: (value: A) => Source<B>) => Operator<A, B>; 4 - export const merge: <A>(sources: Array<Source<A>>) => Source<A>; 5 - export const mergeAll: <A>(source: Source<Source<A>>) => Source<A>; 6 - export const flatten: <A>(source: Source<Source<A>>) => Source<A>;
-87
src/operators/wonka_operator_mergeMap.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type mergeMapStateT = { 5 - mutable outerTalkback: (.talkbackT) => unit, 6 - mutable innerTalkbacks: Rebel.Array.t((.talkbackT) => unit), 7 - mutable ended: bool 8 - }; 9 - 10 - let mergeMap = f => curry(source => curry(sink => { 11 - let state: mergeMapStateT = { 12 - outerTalkback: talkbackPlaceholder, 13 - innerTalkbacks: Rebel.Array.makeEmpty(), 14 - ended: false 15 - }; 16 - 17 - let applyInnerSource = innerSource => { 18 - let talkback = ref(talkbackPlaceholder); 19 - 20 - innerSource((.signal) => { 21 - switch (signal) { 22 - | End => { 23 - state.innerTalkbacks = Rebel.Array.filter(state.innerTalkbacks, x => x !== talkback^); 24 - if (state.ended && Rebel.Array.size(state.innerTalkbacks) === 0) { 25 - sink(.End); 26 - } 27 - } 28 - | Start(tb) => { 29 - talkback := tb; 30 - state.innerTalkbacks = Rebel.Array.append(state.innerTalkbacks, tb); 31 - tb(.Pull); 32 - } 33 - | Push(x) when Rebel.Array.size(state.innerTalkbacks) !== 0 => { 34 - sink(.Push(x)); 35 - talkback^(.Pull); 36 - } 37 - | Push(_) => () 38 - } 39 - }); 40 - }; 41 - 42 - source((.signal) => { 43 - switch (signal) { 44 - | End when !state.ended => { 45 - state.ended = true; 46 - if (Rebel.Array.size(state.innerTalkbacks) === 0) { 47 - sink(.End); 48 - } 49 - } 50 - | End => () 51 - | Start(tb) => { 52 - state.outerTalkback = tb; 53 - tb(.Pull); 54 - } 55 - | Push(x) when !state.ended => { 56 - applyInnerSource(f(.x)); 57 - state.outerTalkback(.Pull); 58 - } 59 - | Push(_) => () 60 - } 61 - }); 62 - 63 - sink(.Start((.signal) => { 64 - switch (signal) { 65 - | Close => { 66 - Rebel.Array.forEach(state.innerTalkbacks, talkback => talkback(.Close)); 67 - if (!state.ended) { 68 - state.ended = true; 69 - state.outerTalkback(.Close); 70 - Rebel.Array.forEach(state.innerTalkbacks, talkback => talkback(.Close)); 71 - state.innerTalkbacks = Rebel.Array.makeEmpty(); 72 - } 73 - } 74 - | Pull when !state.ended => 75 - Rebel.Array.forEach(state.innerTalkbacks, talkback => talkback(.Pull)); 76 - | Pull => () 77 - } 78 - })); 79 - })); 80 - 81 - let merge = sources => { 82 - open Wonka_source_fromArray; 83 - mergeMap((.x) => x, fromArray(sources)); 84 - }; 85 - 86 - let mergeAll = source => mergeMap((.x) => x, source); 87 - let flatten = mergeAll;
-6
src/operators/wonka_operator_mergeMap.rei
··· 1 - open Wonka_types; 2 - 3 - let mergeMap: ((.'a) => sourceT('b), sourceT('a), sinkT('b)) => unit; 4 - let merge: (array(sourceT('a)), sinkT('a)) => unit; 5 - let mergeAll: (sourceT(sourceT('a)), sinkT('a)) => unit; 6 - let flatten: (sourceT(sourceT('a)), sinkT('a)) => unit;
-3
src/operators/wonka_operator_scan.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const scan: <A, B>(f: (acc: B, value: A) => B, acc: B) => Operator<A, B>;
-16
src/operators/wonka_operator_scan.re
··· 1 - open Wonka_types; 2 - 3 - let scan = (f, seed) => curry(source => curry(sink => { 4 - let acc = ref(seed); 5 - 6 - source((.signal) => sink(. 7 - switch (signal) { 8 - | Push(x) => { 9 - acc := f(.acc^, x); 10 - Push(acc^) 11 - } 12 - | Start(x) => Start(x) 13 - | End => End 14 - } 15 - )); 16 - }));
-3
src/operators/wonka_operator_scan.rei
··· 1 - open Wonka_types; 2 - 3 - let scan: ((.'b, 'a) => 'b, 'b, sourceT('a), sinkT('b)) => unit;
-3
src/operators/wonka_operator_share.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const share: <A>(source: Source<A>) => Source<A>;
-52
src/operators/wonka_operator_share.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type shareStateT('a) = { 5 - mutable sinks: Rebel.Array.t(sinkT('a)), 6 - mutable talkback: (.talkbackT) => unit, 7 - mutable gotSignal: bool 8 - }; 9 - 10 - let share = source => { 11 - let state = { 12 - sinks: Rebel.Array.makeEmpty(), 13 - talkback: talkbackPlaceholder, 14 - gotSignal: false 15 - }; 16 - 17 - sink => { 18 - state.sinks = Rebel.Array.append(state.sinks, sink); 19 - 20 - if (Rebel.Array.size(state.sinks) === 1) { 21 - source((.signal) => { 22 - switch (signal) { 23 - | Push(_) => { 24 - state.gotSignal = false; 25 - Rebel.Array.forEach(state.sinks, sink => sink(.signal)); 26 - } 27 - | Start(x) => state.talkback = x 28 - | End => { 29 - Rebel.Array.forEach(state.sinks, sink => sink(.End)); 30 - state.sinks = Rebel.Array.makeEmpty(); 31 - } 32 - } 33 - }); 34 - }; 35 - 36 - sink(.Start((.signal) => { 37 - switch (signal) { 38 - | Close => { 39 - state.sinks = Rebel.Array.filter(state.sinks, x => x !== sink); 40 - if (Rebel.Array.size(state.sinks) === 0) { 41 - state.talkback(.Close); 42 - }; 43 - } 44 - | Pull when !state.gotSignal => { 45 - state.gotSignal = true; 46 - state.talkback(.signal); 47 - } 48 - | Pull => () 49 - } 50 - })); 51 - } 52 - };
-3
src/operators/wonka_operator_share.rei
··· 1 - open Wonka_types; 2 - 3 - let share: (sourceT('a), sinkT('a)) => unit;
-3
src/operators/wonka_operator_skip.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const skip: <A>(max: number) => Operator<A, A>;
-16
src/operators/wonka_operator_skip.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - let skip = wait => curry(source => curry(sink => { 5 - let rest = ref(wait); 6 - 7 - captureTalkback(source, (.signal, talkback) => { 8 - switch (signal) { 9 - | Push(_) when rest^ > 0 => { 10 - rest := rest^ - 1; 11 - talkback(.Pull); 12 - } 13 - | _ => sink(.signal) 14 - } 15 - }); 16 - }));
-3
src/operators/wonka_operator_skip.rei
··· 1 - open Wonka_types; 2 - 3 - let skip: (int, sourceT('a), sinkT('a)) => unit;
-3
src/operators/wonka_operator_skipUntil.d.ts
··· 1 - import { Source, Operator } from '../wonka_types'; 2 - 3 - export const skipUntil: <A>(signal: Source<any>) => Operator<A, A>;
-69
src/operators/wonka_operator_skipUntil.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type skipUntilStateT = { 5 - mutable skip: bool, 6 - mutable ended: bool, 7 - mutable gotSignal: bool, 8 - mutable sourceTalkback: (.talkbackT) => unit, 9 - mutable notifierTalkback: (.talkbackT) => unit 10 - }; 11 - 12 - let skipUntil = notifier => curry(source => curry(sink => { 13 - let state: skipUntilStateT = { 14 - skip: true, 15 - ended: false, 16 - gotSignal: false, 17 - sourceTalkback: talkbackPlaceholder, 18 - notifierTalkback: talkbackPlaceholder 19 - }; 20 - 21 - source((.signal) => { 22 - switch (signal) { 23 - | Start(tb) => { 24 - state.sourceTalkback = tb; 25 - 26 - notifier((.signal) => { 27 - switch (signal) { 28 - | Start(innerTb) => { 29 - state.notifierTalkback = innerTb; 30 - innerTb(.Pull); 31 - tb(.Pull); 32 - } 33 - | Push(_) => { 34 - state.skip = false; 35 - state.notifierTalkback(.Close); 36 - } 37 - | End => () 38 - } 39 - }); 40 - } 41 - | Push(_) when state.skip && !state.ended => state.sourceTalkback(.Pull) 42 - | Push(_) when !state.ended => { 43 - state.gotSignal = false; 44 - sink(.signal) 45 - } 46 - | Push(_) => () 47 - | End => { 48 - if (state.skip) state.notifierTalkback(.Close); 49 - state.ended = true; 50 - sink(.End) 51 - } 52 - } 53 - }); 54 - 55 - sink(.Start((.signal) => { 56 - switch (signal) { 57 - | Close => { 58 - if (state.skip) state.notifierTalkback(.Close); 59 - state.ended = true; 60 - state.sourceTalkback(.Close); 61 - } 62 - | Pull when !state.gotSignal && !state.ended => { 63 - state.gotSignal = true; 64 - state.sourceTalkback(.Pull); 65 - } 66 - | Pull => () 67 - } 68 - })); 69 - }));
-3
src/operators/wonka_operator_skipUntil.rei
··· 1 - open Wonka_types; 2 - 3 - let skipUntil: (sourceT('a), sourceT('b), sinkT('b)) => unit;
-3
src/operators/wonka_operator_skipWhile.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const skipWhile: <A>(f: (x: A) => boolean) => Operator<A, A>;
-20
src/operators/wonka_operator_skipWhile.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - let skipWhile = f => curry(source => curry(sink => { 5 - let skip = ref(true); 6 - 7 - captureTalkback(source, (.signal, talkback) => { 8 - switch (signal) { 9 - | Push(x) when skip^ => { 10 - if (f(.x)) { 11 - talkback(.Pull); 12 - } else { 13 - skip := false; 14 - sink(.signal); 15 - }; 16 - } 17 - | _ => sink(.signal) 18 - } 19 - }); 20 - }));
-3
src/operators/wonka_operator_skipWhile.rei
··· 1 - open Wonka_types; 2 - 3 - let skipWhile: ((.'a) => bool, sourceT('a), sinkT('a)) => unit;
-3
src/operators/wonka_operator_switchMap.d.ts
··· 1 - import { Source, Operator } from '../wonka_types'; 2 - 3 - export const switchMap: <A, B>(f: (value: A) => Source<B>) => Operator<A, B>;
-79
src/operators/wonka_operator_switchMap.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type switchMapStateT('a) = { 5 - mutable outerTalkback: (.talkbackT) => unit, 6 - mutable innerTalkback: (.talkbackT) => unit, 7 - mutable innerActive: bool, 8 - mutable closed: bool, 9 - mutable ended: bool 10 - }; 11 - 12 - let switchMap = f => curry(source => curry(sink => { 13 - let state: switchMapStateT('a) = { 14 - outerTalkback: talkbackPlaceholder, 15 - innerTalkback: talkbackPlaceholder, 16 - innerActive: false, 17 - closed: false, 18 - ended: false 19 - }; 20 - 21 - let applyInnerSource = innerSource => 22 - innerSource((.signal) => { 23 - switch (signal) { 24 - | End => { 25 - state.innerActive = false; 26 - state.innerTalkback = talkbackPlaceholder; 27 - if (state.ended) sink(.End); 28 - } 29 - | Start(tb) => { 30 - state.innerActive = true; 31 - state.innerTalkback = tb; 32 - tb(.Pull); 33 - } 34 - | Push(x) when !state.closed => { 35 - sink(.Push(x)); 36 - state.innerTalkback(.Pull); 37 - } 38 - | Push(_) => () 39 - } 40 - }); 41 - 42 - source((.signal) => { 43 - switch (signal) { 44 - | End when !state.ended => { 45 - state.ended = true; 46 - if (!state.innerActive) sink(.End); 47 - } 48 - | End => () 49 - | Start(tb) => { 50 - state.outerTalkback = tb; 51 - tb(.Pull); 52 - } 53 - | Push(x) when !state.ended => { 54 - if (state.innerActive) { 55 - state.innerTalkback(.Close); 56 - state.innerTalkback = talkbackPlaceholder; 57 - } 58 - applyInnerSource(f(.x)); 59 - state.outerTalkback(.Pull); 60 - } 61 - | Push(_) => () 62 - } 63 - }); 64 - 65 - sink(.Start((.signal) => { 66 - switch (signal) { 67 - | Pull => state.innerTalkback(.Pull) 68 - | Close => { 69 - state.innerTalkback(.Close); 70 - if (!state.ended) { 71 - state.ended = true; 72 - state.closed = true; 73 - state.outerTalkback(.Close); 74 - state.innerTalkback = talkbackPlaceholder; 75 - } 76 - } 77 - } 78 - })); 79 - }));
-3
src/operators/wonka_operator_switchMap.rei
··· 1 - open Wonka_types; 2 - 3 - let switchMap: ((.'a) => sourceT('b), sourceT('a), sinkT('b)) => unit;
-3
src/operators/wonka_operator_take.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const take: <A>(max: number) => Operator<A, A>;
-47
src/operators/wonka_operator_take.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type takeStateT = { 5 - mutable taken: int, 6 - mutable talkback: (.talkbackT) => unit 7 - }; 8 - 9 - let take = max => curry(source => curry(sink => { 10 - let state: takeStateT = { 11 - taken: 0, 12 - talkback: talkbackPlaceholder 13 - }; 14 - 15 - source((.signal) => { 16 - switch (signal) { 17 - | Start(tb) => state.talkback = tb; 18 - | Push(_) when state.taken < max => { 19 - state.taken = state.taken + 1; 20 - sink(.signal); 21 - 22 - if (state.taken === max) { 23 - sink(.End); 24 - state.talkback(.Close); 25 - }; 26 - } 27 - | Push(_) => () 28 - | End when state.taken < max => { 29 - state.taken = max; 30 - sink(.End) 31 - } 32 - | End => () 33 - } 34 - }); 35 - 36 - sink(.Start((.signal) => { 37 - if (state.taken < max) { 38 - switch (signal) { 39 - | Pull => state.talkback(.Pull); 40 - | Close => { 41 - state.taken = max; 42 - state.talkback(.Close); 43 - } 44 - } 45 - }; 46 - })); 47 - }));
-3
src/operators/wonka_operator_take.rei
··· 1 - open Wonka_types; 2 - 3 - let take: (int, sourceT('a), sinkT('a)) => unit;
-3
src/operators/wonka_operator_takeLast.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const takeLast: <A>(max: number) => Operator<A, A>;
-23
src/operators/wonka_operator_takeLast.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - let takeLast = max => curry(source => curry(sink => { 5 - open Rebel; 6 - let queue = MutableQueue.make(); 7 - 8 - captureTalkback(source, (.signal, talkback) => { 9 - switch (signal) { 10 - | Start(_) => talkback(.Pull) 11 - | Push(x) => { 12 - let size = MutableQueue.size(queue); 13 - if (size >= max && max > 0) { 14 - ignore(MutableQueue.pop(queue)); 15 - }; 16 - 17 - MutableQueue.add(queue, x); 18 - talkback(.Pull); 19 - } 20 - | End => makeTrampoline(sink, (.) => MutableQueue.pop(queue)) 21 - } 22 - }); 23 - }));
-3
src/operators/wonka_operator_takeLast.rei
··· 1 - open Wonka_types; 2 - 3 - let takeLast: (int, sourceT('a), sinkT('a)) => unit;
-3
src/operators/wonka_operator_takeUntil.d.ts
··· 1 - import { Source, Operator } from '../wonka_types'; 2 - 3 - export const takeUntil: <A>(signal: Source<any>) => Operator<A, A>;
-60
src/operators/wonka_operator_takeUntil.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type takeUntilStateT = { 5 - mutable ended: bool, 6 - mutable sourceTalkback: (.talkbackT) => unit, 7 - mutable notifierTalkback: (.talkbackT) => unit 8 - }; 9 - 10 - let takeUntil = notifier => curry(source => curry(sink => { 11 - let state: takeUntilStateT = { 12 - ended: false, 13 - sourceTalkback: talkbackPlaceholder, 14 - notifierTalkback: talkbackPlaceholder 15 - }; 16 - 17 - source((.signal) => { 18 - switch (signal) { 19 - | Start(tb) => { 20 - state.sourceTalkback = tb; 21 - 22 - notifier((.signal) => { 23 - switch (signal) { 24 - | Start(innerTb) => { 25 - state.notifierTalkback = innerTb; 26 - innerTb(.Pull); 27 - } 28 - | Push(_) => { 29 - state.ended = true; 30 - state.notifierTalkback(.Close); 31 - state.sourceTalkback(.Close); 32 - sink(.End); 33 - } 34 - | End => () 35 - } 36 - }); 37 - } 38 - | End when !state.ended => { 39 - state.notifierTalkback(.Close); 40 - state.ended = true; 41 - sink(.End); 42 - } 43 - | End => () 44 - | Push(_) when !state.ended => sink(.signal) 45 - | Push(_) => () 46 - } 47 - }); 48 - 49 - sink(.Start((.signal) => { 50 - if (!state.ended) { 51 - switch (signal) { 52 - | Close => { 53 - state.sourceTalkback(.Close); 54 - state.notifierTalkback(.Close); 55 - } 56 - | Pull => state.sourceTalkback(.Pull) 57 - } 58 - }; 59 - })); 60 - }));
-3
src/operators/wonka_operator_takeUntil.rei
··· 1 - open Wonka_types; 2 - 3 - let takeUntil: (sourceT('a), sourceT('b), sinkT('b)) => unit;
-3
src/operators/wonka_operator_takeWhile.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const takeWhile: <A>(f: (x: A) => boolean) => Operator<A, A>;
-43
src/operators/wonka_operator_takeWhile.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - let takeWhile = f => curry(source => curry(sink => { 5 - let ended = ref(false); 6 - let talkback = ref(talkbackPlaceholder); 7 - 8 - source((.signal) => { 9 - switch (signal) { 10 - | Start(tb) => { 11 - talkback := tb; 12 - sink(.signal); 13 - } 14 - | End when !ended^ => { 15 - ended := true; 16 - sink(.End); 17 - } 18 - | End => () 19 - | Push(x) when !ended^ => { 20 - if (!f(.x)) { 21 - ended := true; 22 - sink(.End); 23 - talkback^(.Close); 24 - } else { 25 - sink(.signal); 26 - }; 27 - } 28 - | Push(_) => () 29 - } 30 - }); 31 - 32 - sink(.Start((.signal) => { 33 - if (!ended^) { 34 - switch (signal) { 35 - | Pull => talkback^(.Pull); 36 - | Close => { 37 - ended := true; 38 - talkback^(.Close); 39 - } 40 - } 41 - }; 42 - })); 43 - }));
-3
src/operators/wonka_operator_takeWhile.rei
··· 1 - open Wonka_types; 2 - 3 - let takeWhile: ((.'a) => bool, sourceT('a), sinkT('a)) => unit;
-3
src/operators/wonka_operator_tap.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const tap: <A>(f: (value: A) => void) => Operator<A, A>;
-12
src/operators/wonka_operator_tap.re
··· 1 - open Wonka_types; 2 - 3 - let tap = f => curry(source => curry(sink => { 4 - source((.signal) => { 5 - switch (signal) { 6 - | Push(x) => f(.x) 7 - | _ => () 8 - }; 9 - 10 - sink(.signal); 11 - }); 12 - }));
-3
src/operators/wonka_operator_tap.rei
··· 1 - open Wonka_types; 2 - 3 - let tap: ((.'a) => unit, sourceT('a), sinkT('a)) => unit;
-7
src/operators/wonka_operator_tapAll.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const tapAll: <A>( 4 - onStart: () => void, 5 - onPush: (value: A) => void, 6 - onEnd: () => void 7 - ) => Operator<A, A>;
-15
src/operators/wonka_operator_tapAll.re
··· 1 - open Wonka_types; 2 - 3 - let tapAll = (~onStart, ~onPush, ~onEnd) => { 4 - curry(source => curry(sink => { 5 - source((.signal) => { 6 - switch (signal) { 7 - | Start(_) => onStart(.) 8 - | Push(x) => onPush(.x) 9 - | End => onEnd(.) 10 - }; 11 - 12 - sink(.signal); 13 - }); 14 - })); 15 - };
-9
src/operators/wonka_operator_tapAll.rei
··· 1 - open Wonka_types; 2 - 3 - let tapAll: ( 4 - ~onStart: (.unit) => unit, 5 - ~onPush: (.'a) => unit, 6 - ~onEnd: (.unit) => unit, 7 - sourceT('a), 8 - sinkT('a) 9 - ) => unit;
+1461
src/operators.ts
··· 1 + import { Push, Source, Sink, Operator, SignalKind, TalkbackKind, TalkbackFn } from './types'; 2 + import { push, start, talkbackPlaceholder } from './helpers'; 3 + import { fromArray } from './sources'; 4 + 5 + const identity = <T>(x: T): T => x; 6 + 7 + /** Buffers values and emits the array of bufferd values each time a `notifier` Source emits. 8 + * 9 + * @param notifier - A {@link Source} that releases the current buffer. 10 + * @returns An {@link Operator}. 11 + * 12 + * @remarks 13 + * `buffer` will buffer values from the input {@link Source}. When the passed `notifier` Source 14 + * emits, it will emit an array of all buffered values. 15 + * 16 + * This can be used to group values over time. A buffer will only be emitted when it contains any 17 + * values. 18 + * 19 + * @example 20 + * ```ts 21 + * pipe( 22 + * interval(50), 23 + * buffer(interval(100)), 24 + * subscribe(x => { 25 + * console.log(text); // logs: [0], [1, 2], [3, 4]... 26 + * }) 27 + * ); 28 + * ``` 29 + */ 30 + export function buffer<S, T>(notifier: Source<S>): Operator<T, T[]> { 31 + return source => sink => { 32 + let buffer: T[] = []; 33 + let sourceTalkback = talkbackPlaceholder; 34 + let notifierTalkback = talkbackPlaceholder; 35 + let pulled = false; 36 + let ended = false; 37 + source(signal => { 38 + if (ended) { 39 + /*noop*/ 40 + } else if (signal === SignalKind.End) { 41 + ended = true; 42 + notifierTalkback(TalkbackKind.Close); 43 + if (buffer.length) sink(push(buffer)); 44 + sink(SignalKind.End); 45 + } else if (signal.tag === SignalKind.Start) { 46 + sourceTalkback = signal[0]; 47 + notifier(signal => { 48 + if (ended) { 49 + /*noop*/ 50 + } else if (signal === SignalKind.End) { 51 + ended = true; 52 + sourceTalkback(TalkbackKind.Close); 53 + if (buffer.length) sink(push(buffer)); 54 + sink(SignalKind.End); 55 + } else if (signal.tag === SignalKind.Start) { 56 + notifierTalkback = signal[0]; 57 + } else if (buffer.length) { 58 + const signal = push(buffer); 59 + buffer = []; 60 + sink(signal); 61 + } 62 + }); 63 + } else { 64 + buffer.push(signal[0]); 65 + if (!pulled) { 66 + pulled = true; 67 + sourceTalkback(TalkbackKind.Pull); 68 + notifierTalkback(TalkbackKind.Pull); 69 + } else { 70 + pulled = false; 71 + } 72 + } 73 + }); 74 + sink( 75 + start(signal => { 76 + if (signal === TalkbackKind.Close && !ended) { 77 + ended = true; 78 + sourceTalkback(TalkbackKind.Close); 79 + notifierTalkback(TalkbackKind.Close); 80 + } else if (!ended && !pulled) { 81 + pulled = true; 82 + sourceTalkback(TalkbackKind.Pull); 83 + notifierTalkback(TalkbackKind.Pull); 84 + } 85 + }) 86 + ); 87 + }; 88 + } 89 + 90 + /** Emits in order from the Sources returned by a mapping function per value of the Source. 91 + * 92 + * @param map - A function returning a {@link Source} per value. 93 + * @returns An {@link Operator}. 94 + * 95 + * @remarks 96 + * `concatMap` accepts a mapping function which must return a {@link Source} per value. 97 + * The output {@link Source} will emit values from each Source the function returned, in order, 98 + * queuing sources that aren't yet active. 99 + * 100 + * This can be used to issue multiple values per emission of an input {@link Source}, while keeping 101 + * the order of their outputs consistent. 102 + * 103 + * @example 104 + * ```ts 105 + * pipe( 106 + * fromArray([1, 2]), 107 + * concatMap(x => fromArray([x, x * 2])), 108 + * subscribe(x => { 109 + * console.log(text); // logs: 1, 2, 2, 4 110 + * }) 111 + * ); 112 + * ``` 113 + */ 114 + export function concatMap<In, Out>(map: (value: In) => Source<Out>): Operator<In, Out> { 115 + return source => sink => { 116 + const inputQueue: In[] = []; 117 + let outerTalkback = talkbackPlaceholder; 118 + let innerTalkback = talkbackPlaceholder; 119 + let outerPulled = false; 120 + let innerPulled = false; 121 + let innerActive = false; 122 + let ended = false; 123 + function applyInnerSource(innerSource: Source<Out>): void { 124 + innerActive = true; 125 + innerSource(signal => { 126 + if (signal === SignalKind.End) { 127 + if (innerActive) { 128 + innerActive = false; 129 + if (inputQueue.length) { 130 + applyInnerSource(map(inputQueue.shift()!)); 131 + } else if (ended) { 132 + sink(SignalKind.End); 133 + } else if (!outerPulled) { 134 + outerPulled = true; 135 + outerTalkback(TalkbackKind.Pull); 136 + } 137 + } 138 + } else if (signal.tag === SignalKind.Start) { 139 + innerPulled = false; 140 + (innerTalkback = signal[0])(TalkbackKind.Pull); 141 + } else if (innerActive) { 142 + sink(signal); 143 + if (innerPulled) { 144 + innerPulled = false; 145 + } else { 146 + innerTalkback(TalkbackKind.Pull); 147 + } 148 + } 149 + }); 150 + } 151 + source(signal => { 152 + if (ended) { 153 + /*noop*/ 154 + } else if (signal === SignalKind.End) { 155 + ended = true; 156 + if (!innerActive && !inputQueue.length) sink(SignalKind.End); 157 + } else if (signal.tag === SignalKind.Start) { 158 + outerTalkback = signal[0]; 159 + } else { 160 + outerPulled = false; 161 + if (innerActive) { 162 + inputQueue.push(signal[0]); 163 + } else { 164 + applyInnerSource(map(signal[0])); 165 + } 166 + } 167 + }); 168 + sink( 169 + start(signal => { 170 + if (signal === TalkbackKind.Close) { 171 + if (!ended) { 172 + ended = true; 173 + outerTalkback(TalkbackKind.Close); 174 + } 175 + if (innerActive) { 176 + innerActive = false; 177 + innerTalkback(TalkbackKind.Close); 178 + } 179 + } else { 180 + if (!ended && !outerPulled) { 181 + outerPulled = true; 182 + outerTalkback(TalkbackKind.Pull); 183 + } 184 + if (innerActive && !innerPulled) { 185 + innerPulled = true; 186 + innerTalkback(TalkbackKind.Pull); 187 + } 188 + } 189 + }) 190 + ); 191 + }; 192 + } 193 + 194 + /** Flattens a Source emitting Sources into a single Source emitting the inner values in order. 195 + * 196 + * @see {@link concatMap} which this helper uses and instead accept a mapping function. 197 + * @param source - An {@link Source} emitting {@link Source | Sources}. 198 + * @returns A {@link Source} emitting values from the inner Sources. 199 + * 200 + * @remarks 201 + * `concatAll` accepts a {@link Source} emitting {@link Source | Sources}. 202 + * The output {@link Source} will emit values from each Source, in order, queuing sources that 203 + * aren't yet active. 204 + * 205 + * @example 206 + * ```ts 207 + * pipe( 208 + * fromArray([ 209 + * fromArray([1, 2]), 210 + * fromArray([3, 4]), 211 + * ]), 212 + * concatAll, 213 + * subscribe(x => { 214 + * console.log(text); // logs: 1, 2, 3, 4 215 + * }) 216 + * ); 217 + * ``` 218 + */ 219 + export function concatAll<T>(source: Source<Source<T>>): Source<T> { 220 + return concatMap<Source<T>, T>(identity)(source); 221 + } 222 + 223 + /** Emits values from the passed sources in order. 224 + * 225 + * @param sources - An array of {@link Source | Sources}. 226 + * @returns A {@link Source} emitting values from the input Sources. 227 + * 228 + * @remarks 229 + * `concat` accepts an array of {@link Source | Sources} and will emit values from them, starting 230 + * with the first one and continuing to the next only when the prior source ended. 231 + * 232 + * This can be used to issue combine sources while keeping the order of their values intact. 233 + * 234 + * @example 235 + * ```ts 236 + * pipe( 237 + * concat([ 238 + * fromArray([1, 2]), 239 + * fromArray([3, 4]), 240 + * ]), 241 + * subscribe(x => { 242 + * console.log(text); // logs: 1, 2, 3, 4 243 + * }) 244 + * ); 245 + * ``` 246 + */ 247 + export function concat<T>(sources: Source<T>[]): Source<T> { 248 + return concatAll(fromArray(sources)); 249 + } 250 + 251 + /** Filters out emitted values for which the passed predicate function returns `false`. 252 + * 253 + * @param predicate - A function returning a boolean per value. 254 + * @returns An {@link Operator}. 255 + * 256 + * @remarks 257 + * `filter` will omit values from the {@link Source} for which the passed `predicate` function 258 + * returns `false`. 259 + * 260 + * @example 261 + * ```ts 262 + * pipe( 263 + * fromArray([1, 2, 3]), 264 + * filter(x => x % 2 === 0), 265 + * subscribe(x => { 266 + * console.log(text); // logs: 2 267 + * }) 268 + * ); 269 + * ``` 270 + */ 271 + function filter<In, Out extends In>(predicate: (value: In) => value is Out): Operator<In, Out>; 272 + function filter<T>(predicate: (value: T) => boolean): Operator<T, T>; 273 + function filter<In, Out>(predicate: (value: In) => boolean): Operator<In, Out> { 274 + return source => sink => { 275 + let talkback = talkbackPlaceholder; 276 + source(signal => { 277 + if (signal === SignalKind.End) { 278 + sink(SignalKind.End); 279 + } else if (signal.tag === SignalKind.Start) { 280 + talkback = signal[0]; 281 + sink(signal); 282 + } else if (!predicate(signal[0])) { 283 + talkback(TalkbackKind.Pull); 284 + } else { 285 + sink(signal as Push<any>); 286 + } 287 + }); 288 + }; 289 + } 290 + 291 + export { filter }; 292 + 293 + /** Maps emitted values using the passed mapping function. 294 + * 295 + * @param map - A function returning transforming the {@link Source | Source's} values. 296 + * @returns An {@link Operator}. 297 + * 298 + * @remarks 299 + * `map` accepts a transform function and calls it on each emitted value. It then emits 300 + * the values returned by the transform function instead. 301 + * 302 + * @example 303 + * ```ts 304 + * pipe( 305 + * fromArray([1, 2, 3]), 306 + * map(x => x * 2), 307 + * subscribe(x => { 308 + * console.log(text); // logs: 2, 4, 6 309 + * }) 310 + * ); 311 + * ``` 312 + */ 313 + export function map<In, Out>(map: (value: In) => Out): Operator<In, Out> { 314 + return source => sink => 315 + source(signal => { 316 + if (signal === SignalKind.End || signal.tag === SignalKind.Start) { 317 + sink(signal); 318 + } else { 319 + sink(push(map(signal[0]))); 320 + } 321 + }); 322 + } 323 + 324 + /** Emits from the Sources returned by a mapping function per value of the Source. 325 + * 326 + * @param map - A function returning a {@link Source} per value. 327 + * @returns An {@link Operator}. 328 + * 329 + * @remarks 330 + * `mergeMap` accepts a mapping function which must return a {@link Source} per value. 331 + * The output {@link Source} will emit values from all {@link Source | Sources} the mapping function 332 + * returned. 333 + * 334 + * This can be used to issue multiple values per emission of an input {@link Source}, essentially 335 + * multiplexing all values to multiple Sources. 336 + * 337 + * @example 338 + * ```ts 339 + * pipe( 340 + * interval(50), 341 + * mergeMap(x => pipe( 342 + * fromValue(x), 343 + * delay(100) 344 + * )), 345 + * subscribe(x => { 346 + * console.log(text); // logs: 0, 1, 2... 347 + * }) 348 + * ); 349 + * ``` 350 + */ 351 + export function mergeMap<In, Out>(map: (value: In) => Source<Out>): Operator<In, Out> { 352 + return source => sink => { 353 + let innerTalkbacks: TalkbackFn[] = []; 354 + let outerTalkback = talkbackPlaceholder; 355 + let outerPulled = false; 356 + let ended = false; 357 + function applyInnerSource(innerSource: Source<Out>): void { 358 + let talkback = talkbackPlaceholder; 359 + innerSource(signal => { 360 + if (signal === SignalKind.End) { 361 + if (innerTalkbacks.length) { 362 + const index = innerTalkbacks.indexOf(talkback); 363 + if (index > -1) (innerTalkbacks = innerTalkbacks.slice()).splice(index, 1); 364 + if (!innerTalkbacks.length) { 365 + if (ended) { 366 + sink(SignalKind.End); 367 + } else if (!outerPulled) { 368 + outerPulled = true; 369 + outerTalkback(TalkbackKind.Pull); 370 + } 371 + } 372 + } 373 + } else if (signal.tag === SignalKind.Start) { 374 + innerTalkbacks.push((talkback = signal[0])); 375 + talkback(TalkbackKind.Pull); 376 + } else if (innerTalkbacks.length) { 377 + sink(signal); 378 + talkback(TalkbackKind.Pull); 379 + } 380 + }); 381 + } 382 + source(signal => { 383 + if (ended) { 384 + /*noop*/ 385 + } else if (signal === SignalKind.End) { 386 + ended = true; 387 + if (!innerTalkbacks.length) sink(SignalKind.End); 388 + } else if (signal.tag === SignalKind.Start) { 389 + outerTalkback = signal[0]; 390 + } else { 391 + outerPulled = false; 392 + applyInnerSource(map(signal[0])); 393 + if (!outerPulled) { 394 + outerPulled = true; 395 + outerTalkback(TalkbackKind.Pull); 396 + } 397 + } 398 + }); 399 + sink( 400 + start(signal => { 401 + if (signal === TalkbackKind.Close) { 402 + if (!ended) { 403 + ended = true; 404 + outerTalkback(TalkbackKind.Close); 405 + } 406 + for (let i = 0, a = innerTalkbacks, l = innerTalkbacks.length; i < l; i++) 407 + a[i](TalkbackKind.Close); 408 + innerTalkbacks.length = 0; 409 + } else { 410 + if (!ended && !outerPulled) { 411 + outerPulled = true; 412 + outerTalkback(TalkbackKind.Pull); 413 + } else { 414 + outerPulled = false; 415 + } 416 + for (let i = 0, a = innerTalkbacks, l = innerTalkbacks.length; i < l; i++) 417 + a[i](TalkbackKind.Pull); 418 + } 419 + }) 420 + ); 421 + }; 422 + } 423 + 424 + /** Flattens a Source emitting Sources into a single Source emitting the inner values. 425 + * 426 + * @see {@link mergeMap} which this helper uses and instead accept a mapping function. 427 + * @param source - An {@link Source} emitting {@link Source | Sources}. 428 + * @returns A {@link Source} emitting values from the inner Sources. 429 + * 430 + * @remarks 431 + * `mergeAll` accepts a {@link Source} which must emit {@link Source | Sources}. It will subscribe 432 + * to each incoming source immediately and start passing its emitted values through. 433 + * 434 + * @example 435 + * ```ts 436 + * pipe( 437 + * fromArray([ 438 + * interval(50), 439 + * interval(100), 440 + * ]), 441 + * mergeAll, 442 + * subscribe(x => { 443 + * console.log(text); // logs: 0, 0, 1, 2, 1, 3, 4, 2 444 + * }) 445 + * ); 446 + * ``` 447 + */ 448 + export function mergeAll<T>(source: Source<Source<T>>): Source<T> { 449 + return mergeMap<Source<T>, T>(identity)(source); 450 + } 451 + 452 + /** Emits values from the passed sources simultaneously. 453 + * 454 + * @param sources - An array of {@link Source | Sources}. 455 + * @returns A {@link Source} emitting values from the input Sources. 456 + * 457 + * @remarks 458 + * `merge` accepts an array of {@link Source | Sources} and will subscribe to all of them, passing 459 + * through all their emitted values simultaneously. 460 + * 461 + * This can be used to interleave the values of multiple sources. 462 + * 463 + * @example 464 + * ```ts 465 + * pipe( 466 + * merge([ 467 + * interval(50), 468 + * interval(100), 469 + * ]), 470 + * subscribe(x => { 471 + * console.log(text); // logs: 0, 0, 1, 2, 1, 3, 4, 2 472 + * }) 473 + * ); 474 + * ``` 475 + */ 476 + export function merge<T>(sources: Source<T>[]): Source<T> { 477 + return mergeAll(fromArray(sources)); 478 + } 479 + 480 + /** Calls the passed callback function when the Source ends or is closed. 481 + * 482 + * @param callback - A function that is called when the {@link Source} ends. 483 + * @returns An {@link Operator}. 484 + * 485 + * @remarks 486 + * `onEnd` accepts a callback which is called when the {@link Source} either ends 487 + * or is closed. 488 + * 489 + * This operator can be used to add side-effects to a Source. 490 + * 491 + * @example 492 + * ```ts 493 + * pipe( 494 + * fromArray([1, 2, 3]), 495 + * take(1), 496 + * onEnd(() => { 497 + * console.log('end'); 498 + * }), 499 + * publish 500 + * ); 501 + * ``` 502 + */ 503 + export function onEnd<T>(callback: () => void): Operator<T, T> { 504 + return source => sink => { 505 + let ended = false; 506 + source(signal => { 507 + if (ended) { 508 + /*noop*/ 509 + } else if (signal === SignalKind.End) { 510 + ended = true; 511 + sink(SignalKind.End); 512 + callback(); 513 + } else if (signal.tag === SignalKind.Start) { 514 + const talkback = signal[0]; 515 + sink( 516 + start(signal => { 517 + if (signal === TalkbackKind.Close) { 518 + ended = true; 519 + talkback(TalkbackKind.Close); 520 + callback(); 521 + } else { 522 + talkback(signal); 523 + } 524 + }) 525 + ); 526 + } else { 527 + sink(signal); 528 + } 529 + }); 530 + }; 531 + } 532 + 533 + /** Calls the passed callback function when the Source emits a value. 534 + * 535 + * @param callback - A function that is called with each value the {@link Source} emits. 536 + * @returns An {@link Operator}. 537 + * 538 + * @remarks 539 + * `onPush` accepts a callback which is called for every emitted value of 540 + * the {@link Source}. 541 + * 542 + * This operator can be used to add side-effects to a Source. 543 + * 544 + * @example 545 + * ```ts 546 + * pipe( 547 + * fromArray([1, 2, 3]), 548 + * onPush(value => { 549 + * console.log(value); // logs: 1, 2, 3 550 + * }), 551 + * publish 552 + * ); 553 + * ``` 554 + */ 555 + export function onPush<T>(callback: (value: T) => void): Operator<T, T> { 556 + return source => sink => { 557 + let ended = false; 558 + source(signal => { 559 + if (ended) { 560 + /*noop*/ 561 + } else if (signal === SignalKind.End) { 562 + ended = true; 563 + sink(SignalKind.End); 564 + } else if (signal.tag === SignalKind.Start) { 565 + const talkback = signal[0]; 566 + sink( 567 + start(signal => { 568 + if (signal === TalkbackKind.Close) ended = true; 569 + talkback(signal); 570 + }) 571 + ); 572 + } else { 573 + callback(signal[0]); 574 + sink(signal); 575 + } 576 + }); 577 + }; 578 + } 579 + 580 + /** Calls the passed callback function when the Source starts. 581 + * 582 + * @param callback - A function that is called when the {@link Source} is started. 583 + * @returns An {@link Operator}. 584 + * 585 + * @remarks 586 + * `onPush` accepts a callback which is called for every emitted value of 587 + * the {@link Source}. 588 + * 589 + * This operator can be used to add side-effects to a Source. 590 + * Specifically, it's useful to add a side-effect for a Source that triggers only once 591 + * the {@link Source} is used and started. 592 + * 593 + * @example 594 + * ```ts 595 + * pipe( 596 + * fromArray([1, 2, 3]), 597 + * onStart(() => { 598 + * console.log('start'); 599 + * }), 600 + * publish 601 + * ); 602 + * ``` 603 + */ 604 + export function onStart<T>(callback: () => void): Operator<T, T> { 605 + return source => sink => 606 + source(signal => { 607 + if (signal === SignalKind.End) { 608 + sink(SignalKind.End); 609 + } else if (signal.tag === SignalKind.Start) { 610 + sink(signal); 611 + callback(); 612 + } else { 613 + sink(signal); 614 + } 615 + }); 616 + } 617 + 618 + /** Emits the last value the {@link Source} emitted, whenever the notifier Source emits a value. 619 + * 620 + * @param notifier - A {@link Source} that triggers the last value to be emitted. 621 + * @returns An {@link Operator}. 622 + * 623 + * @remarks 624 + * `sample` will store the latest value the {@link Source} emitted. Every time the `notifier` Source 625 + * emits, it will emit the latest value. 626 + * 627 + * This is a back pressure operator that can be used to omit values from a {@link Source} coming in 628 + * too frequently. 629 + * 630 + * {@link Source | Sources} emitting `undefined` are undefined behaviour and these values will be 631 + * ignored. 632 + * 633 + * @example 634 + * ```ts 635 + * pipe( 636 + * interval(50), 637 + * sample(interval(100)), 638 + * subscribe(x => { 639 + * console.log(text); // logs: 0, 2, 4... 640 + * }) 641 + * ); 642 + * ``` 643 + */ 644 + export function sample<S, T>(notifier: Source<S>): Operator<T, T> { 645 + return source => sink => { 646 + let sourceTalkback = talkbackPlaceholder; 647 + let notifierTalkback = talkbackPlaceholder; 648 + let value: T | void; 649 + let pulled = false; 650 + let ended = false; 651 + source(signal => { 652 + if (ended) { 653 + /*noop*/ 654 + } else if (signal === SignalKind.End) { 655 + ended = true; 656 + notifierTalkback(TalkbackKind.Close); 657 + sink(SignalKind.End); 658 + } else if (signal.tag === SignalKind.Start) { 659 + sourceTalkback = signal[0]; 660 + } else { 661 + value = signal[0]; 662 + if (!pulled) { 663 + pulled = true; 664 + notifierTalkback(TalkbackKind.Pull); 665 + sourceTalkback(TalkbackKind.Pull); 666 + } else { 667 + pulled = false; 668 + } 669 + } 670 + }); 671 + notifier(signal => { 672 + if (ended) { 673 + /*noop*/ 674 + } else if (signal === SignalKind.End) { 675 + ended = true; 676 + sourceTalkback(TalkbackKind.Close); 677 + sink(SignalKind.End); 678 + } else if (signal.tag === SignalKind.Start) { 679 + notifierTalkback = signal[0]; 680 + } else if (value !== undefined) { 681 + const signal = push(value); 682 + value = undefined; 683 + sink(signal); 684 + } 685 + }); 686 + sink( 687 + start(signal => { 688 + if (signal === TalkbackKind.Close && !ended) { 689 + ended = true; 690 + sourceTalkback(TalkbackKind.Close); 691 + notifierTalkback(TalkbackKind.Close); 692 + } else if (!ended && !pulled) { 693 + pulled = true; 694 + sourceTalkback(TalkbackKind.Pull); 695 + notifierTalkback(TalkbackKind.Pull); 696 + } 697 + }) 698 + ); 699 + }; 700 + } 701 + 702 + /** Maps emitted values using the passed reducer function. 703 + * 704 + * @param reducer - A function called with the last value by the `reducer` and the emitted value. 705 + * @param seed - The initial value that is passed to the `reducer`. 706 + * @returns An {@link Operator}. 707 + * 708 + * @remarks 709 + * `scan` accepts a reducer function and a seed value. The reducer will be called initially with the 710 + * seed value and the first emitted value. The {@link Source} will then emit the value returned by 711 + * the reducer function. Subsequently, the `reducer` is called with the last value the `reducer` 712 + * returned and the emitted value. 713 + * 714 + * This operator is similar to `Array.prototype.reduce`, but instead is called over time and emits 715 + * each value of the reducer. 716 + * 717 + * @example 718 + * ```ts 719 + * pipe( 720 + * fromArray([1, 2, 3]), 721 + * scan((acc, x) => acc + x, 0), 722 + * subscribe(x => { 723 + * console.log(text); // logs: 1, 3, 6 724 + * }) 725 + * ); 726 + * ``` 727 + */ 728 + export function scan<In, Out>(reducer: (acc: Out, value: In) => Out, seed: Out): Operator<In, Out> { 729 + return source => sink => { 730 + let acc = seed; 731 + source(signal => { 732 + if (signal === SignalKind.End) { 733 + sink(SignalKind.End); 734 + } else if (signal.tag === SignalKind.Start) { 735 + sink(signal); 736 + } else { 737 + sink(push((acc = reducer(acc, signal[0])))); 738 + } 739 + }); 740 + }; 741 + } 742 + 743 + /** Shares one underlying subscription to the Source between all Sinks. 744 + * 745 + * @param source - A {@link Source} that should be shared. 746 + * @returns A shared {@link Source}. 747 + * 748 + * @remarks 749 + * `share` accepts a {@link Source} and returns one. It will emit all values as normal, however, it 750 + * will share one subscription to the input source. This allows side-effects on the input 751 + * {@link Source} to only be triggerd once. 752 + */ 753 + export function share<T>(source: Source<T>): Source<T> { 754 + let sinks: Sink<T>[] = []; 755 + let talkback = talkbackPlaceholder; 756 + let gotSignal = false; 757 + return sink => { 758 + sinks.push(sink); 759 + if (sinks.length === 1) { 760 + source(signal => { 761 + if (signal === SignalKind.End) { 762 + for (let i = 0, a = sinks, l = sinks.length; i < l; i++) a[i](SignalKind.End); 763 + sinks.length = 0; 764 + } else if (signal.tag === SignalKind.Start) { 765 + talkback = signal[0]; 766 + } else { 767 + gotSignal = false; 768 + for (let i = 0, a = sinks, l = sinks.length; i < l; i++) a[i](signal); 769 + } 770 + }); 771 + } 772 + sink( 773 + start(signal => { 774 + if (signal === TalkbackKind.Close) { 775 + const index = sinks.indexOf(sink); 776 + if (index > -1) (sinks = sinks.slice()).splice(index, 1); 777 + if (!sinks.length) talkback(TalkbackKind.Close); 778 + } else if (!gotSignal) { 779 + gotSignal = true; 780 + talkback(TalkbackKind.Pull); 781 + } 782 + }) 783 + ); 784 + }; 785 + } 786 + 787 + /** Omits `wait` amount of values from the Source and then runs as usual. 788 + * 789 + * @param wait - The number of values to be omitted. 790 + * @returns An {@link Operator}. 791 + * 792 + * @remarks 793 + * `skip` will skip `wait` number of emitted values, then issue all values as normal afterwards. 794 + * This essentially skips a given number of values on the input {@link Source}. 795 + * 796 + * @example 797 + * ```ts 798 + * pipe( 799 + * fromArray([1, 2, 3]), 800 + * skip(2), 801 + * subscribe(x => { 802 + * console.log(text); // logs: 3 803 + * }) 804 + * ); 805 + * ``` 806 + */ 807 + export function skip<T>(wait: number): Operator<T, T> { 808 + return source => sink => { 809 + let talkback = talkbackPlaceholder; 810 + let rest = wait; 811 + source(signal => { 812 + if (signal === SignalKind.End) { 813 + sink(SignalKind.End); 814 + } else if (signal.tag === SignalKind.Start) { 815 + talkback = signal[0]; 816 + sink(signal); 817 + } else if (rest-- > 0) { 818 + talkback(TalkbackKind.Pull); 819 + } else { 820 + sink(signal); 821 + } 822 + }); 823 + }; 824 + } 825 + 826 + /** Omits values from an input Source until a notifier Source emits a value. 827 + * 828 + * @param notifier - A {@link Source} that starts the operator's sent values. 829 + * @returns An {@link Operator}. 830 + * 831 + * @remarks 832 + * `skipUntil` will omit all values from the input {@link Source} until the `notifier` 833 + * Source emits a value of its own. It'll then start passing values from the Source through. 834 + * 835 + * @example 836 + * ```ts 837 + * pipe( 838 + * interval(50), 839 + * skipUntil(interval(150)), 840 + * subscribe(x => { 841 + * console.log(text); // logs: 2, 3... 842 + * }) 843 + * ); 844 + * ``` 845 + */ 846 + export function skipUntil<S, T>(notifier: Source<S>): Operator<T, T> { 847 + return source => sink => { 848 + let sourceTalkback = talkbackPlaceholder; 849 + let notifierTalkback = talkbackPlaceholder; 850 + let skip = true; 851 + let pulled = false; 852 + let ended = false; 853 + source(signal => { 854 + if (ended) { 855 + /*noop*/ 856 + } else if (signal === SignalKind.End) { 857 + ended = true; 858 + if (skip) notifierTalkback(TalkbackKind.Close); 859 + sink(SignalKind.End); 860 + } else if (signal.tag === SignalKind.Start) { 861 + sourceTalkback = signal[0]; 862 + notifier(signal => { 863 + if (signal === SignalKind.End) { 864 + if (skip) { 865 + ended = true; 866 + sourceTalkback(TalkbackKind.Close); 867 + } 868 + } else if (signal.tag === SignalKind.Start) { 869 + (notifierTalkback = signal[0])(TalkbackKind.Pull); 870 + } else { 871 + skip = false; 872 + notifierTalkback(TalkbackKind.Close); 873 + } 874 + }); 875 + } else if (!skip) { 876 + pulled = false; 877 + sink(signal); 878 + } else if (!pulled) { 879 + pulled = true; 880 + sourceTalkback(TalkbackKind.Pull); 881 + notifierTalkback(TalkbackKind.Pull); 882 + } else { 883 + pulled = false; 884 + } 885 + }); 886 + sink( 887 + start(signal => { 888 + if (signal === TalkbackKind.Close && !ended) { 889 + ended = true; 890 + sourceTalkback(TalkbackKind.Close); 891 + if (skip) notifierTalkback(TalkbackKind.Close); 892 + } else if (!ended && !pulled) { 893 + pulled = true; 894 + if (skip) notifierTalkback(TalkbackKind.Pull); 895 + sourceTalkback(TalkbackKind.Pull); 896 + } 897 + }) 898 + ); 899 + }; 900 + } 901 + 902 + /** Omits values from an input Source until a predicate function returns `false`. 903 + * 904 + * @param predicate - A function returning a boolean per value. 905 + * @returns An {@link Operator}. 906 + * 907 + * @remarks 908 + * `skipWhile` will omit all values from the input {@link Source} until the `predicate` 909 + * function returns `false`. When the `predicate` function returns `false`, the Source's values will 910 + * be passed through. 911 + * 912 + * @example 913 + * ```ts 914 + * pipe( 915 + * fromArray([1, 2, 3]), 916 + * skipWhile(x => x < 2), 917 + * subscribe(x => { 918 + * console.log(text); // logs: 2, 3 919 + * }) 920 + * ); 921 + * ``` 922 + */ 923 + export function skipWhile<T>(predicate: (value: T) => boolean): Operator<T, T> { 924 + return source => sink => { 925 + let talkback = talkbackPlaceholder; 926 + let skip = true; 927 + source(signal => { 928 + if (signal === SignalKind.End) { 929 + sink(SignalKind.End); 930 + } else if (signal.tag === SignalKind.Start) { 931 + talkback = signal[0]; 932 + sink(signal); 933 + } else if (skip) { 934 + if (predicate(signal[0])) { 935 + talkback(TalkbackKind.Pull); 936 + } else { 937 + skip = false; 938 + sink(signal); 939 + } 940 + } else { 941 + sink(signal); 942 + } 943 + }); 944 + }; 945 + } 946 + 947 + /** Emits from the latest Source returned by a mapping function per value of the Source. 948 + * 949 + * @param map - A function returning a {@link Source} per value. 950 + * @returns An {@link Operator}. 951 + * 952 + * @remarks 953 + * `switchMap` accepts a mapping function which must return a {@link Source} per value. 954 + * The output {@link Source} will emit values from the latest Source the mapping function 955 + * returned. If a value is emitted while the last returned Source is still active, the prior Source 956 + * will be closed. 957 + * 958 + * This can be used to issue multiple values per emission of an input {@link Source}, while only 959 + * letting one of these sub-Sources be active at a time. 960 + * 961 + * @example 962 + * ```ts 963 + * pipe( 964 + * interval(100), 965 + * switchMap(() => interval(50)), 966 + * subscribe(x => { 967 + * console.log(text); // logs: 0, 0, 0... 968 + * }) 969 + * ); 970 + * ``` 971 + */ 972 + export function switchMap<In, Out>(map: (value: In) => Source<Out>): Operator<In, Out> { 973 + return source => sink => { 974 + let outerTalkback = talkbackPlaceholder; 975 + let innerTalkback = talkbackPlaceholder; 976 + let outerPulled = false; 977 + let innerPulled = false; 978 + let innerActive = false; 979 + let ended = false; 980 + function applyInnerSource(innerSource: Source<Out>): void { 981 + innerActive = true; 982 + innerSource(signal => { 983 + if (!innerActive) { 984 + /*noop*/ 985 + } else if (signal === SignalKind.End) { 986 + innerActive = false; 987 + if (ended) { 988 + sink(SignalKind.End); 989 + } else if (!outerPulled) { 990 + outerPulled = true; 991 + outerTalkback(TalkbackKind.Pull); 992 + } 993 + } else if (signal.tag === SignalKind.Start) { 994 + innerPulled = false; 995 + (innerTalkback = signal[0])(TalkbackKind.Pull); 996 + } else { 997 + sink(signal); 998 + if (!innerPulled) { 999 + innerTalkback(TalkbackKind.Pull); 1000 + } else { 1001 + innerPulled = false; 1002 + } 1003 + } 1004 + }); 1005 + } 1006 + source(signal => { 1007 + if (ended) { 1008 + /*noop*/ 1009 + } else if (signal === SignalKind.End) { 1010 + ended = true; 1011 + if (!innerActive) sink(SignalKind.End); 1012 + } else if (signal.tag === SignalKind.Start) { 1013 + outerTalkback = signal[0]; 1014 + } else { 1015 + if (innerActive) { 1016 + innerTalkback(TalkbackKind.Close); 1017 + innerTalkback = talkbackPlaceholder; 1018 + } 1019 + if (!outerPulled) { 1020 + outerPulled = true; 1021 + outerTalkback(TalkbackKind.Pull); 1022 + } else { 1023 + outerPulled = false; 1024 + } 1025 + applyInnerSource(map(signal[0])); 1026 + } 1027 + }); 1028 + sink( 1029 + start(signal => { 1030 + if (signal === TalkbackKind.Close) { 1031 + if (!ended) { 1032 + ended = true; 1033 + outerTalkback(TalkbackKind.Close); 1034 + } 1035 + if (innerActive) { 1036 + innerActive = false; 1037 + innerTalkback(TalkbackKind.Close); 1038 + } 1039 + } else { 1040 + if (!ended && !outerPulled) { 1041 + outerPulled = true; 1042 + outerTalkback(TalkbackKind.Pull); 1043 + } 1044 + if (innerActive && !innerPulled) { 1045 + innerPulled = true; 1046 + innerTalkback(TalkbackKind.Pull); 1047 + } 1048 + } 1049 + }) 1050 + ); 1051 + }; 1052 + } 1053 + 1054 + /** Flattens a Source emitting Sources into a single Source emitting the inner values. 1055 + * 1056 + * @see {@link switchMap} which this helper uses and instead accept a mapping function. 1057 + * @param source - An {@link Source} emitting {@link Source | Sources}. 1058 + * @returns A {@link Source} emitting values from the inner Sources. 1059 + * 1060 + * @remarks 1061 + * `switchAll` accepts a {@link Source} which must emit {@link Source | Sources}. Each time it 1062 + * receives a {@link Source} it will close its prior subscription and subscribe to the new Source 1063 + * instead, passing through its values. 1064 + * 1065 + * @example 1066 + * ```ts 1067 + * pipe( 1068 + * interval(100), 1069 + * map(() => interval(50)), 1070 + * switchAll, 1071 + * subscribe(x => { 1072 + * console.log(text); // logs: 0, 0, 0... 1073 + * }) 1074 + * ); 1075 + * ``` 1076 + */ 1077 + export function switchAll<T>(source: Source<Source<T>>): Source<T> { 1078 + return switchMap<Source<T>, T>(identity)(source); 1079 + } 1080 + 1081 + /** Emits `max` values from the Source and then ends. 1082 + * 1083 + * @param max - The maximum number of values emitted. 1084 + * @returns An {@link Operator}. 1085 + * 1086 + * @remarks 1087 + * `take` will issue all values as normal until the `max` number of emitted values has been reached. 1088 + * It will then end and close the {@link Source}. 1089 + * 1090 + * @example 1091 + * ```ts 1092 + * pipe( 1093 + * fromArray([1, 2, 3]), 1094 + * take(2), 1095 + * subscribe(x => { 1096 + * console.log(text); // logs: 1, 2 1097 + * }) 1098 + * ); 1099 + * ``` 1100 + */ 1101 + export function take<T>(max: number): Operator<T, T> { 1102 + return source => sink => { 1103 + let talkback = talkbackPlaceholder; 1104 + let ended = false; 1105 + let taken = 0; 1106 + source(signal => { 1107 + if (ended) { 1108 + /*noop*/ 1109 + } else if (signal === SignalKind.End) { 1110 + ended = true; 1111 + sink(SignalKind.End); 1112 + } else if (signal.tag === SignalKind.Start) { 1113 + if (max <= 0) { 1114 + ended = true; 1115 + sink(SignalKind.End); 1116 + signal[0](TalkbackKind.Close); 1117 + } else { 1118 + talkback = signal[0]; 1119 + } 1120 + } else if (taken++ < max) { 1121 + sink(signal); 1122 + if (!ended && taken >= max) { 1123 + ended = true; 1124 + sink(SignalKind.End); 1125 + talkback(TalkbackKind.Close); 1126 + } 1127 + } else { 1128 + sink(signal); 1129 + } 1130 + }); 1131 + sink( 1132 + start(signal => { 1133 + if (signal === TalkbackKind.Close && !ended) { 1134 + ended = true; 1135 + talkback(TalkbackKind.Close); 1136 + } else if (signal === TalkbackKind.Pull && !ended && taken < max) { 1137 + talkback(TalkbackKind.Pull); 1138 + } 1139 + }) 1140 + ); 1141 + }; 1142 + } 1143 + 1144 + /** Buffers the `max` last values of the Source and emits them once the Source ends. 1145 + * 1146 + * @param max - The maximum number of values buffered. 1147 + * @returns An {@link Operator}. 1148 + * 1149 + * @remarks 1150 + * `takeLast` will buffer values from the input {@link Source} up until the given `max` number. It 1151 + * will only emit values stored in the buffer once the {@link Source} ends. 1152 + * 1153 + * All values in the buffer are emitted like the {@link fromArray | `fromArray`} source would 1154 + * synchronously. 1155 + * 1156 + * @example 1157 + * ```ts 1158 + * pipe( 1159 + * fromArray([1, 2, 3]), 1160 + * takeLast(1), 1161 + * subscribe(x => { 1162 + * console.log(text); // logs: 3 1163 + * }) 1164 + * ); 1165 + * ``` 1166 + */ 1167 + export function takeLast<T>(max: number): Operator<T, T> { 1168 + return source => sink => { 1169 + const queue: T[] = []; 1170 + let talkback = talkbackPlaceholder; 1171 + source(signal => { 1172 + if (signal === SignalKind.End) { 1173 + fromArray(queue)(sink); 1174 + } else if (signal.tag === SignalKind.Start) { 1175 + if (max <= 0) { 1176 + signal[0](TalkbackKind.Close); 1177 + fromArray(queue)(sink); 1178 + } else { 1179 + (talkback = signal[0])(TalkbackKind.Pull); 1180 + } 1181 + } else { 1182 + if (queue.length >= max && max) queue.shift(); 1183 + queue.push(signal[0]); 1184 + talkback(TalkbackKind.Pull); 1185 + } 1186 + }); 1187 + }; 1188 + } 1189 + 1190 + /** Takes values from an input Source until a notifier Source emits a value. 1191 + * 1192 + * @param notifier - A {@link Source} that stops the operator's sent values. 1193 + * @returns An {@link Operator}. 1194 + * 1195 + * @remarks 1196 + * `takeUntil` will issue all values as normal from the input {@link Source} until the `notifier` 1197 + * Source emits a value of its own. It'll then close the {@link Source}. 1198 + * 1199 + * @example 1200 + * ```ts 1201 + * pipe( 1202 + * interval(50), 1203 + * takeUntil(interval(150)), 1204 + * subscribe(x => { 1205 + * console.log(text); // logs: 0, 1 1206 + * }) 1207 + * ); 1208 + * ``` 1209 + */ 1210 + export function takeUntil<S, T>(notifier: Source<S>): Operator<T, T> { 1211 + return source => sink => { 1212 + let sourceTalkback = talkbackPlaceholder; 1213 + let notifierTalkback = talkbackPlaceholder; 1214 + let ended = false; 1215 + source(signal => { 1216 + if (ended) { 1217 + /*noop*/ 1218 + } else if (signal === SignalKind.End) { 1219 + ended = true; 1220 + notifierTalkback(TalkbackKind.Close); 1221 + sink(SignalKind.End); 1222 + } else if (signal.tag === SignalKind.Start) { 1223 + sourceTalkback = signal[0]; 1224 + notifier(signal => { 1225 + if (signal === SignalKind.End) { 1226 + /*noop*/ 1227 + } else if (signal.tag === SignalKind.Start) { 1228 + (notifierTalkback = signal[0])(TalkbackKind.Pull); 1229 + } else { 1230 + ended = true; 1231 + notifierTalkback(TalkbackKind.Close); 1232 + sourceTalkback(TalkbackKind.Close); 1233 + sink(SignalKind.End); 1234 + } 1235 + }); 1236 + } else { 1237 + sink(signal); 1238 + } 1239 + }); 1240 + sink( 1241 + start(signal => { 1242 + if (signal === TalkbackKind.Close && !ended) { 1243 + ended = true; 1244 + sourceTalkback(TalkbackKind.Close); 1245 + notifierTalkback(TalkbackKind.Close); 1246 + } else if (!ended) { 1247 + sourceTalkback(TalkbackKind.Pull); 1248 + } 1249 + }) 1250 + ); 1251 + }; 1252 + } 1253 + 1254 + /** Takes values from an input Source until a predicate function returns `false`. 1255 + * 1256 + * @param predicate - A function returning a boolean per value. 1257 + * @param addOne - Lets an additional input value pass on. 1258 + * @returns An {@link Operator}. 1259 + * 1260 + * @remarks 1261 + * `takeWhile` will issue all values as normal from the input {@link Source} until the `predicate` 1262 + * function returns `false`. When the `predicate` function returns `false`, the current value is 1263 + * omitted and the {@link Source} is closed. 1264 + * 1265 + * If `addOne` is set to `true`, the value for which the `predicate` first returned `false` is 1266 + * issued and passed on as well instead of being omitted. 1267 + * 1268 + * @example 1269 + * ```ts 1270 + * pipe( 1271 + * fromArray([1, 2, 3]), 1272 + * takeWhile(x => x < 2), 1273 + * subscribe(x => { 1274 + * console.log(text); // logs: 1 1275 + * }) 1276 + * ); 1277 + * ``` 1278 + */ 1279 + export function takeWhile<T>(predicate: (value: T) => boolean, addOne?: boolean): Operator<T, T> { 1280 + return source => sink => { 1281 + let talkback = talkbackPlaceholder; 1282 + let ended = false; 1283 + source(signal => { 1284 + if (ended) { 1285 + /*noop*/ 1286 + } else if (signal === SignalKind.End) { 1287 + ended = true; 1288 + sink(SignalKind.End); 1289 + } else if (signal.tag === SignalKind.Start) { 1290 + talkback = signal[0]; 1291 + sink(signal); 1292 + } else if (!predicate(signal[0])) { 1293 + ended = true; 1294 + if (addOne) sink(signal); 1295 + sink(SignalKind.End); 1296 + talkback(TalkbackKind.Close); 1297 + } else { 1298 + sink(signal); 1299 + } 1300 + }); 1301 + }; 1302 + } 1303 + 1304 + /** Debounces a Source by omitting values until a given timeframe has passed. 1305 + * 1306 + * @param timing - A function returning a debounce time (ms) per emitted value. 1307 + * @returns An {@link Operator}. 1308 + * 1309 + * @remarks 1310 + * `debounce` accepts a mapping function that can be used to return a time (in ms) per emitted 1311 + * value. All emitted values issued by the {@link Source} during the returned time will be omitted 1312 + * until the time has passed. 1313 + * 1314 + * Debouncing means that the returned {@link Source} will wait for a minimum time of silence until a 1315 + * value is let through. 1316 + * 1317 + * This is a back pressure operator that can be used to omit values from a {@link Source} coming in 1318 + * too frequently. 1319 + * 1320 + * @example 1321 + * ```ts 1322 + * pipe( 1323 + * interval(50), 1324 + * debounce(() => 100), 1325 + * subscribe(x => { 1326 + * console.log(text); // never logs any value 1327 + * }) 1328 + * ); 1329 + * ``` 1330 + */ 1331 + export function debounce<T>(timing: (value: T) => number): Operator<T, T> { 1332 + return source => sink => { 1333 + let id: any | void; 1334 + let deferredEnded = false; 1335 + let ended = false; 1336 + source(signal => { 1337 + if (ended) { 1338 + /*noop*/ 1339 + } else if (signal === SignalKind.End) { 1340 + ended = true; 1341 + if (id) { 1342 + deferredEnded = true; 1343 + } else { 1344 + sink(SignalKind.End); 1345 + } 1346 + } else if (signal.tag === SignalKind.Start) { 1347 + const talkback = signal[0]; 1348 + sink( 1349 + start(signal => { 1350 + if (signal === TalkbackKind.Close && !ended) { 1351 + ended = true; 1352 + deferredEnded = false; 1353 + if (id) clearTimeout(id); 1354 + talkback(TalkbackKind.Close); 1355 + } else if (!ended) { 1356 + talkback(TalkbackKind.Pull); 1357 + } 1358 + }) 1359 + ); 1360 + } else { 1361 + if (id) clearTimeout(id); 1362 + id = setTimeout(() => { 1363 + id = undefined; 1364 + sink(signal); 1365 + if (deferredEnded) sink(SignalKind.End); 1366 + }, timing(signal[0])); 1367 + } 1368 + }); 1369 + }; 1370 + } 1371 + 1372 + /** Delays each signal emitted by a Source by given time (ms). 1373 + * 1374 + * @param wait - A time (in ms) by which each {@link SignalKind | signal} is delayed. 1375 + * @returns An {@link Operator}. 1376 + * 1377 + * @remarks 1378 + * `delay` accepts a time (in ms) by which each {@link SignalKind | signal} will be delayed by. 1379 + * This will create a timeout per received signal and delay the emitted values accordingly. 1380 + * 1381 + * Since the operator only calls `setTimeout` per signal, it relies on the timeout implementation to 1382 + * be ordered. Otherwise, signals will arrive in the wrong order at the sink. 1383 + */ 1384 + export function delay<T>(wait: number): Operator<T, T> { 1385 + return source => sink => { 1386 + let active = 0; 1387 + source(signal => { 1388 + if (signal !== SignalKind.End && signal.tag === SignalKind.Start) { 1389 + sink(signal); 1390 + } else { 1391 + active++; 1392 + setTimeout(() => { 1393 + if (active) { 1394 + active--; 1395 + sink(signal); 1396 + } 1397 + }, wait); 1398 + } 1399 + }); 1400 + }; 1401 + } 1402 + 1403 + /** Throttles a Source by omitting values that are emitted before a given timeout. 1404 + * 1405 + * @param timing - A function returning a throttle time (ms) per emitted value. 1406 + * @returns An {@link Operator}. 1407 + * 1408 + * @remarks 1409 + * `throttle` accepts a mapping function that can be used to return a time (in ms) per emitted 1410 + * value. During the returned timeframe all values issued by the {@link Source} will be omitted and 1411 + * dropped. 1412 + * 1413 + * This is a back pressure operator that can be used to omit values from a {@link Source} coming in 1414 + * too frequently. 1415 + * 1416 + * @example 1417 + * ```ts 1418 + * pipe( 1419 + * interval(50), 1420 + * throttle(() => 100), 1421 + * subscribe(x => { 1422 + * // omits every second value: 0, 2, 4... 1423 + * console.log(text); 1424 + * }) 1425 + * ); 1426 + * ``` 1427 + */ 1428 + export function throttle<T>(timing: (value: T) => number): Operator<T, T> { 1429 + return source => sink => { 1430 + let skip = false; 1431 + let id: any | void; 1432 + source(signal => { 1433 + if (signal === SignalKind.End) { 1434 + if (id) clearTimeout(id); 1435 + sink(SignalKind.End); 1436 + } else if (signal.tag === SignalKind.Start) { 1437 + const talkback = signal[0]; 1438 + sink( 1439 + start(signal => { 1440 + if (signal === TalkbackKind.Close) { 1441 + if (id) clearTimeout(id); 1442 + talkback(TalkbackKind.Close); 1443 + } else { 1444 + talkback(TalkbackKind.Pull); 1445 + } 1446 + }) 1447 + ); 1448 + } else if (!skip) { 1449 + skip = true; 1450 + if (id) clearTimeout(id); 1451 + id = setTimeout(() => { 1452 + id = undefined; 1453 + skip = false; 1454 + }, timing(signal[0])); 1455 + sink(signal); 1456 + } 1457 + }); 1458 + }; 1459 + } 1460 + 1461 + export { mergeAll as flatten, onPush as tap };
-156
src/pipe.d.ts
··· 1 - import { Source } from './wonka_types'; 2 - 3 - interface UnaryFn<T, R> { (source: T): R; } 4 - 5 - /* pipe definitions for source + operators composition */ 6 - 7 - export function pipe<T, A>( 8 - source: Source<T>, 9 - op1: UnaryFn<Source<T>, Source<A>> 10 - ): Source<A>; 11 - 12 - export function pipe<T, A, B>( 13 - source: Source<T>, 14 - op1: UnaryFn<Source<T>, Source<A>>, 15 - op2: UnaryFn<Source<A>, Source<B>> 16 - ): Source<B>; 17 - 18 - export function pipe<T, A, B, C>( 19 - source: Source<T>, 20 - op1: UnaryFn<Source<T>, Source<A>>, 21 - op2: UnaryFn<Source<A>, Source<B>>, 22 - op3: UnaryFn<Source<B>, Source<C>> 23 - ): Source<C>; 24 - 25 - export function pipe<T, A, B, C, D>( 26 - source: Source<T>, 27 - op1: UnaryFn<Source<T>, Source<A>>, 28 - op2: UnaryFn<Source<A>, Source<B>>, 29 - op3: UnaryFn<Source<B>, Source<C>>, 30 - op4: UnaryFn<Source<C>, Source<D>> 31 - ): Source<D>; 32 - 33 - export function pipe<T, A, B, C, D, E>( 34 - source: Source<T>, 35 - op1: UnaryFn<Source<T>, Source<A>>, 36 - op2: UnaryFn<Source<A>, Source<B>>, 37 - op3: UnaryFn<Source<B>, Source<C>>, 38 - op4: UnaryFn<Source<C>, Source<D>>, 39 - op5: UnaryFn<Source<D>, Source<E>> 40 - ): Source<E>; 41 - 42 - export function pipe<T, A, B, C, D, E, F>( 43 - source: Source<T>, 44 - op1: UnaryFn<Source<T>, Source<A>>, 45 - op2: UnaryFn<Source<A>, Source<B>>, 46 - op3: UnaryFn<Source<B>, Source<C>>, 47 - op4: UnaryFn<Source<C>, Source<D>>, 48 - op5: UnaryFn<Source<D>, Source<E>>, 49 - op6: UnaryFn<Source<E>, Source<F>> 50 - ): Source<F>; 51 - 52 - export function pipe<T, A, B, C, D, E, F, G>( 53 - source: Source<T>, 54 - op1: UnaryFn<Source<T>, Source<A>>, 55 - op2: UnaryFn<Source<A>, Source<B>>, 56 - op3: UnaryFn<Source<B>, Source<C>>, 57 - op4: UnaryFn<Source<C>, Source<D>>, 58 - op5: UnaryFn<Source<D>, Source<E>>, 59 - op6: UnaryFn<Source<E>, Source<F>>, 60 - op7: UnaryFn<Source<F>, Source<G>> 61 - ): Source<G>; 62 - 63 - export function pipe<T, A, B, C, D, E, F, G, H>( 64 - source: Source<T>, 65 - op1: UnaryFn<Source<T>, Source<A>>, 66 - op2: UnaryFn<Source<A>, Source<B>>, 67 - op3: UnaryFn<Source<B>, Source<C>>, 68 - op4: UnaryFn<Source<C>, Source<D>>, 69 - op5: UnaryFn<Source<D>, Source<E>>, 70 - op6: UnaryFn<Source<E>, Source<F>>, 71 - op7: UnaryFn<Source<F>, Source<G>>, 72 - op8: UnaryFn<Source<G>, Source<H>> 73 - ): Source<H>; 74 - 75 - /* pipe definitions for source + operators + consumer composition */ 76 - 77 - export function pipe<T, R>( 78 - source: Source<T>, 79 - consumer: UnaryFn<Source<T>, R> 80 - ): R; 81 - 82 - export function pipe<T, A, R>( 83 - source: Source<T>, 84 - op1: UnaryFn<Source<T>, Source<A>>, 85 - consumer: UnaryFn<Source<A>, R> 86 - ): R; 87 - 88 - export function pipe<T, A, B, R>( 89 - source: Source<T>, 90 - op1: UnaryFn<Source<T>, Source<A>>, 91 - op2: UnaryFn<Source<A>, Source<B>>, 92 - consumer: UnaryFn<Source<B>, R> 93 - ): R; 94 - 95 - export function pipe<T, A, B, C, R>( 96 - source: Source<T>, 97 - op1: UnaryFn<Source<T>, Source<A>>, 98 - op2: UnaryFn<Source<A>, Source<B>>, 99 - op3: UnaryFn<Source<B>, Source<C>>, 100 - consumer: UnaryFn<Source<C>, R> 101 - ): R; 102 - 103 - export function pipe<T, A, B, C, D, R>( 104 - source: Source<T>, 105 - op1: UnaryFn<Source<T>, Source<A>>, 106 - op2: UnaryFn<Source<A>, Source<B>>, 107 - op3: UnaryFn<Source<B>, Source<C>>, 108 - op4: UnaryFn<Source<C>, Source<D>>, 109 - consumer: UnaryFn<Source<D>, R> 110 - ): R; 111 - 112 - export function pipe<T, A, B, C, D, E, R>( 113 - source: Source<T>, 114 - op1: UnaryFn<Source<T>, Source<A>>, 115 - op2: UnaryFn<Source<A>, Source<B>>, 116 - op3: UnaryFn<Source<B>, Source<C>>, 117 - op4: UnaryFn<Source<C>, Source<D>>, 118 - op5: UnaryFn<Source<D>, Source<E>>, 119 - consumer: UnaryFn<Source<E>, R> 120 - ): R; 121 - 122 - export function pipe<T, A, B, C, D, E, F, R>( 123 - source: Source<T>, 124 - op1: UnaryFn<Source<T>, Source<A>>, 125 - op2: UnaryFn<Source<A>, Source<B>>, 126 - op3: UnaryFn<Source<B>, Source<C>>, 127 - op4: UnaryFn<Source<C>, Source<D>>, 128 - op5: UnaryFn<Source<D>, Source<E>>, 129 - op6: UnaryFn<Source<E>, Source<F>>, 130 - consumer: UnaryFn<Source<F>, R> 131 - ): R; 132 - 133 - export function pipe<T, A, B, C, D, E, F, G, R>( 134 - source: Source<T>, 135 - op1: UnaryFn<Source<T>, Source<A>>, 136 - op2: UnaryFn<Source<A>, Source<B>>, 137 - op3: UnaryFn<Source<B>, Source<C>>, 138 - op4: UnaryFn<Source<C>, Source<D>>, 139 - op5: UnaryFn<Source<D>, Source<E>>, 140 - op6: UnaryFn<Source<E>, Source<F>>, 141 - op7: UnaryFn<Source<F>, Source<G>>, 142 - consumer: UnaryFn<Source<G>, R> 143 - ): R; 144 - 145 - export function pipe<T, A, B, C, D, E, F, G, H, R>( 146 - source: Source<T>, 147 - op1: UnaryFn<Source<T>, Source<A>>, 148 - op2: UnaryFn<Source<A>, Source<B>>, 149 - op3: UnaryFn<Source<B>, Source<C>>, 150 - op4: UnaryFn<Source<C>, Source<D>>, 151 - op5: UnaryFn<Source<D>, Source<E>>, 152 - op6: UnaryFn<Source<E>, Source<F>>, 153 - op7: UnaryFn<Source<F>, Source<G>>, 154 - op8: UnaryFn<Source<G>, Source<H>>, 155 - consumer: UnaryFn<Source<H>, R> 156 - ): R;
-11
src/pipe.js
··· 1 - export function pipe(source) { 2 - const args = arguments; 3 - const len = args.length; 4 - let x = source; 5 - 6 - for (let i = 1; i < len; i++) { 7 - x = args[i](x); 8 - } 9 - 10 - return x; 11 - }
+185
src/pipe.ts
··· 1 + import { Source, Sink, Operator } from './types'; 2 + 3 + interface UnaryFn<T, R> { 4 + (source: T): R; 5 + } 6 + 7 + /** Chain calls operators on a given source and returns the last result. 8 + * @param args - A source, then a variable number of transform functions 9 + * 10 + * @remarks 11 + * The `pipe` utility can be called with a {@link Source} then one or more unary transform functions. 12 + * Each transform function will be called in turn with the last function's return value, starting 13 + * with the source passed as the first argument to `pipe`. 14 + * 15 + * It's used to transform a source with a list of {@link Operator | Operators}. The last argument may 16 + * also be a {@link Sink} that returns something else than a Source. 17 + * 18 + * @example 19 + * 20 + * ```ts 21 + * pipe( 22 + * fromArray([1, 2, 3]), 23 + * map(x => x * 2), 24 + * subscribe(console.log) 25 + * ); 26 + * ``` 27 + * 28 + * @see {@link https://github.com/tc39/proposal-pipeline-operator} for the JS Pipeline Operator spec, for which this is a replacement utility for. 29 + */ 30 + interface pipe { 31 + /* pipe definitions for source + operators composition */ 32 + 33 + <T, A>(source: Source<T>, op1: UnaryFn<Source<T>, Source<A>>): Source<A>; 34 + 35 + <T, A, B>( 36 + source: Source<T>, 37 + op1: UnaryFn<Source<T>, Source<A>>, 38 + op2: UnaryFn<Source<A>, Source<B>> 39 + ): Source<B>; 40 + 41 + <T, A, B, C>( 42 + source: Source<T>, 43 + op1: UnaryFn<Source<T>, Source<A>>, 44 + op2: UnaryFn<Source<A>, Source<B>>, 45 + op3: UnaryFn<Source<B>, Source<C>> 46 + ): Source<C>; 47 + 48 + <T, A, B, C, D>( 49 + source: Source<T>, 50 + op1: UnaryFn<Source<T>, Source<A>>, 51 + op2: UnaryFn<Source<A>, Source<B>>, 52 + op3: UnaryFn<Source<B>, Source<C>>, 53 + op4: UnaryFn<Source<C>, Source<D>> 54 + ): Source<D>; 55 + 56 + <T, A, B, C, D, E>( 57 + source: Source<T>, 58 + op1: UnaryFn<Source<T>, Source<A>>, 59 + op2: UnaryFn<Source<A>, Source<B>>, 60 + op3: UnaryFn<Source<B>, Source<C>>, 61 + op4: UnaryFn<Source<C>, Source<D>>, 62 + op5: UnaryFn<Source<D>, Source<E>> 63 + ): Source<E>; 64 + 65 + <T, A, B, C, D, E, F>( 66 + source: Source<T>, 67 + op1: UnaryFn<Source<T>, Source<A>>, 68 + op2: UnaryFn<Source<A>, Source<B>>, 69 + op3: UnaryFn<Source<B>, Source<C>>, 70 + op4: UnaryFn<Source<C>, Source<D>>, 71 + op5: UnaryFn<Source<D>, Source<E>>, 72 + op6: UnaryFn<Source<E>, Source<F>> 73 + ): Source<F>; 74 + 75 + <T, A, B, C, D, E, F, G>( 76 + source: Source<T>, 77 + op1: UnaryFn<Source<T>, Source<A>>, 78 + op2: UnaryFn<Source<A>, Source<B>>, 79 + op3: UnaryFn<Source<B>, Source<C>>, 80 + op4: UnaryFn<Source<C>, Source<D>>, 81 + op5: UnaryFn<Source<D>, Source<E>>, 82 + op6: UnaryFn<Source<E>, Source<F>>, 83 + op7: UnaryFn<Source<F>, Source<G>> 84 + ): Source<G>; 85 + 86 + <T, A, B, C, D, E, F, G, H>( 87 + source: Source<T>, 88 + op1: UnaryFn<Source<T>, Source<A>>, 89 + op2: UnaryFn<Source<A>, Source<B>>, 90 + op3: UnaryFn<Source<B>, Source<C>>, 91 + op4: UnaryFn<Source<C>, Source<D>>, 92 + op5: UnaryFn<Source<D>, Source<E>>, 93 + op6: UnaryFn<Source<E>, Source<F>>, 94 + op7: UnaryFn<Source<F>, Source<G>>, 95 + op8: UnaryFn<Source<G>, Source<H>> 96 + ): Source<H>; 97 + 98 + /* pipe definitions for source + operators + consumer composition */ 99 + 100 + <T, R>(source: Source<T>, consumer: UnaryFn<Source<T>, R>): R; 101 + 102 + <T, A, R>( 103 + source: Source<T>, 104 + op1: UnaryFn<Source<T>, Source<A>>, 105 + consumer: UnaryFn<Source<A>, R> 106 + ): R; 107 + 108 + <T, A, B, R>( 109 + source: Source<T>, 110 + op1: UnaryFn<Source<T>, Source<A>>, 111 + op2: UnaryFn<Source<A>, Source<B>>, 112 + consumer: UnaryFn<Source<B>, R> 113 + ): R; 114 + 115 + <T, A, B, C, R>( 116 + source: Source<T>, 117 + op1: UnaryFn<Source<T>, Source<A>>, 118 + op2: UnaryFn<Source<A>, Source<B>>, 119 + op3: UnaryFn<Source<B>, Source<C>>, 120 + consumer: UnaryFn<Source<C>, R> 121 + ): R; 122 + 123 + <T, A, B, C, D, R>( 124 + source: Source<T>, 125 + op1: UnaryFn<Source<T>, Source<A>>, 126 + op2: UnaryFn<Source<A>, Source<B>>, 127 + op3: UnaryFn<Source<B>, Source<C>>, 128 + op4: UnaryFn<Source<C>, Source<D>>, 129 + consumer: UnaryFn<Source<D>, R> 130 + ): R; 131 + 132 + <T, A, B, C, D, E, R>( 133 + source: Source<T>, 134 + op1: UnaryFn<Source<T>, Source<A>>, 135 + op2: UnaryFn<Source<A>, Source<B>>, 136 + op3: UnaryFn<Source<B>, Source<C>>, 137 + op4: UnaryFn<Source<C>, Source<D>>, 138 + op5: UnaryFn<Source<D>, Source<E>>, 139 + consumer: UnaryFn<Source<E>, R> 140 + ): R; 141 + 142 + <T, A, B, C, D, E, F, R>( 143 + source: Source<T>, 144 + op1: UnaryFn<Source<T>, Source<A>>, 145 + op2: UnaryFn<Source<A>, Source<B>>, 146 + op3: UnaryFn<Source<B>, Source<C>>, 147 + op4: UnaryFn<Source<C>, Source<D>>, 148 + op5: UnaryFn<Source<D>, Source<E>>, 149 + op6: UnaryFn<Source<E>, Source<F>>, 150 + consumer: UnaryFn<Source<F>, R> 151 + ): R; 152 + 153 + <T, A, B, C, D, E, F, G, R>( 154 + source: Source<T>, 155 + op1: UnaryFn<Source<T>, Source<A>>, 156 + op2: UnaryFn<Source<A>, Source<B>>, 157 + op3: UnaryFn<Source<B>, Source<C>>, 158 + op4: UnaryFn<Source<C>, Source<D>>, 159 + op5: UnaryFn<Source<D>, Source<E>>, 160 + op6: UnaryFn<Source<E>, Source<F>>, 161 + op7: UnaryFn<Source<F>, Source<G>>, 162 + consumer: UnaryFn<Source<G>, R> 163 + ): R; 164 + 165 + <T, A, B, C, D, E, F, G, H, R>( 166 + source: Source<T>, 167 + op1: UnaryFn<Source<T>, Source<A>>, 168 + op2: UnaryFn<Source<A>, Source<B>>, 169 + op3: UnaryFn<Source<B>, Source<C>>, 170 + op4: UnaryFn<Source<C>, Source<D>>, 171 + op5: UnaryFn<Source<D>, Source<E>>, 172 + op6: UnaryFn<Source<E>, Source<F>>, 173 + op7: UnaryFn<Source<F>, Source<G>>, 174 + op8: UnaryFn<Source<G>, Source<H>>, 175 + consumer: UnaryFn<Source<H>, R> 176 + ): R; 177 + } 178 + 179 + const pipe: pipe = (...args: Function[]): any => { 180 + let x = args[0]; 181 + for (let i = 1, l = args.length; i < l; i++) x = args[i](x); 182 + return x; 183 + }; 184 + 185 + export { pipe };
-3
src/sinks/wonka_sink_publish.d.ts
··· 1 - import { Source, Subscription } from '../wonka_types'; 2 - 3 - export const publish: <A>(source: Source<A>) => Subscription;
-33
src/sinks/wonka_sink_publish.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type publishStateT = { 5 - mutable talkback: (.talkbackT) => unit, 6 - mutable ended: bool 7 - }; 8 - 9 - let publish = source => { 10 - let state: publishStateT = { 11 - talkback: talkbackPlaceholder, 12 - ended: false 13 - }; 14 - 15 - source((.signal) => { 16 - switch (signal) { 17 - | Start(x) => { 18 - state.talkback = x; 19 - x(.Pull); 20 - } 21 - | Push(_) => if (!state.ended) state.talkback(.Pull); 22 - | End => state.ended = true; 23 - } 24 - }); 25 - 26 - { 27 - unsubscribe: () => 28 - if (!state.ended) { 29 - state.ended = true; 30 - state.talkback(.Close); 31 - } 32 - } 33 - };
-3
src/sinks/wonka_sink_publish.rei
··· 1 - open Wonka_types; 2 - 3 - let publish: sourceT('a) => subscriptionT;
-4
src/sinks/wonka_sink_subscribe.d.ts
··· 1 - import { Source, Subscription } from '../wonka_types'; 2 - 3 - export const subscribe: <A>(f: (x: A) => void) => (source: Source<A>) => Subscription; 4 - export const forEach: <A>(f: (x: A) => void) => (source: Source<A>) => void;
-41
src/sinks/wonka_sink_subscribe.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - type subscribeStateT = { 5 - mutable talkback: (.talkbackT) => unit, 6 - mutable ended: bool 7 - }; 8 - 9 - let subscribe = f => curry(source => { 10 - let state: subscribeStateT = { 11 - talkback: talkbackPlaceholder, 12 - ended: false 13 - }; 14 - 15 - source((.signal) => { 16 - switch (signal) { 17 - | Start(x) => { 18 - state.talkback = x; 19 - x(.Pull); 20 - } 21 - | Push(x) when !state.ended => { 22 - f(.x); 23 - state.talkback(.Pull); 24 - } 25 - | Push(_) => () 26 - | End => state.ended = true; 27 - } 28 - }); 29 - 30 - { 31 - unsubscribe: () => 32 - if (!state.ended) { 33 - state.ended = true; 34 - state.talkback(.Close); 35 - } 36 - } 37 - }); 38 - 39 - let forEach = f => curry(source => { 40 - ignore(subscribe(f, source)); 41 - });
-4
src/sinks/wonka_sink_subscribe.rei
··· 1 - open Wonka_types; 2 - 3 - let subscribe: ((.'a) => unit, sourceT('a)) => subscriptionT; 4 - let forEach: ((.'a) => unit, sourceT('a)) => unit;
+253
src/sinks.ts
··· 1 + import { Source, Subscription, TalkbackKind, SignalKind, SourceIterable } from './types'; 2 + import { talkbackPlaceholder, asyncIteratorSymbol } from './helpers'; 3 + 4 + /** Creates a subscription to a given source and invokes a `subscriber` callback for each value. 5 + * @param subscriber - A callback function called for each issued value. 6 + * @returns A function accepting a {@link Source} and returning a {@link Subscription}. 7 + * 8 + * @remarks 9 + * `subscribe` accepts a `subscriber` callback and returns a function accepting a {@link Source}. 10 + * When a source is passed to the returned funtion, the subscription will start and `subscriber` 11 + * will be called for each new value the Source issues. This will also return a {@link Subscription} 12 + * object that can cancel the ongoing {@link Source} early. 13 + * 14 + * @example 15 + * ```ts 16 + * const subscription = pipe( 17 + * fromValue('test'), 18 + * subscribe(text => { 19 + * console.log(text); // 'test' 20 + * }) 21 + * ); 22 + * ``` 23 + */ 24 + export function subscribe<T>(subscriber: (value: T) => void) { 25 + return (source: Source<T>): Subscription => { 26 + let talkback = talkbackPlaceholder; 27 + let ended = false; 28 + source(signal => { 29 + if (signal === SignalKind.End) { 30 + ended = true; 31 + } else if (signal.tag === SignalKind.Start) { 32 + (talkback = signal[0])(TalkbackKind.Pull); 33 + } else if (!ended) { 34 + subscriber(signal[0]); 35 + talkback(TalkbackKind.Pull); 36 + } 37 + }); 38 + return { 39 + unsubscribe() { 40 + if (!ended) { 41 + ended = true; 42 + talkback(TalkbackKind.Close); 43 + } 44 + }, 45 + }; 46 + }; 47 + } 48 + 49 + /** Creates a subscription to a given source and invokes a `subscriber` callback for each value. 50 + * @see {@link subscribe} which this helper aliases without returnin a {@link Subscription}. 51 + * @param subscriber - A callback function called for each issued value. 52 + * @returns A function accepting a {@link Source}. 53 + * 54 + * @remarks 55 + * `forEach` accepts a `subscriber` callback and returns a function accepting a {@link Source}. 56 + * When a source is passed to the returned funtion, the subscription will start and `subscriber` 57 + * will be called for each new value the Source issues. Unlike `subscribe` it will not return a 58 + * Subscription object and can't be cancelled early. 59 + * 60 + * @example 61 + * ```ts 62 + * pipe( 63 + * fromValue('test'), 64 + * forEach(text => { 65 + * console.log(text); // 'test' 66 + * }) 67 + * ); // undefined 68 + * ``` 69 + */ 70 + export function forEach<T>(subscriber: (value: T) => void) { 71 + return (source: Source<T>): void => { 72 + subscribe(subscriber)(source); 73 + }; 74 + } 75 + 76 + /** Creates a subscription to a given source and invokes a `subscriber` callback for each value. 77 + * @see {@link subscribe} which this helper aliases without accepting parameters or returning a 78 + * {@link Subscription | Subscription}. 79 + * 80 + * @param source - A {@link Source}. 81 + * 82 + * @remarks 83 + * `publish` accepts a {@link Source} and subscribes to it, starting its values. The resulting 84 + * values cannot be observed and the subscription can't be cancelled, as this helper is purely 85 + * intended to start side-effects. 86 + * 87 + * @example 88 + * ```ts 89 + * pipe( 90 + * lazy(() => { 91 + * console.log('test'); // this is called 92 + * return fromValue(123); // this is never used 93 + * }), 94 + * publish 95 + * ); // undefined 96 + * ``` 97 + */ 98 + export function publish<T>(source: Source<T>): void { 99 + subscribe(_value => { 100 + /*noop*/ 101 + })(source); 102 + } 103 + 104 + const doneResult = { done: true } as IteratorReturnResult<void>; 105 + 106 + /** Converts a Source to an AsyncIterable that pulls and issues values from the Source. 107 + * 108 + * @param source - A {@link Source}. 109 + * @returns An {@link AsyncIterable | `AsyncIterable`} issuing values from the Source. 110 + * 111 + * @remarks 112 + * `toAsyncIterable` will create an {@link AsyncIterable} that pulls and issues values from a given 113 + * {@link Source}. This can be used in many interoperability situations, to provide an iterable when 114 + * a consumer requires it. 115 + * 116 + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_async_iterator_and_async_iterable_protocols} 117 + * for the JS Iterable protocol. 118 + * 119 + * @example 120 + * ```ts 121 + * const iterable = toAsyncIterable(fromArray([1, 2, 3])); 122 + * for await (const value of iterable) { 123 + * console.log(value); // outputs: 1, 2, 3 124 + * } 125 + * ``` 126 + */ 127 + export const toAsyncIterable = <T>(source: Source<T>): SourceIterable<T> => { 128 + const buffer: T[] = []; 129 + 130 + let ended = false; 131 + let started = false; 132 + let pulled = false; 133 + let talkback = talkbackPlaceholder; 134 + let next: ((value: IteratorResult<T>) => void) | void; 135 + 136 + return { 137 + async next(): Promise<IteratorResult<T>> { 138 + if (!started) { 139 + started = true; 140 + source(signal => { 141 + if (ended) { 142 + /*noop*/ 143 + } else if (signal === SignalKind.End) { 144 + if (next) next = next(doneResult); 145 + ended = true; 146 + } else if (signal.tag === SignalKind.Start) { 147 + pulled = true; 148 + (talkback = signal[0])(TalkbackKind.Pull); 149 + } else { 150 + pulled = false; 151 + if (next) { 152 + next = next({ value: signal[0], done: false }); 153 + } else { 154 + buffer.push(signal[0]); 155 + } 156 + } 157 + }); 158 + } 159 + 160 + if (ended && !buffer.length) { 161 + return doneResult; 162 + } else if (!ended && !pulled && buffer.length <= 1) { 163 + pulled = true; 164 + talkback(TalkbackKind.Pull); 165 + } 166 + 167 + return buffer.length 168 + ? { value: buffer.shift()!, done: false } 169 + : new Promise(resolve => (next = resolve)); 170 + }, 171 + async return(): Promise<IteratorReturnResult<void>> { 172 + if (!ended) next = talkback(TalkbackKind.Close); 173 + ended = true; 174 + return doneResult; 175 + }, 176 + [asyncIteratorSymbol()](): SourceIterable<T> { 177 + return this; 178 + }, 179 + }; 180 + }; 181 + 182 + /** Subscribes to a given source and collects all synchronous values into an array. 183 + * @param source - A {@link Source}. 184 + * @returns An array of values collected from the {@link Source}. 185 + * 186 + * @remarks 187 + * `toArray` accepts a {@link Source} and returns an array of all synchronously issued values from 188 + * this Source. It will issue {@link TalkbackKind.Pull | Pull signals} after every value it receives 189 + * and expects the Source to recursively issue values. 190 + * 191 + * Any asynchronously issued values will not be 192 + * added to the array and a {@link TalkbackKind.Close | Close signal} is issued by the sink before 193 + * returning the array. 194 + * 195 + * @example 196 + * ```ts 197 + * toArray(fromArray([1, 2, 3])); // [1, 2, 3] 198 + * ``` 199 + */ 200 + export function toArray<T>(source: Source<T>): T[] { 201 + const values: T[] = []; 202 + let talkback = talkbackPlaceholder; 203 + let ended = false; 204 + source(signal => { 205 + if (signal === SignalKind.End) { 206 + ended = true; 207 + } else if (signal.tag === SignalKind.Start) { 208 + (talkback = signal[0])(TalkbackKind.Pull); 209 + } else { 210 + values.push(signal[0]); 211 + talkback(TalkbackKind.Pull); 212 + } 213 + }); 214 + if (!ended) talkback(TalkbackKind.Close); 215 + return values; 216 + } 217 + 218 + /** Subscribes to a given source and returns a Promise that will resolve with the last value the 219 + * source issues. 220 + * 221 + * @param source - A {@link Source}. 222 + * @returns A {@link Promise} resolving to the last value of the {@link Source}. 223 + * 224 + * @remarks 225 + * `toPromise` will subscribe to the passed {@link Source} and resolve to the last value of it once 226 + * it receives the last value, as signaled by the {@link SignalKind.End | End signal}. 227 + * 228 + * To keep its implementation simple, padding sources that don't issue any values to `toPromise` is 229 + * undefined behaviour and `toPromise` will issue `undefined` in that case. 230 + * 231 + * The returned {@link Promise} delays its value by a microtick, using `Promise.resolve`. 232 + * 233 + * @example 234 + * ```ts 235 + * toPromise(fromValue('test')); // resolves: 'test' 236 + * ``` 237 + */ 238 + export function toPromise<T>(source: Source<T>): Promise<T> { 239 + return new Promise(resolve => { 240 + let talkback = talkbackPlaceholder; 241 + let value: T | void; 242 + source(signal => { 243 + if (signal === SignalKind.End) { 244 + Promise.resolve(value!).then(resolve); 245 + } else if (signal.tag === SignalKind.Start) { 246 + (talkback = signal[0])(TalkbackKind.Pull); 247 + } else { 248 + value = signal[0]; 249 + talkback(TalkbackKind.Pull); 250 + } 251 + }); 252 + }); 253 + }
-3
src/sources/wonka_source_fromArray.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const fromArray: <A>(array: A[]) => Source<A>;
-44
src/sources/wonka_source_fromArray.re
··· 1 - open Wonka_types; 2 - 3 - type fromArrayState('a) = { 4 - mutable index: int, 5 - mutable ended: bool, 6 - mutable looping: bool, 7 - mutable pull: bool 8 - }; 9 - 10 - let fromArray = arr => curry(sink => { 11 - let size = Rebel.Array.size(arr); 12 - let state = { 13 - index: 0, 14 - ended: false, 15 - looping: false, 16 - pull: false 17 - }; 18 - 19 - sink(.Start((.signal) => { 20 - switch (signal, state.looping) { 21 - | (Pull, false) => { 22 - state.pull = true; 23 - state.looping = true; 24 - 25 - while (state.pull && !state.ended) { 26 - let index = state.index; 27 - if (index < size) { 28 - let x = Rebel.Array.getUnsafe(arr, index); 29 - state.index = index + 1; 30 - state.pull = false; 31 - sink(.Push(x)); 32 - } else { 33 - state.ended = true; 34 - sink(.End); 35 - } 36 - }; 37 - 38 - state.looping = false; 39 - } 40 - | (Pull, true) => state.pull = true 41 - | (Close, _) => state.ended = true 42 - } 43 - })); 44 - });
-3
src/sources/wonka_source_fromArray.rei
··· 1 - open Wonka_types; 2 - 3 - let fromArray: (array('a), sinkT('a)) => unit;
-3
src/sources/wonka_source_fromList.d.ts
··· 1 - import { List, Source } from '../wonka_types'; 2 - 3 - export const fromList: <A>(list: List<A>) => Source<A>;
-44
src/sources/wonka_source_fromList.re
··· 1 - open Wonka_types; 2 - 3 - type fromListState('a) = { 4 - mutable value: 'a, 5 - mutable ended: bool, 6 - mutable looping: bool, 7 - mutable pull: bool 8 - }; 9 - 10 - let fromList = ls => curry(sink => { 11 - let state = { 12 - value: ls, 13 - ended: false, 14 - looping: false, 15 - pull: false 16 - }; 17 - 18 - sink(.Start((.signal) => { 19 - switch (signal, state.looping) { 20 - | (Pull, false) => { 21 - state.pull = true; 22 - state.looping = true; 23 - 24 - while (state.pull && !state.ended) { 25 - switch (state.value) { 26 - | [x, ...rest] => { 27 - state.value = rest; 28 - state.pull = false; 29 - sink(.Push(x)); 30 - } 31 - | [] => { 32 - state.ended = true; 33 - sink(.End); 34 - } 35 - } 36 - }; 37 - 38 - state.looping = false; 39 - } 40 - | (Pull, true) => state.pull = true 41 - | (Close, _) => state.ended = true 42 - } 43 - })); 44 - });
-3
src/sources/wonka_source_fromList.rei
··· 1 - open Wonka_types; 2 - 3 - let fromList: (list('a), sinkT('a)) => unit;
-3
src/sources/wonka_source_fromValue.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const fromValue: <A>(value: A) => Source<A>;
-16
src/sources/wonka_source_fromValue.re
··· 1 - open Wonka_types; 2 - 3 - let fromValue = x => curry(sink => { 4 - let ended = ref(false); 5 - 6 - sink(.Start((.signal) => { 7 - switch (signal) { 8 - | Pull when !ended^ => { 9 - ended := true; 10 - sink(.Push(x)); 11 - sink(.End); 12 - } 13 - | _ => () 14 - } 15 - })); 16 - });
-3
src/sources/wonka_source_fromValue.rei
··· 1 - open Wonka_types; 2 - 3 - let fromValue: ('a, sinkT('a)) => unit;
-3
src/sources/wonka_source_make.d.ts
··· 1 - import { Source, Observer } from '../wonka_types'; 2 - 3 - export const make: <A>(f: (observer: Observer<A>) => (() => void)) => Source<A>;
-15
src/sources/wonka_source_make.re
··· 1 - open Wonka_types; 2 - 3 - let make = f => curry(sink => { 4 - let teardown = f(.{ 5 - next: value => sink(.Push(value)), 6 - complete: () => sink(.End) 7 - }); 8 - 9 - sink(.Start((.signal) => { 10 - switch (signal) { 11 - | Close => teardown(.) 12 - | Pull => () 13 - } 14 - })); 15 - });
-3
src/sources/wonka_source_make.rei
··· 1 - open Wonka_types; 2 - 3 - let make: ((.observerT('a)) => teardownT, sinkT('a)) => unit;
-3
src/sources/wonka_source_makeSubject.d.ts
··· 1 - import { Subject } from '../wonka_types'; 2 - 3 - export const makeSubject: <A>() => Subject<A>;
-35
src/sources/wonka_source_makeSubject.re
··· 1 - open Wonka_types; 2 - 3 - type subjectState('a) = { 4 - mutable sinks: Rebel.Array.t(sinkT('a)), 5 - mutable ended: bool 6 - }; 7 - 8 - let makeSubject = () => { 9 - let state: subjectState('a) = { 10 - sinks: Rebel.Array.makeEmpty(), 11 - ended: false, 12 - }; 13 - 14 - let source = sink => { 15 - state.sinks = Rebel.Array.append(state.sinks, sink); 16 - sink(.Start((.signal) => { 17 - if (signal === Close) { 18 - state.sinks = Rebel.Array.filter(state.sinks, x => x !== sink); 19 - } 20 - })); 21 - }; 22 - 23 - let next = value => 24 - if (!state.ended) { 25 - Rebel.Array.forEach(state.sinks, sink => sink(.Push(value))); 26 - }; 27 - 28 - let complete = () => 29 - if (!state.ended) { 30 - state.ended = true; 31 - Rebel.Array.forEach(state.sinks, sink => sink(.End)); 32 - }; 33 - 34 - { source, next, complete } 35 - };
-3
src/sources/wonka_source_makeSubject.rei
··· 1 - open Wonka_types; 2 - 3 - let makeSubject: unit => subjectT('a);
-4
src/sources/wonka_source_primitives.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const empty: Source<{}>; 4 - export const never: Source<{}>;
-11
src/sources/wonka_source_primitives.re
··· 1 - open Wonka_types; 2 - open Wonka_helpers; 3 - 4 - let empty = sink => { 5 - sink(.Start(talkbackPlaceholder)); 6 - sink(.End); 7 - }; 8 - 9 - let never = sink => { 10 - sink(.Start(talkbackPlaceholder)); 11 - };
-4
src/sources/wonka_source_primitives.rei
··· 1 - open Wonka_types; 2 - 3 - let empty: (sinkT('a)) => unit; 4 - let never: (sinkT('a)) => unit;
+407
src/sources.ts
··· 1 + import { Source, Sink, SignalKind, TalkbackKind, Observer, Subject, TeardownFn } from './types'; 2 + import { 3 + push, 4 + start, 5 + talkbackPlaceholder, 6 + teardownPlaceholder, 7 + asyncIteratorSymbol, 8 + } from './helpers'; 9 + import { share } from './operators'; 10 + 11 + /** Helper creating a Source from a factory function when it's subscribed to. 12 + * @param produce - A factory function returning a {@link Source}. 13 + * @returns A {@link Source} lazyily subscribing to the Source returned by the given factory 14 + * function. 15 + * 16 + * @remarks 17 + * At times it's necessary to create a {@link Source} lazily. The time of a {@link Source} being 18 + * created could be different from when it's subscribed to, and hence we may want to split the 19 + * creation and subscription time. This is especially useful when the Source we wrap is "hot" and 20 + * issues values as soon as it's created, which we may then not receive in a subscriber. 21 + * 22 + * @example An example of creating a {@link Source} that issues the timestamp of subscription. Here 23 + * we effectively use `lazy` with the simple {@link fromValue | `fromValue`} source, to quickly 24 + * create a Source that issues the time of its subscription, rather than the time of its creation 25 + * that it would otherwise issue without `lazy`. 26 + * 27 + * ```ts 28 + * lazy(() => fromValue(Date.now())); 29 + * ``` 30 + */ 31 + export function lazy<T>(produce: () => Source<T>): Source<T> { 32 + return sink => produce()(sink); 33 + } 34 + 35 + /** Converts an AsyncIterable to a Source that pulls and issues values from it as requested. 36 + * 37 + * @see {@link fromIterable | `fromIterable`} for the non-async Iterable version of this helper, 38 + * which calls this helper automatically as needed. 39 + * 40 + * @param iterable - An {@link AsyncIterable | `AsyncIterable`}. 41 + * @returns A {@link Source} issuing values sourced from the Iterable. 42 + * 43 + * @remarks 44 + * `fromAsyncIterable` will create a {@link Source} that pulls and issues values from a given 45 + * {@link AsyncIterable}. This can be used in many interoperability situations, including to consume 46 + * an async generator function. 47 + * 48 + * When the {@link Sink} throws an exception when a new value is pushed, this helper will rethrow it 49 + * using {@link AsyncIterator.throw}, which allows an async generator to recover from the exception. 50 + * 51 + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_async_iterator_and_async_iterable_protocols} 52 + * for the JS Iterable protocol. 53 + */ 54 + export function fromAsyncIterable<T>(iterable: AsyncIterable<T> | AsyncIterator<T>): Source<T> { 55 + return sink => { 56 + const iterator: AsyncIterator<T> = 57 + (iterable[asyncIteratorSymbol()] && iterable[asyncIteratorSymbol()]()) || iterable; 58 + 59 + let ended = false; 60 + let looping = false; 61 + let pulled = false; 62 + let next: IteratorResult<T>; 63 + sink( 64 + start(async signal => { 65 + if (signal === TalkbackKind.Close) { 66 + ended = true; 67 + if (iterator.return) iterator.return(); 68 + } else if (looping) { 69 + pulled = true; 70 + } else { 71 + for (pulled = looping = true; pulled && !ended; ) { 72 + if ((next = await iterator.next()).done) { 73 + ended = true; 74 + if (iterator.return) await iterator.return(); 75 + sink(SignalKind.End); 76 + } else { 77 + try { 78 + pulled = false; 79 + sink(push(next.value)); 80 + } catch (error) { 81 + if (iterator.throw) { 82 + if ((ended = !!(await iterator.throw(error)).done)) sink(SignalKind.End); 83 + } else { 84 + throw error; 85 + } 86 + } 87 + } 88 + } 89 + looping = false; 90 + } 91 + }) 92 + ); 93 + }; 94 + } 95 + 96 + /** Converts an Iterable to a Source that pulls and issues values from it as requested. 97 + * @see {@link fromAsyncIterable | `fromAsyncIterable`} for the AsyncIterable version of this helper. 98 + * @param iterable - An {@link Iterable | `Iterable`} or an `AsyncIterable` 99 + * @returns A {@link Source} issuing values sourced from the Iterable. 100 + * 101 + * @remarks 102 + * `fromIterable` will create a {@link Source} that pulls and issues values from a given 103 + * {@link Iterable | JS Iterable}. As iterables are the common standard for any lazily iterated list 104 + * of values in JS it can be applied to many different JS data types, including a JS Generator 105 + * function. 106 + * 107 + * This Source will only call {@link Iterator.next} on the iterator when the subscribing {@link Sink} 108 + * has pulled a new value with the {@link TalkbackKind.Pull | Pull signal}. `fromIterable` can 109 + * therefore also be applied to "infinite" iterables, without a predefined end. 110 + * 111 + * This helper will call {@link fromAsyncIterable | `fromAsyncIterable`} automatically when the 112 + * passed object also implements the async iterator protocol. 113 + * 114 + * When the {@link Sink} throws an exception when a new value is pushed, this helper will rethrow it 115 + * using {@link Iterator.throw}, which allows a generator to recover from the exception. 116 + * 117 + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol} 118 + * for the JS Iterable protocol. 119 + */ 120 + export function fromIterable<T>(iterable: Iterable<T> | AsyncIterable<T>): Source<T> { 121 + if (iterable[asyncIteratorSymbol()]) return fromAsyncIterable(iterable as AsyncIterable<T>); 122 + return sink => { 123 + const iterator = iterable[Symbol.iterator](); 124 + let ended = false; 125 + let looping = false; 126 + let pulled = false; 127 + let next: IteratorResult<T>; 128 + sink( 129 + start(signal => { 130 + if (signal === TalkbackKind.Close) { 131 + ended = true; 132 + if (iterator.return) iterator.return(); 133 + } else if (looping) { 134 + pulled = true; 135 + } else { 136 + for (pulled = looping = true; pulled && !ended; ) { 137 + if ((next = iterator.next()).done) { 138 + ended = true; 139 + if (iterator.return) iterator.return(); 140 + sink(SignalKind.End); 141 + } else { 142 + try { 143 + pulled = false; 144 + sink(push(next.value)); 145 + } catch (error) { 146 + if (iterator.throw) { 147 + if ((ended = !!iterator.throw(error).done)) sink(SignalKind.End); 148 + } else { 149 + throw error; 150 + } 151 + } 152 + } 153 + } 154 + looping = false; 155 + } 156 + }) 157 + ); 158 + }; 159 + } 160 + 161 + /** Creates a Source that issues a each value of a given array synchronously. 162 + * @see {@link fromIterable} which `fromArray` aliases. 163 + * @param array - The array whose values will be issued one by one. 164 + * @returns A {@link Source} issuing the array's values. 165 + * 166 + * @remarks 167 + * `fromArray` will create a {@link Source} that issues the values of a given JS array one by one. It 168 + * will issue values as they're pulled and is hence a "cold" source, not eagerly emitting values. It 169 + * will end and issue the {@link SignalKind.End | End signal} when the array is exhausted of values. 170 + * 171 + * @example 172 + * ```ts 173 + * fromArray([1, 2, 3]); 174 + * ``` 175 + */ 176 + export const fromArray: <T>(array: T[]) => Source<T> = fromIterable; 177 + 178 + /** Creates a Source that issues a single value and ends immediately after. 179 + * @param value - The value that will be issued. 180 + * @returns A {@link Source} issuing the single value. 181 + * 182 + * @example 183 + * ```ts 184 + * fromValue('test'); 185 + * ``` 186 + */ 187 + export function fromValue<T>(value: T): Source<T> { 188 + return sink => { 189 + let ended = false; 190 + sink( 191 + start(signal => { 192 + if (signal === TalkbackKind.Close) { 193 + ended = true; 194 + } else if (!ended) { 195 + ended = true; 196 + sink(push(value)); 197 + sink(SignalKind.End); 198 + } 199 + }) 200 + ); 201 + }; 202 + } 203 + 204 + /** Creates a new Source from scratch from a passed `subscriber` function. 205 + * @param subscriber - A callback that is called when the {@link Source} is subscribed to. 206 + * @returns A {@link Source} created from the `subscriber` parameter. 207 + * 208 + * @remarks 209 + * `make` is used to create a new, arbitrary {@link Source} from scratch. It calls the passed 210 + * `subscriber` function when it's subscribed to. 211 + * 212 + * The `subscriber` function receives an {@link Observer}. You may call {@link Observer.next} to 213 + * issue values on the Source, and {@link Observer.complete} to end the Source. 214 + * 215 + * Your `subscribr` function must return a {@link TeardownFn | teardown function} which is only 216 + * called when your source is cancelled — not when you invoke `complete` yourself. As this creates a 217 + * "cold" source, every time this source is subscribed to, it will invoke the `subscriber` function 218 + * again and create a new source. 219 + * 220 + * @example 221 + * 222 + * ```ts 223 + * make(observer => { 224 + * const frame = requestAnimationFrame(() => { 225 + * observer.next('animate!'); 226 + * }); 227 + * return () => { 228 + * cancelAnimationFrame(frame); 229 + * }; 230 + * }); 231 + * ``` 232 + */ 233 + export function make<T>(subscriber: (observer: Observer<T>) => TeardownFn): Source<T> { 234 + return sink => { 235 + let ended = false; 236 + const teardown = subscriber({ 237 + next(value: T) { 238 + if (!ended) sink(push(value)); 239 + }, 240 + complete() { 241 + if (!ended) { 242 + ended = true; 243 + sink(SignalKind.End); 244 + } 245 + }, 246 + }); 247 + sink( 248 + start(signal => { 249 + if (signal === TalkbackKind.Close && !ended) { 250 + ended = true; 251 + teardown(); 252 + } 253 + }) 254 + ); 255 + }; 256 + } 257 + 258 + /** Creates a new Subject which can be used as an IO event hub. 259 + * @returns A new {@link Subject}. 260 + * 261 + * @remarks 262 + * `makeSubject` creates a new {@link Subject}. A Subject is a {@link Source} and an {@link Observer} 263 + * combined in one interface, as the Observer is used to send new signals to the Source. This means 264 + * that it's "hot" and hence all subscriptions to {@link Subject.source} share the same underlying 265 + * signals coming from {@link Subject.next} and {@link Subject.complete}. 266 + * 267 + * @example 268 + * ```ts 269 + * const subject = makeSubject(); 270 + * pipe(subject.source, subscribe(console.log)); 271 + * // This will log the string on the above subscription 272 + * subject.next('hello subject!'); 273 + * ``` 274 + */ 275 + export function makeSubject<T>(): Subject<T> { 276 + let next: Subject<T>['next'] | void; 277 + let complete: Subject<T>['complete'] | void; 278 + return { 279 + source: share( 280 + make(observer => { 281 + next = observer.next; 282 + complete = observer.complete; 283 + return teardownPlaceholder; 284 + }) 285 + ), 286 + next(value: T) { 287 + if (next) next(value); 288 + }, 289 + complete() { 290 + if (complete) complete(); 291 + }, 292 + }; 293 + } 294 + 295 + /** A {@link Source} that immediately ends. 296 + * @remarks 297 + * `empty` is a {@link Source} that immediately issues an {@link SignalKind.End | End signal} when 298 + * it's subscribed to, ending immediately. 299 + * 300 + * @see {@link never | `never`} for a source that instead never ends. 301 + */ 302 + export const empty: Source<any> = (sink: Sink<any>): void => { 303 + let ended = false; 304 + sink( 305 + start(signal => { 306 + if (signal === TalkbackKind.Close) { 307 + ended = true; 308 + } else if (!ended) { 309 + ended = true; 310 + sink(SignalKind.End); 311 + } 312 + }) 313 + ); 314 + }; 315 + 316 + /** A {@link Source} without values that never ends. 317 + * @remarks 318 + * `never` is a {@link Source} that never issues any signals and neither sends values nor ends. 319 + * 320 + * @see {@link empty | `empty`} for a source that instead ends immediately. 321 + */ 322 + export const never: Source<any> = (sink: Sink<any>): void => { 323 + sink(start(talkbackPlaceholder)); 324 + }; 325 + 326 + /** Creates a Source that issues an incrementing integer in intervals. 327 + * @param ms - The interval in milliseconds. 328 + * @returns A {@link Source} issuing an incrementing count on each interval. 329 + * 330 + * @remarks 331 + * `interval` will create a {@link Source} that issues an incrementing counter each time the `ms` 332 + * interval expires. 333 + * 334 + * It'll only stop when it's cancelled by a {@link TalkbackKind.Close | Close signal}. 335 + * 336 + * @example 337 + * An example printing `0`, then `1`, and so on, in intervals of 50ms. 338 + * 339 + * ```ts 340 + * pipe(interval(50), subscribe(console.log)); 341 + * ``` 342 + */ 343 + export function interval(ms: number): Source<number> { 344 + return make(observer => { 345 + let i = 0; 346 + const id = setInterval(() => observer.next(i++), ms); 347 + return () => clearInterval(id); 348 + }); 349 + } 350 + 351 + /** Converts DOM Events to a Source given an `HTMLElement` and an event's name. 352 + * @param element - The {@link HTMLElement} to listen to. 353 + * @param event - The DOM Event name to listen to. 354 + * @returns A {@link Source} issuing the {@link Event | DOM Events} as they're issued by the DOM. 355 + * 356 + * @remarks 357 + * `fromDomEvent` will create a {@link Source} that listens to the given element's events and issues 358 + * them as values on the source. This source will only stop when it's cancelled by a 359 + * {@link TalkbackKind.Close | Close signal}. 360 + * 361 + * @example 362 + * An example printing `'clicked!'` when the given `#root` element is clicked. 363 + * 364 + * ```ts 365 + * const element = document.getElementById('root'); 366 + * pipe( 367 + * fromDomEvent(element, 'click'), 368 + * subscribe(() => console.log('clicked!')) 369 + * ); 370 + * ``` 371 + */ 372 + export function fromDomEvent(element: HTMLElement, event: string): Source<Event> { 373 + return make(observer => { 374 + element.addEventListener(event, observer.next); 375 + return () => element.removeEventListener(event, observer.next); 376 + }); 377 + } 378 + 379 + /** Converts a Promise to a Source that issues the resolving Promise's value and then ends. 380 + * @param promise - The promise that will be wrapped. 381 + * @returns A {@link Source} issuing the promise's value when it resolves. 382 + * 383 + * @remarks 384 + * `fromPromise` will create a {@link Source} that issues the {@link Promise}'s resolving value 385 + * asynchronously and ends immediately after resolving. 386 + * 387 + * This helper will not handle the promise's exceptions, and will cause uncaught errors if the 388 + * promise rejects without a value. 389 + * 390 + * @example 391 + * An example printing `'resolved!'` when the given promise resolves after a tick. 392 + * 393 + * ```ts 394 + * pipe(fromPromise(Promise.resolve('resolved!')), subscribe(console.log)); 395 + * ``` 396 + */ 397 + export function fromPromise<T>(promise: Promise<T>): Source<T> { 398 + return make(observer => { 399 + promise.then(value => { 400 + Promise.resolve(value).then(() => { 401 + observer.next(value); 402 + observer.complete(); 403 + }); 404 + }); 405 + return teardownPlaceholder; 406 + }); 407 + }
+207
src/types.d.ts
··· 1 + /** 2 + * Talkback signal that sends instructions from a sink to a source. 3 + * 4 + * @remarks 5 + * This signal is issued via {@link TalkbackFn | talkback functions} that a {@link Sink} receives via 6 + * the {@link Start} signal, to tell a {@link Source} to either send a new value (pulling) or stop 7 + * sending values altogether (cancellation). 8 + */ 9 + export declare enum TalkbackKind { 10 + /** Instructs the {@link Source} to send the next value. */ 11 + Pull = 0, 12 + /** Instructs the {@link Source} to stop sending values and cancels it. */ 13 + Close = 1, 14 + } 15 + 16 + /** 17 + * Talkback callback that sends instructions to a source. 18 + * 19 + * @remarks 20 + * This function sends a {@link TalkbackKind} signal to the source to instruct it to send a new value 21 + * (pulling) or to be cancelled and stop sending values altogether. 22 + */ 23 + export type TalkbackFn = (signal: TalkbackKind) => void; 24 + 25 + /** 26 + * Callback that is called when a source is cancelled. 27 + * 28 + * @remarks 29 + * This is used, in particular, in the {@link make | make Source} and is a returned function that is 30 + * called when the {@link TalkbackKind.Close} signal is received by the source. 31 + */ 32 + export type TeardownFn = () => void; 33 + 34 + /** 35 + * Tag enum that is used to on signals that are sent from a source to a sink. 36 + * 37 + * @remarks 38 + * This signal is issued by a {@link Source} and {@link Sink | Sinks} are called with it. The signals 39 + * carrying values ({@link Start} and {@link Push}) are sent as a unary `[T]` tuple tagged with 40 + * {@link Tag}. The {@link End} signal carries no value and is sent as a raw `0` value. 41 + * @see {@link Start} for the data structure of the start signal. 42 + * @see {@link Push} for the data structure of the push signal, carrying values. 43 + */ 44 + export declare enum SignalKind { 45 + /** 46 + * Informs the {@link Sink} that it's being called by a {@link Source}. 47 + * 48 + * @remarks 49 + * This starts the stream of values and carries a {@link TalkbackFn | talkback function} with it 50 + * that is used by the {@link Sink} to communicate back to the {@link Source}. 51 + * @see {@link Start} for the data structure of the signal. 52 + */ 53 + Start = 0, 54 + /** 55 + * Informs the {@link Sink} of a new values that's incoming from the {@link Source}. 56 + * 57 + * @remarks 58 + * This informs the {@link Sink} of new values that are sent by the {@link Source}. 59 + * @see {@link Push} for the data structure of the signal. 60 + */ 61 + Push = 1, 62 + /** 63 + * Informs the {@link Sink} that the {@link Source} has ended and that it won't send more values. 64 + * 65 + * @remarks 66 + * This signal signifies that the stream has stopped and that no more values are expected. Some 67 + * sources don't have a set end or limit on how many values will be sent. This signal is not sent 68 + * when the {@link Source} is cancelled with a {@link TalkbackKind.Close | Close talkback signal}. 69 + */ 70 + End = 0, 71 + } 72 + 73 + /** 74 + * The tag property that's put on unary `[T]` tuple to turn them into signals carrying values. 75 + * 76 + * @internal 77 + */ 78 + export interface Tag<T> { 79 + tag: T; 80 + } 81 + 82 + /** 83 + * Indicates the start of a stream to a {@link Sink}. 84 + * 85 + * @remarks 86 + * This signal is sent from a {@link Source} to a {@link Sink} at the start of a stream to inform it 87 + * that values can be pulled and/or will be sent. This signal carries a 88 + * {@link TalkbackFn | talkback function} that is used by the {@link Sink} to communicate back to the 89 + * {@link Source} as a callback. The talkback accepts {@link TalkbackKind.Pull | Pull} and 90 + * {@link TalkbackKind.Close | Close} signals. 91 + */ 92 + export type Start<_T> = Tag<SignalKind.Start> & [TalkbackFn]; 93 + 94 + /** 95 + * Sends a new value to a {@link Sink}. 96 + * 97 + * @remarks 98 + * This signal is sent from a {@link Source} to a {@link Sink} to send a new value to it. This is 99 + * essentially the signal that wraps new values coming in, like an event. Values are carried on 100 + * unary tuples and can be accessed using `signal[0]`. 101 + */ 102 + export type Push<T> = Tag<SignalKind.Push> & [T]; 103 + 104 + /** 105 + * Signals are sent from {@link Source | Sources} to {@link Sink | Sinks} to inform them of changes. 106 + * 107 + * @remarks 108 + * A {@link Source}, when consumed, sends a sequence of events to {@link Sink | Sinks}. In order, a 109 + * {@link SignalKind.Start | Start} signal will always be sent first, followed optionally by one or 110 + * more {@link SignalKind.Push | Push signals}, carrying values and representing the stream. A 111 + * {@link Source} will send the {@link SignalKind.End | End signal} when it runs out of values. The 112 + * End signal will be omitted if the Source is cancelled by a 113 + * {@link TalkbackKind.Close | Close signal}, sent back from the {@link Sink}. 114 + * @see {@link SignalKind} for the kinds signals sent by {@link Source | Sources}. 115 + * @see {@link Start} for the data structure of the start signal. 116 + * @see {@link Push} for the data structure of the push signal. 117 + */ 118 + export type Signal<T> = Start<T> | Push<T> | SignalKind.End; 119 + 120 + /** 121 + * Callback function that is called by a {@link Source} with {@link Signal | Signals}. 122 + * 123 + * @remarks 124 + * A Sink is a function that is called repeatedly with signals from a {@link Source}. It represents 125 + * the receiver of the stream of signals/events coming from a {@link Source}. 126 + * @see {@link Signal} for the data structure of signals. 127 + */ 128 + export type Sink<T> = (signal: Signal<T>) => void; 129 + 130 + /** Factory function that calls {@link Sink | Sinks} with {@link Signal | Signals} when invoked. 131 + * @remarks 132 + * A Source is a factory function that when invoked with a {@link Sink}, calls it with 133 + * {@link Signal | Signals} to create a stream of events, informing it of new values and the 134 + * potential end of the stream of values. The first signal a Source sends is always a 135 + * {@link Start | Start signal} that sends a talkback function to the {@link Sink}, so it may request 136 + * new values or cancel the source. 137 + * 138 + * @see {@link Signal} for the data structure of signals. 139 + * @see {@link Sink} for the data structure of sinks. 140 + */ 141 + export type Source<T> = (sink: Sink<T>) => void; 142 + 143 + /** Transform function that accepts a {@link Source} and returns a new one. 144 + * @remarks 145 + * Wonka comes with several helper operators that transform a given {@link Source} into a new one, 146 + * potentially changing its outputs, or the outputs' timing. An "operator" in Wonka typically 147 + * accepts arguments and then returns this kind of function, so they can be chained and composed. 148 + * 149 + * @see {@link pipe | `pipe`} for the helper used to compose operators. 150 + */ 151 + export type Operator<In, Out> = (a: Source<In>) => Source<Out>; 152 + 153 + /** Type utility to determine the type of a {@link Source}. */ 154 + export type TypeOfSource<T> = T extends Source<infer U> ? U : never; 155 + 156 + /** Subscription object that can be used to cancel a {@link Source}. 157 + * @see {@link subscribe | subscribe sink} for a helper that returns this structure. 158 + */ 159 + export interface Subscription { 160 + /** 161 + * Cancels a {@link Source} to stop the subscription from receiving new values. 162 + * 163 + * @see {@link TalkbackKind.Close | Close signal} This uses the {@link TalkbackFn | talkback function} to send a {@link TalkbackKind.Close | Close signal} 164 + * to the subscribed-to {@link Source} to stop it from sending new values. This cleans up the subscription 165 + * and ends it immediately. 166 + */ 167 + unsubscribe(): void; 168 + } 169 + 170 + /** An Observer represents sending signals manually to a {@link Sink}. 171 + * @remarks 172 + * The Observer is used whenever a utility allows for signals to be sent manually as a {@link Source} 173 + * would send them. 174 + * 175 + * @see {@link make | `make` source} for a helper that uses this structure. 176 + */ 177 + export interface Observer<T> { 178 + /** Sends a new value to the receiving Sink. 179 + * @remarks 180 + * This creates a {@link Push | Push signal} that is sent to a {@link Sink}. 181 + */ 182 + next(value: T): void; 183 + /** Indicates to the receiving Sink that no more values will be sent. 184 + * @remarks 185 + * This creates an {@link SignalKind.End | End signal} that is sent to a {@link Sink}. The Observer 186 + * will accept no more values via {@link Observer.next | `next` calls} once this method has been 187 + * invoked. 188 + */ 189 + complete(): void; 190 + } 191 + 192 + /** Subjects combine a {@link Source} with the {@link Observer} that is used to send values on said Source. 193 + * @remarks 194 + * A Subject is used whenever an event hub-like structure is needed, as it both provides the 195 + * {@link Observer}'s methods to send signals, as well as the `source` to receive said signals. 196 + * 197 + * @see {@link makeSubject | `makeSubject` source} for a helper that creates this structure. 198 + */ 199 + export interface Subject<T> extends Observer<T> { 200 + /** The {@link Source} that issues the signals as the {@link Observer} methods are called. */ 201 + source: Source<T>; 202 + } 203 + 204 + /** Async Iterable/Iterator after having converted a {@link Source}. 205 + * @see {@link toAsyncIterable} for a helper that creates this structure. 206 + */ 207 + export interface SourceIterable<T> extends AsyncIterator<T>, AsyncIterable<T> {}
+10
src/types.mjs
··· 1 + export const TalkbackKind = { 2 + Pull: 0, 3 + Close: 1, 4 + }; 5 + 6 + export const SignalKind = { 7 + Start: 0, 8 + Push: 1, 9 + End: 0, 10 + };
-14
src/web/wonkaJs.d.ts
··· 1 - /* operators */ 2 - export * from './wonka_operator_debounce'; 3 - export * from './wonka_operator_delay'; 4 - export * from './wonka_operator_interval'; 5 - export * from './wonka_operator_sample'; 6 - export * from './wonka_operator_throttle'; 7 - 8 - /* sinks */ 9 - export * from './wonka_sink_toPromise'; 10 - 11 - /* sources */ 12 - export * from './wonka_source_fromDomEvent'; 13 - export * from './wonka_source_fromListener'; 14 - export * from './wonka_source_fromPromise';
-14
src/web/wonkaJs.re
··· 1 - /* operators */ 2 - include Wonka_operator_debounce; 3 - include Wonka_operator_delay; 4 - include Wonka_operator_interval; 5 - include Wonka_operator_sample; 6 - include Wonka_operator_throttle; 7 - 8 - /* sinks */ 9 - include Wonka_sink_toPromise; 10 - 11 - /* sources */ 12 - include Wonka_source_fromDomEvent; 13 - include Wonka_source_fromListener; 14 - include Wonka_source_fromPromise;
-3
src/web/wonka_operator_debounce.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const debounce: <A>(f: (x: A) => number) => Operator<A, A>;
-47
src/web/wonka_operator_debounce.re
··· 1 - open Wonka_types; 2 - 3 - let debounce = f => curry(source => curry(sink => { 4 - let gotEndSignal = ref(false); 5 - let id: ref(option(Js.Global.timeoutId)) = ref(None); 6 - 7 - let clearTimeout = () => 8 - switch (id^) { 9 - | Some(timeoutId) => { 10 - id := None; 11 - Js.Global.clearTimeout(timeoutId); 12 - } 13 - | None => () 14 - }; 15 - 16 - source((.signal) => { 17 - switch (signal) { 18 - | Start(tb) => { 19 - sink(.Start((.signal) => { 20 - switch (signal) { 21 - | Close => { 22 - clearTimeout(); 23 - tb(.Close); 24 - } 25 - | _ => tb(.signal) 26 - } 27 - })); 28 - } 29 - | Push(x) => { 30 - clearTimeout(); 31 - id := Some(Js.Global.setTimeout(() => { 32 - id := None; 33 - sink(.signal); 34 - if (gotEndSignal^) sink(.End); 35 - }, f(.x))); 36 - } 37 - | End => { 38 - gotEndSignal := true; 39 - 40 - switch (id^) { 41 - | None => sink(.End) 42 - | _ => () 43 - }; 44 - } 45 - } 46 - }); 47 - }));
-3
src/web/wonka_operator_debounce.rei
··· 1 - open Wonka_types; 2 - 3 - let debounce: ((.'a) => int, sourceT('a), sinkT('a)) => unit;
-3
src/web/wonka_operator_delay.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const delay: <A>(duration: number) => Operator<A, A>;
-45
src/web/wonka_operator_delay.re
··· 1 - open Wonka_types; 2 - 3 - type delayStateT = { 4 - mutable talkback: (.talkbackT) => unit, 5 - mutable active: int, 6 - mutable gotEndSignal: bool 7 - }; 8 - 9 - let delay = wait => curry(source => curry(sink => { 10 - let state: delayStateT = { 11 - talkback: Wonka_helpers.talkbackPlaceholder, 12 - active: 0, 13 - gotEndSignal: false 14 - }; 15 - 16 - source((.signal) => { 17 - switch (signal) { 18 - | Start(tb) => state.talkback = tb 19 - | _ when !state.gotEndSignal => { 20 - state.active = state.active + 1; 21 - ignore(Js.Global.setTimeout(() => { 22 - if (state.gotEndSignal && state.active === 0) { 23 - sink(.End); 24 - } else { 25 - state.active = state.active - 1; 26 - }; 27 - 28 - sink(.signal); 29 - }, wait)); 30 - } 31 - | _ => () 32 - } 33 - }); 34 - 35 - sink(.Start((.signal) => { 36 - switch (signal) { 37 - | Close => { 38 - state.gotEndSignal = true; 39 - if (state.active === 0) sink(.End); 40 - } 41 - | _ when !state.gotEndSignal => state.talkback(.signal) 42 - | _ => () 43 - } 44 - })); 45 - }));
-3
src/web/wonka_operator_delay.rei
··· 1 - open Wonka_types; 2 - 3 - let delay: (int, sourceT('a), sinkT('a)) => unit;
-3
src/web/wonka_operator_interval.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const interval: (interval: number) => Source<number>;
-17
src/web/wonka_operator_interval.re
··· 1 - open Wonka_types; 2 - 3 - let interval = p => curry(sink => { 4 - let i = ref(0); 5 - let id = Js.Global.setInterval(() => { 6 - let num = i^; 7 - i := i^ + 1; 8 - sink(.Push(num)); 9 - }, p); 10 - 11 - sink(.Start((.signal) => { 12 - switch (signal) { 13 - | Close => Js.Global.clearInterval(id) 14 - | _ => () 15 - } 16 - })); 17 - });
-3
src/web/wonka_operator_interval.rei
··· 1 - open Wonka_types; 2 - 3 - let interval: (int, sinkT(int)) => unit;
-3
src/web/wonka_operator_sample.d.ts
··· 1 - import { Source, Operator } from '../wonka_types'; 2 - 3 - export const sample: <A>(signal: Source<any>) => Operator<A, A>;
-59
src/web/wonka_operator_sample.re
··· 1 - open Wonka_types; 2 - 3 - type sampleStateT('a) = { 4 - mutable ended: bool, 5 - mutable value: option('a), 6 - mutable sourceTalkback: (.talkbackT) => unit, 7 - mutable notifierTalkback: (.talkbackT) => unit 8 - }; 9 - 10 - let sample = notifier => curry(source => curry(sink => { 11 - let state = { 12 - ended: false, 13 - value: None, 14 - sourceTalkback: (._: talkbackT) => (), 15 - notifierTalkback: (._: talkbackT) => () 16 - }; 17 - 18 - source((.signal) => { 19 - switch (signal) { 20 - | Start(tb) => state.sourceTalkback = tb 21 - | End => { 22 - state.ended = true; 23 - state.notifierTalkback(.Close); 24 - sink(.End); 25 - } 26 - | Push(x) => state.value = Some(x) 27 - } 28 - }); 29 - 30 - notifier((.signal) => { 31 - switch (signal, state.value) { 32 - | (Start(tb), _) => state.notifierTalkback = tb 33 - | (End, _) => { 34 - state.ended = true; 35 - state.sourceTalkback(.Close); 36 - sink(.End); 37 - } 38 - | (Push(_), Some(x)) when !state.ended => { 39 - state.value = None; 40 - sink(.Push(x)); 41 - } 42 - | (Push(_), _) => () 43 - } 44 - }); 45 - 46 - sink(.Start((.signal) => { 47 - switch (signal) { 48 - | Pull => { 49 - state.sourceTalkback(.Pull); 50 - state.notifierTalkback(.Pull); 51 - } 52 - | Close => { 53 - state.ended = true; 54 - state.sourceTalkback(.Close); 55 - state.notifierTalkback(.Close); 56 - } 57 - } 58 - })); 59 - }));
-3
src/web/wonka_operator_sample.rei
··· 1 - open Wonka_types; 2 - 3 - let sample: (sourceT('a), sourceT('b), sinkT('b)) => unit;
-3
src/web/wonka_operator_throttle.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const throttle: <A>(f: (x: A) => number) => Operator<A, A>;
-41
src/web/wonka_operator_throttle.re
··· 1 - open Wonka_types; 2 - 3 - let throttle = f => curry(source => curry(sink => { 4 - let skip = ref(false); 5 - let id: ref(option(Js.Global.timeoutId)) = ref(None); 6 - let clearTimeout = () => 7 - switch (id^) { 8 - | Some(timeoutId) => Js.Global.clearTimeout(timeoutId); 9 - | None => () 10 - }; 11 - 12 - source((.signal) => { 13 - switch (signal) { 14 - | Start(tb) => { 15 - sink(.Start((.signal) => { 16 - switch (signal) { 17 - | Close => { 18 - clearTimeout(); 19 - tb(.Close); 20 - } 21 - | _ => tb(.signal) 22 - } 23 - })); 24 - } 25 - | End => { 26 - clearTimeout(); 27 - sink(.End); 28 - } 29 - | Push(x) when !skip^ => { 30 - skip := true; 31 - clearTimeout(); 32 - id := Some(Js.Global.setTimeout(() => { 33 - id := None; 34 - skip := false; 35 - }, f(.x))); 36 - sink(.signal); 37 - } 38 - | Push(_) => () 39 - } 40 - }); 41 - }));
-3
src/web/wonka_operator_throttle.rei
··· 1 - open Wonka_types; 2 - 3 - let throttle: ((.'a) => int, sourceT('a), sinkT('a)) => unit;
-3
src/web/wonka_sink_toPromise.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const toPromise: <A>(source: Source<A>) => Promise<A>;
-15
src/web/wonka_sink_toPromise.re
··· 1 - open Wonka_types; 2 - 3 - let toPromise = source => { 4 - open Wonka_operator_takeLast; 5 - 6 - Js.Promise.make((~resolve, ~reject as _) => { 7 - takeLast(1, source, (.signal) => { 8 - switch (signal) { 9 - | Start(x) => x(.Pull) 10 - | Push(x) => resolve(.x) 11 - | End => () 12 - } 13 - }); 14 - }); 15 - };
-3
src/web/wonka_sink_toPromise.rei
··· 1 - open Wonka_types; 2 - 3 - let toPromise: sourceT('a) => Js.Promise.t('a);
-3
src/web/wonka_source_fromDomEvent.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const fromDomEvent: <E>(HTMLElement, string) => Source<E>;
-30
src/web/wonka_source_fromDomEvent.re
··· 1 - open Wonka_types; 2 - open Wonka_source_fromListener; 3 - 4 - let fromDomEvent = (element, event) => curry(sink => { 5 - let addEventListener: ( 6 - Dom.element, 7 - string, 8 - (Dom.event) => unit 9 - ) => unit = [%raw {| 10 - function (element, event, handler) { 11 - element.addEventListener(event, handler); 12 - } 13 - |}]; 14 - 15 - let removeEventListener: ( 16 - Dom.element, 17 - string, 18 - (Dom.event) => unit 19 - ) => unit = [%raw {| 20 - function (element, event, handler) { 21 - element.removeEventListener(event, handler); 22 - } 23 - |}]; 24 - 25 - fromListener( 26 - handler => addEventListener(element, event, handler), 27 - handler => removeEventListener(element, event, handler), 28 - sink 29 - ) 30 - });
-3
src/web/wonka_source_fromDomEvent.rei
··· 1 - open Wonka_types; 2 - 3 - let fromDomEvent: (Dom.element, string, sinkT(Dom.event)) => unit;
-6
src/web/wonka_source_fromListener.d.ts
··· 1 - import { Source } from '../wonka_types'; 2 - 3 - export const fromListener: <E>( 4 - addListener: (cb: (event: E) => void) => void, 5 - removeListener: (cb: (event: E) => void) => void 6 - ) => Source<E>;
-14
src/web/wonka_source_fromListener.re
··· 1 - open Wonka_types; 2 - 3 - let fromListener = (addListener, removeListener) => curry(sink => { 4 - let handler = event => sink(.Push(event)); 5 - 6 - sink(.Start((.signal) => { 7 - switch (signal) { 8 - | Close => removeListener(handler) 9 - | _ => () 10 - } 11 - })); 12 - 13 - addListener(handler); 14 - });
-8
src/web/wonka_source_fromListener.rei
··· 1 - open Wonka_types; 2 - 3 - let fromListener: 4 - ( 5 - ('event => unit) => unit, 6 - ('event => unit) => unit, 7 - sinkT('event) 8 - ) => unit;
-3
src/web/wonka_source_fromPromise.d.ts
··· 1 - import { Operator } from '../wonka_types'; 2 - 3 - export const fromPromise: <A>(promise: Promise<A>) => Source<A>;
-21
src/web/wonka_source_fromPromise.re
··· 1 - open Wonka_types; 2 - 3 - let fromPromise = promise => curry(sink => { 4 - let ended = ref(false); 5 - 6 - ignore(Js.Promise.then_(value => { 7 - if (!ended^) { 8 - sink(.Push(value)); 9 - sink(.End); 10 - }; 11 - 12 - Js.Promise.resolve(()) 13 - }, promise)); 14 - 15 - sink(.Start((.signal) => { 16 - switch (signal) { 17 - | Close => ended := true 18 - | _ => () 19 - } 20 - })); 21 - });
-3
src/web/wonka_source_fromPromise.rei
··· 1 - open Wonka_types; 2 - 3 - let fromPromise: (Js.Promise.t('a), sinkT('a)) => unit;
-32
src/wonka.d.ts
··· 1 - /* sources */ 2 - export * from './sources/wonka_source_fromArray'; 3 - export * from './sources/wonka_source_fromList'; 4 - export * from './sources/wonka_source_fromValue'; 5 - export * from './sources/wonka_source_make'; 6 - export * from './sources/wonka_source_makeSubject'; 7 - export * from './sources/wonka_source_primitives'; 8 - 9 - /* operators */ 10 - export * from './operators/wonka_operator_combine'; 11 - export * from './operators/wonka_operator_concatMap'; 12 - export * from './operators/wonka_operator_filter'; 13 - export * from './operators/wonka_operator_map'; 14 - export * from './operators/wonka_operator_mergeMap'; 15 - export * from './operators/wonka_operator_scan'; 16 - export * from './operators/wonka_operator_share'; 17 - export * from './operators/wonka_operator_skip'; 18 - export * from './operators/wonka_operator_skipUntil'; 19 - export * from './operators/wonka_operator_skipWhile'; 20 - export * from './operators/wonka_operator_switchMap'; 21 - export * from './operators/wonka_operator_take'; 22 - export * from './operators/wonka_operator_takeLast'; 23 - export * from './operators/wonka_operator_takeUntil'; 24 - export * from './operators/wonka_operator_takeWhile'; 25 - export * from './operators/wonka_operator_tap'; 26 - export * from './operators/wonka_operator_tapAll'; 27 - 28 - /* sinks */ 29 - export * from './sinks/wonka_sink_publish'; 30 - export * from './sinks/wonka_sink_subscribe'; 31 - 32 - export * from './web/wonkaJs';
-40
src/wonka.ml
··· 1 - module Types = Wonka_types 2 - 3 - (* sources *) 4 - include Wonka_source_fromArray 5 - include Wonka_source_fromList 6 - include Wonka_source_fromValue 7 - include Wonka_source_make 8 - include Wonka_source_makeSubject 9 - include Wonka_source_primitives 10 - 11 - (* operators *) 12 - include Wonka_operator_combine 13 - include Wonka_operator_concatMap 14 - include Wonka_operator_filter 15 - include Wonka_operator_map 16 - include Wonka_operator_mergeMap 17 - include Wonka_operator_scan 18 - include Wonka_operator_share 19 - include Wonka_operator_skip 20 - include Wonka_operator_skipUntil 21 - include Wonka_operator_skipWhile 22 - include Wonka_operator_switchMap 23 - include Wonka_operator_take 24 - include Wonka_operator_takeLast 25 - include Wonka_operator_takeUntil 26 - include Wonka_operator_takeWhile 27 - include Wonka_operator_tap 28 - include Wonka_operator_tapAll 29 - 30 - (* sinks *) 31 - include Wonka_sink_publish 32 - include Wonka_sink_subscribe 33 - 34 - #if BS_NATIVE then 35 - #if BSB_BACKEND = "js" then 36 - include WonkaJs 37 - #end 38 - #else 39 - include WonkaJs 40 - #end
-62
src/wonka_helpers.re
··· 1 - open Wonka_types; 2 - 3 - let talkbackPlaceholder = (._: talkbackT) => (); 4 - 5 - let captureTalkback = ( 6 - source: sourceT('a), 7 - sinkWithTalkback: (.signalT('a), (.talkbackT) => unit) => unit 8 - ) => { 9 - let talkback = ref(talkbackPlaceholder); 10 - 11 - source((.signal) => { 12 - switch (signal) { 13 - | Start(x) => talkback := x 14 - | _ => () 15 - }; 16 - 17 - sinkWithTalkback(.signal, talkback^) 18 - }); 19 - }; 20 - 21 - type trampolineT = { 22 - mutable exhausted: bool, 23 - mutable inLoop: bool, 24 - mutable gotSignal: bool 25 - }; 26 - 27 - let makeTrampoline = (sink: sinkT('a), f: (.unit) => option('a)) => { 28 - let state: trampolineT = { 29 - exhausted: false, 30 - inLoop: false, 31 - gotSignal: false 32 - }; 33 - 34 - let loop = () => { 35 - let rec explode = () => 36 - switch (f(.)) { 37 - | Some(x) => { 38 - state.gotSignal = false; 39 - sink(.Push(x)); 40 - if (state.gotSignal) explode(); 41 - } 42 - | None => { 43 - state.exhausted = true; 44 - sink(.End) 45 - } 46 - }; 47 - 48 - state.inLoop = true; 49 - explode(); 50 - state.inLoop = false; 51 - }; 52 - 53 - sink(.Start((.signal) => { 54 - switch (signal, state.exhausted) { 55 - | (Pull, false) => { 56 - state.gotSignal = true; 57 - if (!state.inLoop) loop(); 58 - } 59 - | _ => () 60 - } 61 - })); 62 - };
-27
src/wonka_types.d.ts
··· 1 - // Reason Helper Types: 2 - 3 - interface ListNode<T> { 4 - [0]: T, 5 - [1]: 0 | List<T> 6 - } 7 - 8 - export type List<T> = ListNode<T> | 0; 9 - 10 - // Wonka Types: 11 - 12 - export type Talkback = 0 | 1; 13 - 14 - export type Signal<A> = 15 - | { tag: 0, [0]: (talkback: Talkback) => void } 16 - | { tag: 1, [0]: A } 17 - | 0; 18 - 19 - export interface Sink<A> { (signal: Signal<A>): void; } 20 - export interface Source<A> { (sink: Sink<A>): void; } 21 - export interface Operator<A, B> { (source: Source<A>): Source<B>; } 22 - 23 - export type Subscription = [() => void]; 24 - 25 - export type Observer<A> = [(value: A) => void, () => void]; 26 - 27 - export type Subject<A> = [Source<A>, (value: A) => void, () => void];
-62
src/wonka_types.re
··· 1 - /* A sink has the signature: `signalT('a) => unit` 2 - * A source thus has the signature: `sink => unit`, or `(signalT('a) => unit) => unit` 3 - * 4 - * Effectively a sink is a callback receiving signals as its first argument. 5 - * - Start(talkback) will be carrying a talkback using which the sink can attempt 6 - * to pull values (Pull) or request the source to end its stream (End) 7 - * - Push(payload) carries a value that the source sends to the sink. 8 - * This can happen at any time, since a source can be both pullable or 9 - * merely listenable. 10 - * - End signifies the end of the source stream, be it because of a talkback (End) 11 - * or because the source is exhausted. 12 - * 13 - * In detail, a talkback is simply a callback that receives a talkback signal as 14 - * its first argument. It's thus typically anonymously created by the source. 15 - * 16 - * A source is a factory that accepts a sink. Calling a source with a sink will 17 - * instantiate and initiate the source's stream, after which the source sends the sink 18 - * a talkback (Start(talkback)). This is called the "handshake". 19 - * 20 - * Typically an operator factory won't call the source with a sink it receives 21 - * immediately—because this would cause the operator to simply be a noop—but instead 22 - * it will create an intermediate sink with the same signature to perform its own 23 - * logic. 24 - * 25 - * At that point the operator can for instance intercept the talkback for its own 26 - * purposes, or call the actual sink as it sees fit. 27 - */ 28 - 29 - type talkbackT = 30 - | Pull 31 - | Close; 32 - 33 - type signalT('a) = 34 - | Start((.talkbackT) => unit) 35 - | Push('a) 36 - | End; 37 - 38 - type sinkT('a) = (.signalT('a)) => unit; 39 - type sourceT('a) = sinkT('a) => unit; 40 - 41 - type teardownT = (.unit) => unit; 42 - 43 - type subscriptionT = { 44 - unsubscribe: unit => unit 45 - }; 46 - 47 - type observerT('a) = { 48 - next: 'a => unit, 49 - complete: unit => unit 50 - }; 51 - 52 - type subjectT('a) = { 53 - source: sourceT('a), 54 - next: 'a => unit, 55 - complete: unit => unit 56 - }; 57 - 58 - /* Sinks and sources need to explicitly be their own callbacks; 59 - * This means that currying needs to be forced for Bucklescript 60 - * not to optimise them away 61 - */ 62 - external curry: 'a => 'a = "%identity";
-38
tasks.json
··· 1 - { 2 - "version": "0.1.0", 3 - "command": "npm", 4 - "options": { 5 - "cwd": "${workspaceRoot}" 6 - }, 7 - "isShellCommand": true, 8 - "args": [ 9 - "run", 10 - "watch" 11 - ], 12 - "showOutput": "always", 13 - "isBackground": true, 14 - "problemMatcher": { 15 - "fileLocation": "absolute", 16 - "owner": "ocaml", 17 - "watching": { 18 - "activeOnStart": false, 19 - "beginsPattern": ">>>> Start compiling", 20 - "endsPattern": ">>>> Finish compiling" 21 - }, 22 - "pattern": [ 23 - { 24 - "regexp": "^File \"(.*)\", line (\\d+)(?:, characters (\\d+)-(\\d+))?:$", 25 - "file": 1, 26 - "line": 2, 27 - "column": 3, 28 - "endColumn": 4 29 - }, 30 - { 31 - "regexp": "^(?:(?:Parse\\s+)?(Warning|[Ee]rror)(?:\\s+\\d+)?:)?\\s+(.*)$", 32 - "severity": 1, 33 - "message": 2, 34 - "loop": true 35 - } 36 - ] 37 - } 38 - }
+24
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "forceConsistentCasingInFileNames": true, 4 + "importsNotUsedAsValues": "remove", 5 + "noEmit": true, 6 + "esModuleInterop": true, 7 + "noUnusedLocals": true, 8 + "rootDir": "./src", 9 + "baseUrl": ".", 10 + "outDir": "dist/cjs", 11 + "lib": ["dom", "esnext"], 12 + "jsx": "react", 13 + "declaration": false, 14 + "module": "es2015", 15 + "moduleResolution": "node", 16 + "target": "esnext", 17 + "strict": true, 18 + "noImplicitAny": false, 19 + "noUnusedParameters": true, 20 + "skipLibCheck": true, 21 + "isolatedModules": true 22 + }, 23 + "include": ["src"] 24 + }
-6452
yarn.lock
··· 1 - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 - # yarn lockfile v1 3 - 4 - 5 - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": 6 - version "7.0.0" 7 - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 8 - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== 9 - dependencies: 10 - "@babel/highlight" "^7.0.0" 11 - 12 - "@babel/core@^7.1.6": 13 - version "7.2.2" 14 - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" 15 - integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw== 16 - dependencies: 17 - "@babel/code-frame" "^7.0.0" 18 - "@babel/generator" "^7.2.2" 19 - "@babel/helpers" "^7.2.0" 20 - "@babel/parser" "^7.2.2" 21 - "@babel/template" "^7.2.2" 22 - "@babel/traverse" "^7.2.2" 23 - "@babel/types" "^7.2.2" 24 - convert-source-map "^1.1.0" 25 - debug "^4.1.0" 26 - json5 "^2.1.0" 27 - lodash "^4.17.10" 28 - resolve "^1.3.2" 29 - semver "^5.4.1" 30 - source-map "^0.5.0" 31 - 32 - "@babel/generator@^7.2.2": 33 - version "7.2.2" 34 - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" 35 - integrity sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg== 36 - dependencies: 37 - "@babel/types" "^7.2.2" 38 - jsesc "^2.5.1" 39 - lodash "^4.17.10" 40 - source-map "^0.5.0" 41 - trim-right "^1.0.1" 42 - 43 - "@babel/helper-function-name@^7.1.0": 44 - version "7.1.0" 45 - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" 46 - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== 47 - dependencies: 48 - "@babel/helper-get-function-arity" "^7.0.0" 49 - "@babel/template" "^7.1.0" 50 - "@babel/types" "^7.0.0" 51 - 52 - "@babel/helper-get-function-arity@^7.0.0": 53 - version "7.0.0" 54 - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" 55 - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== 56 - dependencies: 57 - "@babel/types" "^7.0.0" 58 - 59 - "@babel/helper-member-expression-to-functions@^7.0.0": 60 - version "7.0.0" 61 - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" 62 - integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== 63 - dependencies: 64 - "@babel/types" "^7.0.0" 65 - 66 - "@babel/helper-module-imports@^7.0.0": 67 - version "7.0.0" 68 - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" 69 - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== 70 - dependencies: 71 - "@babel/types" "^7.0.0" 72 - 73 - "@babel/helper-optimise-call-expression@^7.0.0": 74 - version "7.0.0" 75 - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" 76 - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== 77 - dependencies: 78 - "@babel/types" "^7.0.0" 79 - 80 - "@babel/helper-plugin-utils@^7.0.0": 81 - version "7.0.0" 82 - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" 83 - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== 84 - 85 - "@babel/helper-replace-supers@^7.1.0": 86 - version "7.2.3" 87 - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" 88 - integrity sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA== 89 - dependencies: 90 - "@babel/helper-member-expression-to-functions" "^7.0.0" 91 - "@babel/helper-optimise-call-expression" "^7.0.0" 92 - "@babel/traverse" "^7.2.3" 93 - "@babel/types" "^7.0.0" 94 - 95 - "@babel/helper-split-export-declaration@^7.0.0": 96 - version "7.0.0" 97 - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" 98 - integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== 99 - dependencies: 100 - "@babel/types" "^7.0.0" 101 - 102 - "@babel/helpers@^7.2.0": 103 - version "7.2.0" 104 - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21" 105 - integrity sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A== 106 - dependencies: 107 - "@babel/template" "^7.1.2" 108 - "@babel/traverse" "^7.1.5" 109 - "@babel/types" "^7.2.0" 110 - 111 - "@babel/highlight@^7.0.0": 112 - version "7.0.0" 113 - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 114 - integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== 115 - dependencies: 116 - chalk "^2.0.0" 117 - esutils "^2.0.2" 118 - js-tokens "^4.0.0" 119 - 120 - "@babel/parser@^7.2.2", "@babel/parser@^7.2.3": 121 - version "7.2.3" 122 - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" 123 - integrity sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA== 124 - 125 - "@babel/plugin-proposal-class-properties@7.1.0": 126 - version "7.1.0" 127 - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" 128 - integrity sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw== 129 - dependencies: 130 - "@babel/helper-function-name" "^7.1.0" 131 - "@babel/helper-member-expression-to-functions" "^7.0.0" 132 - "@babel/helper-optimise-call-expression" "^7.0.0" 133 - "@babel/helper-plugin-utils" "^7.0.0" 134 - "@babel/helper-replace-supers" "^7.1.0" 135 - "@babel/plugin-syntax-class-properties" "^7.0.0" 136 - 137 - "@babel/plugin-syntax-class-properties@^7.0.0": 138 - version "7.2.0" 139 - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz#23b3b7b9bcdabd73672a9149f728cd3be6214812" 140 - integrity sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw== 141 - dependencies: 142 - "@babel/helper-plugin-utils" "^7.0.0" 143 - 144 - "@babel/plugin-syntax-jsx@^7.0.0": 145 - version "7.2.0" 146 - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" 147 - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== 148 - dependencies: 149 - "@babel/helper-plugin-utils" "^7.0.0" 150 - 151 - "@babel/polyfill@^7.0.0": 152 - version "7.2.5" 153 - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.2.5.tgz#6c54b964f71ad27edddc567d065e57e87ed7fa7d" 154 - integrity sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug== 155 - dependencies: 156 - core-js "^2.5.7" 157 - regenerator-runtime "^0.12.0" 158 - 159 - "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": 160 - version "7.2.2" 161 - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" 162 - integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== 163 - dependencies: 164 - "@babel/code-frame" "^7.0.0" 165 - "@babel/parser" "^7.2.2" 166 - "@babel/types" "^7.2.2" 167 - 168 - "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": 169 - version "7.2.3" 170 - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" 171 - integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw== 172 - dependencies: 173 - "@babel/code-frame" "^7.0.0" 174 - "@babel/generator" "^7.2.2" 175 - "@babel/helper-function-name" "^7.1.0" 176 - "@babel/helper-split-export-declaration" "^7.0.0" 177 - "@babel/parser" "^7.2.3" 178 - "@babel/types" "^7.2.2" 179 - debug "^4.1.0" 180 - globals "^11.1.0" 181 - lodash "^4.17.10" 182 - 183 - "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2": 184 - version "7.2.2" 185 - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" 186 - integrity sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg== 187 - dependencies: 188 - esutils "^2.0.2" 189 - lodash "^4.17.10" 190 - to-fast-properties "^2.0.0" 191 - 192 - "@glennsl/bs-jest@^0.4.6": 193 - version "0.4.6" 194 - resolved "https://registry.yarnpkg.com/@glennsl/bs-jest/-/bs-jest-0.4.6.tgz#2a249a46c10caaa9756b5e30dcf60a2c1dde57ea" 195 - integrity sha512-TJLx1ti1Cp7e53bCndV7DpMAcZL9+pqA4L9YD4kCrDQuYdA8boRnPh1l862w8AJHWTxEki/xtDu0FVPCq2HVrA== 196 - dependencies: 197 - jest "^23.5.0" 198 - 199 - "@types/estree@0.0.39": 200 - version "0.0.39" 201 - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 202 - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 203 - 204 - "@types/node@*": 205 - version "10.12.18" 206 - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" 207 - integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== 208 - 209 - "@types/q@^1.5.1": 210 - version "1.5.1" 211 - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18" 212 - integrity sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA== 213 - 214 - abab@^2.0.0: 215 - version "2.0.0" 216 - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" 217 - integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== 218 - 219 - abbrev@1: 220 - version "1.1.1" 221 - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 222 - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 223 - 224 - acorn-globals@^4.1.0: 225 - version "4.3.0" 226 - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" 227 - integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw== 228 - dependencies: 229 - acorn "^6.0.1" 230 - acorn-walk "^6.0.1" 231 - 232 - acorn-walk@^6.0.1: 233 - version "6.1.1" 234 - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" 235 - integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== 236 - 237 - acorn@^5.5.3: 238 - version "5.7.3" 239 - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" 240 - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== 241 - 242 - acorn@^6.0.1: 243 - version "6.0.5" 244 - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.5.tgz#81730c0815f3f3b34d8efa95cb7430965f4d887a" 245 - integrity sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg== 246 - 247 - ajv@^6.5.5: 248 - version "6.6.2" 249 - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" 250 - integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g== 251 - dependencies: 252 - fast-deep-equal "^2.0.1" 253 - fast-json-stable-stringify "^2.0.0" 254 - json-schema-traverse "^0.4.1" 255 - uri-js "^4.2.2" 256 - 257 - alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: 258 - version "1.0.2" 259 - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" 260 - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= 261 - 262 - ansi-escapes@^3.0.0: 263 - version "3.1.0" 264 - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" 265 - integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== 266 - 267 - ansi-regex@^2.0.0: 268 - version "2.1.1" 269 - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 270 - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 271 - 272 - ansi-regex@^3.0.0: 273 - version "3.0.0" 274 - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 275 - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 276 - 277 - ansi-styles@^2.2.1: 278 - version "2.2.1" 279 - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 280 - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 281 - 282 - ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: 283 - version "3.2.1" 284 - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 285 - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 286 - dependencies: 287 - color-convert "^1.9.0" 288 - 289 - anymatch@^2.0.0: 290 - version "2.0.0" 291 - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 292 - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== 293 - dependencies: 294 - micromatch "^3.1.4" 295 - normalize-path "^2.1.1" 296 - 297 - append-transform@^0.4.0: 298 - version "0.4.0" 299 - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" 300 - integrity sha1-126/jKlNJ24keja61EpLdKthGZE= 301 - dependencies: 302 - default-require-extensions "^1.0.0" 303 - 304 - aproba@^1.0.3: 305 - version "1.2.0" 306 - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 307 - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 308 - 309 - are-we-there-yet@~1.1.2: 310 - version "1.1.5" 311 - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 312 - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 313 - dependencies: 314 - delegates "^1.0.0" 315 - readable-stream "^2.0.6" 316 - 317 - argparse@^1.0.7: 318 - version "1.0.10" 319 - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 320 - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 321 - dependencies: 322 - sprintf-js "~1.0.2" 323 - 324 - arr-diff@^2.0.0: 325 - version "2.0.0" 326 - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 327 - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= 328 - dependencies: 329 - arr-flatten "^1.0.1" 330 - 331 - arr-diff@^4.0.0: 332 - version "4.0.0" 333 - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 334 - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= 335 - 336 - arr-flatten@^1.0.1, arr-flatten@^1.1.0: 337 - version "1.1.0" 338 - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 339 - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== 340 - 341 - arr-union@^3.1.0: 342 - version "3.1.0" 343 - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 344 - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= 345 - 346 - array-equal@^1.0.0: 347 - version "1.0.0" 348 - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" 349 - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= 350 - 351 - array-filter@~0.0.0: 352 - version "0.0.1" 353 - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" 354 - integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= 355 - 356 - array-map@~0.0.0: 357 - version "0.0.0" 358 - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" 359 - integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= 360 - 361 - array-reduce@~0.0.0: 362 - version "0.0.0" 363 - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" 364 - integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= 365 - 366 - array-unique@^0.2.1: 367 - version "0.2.1" 368 - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 369 - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= 370 - 371 - array-unique@^0.3.2: 372 - version "0.3.2" 373 - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 374 - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= 375 - 376 - arrify@^1.0.1: 377 - version "1.0.1" 378 - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 379 - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 380 - 381 - asn1@~0.2.3: 382 - version "0.2.4" 383 - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 384 - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 385 - dependencies: 386 - safer-buffer "~2.1.0" 387 - 388 - assert-plus@1.0.0, assert-plus@^1.0.0: 389 - version "1.0.0" 390 - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 391 - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 392 - 393 - assign-symbols@^1.0.0: 394 - version "1.0.0" 395 - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 396 - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 397 - 398 - astral-regex@^1.0.0: 399 - version "1.0.0" 400 - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 401 - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 402 - 403 - async-limiter@~1.0.0: 404 - version "1.0.0" 405 - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 406 - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== 407 - 408 - async@^2.1.4, async@^2.5.0: 409 - version "2.6.1" 410 - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" 411 - integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== 412 - dependencies: 413 - lodash "^4.17.10" 414 - 415 - asynckit@^0.4.0: 416 - version "0.4.0" 417 - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 418 - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 419 - 420 - asyncro@^3.0.0: 421 - version "3.0.0" 422 - resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e" 423 - integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg== 424 - 425 - atob@^2.1.1: 426 - version "2.1.2" 427 - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 428 - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 429 - 430 - autoprefixer@^6.3.1: 431 - version "6.7.7" 432 - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" 433 - integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= 434 - dependencies: 435 - browserslist "^1.7.6" 436 - caniuse-db "^1.0.30000634" 437 - normalize-range "^0.1.2" 438 - num2fraction "^1.2.2" 439 - postcss "^5.2.16" 440 - postcss-value-parser "^3.2.3" 441 - 442 - autoprefixer@^9.0.0: 443 - version "9.4.5" 444 - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.5.tgz#a13ccb001e4bc8837f71c3354005b42f02cc03d7" 445 - integrity sha512-M602C0ZxzFpJKqD4V6eq2j+K5CkzlhekCrcQupJmAOrPEZjWJyj/wSeo6qRSNoN6M3/9mtLPQqTTrABfReytQg== 446 - dependencies: 447 - browserslist "^4.4.0" 448 - caniuse-lite "^1.0.30000928" 449 - normalize-range "^0.1.2" 450 - num2fraction "^1.2.2" 451 - postcss "^7.0.11" 452 - postcss-value-parser "^3.3.1" 453 - 454 - aws-sign2@~0.7.0: 455 - version "0.7.0" 456 - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 457 - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 458 - 459 - aws4@^1.8.0: 460 - version "1.8.0" 461 - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 462 - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== 463 - 464 - axios@0.15.3: 465 - version "0.15.3" 466 - resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" 467 - integrity sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM= 468 - dependencies: 469 - follow-redirects "1.0.0" 470 - 471 - axios@^0.17.0: 472 - version "0.17.1" 473 - resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d" 474 - integrity sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0= 475 - dependencies: 476 - follow-redirects "^1.2.5" 477 - is-buffer "^1.1.5" 478 - 479 - babel-code-frame@^6.26.0: 480 - version "6.26.0" 481 - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 482 - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= 483 - dependencies: 484 - chalk "^1.1.3" 485 - esutils "^2.0.2" 486 - js-tokens "^3.0.2" 487 - 488 - babel-core@^6.0.0, babel-core@^6.26.0: 489 - version "6.26.3" 490 - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" 491 - integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== 492 - dependencies: 493 - babel-code-frame "^6.26.0" 494 - babel-generator "^6.26.0" 495 - babel-helpers "^6.24.1" 496 - babel-messages "^6.23.0" 497 - babel-register "^6.26.0" 498 - babel-runtime "^6.26.0" 499 - babel-template "^6.26.0" 500 - babel-traverse "^6.26.0" 501 - babel-types "^6.26.0" 502 - babylon "^6.18.0" 503 - convert-source-map "^1.5.1" 504 - debug "^2.6.9" 505 - json5 "^0.5.1" 506 - lodash "^4.17.4" 507 - minimatch "^3.0.4" 508 - path-is-absolute "^1.0.1" 509 - private "^0.1.8" 510 - slash "^1.0.0" 511 - source-map "^0.5.7" 512 - 513 - babel-generator@^6.18.0, babel-generator@^6.26.0: 514 - version "6.26.1" 515 - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" 516 - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== 517 - dependencies: 518 - babel-messages "^6.23.0" 519 - babel-runtime "^6.26.0" 520 - babel-types "^6.26.0" 521 - detect-indent "^4.0.0" 522 - jsesc "^1.3.0" 523 - lodash "^4.17.4" 524 - source-map "^0.5.7" 525 - trim-right "^1.0.1" 526 - 527 - babel-helpers@^6.24.1: 528 - version "6.24.1" 529 - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 530 - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= 531 - dependencies: 532 - babel-runtime "^6.22.0" 533 - babel-template "^6.24.1" 534 - 535 - babel-jest@^23.6.0: 536 - version "23.6.0" 537 - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" 538 - integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== 539 - dependencies: 540 - babel-plugin-istanbul "^4.1.6" 541 - babel-preset-jest "^23.2.0" 542 - 543 - babel-messages@^6.23.0: 544 - version "6.23.0" 545 - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 546 - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= 547 - dependencies: 548 - babel-runtime "^6.22.0" 549 - 550 - babel-plugin-istanbul@^4.1.6: 551 - version "4.1.6" 552 - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" 553 - integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== 554 - dependencies: 555 - babel-plugin-syntax-object-rest-spread "^6.13.0" 556 - find-up "^2.1.0" 557 - istanbul-lib-instrument "^1.10.1" 558 - test-exclude "^4.2.1" 559 - 560 - babel-plugin-jest-hoist@^23.2.0: 561 - version "23.2.0" 562 - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" 563 - integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc= 564 - 565 - babel-plugin-syntax-object-rest-spread@^6.13.0: 566 - version "6.13.0" 567 - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" 568 - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= 569 - 570 - babel-plugin-transform-async-to-promises@^0.8.3: 571 - version "0.8.4" 572 - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.4.tgz#f0ffd0db2b1fa1bee1b723fe651dc412d75aabb7" 573 - integrity sha512-2lS63lG9z0pMpnd6D+dOctOgZ0QQlYZrPSMzx9IeJpSZo3MuFD09LfG12PRSIkJr7v2UkcnYKfBJRx39X4Di4w== 574 - 575 - babel-preset-jest@^23.2.0: 576 - version "23.2.0" 577 - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" 578 - integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY= 579 - dependencies: 580 - babel-plugin-jest-hoist "^23.2.0" 581 - babel-plugin-syntax-object-rest-spread "^6.13.0" 582 - 583 - babel-register@^6.26.0: 584 - version "6.26.0" 585 - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" 586 - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= 587 - dependencies: 588 - babel-core "^6.26.0" 589 - babel-runtime "^6.26.0" 590 - core-js "^2.5.0" 591 - home-or-tmp "^2.0.0" 592 - lodash "^4.17.4" 593 - mkdirp "^0.5.1" 594 - source-map-support "^0.4.15" 595 - 596 - babel-runtime@^6.22.0, babel-runtime@^6.26.0: 597 - version "6.26.0" 598 - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 599 - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= 600 - dependencies: 601 - core-js "^2.4.0" 602 - regenerator-runtime "^0.11.0" 603 - 604 - babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: 605 - version "6.26.0" 606 - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 607 - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= 608 - dependencies: 609 - babel-runtime "^6.26.0" 610 - babel-traverse "^6.26.0" 611 - babel-types "^6.26.0" 612 - babylon "^6.18.0" 613 - lodash "^4.17.4" 614 - 615 - babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: 616 - version "6.26.0" 617 - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 618 - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= 619 - dependencies: 620 - babel-code-frame "^6.26.0" 621 - babel-messages "^6.23.0" 622 - babel-runtime "^6.26.0" 623 - babel-types "^6.26.0" 624 - babylon "^6.18.0" 625 - debug "^2.6.8" 626 - globals "^9.18.0" 627 - invariant "^2.2.2" 628 - lodash "^4.17.4" 629 - 630 - babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: 631 - version "6.26.0" 632 - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 633 - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= 634 - dependencies: 635 - babel-runtime "^6.26.0" 636 - esutils "^2.0.2" 637 - lodash "^4.17.4" 638 - to-fast-properties "^1.0.3" 639 - 640 - babylon@^6.15.0, babylon@^6.18.0: 641 - version "6.18.0" 642 - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 643 - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== 644 - 645 - balanced-match@^0.4.2: 646 - version "0.4.2" 647 - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 648 - integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= 649 - 650 - balanced-match@^1.0.0: 651 - version "1.0.0" 652 - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 653 - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 654 - 655 - base@^0.11.1: 656 - version "0.11.2" 657 - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 658 - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== 659 - dependencies: 660 - cache-base "^1.0.1" 661 - class-utils "^0.3.5" 662 - component-emitter "^1.2.1" 663 - define-property "^1.0.0" 664 - isobject "^3.0.1" 665 - mixin-deep "^1.2.0" 666 - pascalcase "^0.1.1" 667 - 668 - bcrypt-pbkdf@^1.0.0: 669 - version "1.0.2" 670 - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 671 - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 672 - dependencies: 673 - tweetnacl "^0.14.3" 674 - 675 - big.js@^3.1.3: 676 - version "3.2.0" 677 - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" 678 - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== 679 - 680 - bl@^1.0.0: 681 - version "1.2.2" 682 - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" 683 - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== 684 - dependencies: 685 - readable-stream "^2.3.5" 686 - safe-buffer "^5.1.1" 687 - 688 - block-stream@*: 689 - version "0.0.9" 690 - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 691 - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= 692 - dependencies: 693 - inherits "~2.0.0" 694 - 695 - boolbase@^1.0.0, boolbase@~1.0.0: 696 - version "1.0.0" 697 - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 698 - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= 699 - 700 - brace-expansion@^1.1.7: 701 - version "1.1.11" 702 - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 703 - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 704 - dependencies: 705 - balanced-match "^1.0.0" 706 - concat-map "0.0.1" 707 - 708 - braces@^1.8.2: 709 - version "1.8.5" 710 - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 711 - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= 712 - dependencies: 713 - expand-range "^1.8.1" 714 - preserve "^0.2.0" 715 - repeat-element "^1.1.2" 716 - 717 - braces@^2.3.1: 718 - version "2.3.2" 719 - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 720 - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== 721 - dependencies: 722 - arr-flatten "^1.1.0" 723 - array-unique "^0.3.2" 724 - extend-shallow "^2.0.1" 725 - fill-range "^4.0.0" 726 - isobject "^3.0.1" 727 - repeat-element "^1.1.2" 728 - snapdragon "^0.8.1" 729 - snapdragon-node "^2.0.1" 730 - split-string "^3.0.2" 731 - to-regex "^3.0.1" 732 - 733 - brotli-size@0.0.1: 734 - version "0.0.1" 735 - resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-0.0.1.tgz#8c1aeea01cd22f359b048951185bd539ff0c829f" 736 - integrity sha1-jBruoBzSLzWbBIlRGFvVOf8Mgp8= 737 - dependencies: 738 - duplexer "^0.1.1" 739 - iltorb "^1.0.9" 740 - 741 - brotli-size@^0.0.3: 742 - version "0.0.3" 743 - resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-0.0.3.tgz#1d3855b38f182591a6f69da1516131676e5f62f2" 744 - integrity sha512-bBIdd8uUGxKGldAVykxOqPegl+HlIm4FpXJamwWw5x77WCE8jO7AhXFE1YXOhOB28gS+2pTQete0FqRE6U5hQQ== 745 - dependencies: 746 - duplexer "^0.1.1" 747 - iltorb "^2.0.5" 748 - 749 - browser-process-hrtime@^0.1.2: 750 - version "0.1.3" 751 - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" 752 - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== 753 - 754 - browser-resolve@^1.11.3: 755 - version "1.11.3" 756 - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 757 - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== 758 - dependencies: 759 - resolve "1.1.7" 760 - 761 - browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: 762 - version "1.7.7" 763 - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" 764 - integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= 765 - dependencies: 766 - caniuse-db "^1.0.30000639" 767 - electron-to-chromium "^1.2.7" 768 - 769 - browserslist@^4.0.0, browserslist@^4.4.0: 770 - version "4.4.0" 771 - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.0.tgz#7050d1412cbfc5274aba609ed5e50359ca1a5fdf" 772 - integrity sha512-tQkHS8VVxWbrjnNDXgt7/+SuPJ7qDvD0Y2e6bLtoQluR2SPvlmPUcfcU75L1KAalhqULlIFJlJ6BDfnYyJxJsw== 773 - dependencies: 774 - caniuse-lite "^1.0.30000928" 775 - electron-to-chromium "^1.3.100" 776 - node-releases "^1.1.3" 777 - 778 - bs-platform@^4.0.17: 779 - version "4.0.18" 780 - resolved "https://registry.yarnpkg.com/bs-platform/-/bs-platform-4.0.18.tgz#d17b8693ba1f714d9b27e0ddb365f2069ba4b8a0" 781 - integrity sha512-BwzW0iYHvREqUZIgQxJmdJrxexppLvJxYQ4LLexbhCp7uZU5DIZ5ub4ZHpkCkc8fn8bsXWc+Rrejb3csi+BoAQ== 782 - 783 - bs-rebel@^0.2.3: 784 - version "0.2.3" 785 - resolved "https://registry.yarnpkg.com/bs-rebel/-/bs-rebel-0.2.3.tgz#11e1a95a4a3f16311575e8853a004cec6b9d19de" 786 - integrity sha512-NTDUSkJ+KkIqmKHUE48luD2YaYh49XaU1zVSSk9lJ6KFNQzlRQnIfR+paNWYyvzxf5+TZ2inVgxBUHdCsZEiYA== 787 - 788 - bser@^2.0.0: 789 - version "2.0.0" 790 - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" 791 - integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= 792 - dependencies: 793 - node-int64 "^0.4.0" 794 - 795 - buble@^0.19.6: 796 - version "0.19.6" 797 - resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" 798 - integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg== 799 - dependencies: 800 - chalk "^2.4.1" 801 - magic-string "^0.25.1" 802 - minimist "^1.2.0" 803 - os-homedir "^1.0.1" 804 - regexpu-core "^4.2.0" 805 - vlq "^1.0.0" 806 - 807 - buffer-alloc-unsafe@^1.1.0: 808 - version "1.1.0" 809 - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" 810 - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== 811 - 812 - buffer-alloc@^1.2.0: 813 - version "1.2.0" 814 - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" 815 - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== 816 - dependencies: 817 - buffer-alloc-unsafe "^1.1.0" 818 - buffer-fill "^1.0.0" 819 - 820 - buffer-fill@^1.0.0: 821 - version "1.0.0" 822 - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" 823 - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= 824 - 825 - buffer-from@^1.0.0: 826 - version "1.1.1" 827 - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 828 - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 829 - 830 - builtin-modules@^1.0.0: 831 - version "1.1.1" 832 - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 833 - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= 834 - 835 - builtin-modules@^2.0.0: 836 - version "2.0.0" 837 - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" 838 - integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== 839 - 840 - bundlesize@^0.17.0: 841 - version "0.17.0" 842 - resolved "https://registry.yarnpkg.com/bundlesize/-/bundlesize-0.17.0.tgz#212ae5731ab0554d2acd509d23e1de18640b2008" 843 - integrity sha512-w/jYWQupw/eijqx4LV6PPr1z0HmfXT8SMCg9tls1a3xrr6/PtC22MoFrYJ8j/uPLSANRQ+8WiN/gXuhTY6wogQ== 844 - dependencies: 845 - axios "^0.17.0" 846 - brotli-size "0.0.1" 847 - bytes "^3.0.0" 848 - ci-env "^1.4.0" 849 - commander "^2.11.0" 850 - github-build "^1.2.0" 851 - glob "^7.1.2" 852 - gzip-size "^4.0.0" 853 - prettycli "^1.4.3" 854 - read-pkg-up "^3.0.0" 855 - 856 - bytes@^3.0.0: 857 - version "3.0.0" 858 - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 859 - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= 860 - 861 - cache-base@^1.0.1: 862 - version "1.0.1" 863 - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 864 - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== 865 - dependencies: 866 - collection-visit "^1.0.0" 867 - component-emitter "^1.2.1" 868 - get-value "^2.0.6" 869 - has-value "^1.0.0" 870 - isobject "^3.0.1" 871 - set-value "^2.0.0" 872 - to-object-path "^0.3.0" 873 - union-value "^1.0.0" 874 - unset-value "^1.0.0" 875 - 876 - caller-callsite@^2.0.0: 877 - version "2.0.0" 878 - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" 879 - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= 880 - dependencies: 881 - callsites "^2.0.0" 882 - 883 - caller-path@^2.0.0: 884 - version "2.0.0" 885 - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" 886 - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= 887 - dependencies: 888 - caller-callsite "^2.0.0" 889 - 890 - callsites@^2.0.0: 891 - version "2.0.0" 892 - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" 893 - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= 894 - 895 - camelcase@^4.1.0: 896 - version "4.1.0" 897 - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 898 - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 899 - 900 - camelcase@^5.0.0: 901 - version "5.0.0" 902 - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" 903 - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== 904 - 905 - caniuse-api@^1.5.2: 906 - version "1.6.1" 907 - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" 908 - integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= 909 - dependencies: 910 - browserslist "^1.3.6" 911 - caniuse-db "^1.0.30000529" 912 - lodash.memoize "^4.1.2" 913 - lodash.uniq "^4.5.0" 914 - 915 - caniuse-api@^3.0.0: 916 - version "3.0.0" 917 - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" 918 - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== 919 - dependencies: 920 - browserslist "^4.0.0" 921 - caniuse-lite "^1.0.0" 922 - lodash.memoize "^4.1.2" 923 - lodash.uniq "^4.5.0" 924 - 925 - caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: 926 - version "1.0.30000928" 927 - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000928.tgz#2e83d2b14276442da239511615eb7c62fed0cfa7" 928 - integrity sha512-nAoeTspAEzLjqGSeibzM09WojORi08faeOOI5GBmFWC3/brydovb9lYJWM+p48rEQsdevfpufK58gPiDtwOWKw== 929 - 930 - caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000928: 931 - version "1.0.30000928" 932 - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000928.tgz#805e828dc72b06498e3683a32e61c7507fd67b88" 933 - integrity sha512-aSpMWRXL6ZXNnzm8hgE4QDLibG5pVJ2Ujzsuj3icazlIkxXkPXtL+BWnMx6FBkWmkZgBHGUxPZQvrbRw2ZTxhg== 934 - 935 - capture-exit@^1.2.0: 936 - version "1.2.0" 937 - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" 938 - integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= 939 - dependencies: 940 - rsvp "^3.3.3" 941 - 942 - caseless@~0.12.0: 943 - version "0.12.0" 944 - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 945 - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 946 - 947 - chalk@2.1.0: 948 - version "2.1.0" 949 - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" 950 - integrity sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ== 951 - dependencies: 952 - ansi-styles "^3.1.0" 953 - escape-string-regexp "^1.0.5" 954 - supports-color "^4.0.0" 955 - 956 - chalk@^1.0.0, chalk@^1.1.3: 957 - version "1.1.3" 958 - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 959 - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 960 - dependencies: 961 - ansi-styles "^2.2.1" 962 - escape-string-regexp "^1.0.2" 963 - has-ansi "^2.0.0" 964 - strip-ansi "^3.0.0" 965 - supports-color "^2.0.0" 966 - 967 - chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: 968 - version "2.4.2" 969 - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 970 - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 971 - dependencies: 972 - ansi-styles "^3.2.1" 973 - escape-string-regexp "^1.0.5" 974 - supports-color "^5.3.0" 975 - 976 - chownr@^1.0.1, chownr@^1.1.1: 977 - version "1.1.1" 978 - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 979 - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== 980 - 981 - ci-env@^1.4.0: 982 - version "1.7.0" 983 - resolved "https://registry.yarnpkg.com/ci-env/-/ci-env-1.7.0.tgz#55cc9f8ff7bb4380de298cbed3ae27c35dcdfd8e" 984 - integrity sha512-ifHfV5JmACoTnoPxwjKjUUAekL1UCKZ9EU27GaaSkLVopkV3H1w0eYIpY+aAiX31SVEtTrZFMS94EFETSj0vIA== 985 - 986 - ci-info@^1.5.0: 987 - version "1.6.0" 988 - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" 989 - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== 990 - 991 - clap@^1.0.9: 992 - version "1.2.3" 993 - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" 994 - integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== 995 - dependencies: 996 - chalk "^1.1.3" 997 - 998 - class-utils@^0.3.5: 999 - version "0.3.6" 1000 - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 1001 - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== 1002 - dependencies: 1003 - arr-union "^3.1.0" 1004 - define-property "^0.2.5" 1005 - isobject "^3.0.0" 1006 - static-extend "^0.1.1" 1007 - 1008 - cliui@^4.0.0: 1009 - version "4.1.0" 1010 - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 1011 - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== 1012 - dependencies: 1013 - string-width "^2.1.1" 1014 - strip-ansi "^4.0.0" 1015 - wrap-ansi "^2.0.0" 1016 - 1017 - clone@^1.0.2: 1018 - version "1.0.4" 1019 - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 1020 - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= 1021 - 1022 - co@^4.6.0: 1023 - version "4.6.0" 1024 - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 1025 - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 1026 - 1027 - coa@~1.0.1: 1028 - version "1.0.4" 1029 - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" 1030 - integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= 1031 - dependencies: 1032 - q "^1.1.2" 1033 - 1034 - coa@~2.0.1: 1035 - version "2.0.2" 1036 - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" 1037 - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== 1038 - dependencies: 1039 - "@types/q" "^1.5.1" 1040 - chalk "^2.4.1" 1041 - q "^1.1.2" 1042 - 1043 - code-point-at@^1.0.0: 1044 - version "1.1.0" 1045 - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 1046 - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 1047 - 1048 - collection-visit@^1.0.0: 1049 - version "1.0.0" 1050 - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 1051 - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= 1052 - dependencies: 1053 - map-visit "^1.0.0" 1054 - object-visit "^1.0.0" 1055 - 1056 - color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: 1057 - version "1.9.3" 1058 - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1059 - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1060 - dependencies: 1061 - color-name "1.1.3" 1062 - 1063 - color-name@1.1.3: 1064 - version "1.1.3" 1065 - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1066 - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 1067 - 1068 - color-name@^1.0.0: 1069 - version "1.1.4" 1070 - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1071 - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1072 - 1073 - color-string@^0.3.0: 1074 - version "0.3.0" 1075 - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" 1076 - integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= 1077 - dependencies: 1078 - color-name "^1.0.0" 1079 - 1080 - color-string@^1.5.2: 1081 - version "1.5.3" 1082 - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" 1083 - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== 1084 - dependencies: 1085 - color-name "^1.0.0" 1086 - simple-swizzle "^0.2.2" 1087 - 1088 - color@^0.11.0: 1089 - version "0.11.4" 1090 - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" 1091 - integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= 1092 - dependencies: 1093 - clone "^1.0.2" 1094 - color-convert "^1.3.0" 1095 - color-string "^0.3.0" 1096 - 1097 - color@^3.0.0: 1098 - version "3.1.0" 1099 - resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" 1100 - integrity sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg== 1101 - dependencies: 1102 - color-convert "^1.9.1" 1103 - color-string "^1.5.2" 1104 - 1105 - colormin@^1.0.5: 1106 - version "1.1.2" 1107 - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" 1108 - integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= 1109 - dependencies: 1110 - color "^0.11.0" 1111 - css-color-names "0.0.4" 1112 - has "^1.0.1" 1113 - 1114 - colors@~1.1.2: 1115 - version "1.1.2" 1116 - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 1117 - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= 1118 - 1119 - combined-stream@^1.0.6, combined-stream@~1.0.6: 1120 - version "1.0.7" 1121 - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" 1122 - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== 1123 - dependencies: 1124 - delayed-stream "~1.0.0" 1125 - 1126 - commander@^2.11.0: 1127 - version "2.19.0" 1128 - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" 1129 - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== 1130 - 1131 - commander@~2.17.1: 1132 - version "2.17.1" 1133 - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" 1134 - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== 1135 - 1136 - component-emitter@^1.2.1: 1137 - version "1.2.1" 1138 - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 1139 - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= 1140 - 1141 - concat-map@0.0.1: 1142 - version "0.0.1" 1143 - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1144 - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 1145 - 1146 - concat-with-sourcemaps@^1.0.5: 1147 - version "1.1.0" 1148 - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" 1149 - integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== 1150 - dependencies: 1151 - source-map "^0.6.1" 1152 - 1153 - console-control-strings@^1.0.0, console-control-strings@~1.1.0: 1154 - version "1.1.0" 1155 - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 1156 - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 1157 - 1158 - convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: 1159 - version "1.6.0" 1160 - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 1161 - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== 1162 - dependencies: 1163 - safe-buffer "~5.1.1" 1164 - 1165 - copy-descriptor@^0.1.0: 1166 - version "0.1.1" 1167 - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 1168 - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= 1169 - 1170 - core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: 1171 - version "2.6.2" 1172 - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.2.tgz#267988d7268323b349e20b4588211655f0e83944" 1173 - integrity sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g== 1174 - 1175 - core-util-is@1.0.2, core-util-is@~1.0.0: 1176 - version "1.0.2" 1177 - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 1178 - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 1179 - 1180 - cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: 1181 - version "2.2.2" 1182 - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" 1183 - integrity sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A== 1184 - dependencies: 1185 - is-directory "^0.3.1" 1186 - js-yaml "^3.4.3" 1187 - minimist "^1.2.0" 1188 - object-assign "^4.1.0" 1189 - os-homedir "^1.0.1" 1190 - parse-json "^2.2.0" 1191 - require-from-string "^1.1.0" 1192 - 1193 - cosmiconfig@^5.0.0: 1194 - version "5.0.7" 1195 - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" 1196 - integrity sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA== 1197 - dependencies: 1198 - import-fresh "^2.0.0" 1199 - is-directory "^0.3.1" 1200 - js-yaml "^3.9.0" 1201 - parse-json "^4.0.0" 1202 - 1203 - coveralls@^3.0.0: 1204 - version "3.0.2" 1205 - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.2.tgz#f5a0bcd90ca4e64e088b710fa8dda640aea4884f" 1206 - integrity sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw== 1207 - dependencies: 1208 - growl "~> 1.10.0" 1209 - js-yaml "^3.11.0" 1210 - lcov-parse "^0.0.10" 1211 - log-driver "^1.2.7" 1212 - minimist "^1.2.0" 1213 - request "^2.85.0" 1214 - 1215 - cross-spawn@^5.0.1: 1216 - version "5.1.0" 1217 - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 1218 - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 1219 - dependencies: 1220 - lru-cache "^4.0.1" 1221 - shebang-command "^1.2.0" 1222 - which "^1.2.9" 1223 - 1224 - cross-spawn@^6.0.5: 1225 - version "6.0.5" 1226 - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 1227 - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 1228 - dependencies: 1229 - nice-try "^1.0.4" 1230 - path-key "^2.0.1" 1231 - semver "^5.5.0" 1232 - shebang-command "^1.2.0" 1233 - which "^1.2.9" 1234 - 1235 - css-color-names@0.0.4, css-color-names@^0.0.4: 1236 - version "0.0.4" 1237 - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" 1238 - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= 1239 - 1240 - css-declaration-sorter@^4.0.1: 1241 - version "4.0.1" 1242 - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" 1243 - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== 1244 - dependencies: 1245 - postcss "^7.0.1" 1246 - timsort "^0.3.0" 1247 - 1248 - css-modules-loader-core@^1.1.0: 1249 - version "1.1.0" 1250 - resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" 1251 - integrity sha1-WQhmgpShvs0mGuCkziGwtVHyHRY= 1252 - dependencies: 1253 - icss-replace-symbols "1.1.0" 1254 - postcss "6.0.1" 1255 - postcss-modules-extract-imports "1.1.0" 1256 - postcss-modules-local-by-default "1.2.0" 1257 - postcss-modules-scope "1.1.0" 1258 - postcss-modules-values "1.3.0" 1259 - 1260 - css-select-base-adapter@~0.1.0: 1261 - version "0.1.1" 1262 - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" 1263 - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== 1264 - 1265 - css-select@^2.0.0: 1266 - version "2.0.2" 1267 - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" 1268 - integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ== 1269 - dependencies: 1270 - boolbase "^1.0.0" 1271 - css-what "^2.1.2" 1272 - domutils "^1.7.0" 1273 - nth-check "^1.0.2" 1274 - 1275 - css-selector-tokenizer@^0.7.0: 1276 - version "0.7.1" 1277 - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" 1278 - integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== 1279 - dependencies: 1280 - cssesc "^0.1.0" 1281 - fastparse "^1.1.1" 1282 - regexpu-core "^1.0.0" 1283 - 1284 - css-tree@1.0.0-alpha.28: 1285 - version "1.0.0-alpha.28" 1286 - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" 1287 - integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w== 1288 - dependencies: 1289 - mdn-data "~1.1.0" 1290 - source-map "^0.5.3" 1291 - 1292 - css-tree@1.0.0-alpha.29: 1293 - version "1.0.0-alpha.29" 1294 - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" 1295 - integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== 1296 - dependencies: 1297 - mdn-data "~1.1.0" 1298 - source-map "^0.5.3" 1299 - 1300 - css-unit-converter@^1.1.1: 1301 - version "1.1.1" 1302 - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" 1303 - integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= 1304 - 1305 - css-url-regex@^1.1.0: 1306 - version "1.1.0" 1307 - resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" 1308 - integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= 1309 - 1310 - css-what@^2.1.2: 1311 - version "2.1.2" 1312 - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" 1313 - integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ== 1314 - 1315 - cssesc@^0.1.0: 1316 - version "0.1.0" 1317 - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" 1318 - integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= 1319 - 1320 - cssesc@^2.0.0: 1321 - version "2.0.0" 1322 - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" 1323 - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== 1324 - 1325 - cssnano-preset-default@^4.0.6: 1326 - version "4.0.6" 1327 - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz#92379e2a6db4a91c0ea727f5f556eeac693eab6a" 1328 - integrity sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg== 1329 - dependencies: 1330 - css-declaration-sorter "^4.0.1" 1331 - cssnano-util-raw-cache "^4.0.1" 1332 - postcss "^7.0.0" 1333 - postcss-calc "^7.0.0" 1334 - postcss-colormin "^4.0.2" 1335 - postcss-convert-values "^4.0.1" 1336 - postcss-discard-comments "^4.0.1" 1337 - postcss-discard-duplicates "^4.0.2" 1338 - postcss-discard-empty "^4.0.1" 1339 - postcss-discard-overridden "^4.0.1" 1340 - postcss-merge-longhand "^4.0.10" 1341 - postcss-merge-rules "^4.0.2" 1342 - postcss-minify-font-values "^4.0.2" 1343 - postcss-minify-gradients "^4.0.1" 1344 - postcss-minify-params "^4.0.1" 1345 - postcss-minify-selectors "^4.0.1" 1346 - postcss-normalize-charset "^4.0.1" 1347 - postcss-normalize-display-values "^4.0.1" 1348 - postcss-normalize-positions "^4.0.1" 1349 - postcss-normalize-repeat-style "^4.0.1" 1350 - postcss-normalize-string "^4.0.1" 1351 - postcss-normalize-timing-functions "^4.0.1" 1352 - postcss-normalize-unicode "^4.0.1" 1353 - postcss-normalize-url "^4.0.1" 1354 - postcss-normalize-whitespace "^4.0.1" 1355 - postcss-ordered-values "^4.1.1" 1356 - postcss-reduce-initial "^4.0.2" 1357 - postcss-reduce-transforms "^4.0.1" 1358 - postcss-svgo "^4.0.1" 1359 - postcss-unique-selectors "^4.0.1" 1360 - 1361 - cssnano-util-get-arguments@^4.0.0: 1362 - version "4.0.0" 1363 - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" 1364 - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= 1365 - 1366 - cssnano-util-get-match@^4.0.0: 1367 - version "4.0.0" 1368 - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" 1369 - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= 1370 - 1371 - cssnano-util-raw-cache@^4.0.1: 1372 - version "4.0.1" 1373 - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" 1374 - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== 1375 - dependencies: 1376 - postcss "^7.0.0" 1377 - 1378 - cssnano-util-same-parent@^4.0.0: 1379 - version "4.0.1" 1380 - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" 1381 - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== 1382 - 1383 - cssnano@^3.10.0: 1384 - version "3.10.0" 1385 - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" 1386 - integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= 1387 - dependencies: 1388 - autoprefixer "^6.3.1" 1389 - decamelize "^1.1.2" 1390 - defined "^1.0.0" 1391 - has "^1.0.1" 1392 - object-assign "^4.0.1" 1393 - postcss "^5.0.14" 1394 - postcss-calc "^5.2.0" 1395 - postcss-colormin "^2.1.8" 1396 - postcss-convert-values "^2.3.4" 1397 - postcss-discard-comments "^2.0.4" 1398 - postcss-discard-duplicates "^2.0.1" 1399 - postcss-discard-empty "^2.0.1" 1400 - postcss-discard-overridden "^0.1.1" 1401 - postcss-discard-unused "^2.2.1" 1402 - postcss-filter-plugins "^2.0.0" 1403 - postcss-merge-idents "^2.1.5" 1404 - postcss-merge-longhand "^2.0.1" 1405 - postcss-merge-rules "^2.0.3" 1406 - postcss-minify-font-values "^1.0.2" 1407 - postcss-minify-gradients "^1.0.1" 1408 - postcss-minify-params "^1.0.4" 1409 - postcss-minify-selectors "^2.0.4" 1410 - postcss-normalize-charset "^1.1.0" 1411 - postcss-normalize-url "^3.0.7" 1412 - postcss-ordered-values "^2.1.0" 1413 - postcss-reduce-idents "^2.2.2" 1414 - postcss-reduce-initial "^1.0.0" 1415 - postcss-reduce-transforms "^1.0.3" 1416 - postcss-svgo "^2.1.1" 1417 - postcss-unique-selectors "^2.0.2" 1418 - postcss-value-parser "^3.2.3" 1419 - postcss-zindex "^2.0.1" 1420 - 1421 - cssnano@^4.1.7: 1422 - version "4.1.8" 1423 - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.8.tgz#8014989679d5fd42491e4499a521dbfb85c95fd1" 1424 - integrity sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig== 1425 - dependencies: 1426 - cosmiconfig "^5.0.0" 1427 - cssnano-preset-default "^4.0.6" 1428 - is-resolvable "^1.0.0" 1429 - postcss "^7.0.0" 1430 - 1431 - csso@^3.5.0: 1432 - version "3.5.1" 1433 - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" 1434 - integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== 1435 - dependencies: 1436 - css-tree "1.0.0-alpha.29" 1437 - 1438 - csso@~2.3.1: 1439 - version "2.3.2" 1440 - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" 1441 - integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= 1442 - dependencies: 1443 - clap "^1.0.9" 1444 - source-map "^0.5.3" 1445 - 1446 - cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": 1447 - version "0.3.4" 1448 - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" 1449 - integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog== 1450 - 1451 - cssstyle@^1.0.0: 1452 - version "1.1.1" 1453 - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" 1454 - integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== 1455 - dependencies: 1456 - cssom "0.3.x" 1457 - 1458 - dashdash@^1.12.0: 1459 - version "1.14.1" 1460 - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 1461 - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 1462 - dependencies: 1463 - assert-plus "^1.0.0" 1464 - 1465 - data-urls@^1.0.0: 1466 - version "1.1.0" 1467 - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" 1468 - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== 1469 - dependencies: 1470 - abab "^2.0.0" 1471 - whatwg-mimetype "^2.2.0" 1472 - whatwg-url "^7.0.0" 1473 - 1474 - debug@=3.1.0: 1475 - version "3.1.0" 1476 - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 1477 - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 1478 - dependencies: 1479 - ms "2.0.0" 1480 - 1481 - debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: 1482 - version "2.6.9" 1483 - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 1484 - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 1485 - dependencies: 1486 - ms "2.0.0" 1487 - 1488 - debug@^3.1.0: 1489 - version "3.2.6" 1490 - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 1491 - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 1492 - dependencies: 1493 - ms "^2.1.1" 1494 - 1495 - debug@^4.1.0: 1496 - version "4.1.1" 1497 - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 1498 - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 1499 - dependencies: 1500 - ms "^2.1.1" 1501 - 1502 - decamelize@^1.1.1, decamelize@^1.1.2: 1503 - version "1.2.0" 1504 - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 1505 - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 1506 - 1507 - decode-uri-component@^0.2.0: 1508 - version "0.2.0" 1509 - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 1510 - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 1511 - 1512 - decompress-response@^3.3.0: 1513 - version "3.3.0" 1514 - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 1515 - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 1516 - dependencies: 1517 - mimic-response "^1.0.0" 1518 - 1519 - deep-extend@^0.6.0: 1520 - version "0.6.0" 1521 - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 1522 - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 1523 - 1524 - deep-is@~0.1.3: 1525 - version "0.1.3" 1526 - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 1527 - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 1528 - 1529 - default-require-extensions@^1.0.0: 1530 - version "1.0.0" 1531 - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" 1532 - integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= 1533 - dependencies: 1534 - strip-bom "^2.0.0" 1535 - 1536 - define-properties@^1.1.2, define-properties@^1.1.3: 1537 - version "1.1.3" 1538 - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 1539 - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 1540 - dependencies: 1541 - object-keys "^1.0.12" 1542 - 1543 - define-property@^0.2.5: 1544 - version "0.2.5" 1545 - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 1546 - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= 1547 - dependencies: 1548 - is-descriptor "^0.1.0" 1549 - 1550 - define-property@^1.0.0: 1551 - version "1.0.0" 1552 - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 1553 - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= 1554 - dependencies: 1555 - is-descriptor "^1.0.0" 1556 - 1557 - define-property@^2.0.2: 1558 - version "2.0.2" 1559 - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 1560 - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== 1561 - dependencies: 1562 - is-descriptor "^1.0.2" 1563 - isobject "^3.0.1" 1564 - 1565 - defined@^1.0.0: 1566 - version "1.0.0" 1567 - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 1568 - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 1569 - 1570 - delayed-stream@~1.0.0: 1571 - version "1.0.0" 1572 - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1573 - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 1574 - 1575 - delegates@^1.0.0: 1576 - version "1.0.0" 1577 - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 1578 - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 1579 - 1580 - detect-indent@^4.0.0: 1581 - version "4.0.0" 1582 - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 1583 - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= 1584 - dependencies: 1585 - repeating "^2.0.0" 1586 - 1587 - detect-libc@^0.2.0: 1588 - version "0.2.0" 1589 - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-0.2.0.tgz#47fdf567348a17ec25fcbf0b9e446348a76f9fb5" 1590 - integrity sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U= 1591 - 1592 - detect-libc@^1.0.2, detect-libc@^1.0.3: 1593 - version "1.0.3" 1594 - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 1595 - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 1596 - 1597 - detect-newline@^2.1.0: 1598 - version "2.1.0" 1599 - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" 1600 - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= 1601 - 1602 - diff@^3.2.0: 1603 - version "3.5.0" 1604 - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 1605 - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 1606 - 1607 - dom-serializer@0: 1608 - version "0.1.0" 1609 - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 1610 - integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= 1611 - dependencies: 1612 - domelementtype "~1.1.1" 1613 - entities "~1.1.1" 1614 - 1615 - domelementtype@1: 1616 - version "1.3.1" 1617 - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" 1618 - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 1619 - 1620 - domelementtype@~1.1.1: 1621 - version "1.1.3" 1622 - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 1623 - integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= 1624 - 1625 - domexception@^1.0.1: 1626 - version "1.0.1" 1627 - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" 1628 - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== 1629 - dependencies: 1630 - webidl-conversions "^4.0.2" 1631 - 1632 - domutils@^1.7.0: 1633 - version "1.7.0" 1634 - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 1635 - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== 1636 - dependencies: 1637 - dom-serializer "0" 1638 - domelementtype "1" 1639 - 1640 - dot-prop@^4.1.1: 1641 - version "4.2.0" 1642 - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" 1643 - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== 1644 - dependencies: 1645 - is-obj "^1.0.0" 1646 - 1647 - duplexer@^0.1.1: 1648 - version "0.1.1" 1649 - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" 1650 - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= 1651 - 1652 - ecc-jsbn@~0.1.1: 1653 - version "0.1.2" 1654 - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 1655 - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 1656 - dependencies: 1657 - jsbn "~0.1.0" 1658 - safer-buffer "^2.1.0" 1659 - 1660 - electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.100: 1661 - version "1.3.102" 1662 - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.102.tgz#3ac43a037c8a63bca3dfa189eb3d90f097196787" 1663 - integrity sha512-2nzZuXw/KBPnI3QX3UOCSRvJiVy7o9+VHRDQ3D/EHCvVc89X6aj/GlNmEgiR2GBIhmSWXIi4W1M5okA5ScSlNg== 1664 - 1665 - emojis-list@^2.0.0: 1666 - version "2.1.0" 1667 - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 1668 - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= 1669 - 1670 - end-of-stream@^1.0.0, end-of-stream@^1.1.0: 1671 - version "1.4.1" 1672 - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 1673 - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 1674 - dependencies: 1675 - once "^1.4.0" 1676 - 1677 - entities@~1.1.1: 1678 - version "1.1.2" 1679 - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" 1680 - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== 1681 - 1682 - error-ex@^1.2.0, error-ex@^1.3.1: 1683 - version "1.3.2" 1684 - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1685 - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1686 - dependencies: 1687 - is-arrayish "^0.2.1" 1688 - 1689 - es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.1: 1690 - version "1.13.0" 1691 - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 1692 - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== 1693 - dependencies: 1694 - es-to-primitive "^1.2.0" 1695 - function-bind "^1.1.1" 1696 - has "^1.0.3" 1697 - is-callable "^1.1.4" 1698 - is-regex "^1.0.4" 1699 - object-keys "^1.0.12" 1700 - 1701 - es-to-primitive@^1.2.0: 1702 - version "1.2.0" 1703 - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 1704 - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== 1705 - dependencies: 1706 - is-callable "^1.1.4" 1707 - is-date-object "^1.0.1" 1708 - is-symbol "^1.0.2" 1709 - 1710 - es6-promisify@^6.0.1: 1711 - version "6.0.1" 1712 - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-6.0.1.tgz#6edaa45f3bd570ffe08febce66f7116be4b1cdb6" 1713 - integrity sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw== 1714 - 1715 - escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1716 - version "1.0.5" 1717 - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1718 - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1719 - 1720 - escodegen@^1.9.1: 1721 - version "1.11.0" 1722 - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" 1723 - integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== 1724 - dependencies: 1725 - esprima "^3.1.3" 1726 - estraverse "^4.2.0" 1727 - esutils "^2.0.2" 1728 - optionator "^0.8.1" 1729 - optionalDependencies: 1730 - source-map "~0.6.1" 1731 - 1732 - esprima@^2.6.0: 1733 - version "2.7.3" 1734 - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 1735 - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= 1736 - 1737 - esprima@^3.1.3: 1738 - version "3.1.3" 1739 - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 1740 - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= 1741 - 1742 - esprima@^4.0.0: 1743 - version "4.0.1" 1744 - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1745 - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1746 - 1747 - estraverse@^4.2.0: 1748 - version "4.2.0" 1749 - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 1750 - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 1751 - 1752 - estree-walker@^0.2.1: 1753 - version "0.2.1" 1754 - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" 1755 - integrity sha1-va/oCVOD2EFNXcLs9MkXO225QS4= 1756 - 1757 - estree-walker@^0.5.2: 1758 - version "0.5.2" 1759 - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" 1760 - integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== 1761 - 1762 - esutils@^2.0.2: 1763 - version "2.0.2" 1764 - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 1765 - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 1766 - 1767 - exec-sh@^0.2.0: 1768 - version "0.2.2" 1769 - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" 1770 - integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== 1771 - dependencies: 1772 - merge "^1.2.0" 1773 - 1774 - execa@^0.7.0: 1775 - version "0.7.0" 1776 - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 1777 - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= 1778 - dependencies: 1779 - cross-spawn "^5.0.1" 1780 - get-stream "^3.0.0" 1781 - is-stream "^1.1.0" 1782 - npm-run-path "^2.0.0" 1783 - p-finally "^1.0.0" 1784 - signal-exit "^3.0.0" 1785 - strip-eof "^1.0.0" 1786 - 1787 - exit@^0.1.2: 1788 - version "0.1.2" 1789 - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1790 - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= 1791 - 1792 - expand-brackets@^0.1.4: 1793 - version "0.1.5" 1794 - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 1795 - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= 1796 - dependencies: 1797 - is-posix-bracket "^0.1.0" 1798 - 1799 - expand-brackets@^2.1.4: 1800 - version "2.1.4" 1801 - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 1802 - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= 1803 - dependencies: 1804 - debug "^2.3.3" 1805 - define-property "^0.2.5" 1806 - extend-shallow "^2.0.1" 1807 - posix-character-classes "^0.1.0" 1808 - regex-not "^1.0.0" 1809 - snapdragon "^0.8.1" 1810 - to-regex "^3.0.1" 1811 - 1812 - expand-range@^1.8.1: 1813 - version "1.8.2" 1814 - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 1815 - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= 1816 - dependencies: 1817 - fill-range "^2.1.0" 1818 - 1819 - expand-template@^1.0.2: 1820 - version "1.1.1" 1821 - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" 1822 - integrity sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg== 1823 - 1824 - expand-template@^2.0.3: 1825 - version "2.0.3" 1826 - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" 1827 - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== 1828 - 1829 - expect@^23.6.0: 1830 - version "23.6.0" 1831 - resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" 1832 - integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w== 1833 - dependencies: 1834 - ansi-styles "^3.2.0" 1835 - jest-diff "^23.6.0" 1836 - jest-get-type "^22.1.0" 1837 - jest-matcher-utils "^23.6.0" 1838 - jest-message-util "^23.4.0" 1839 - jest-regex-util "^23.3.0" 1840 - 1841 - extend-shallow@^2.0.1: 1842 - version "2.0.1" 1843 - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1844 - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= 1845 - dependencies: 1846 - is-extendable "^0.1.0" 1847 - 1848 - extend-shallow@^3.0.0, extend-shallow@^3.0.2: 1849 - version "3.0.2" 1850 - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 1851 - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= 1852 - dependencies: 1853 - assign-symbols "^1.0.0" 1854 - is-extendable "^1.0.1" 1855 - 1856 - extend@~3.0.2: 1857 - version "3.0.2" 1858 - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 1859 - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 1860 - 1861 - extglob@^0.3.1: 1862 - version "0.3.2" 1863 - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 1864 - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= 1865 - dependencies: 1866 - is-extglob "^1.0.0" 1867 - 1868 - extglob@^2.0.4: 1869 - version "2.0.4" 1870 - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 1871 - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== 1872 - dependencies: 1873 - array-unique "^0.3.2" 1874 - define-property "^1.0.0" 1875 - expand-brackets "^2.1.4" 1876 - extend-shallow "^2.0.1" 1877 - fragment-cache "^0.2.1" 1878 - regex-not "^1.0.0" 1879 - snapdragon "^0.8.1" 1880 - to-regex "^3.0.1" 1881 - 1882 - extsprintf@1.3.0: 1883 - version "1.3.0" 1884 - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 1885 - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 1886 - 1887 - extsprintf@^1.2.0: 1888 - version "1.4.0" 1889 - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 1890 - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 1891 - 1892 - fast-deep-equal@^2.0.1: 1893 - version "2.0.1" 1894 - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 1895 - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 1896 - 1897 - fast-json-stable-stringify@^2.0.0: 1898 - version "2.0.0" 1899 - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 1900 - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 1901 - 1902 - fast-levenshtein@~2.0.4: 1903 - version "2.0.6" 1904 - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1905 - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 1906 - 1907 - fastparse@^1.1.1: 1908 - version "1.1.2" 1909 - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" 1910 - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== 1911 - 1912 - fb-watchman@^2.0.0: 1913 - version "2.0.0" 1914 - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" 1915 - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= 1916 - dependencies: 1917 - bser "^2.0.0" 1918 - 1919 - figures@^1.0.1: 1920 - version "1.7.0" 1921 - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 1922 - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= 1923 - dependencies: 1924 - escape-string-regexp "^1.0.5" 1925 - object-assign "^4.1.0" 1926 - 1927 - filename-regex@^2.0.0: 1928 - version "2.0.1" 1929 - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 1930 - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= 1931 - 1932 - fileset@^2.0.2: 1933 - version "2.0.3" 1934 - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" 1935 - integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= 1936 - dependencies: 1937 - glob "^7.0.3" 1938 - minimatch "^3.0.3" 1939 - 1940 - filesize@^3.5.11: 1941 - version "3.6.1" 1942 - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" 1943 - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== 1944 - 1945 - fill-range@^2.1.0: 1946 - version "2.2.4" 1947 - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" 1948 - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== 1949 - dependencies: 1950 - is-number "^2.1.0" 1951 - isobject "^2.0.0" 1952 - randomatic "^3.0.0" 1953 - repeat-element "^1.1.2" 1954 - repeat-string "^1.5.2" 1955 - 1956 - fill-range@^4.0.0: 1957 - version "4.0.0" 1958 - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1959 - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= 1960 - dependencies: 1961 - extend-shallow "^2.0.1" 1962 - is-number "^3.0.0" 1963 - repeat-string "^1.6.1" 1964 - to-regex-range "^2.1.0" 1965 - 1966 - find-up@^1.0.0: 1967 - version "1.1.2" 1968 - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 1969 - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= 1970 - dependencies: 1971 - path-exists "^2.0.0" 1972 - pinkie-promise "^2.0.0" 1973 - 1974 - find-up@^2.0.0, find-up@^2.1.0: 1975 - version "2.1.0" 1976 - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1977 - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 1978 - dependencies: 1979 - locate-path "^2.0.0" 1980 - 1981 - flatten@^1.0.2: 1982 - version "1.0.2" 1983 - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" 1984 - integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= 1985 - 1986 - flow-remove-types@^1.1.0: 1987 - version "1.2.3" 1988 - resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.3.tgz#6131aefc7da43364bb8b479758c9dec7735d1a18" 1989 - integrity sha512-ypq/U3V+t9atYiOuSJd40tekCra03EHKoRsiK/wXGrsZimuum0kdwVY7Yv0HTaoXgHW1WiayomYd+Q3kkvPl9Q== 1990 - dependencies: 1991 - babylon "^6.15.0" 1992 - vlq "^0.2.1" 1993 - 1994 - follow-redirects@1.0.0: 1995 - version "1.0.0" 1996 - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" 1997 - integrity sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc= 1998 - dependencies: 1999 - debug "^2.2.0" 2000 - 2001 - follow-redirects@^1.2.5: 2002 - version "1.6.1" 2003 - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.6.1.tgz#514973c44b5757368bad8bddfe52f81f015c94cb" 2004 - integrity sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ== 2005 - dependencies: 2006 - debug "=3.1.0" 2007 - 2008 - for-in@^1.0.1, for-in@^1.0.2: 2009 - version "1.0.2" 2010 - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 2011 - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 2012 - 2013 - for-own@^0.1.4: 2014 - version "0.1.5" 2015 - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 2016 - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= 2017 - dependencies: 2018 - for-in "^1.0.1" 2019 - 2020 - forever-agent@~0.6.1: 2021 - version "0.6.1" 2022 - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 2023 - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 2024 - 2025 - form-data@~2.3.2: 2026 - version "2.3.3" 2027 - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 2028 - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 2029 - dependencies: 2030 - asynckit "^0.4.0" 2031 - combined-stream "^1.0.6" 2032 - mime-types "^2.1.12" 2033 - 2034 - fragment-cache@^0.2.1: 2035 - version "0.2.1" 2036 - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 2037 - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 2038 - dependencies: 2039 - map-cache "^0.2.2" 2040 - 2041 - fs-constants@^1.0.0: 2042 - version "1.0.0" 2043 - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" 2044 - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== 2045 - 2046 - fs-extra@7.0.0: 2047 - version "7.0.0" 2048 - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" 2049 - integrity sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ== 2050 - dependencies: 2051 - graceful-fs "^4.1.2" 2052 - jsonfile "^4.0.0" 2053 - universalify "^0.1.0" 2054 - 2055 - fs-extra@^5.0.0: 2056 - version "5.0.0" 2057 - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" 2058 - integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== 2059 - dependencies: 2060 - graceful-fs "^4.1.2" 2061 - jsonfile "^4.0.0" 2062 - universalify "^0.1.0" 2063 - 2064 - fs-minipass@^1.2.5: 2065 - version "1.2.5" 2066 - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 2067 - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== 2068 - dependencies: 2069 - minipass "^2.2.1" 2070 - 2071 - fs.realpath@^1.0.0: 2072 - version "1.0.0" 2073 - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 2074 - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 2075 - 2076 - fsevents@^1.2.3: 2077 - version "1.2.4" 2078 - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" 2079 - integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== 2080 - dependencies: 2081 - nan "^2.9.2" 2082 - node-pre-gyp "^0.10.0" 2083 - 2084 - fstream@^1.0.0, fstream@^1.0.2: 2085 - version "1.0.11" 2086 - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 2087 - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= 2088 - dependencies: 2089 - graceful-fs "^4.1.2" 2090 - inherits "~2.0.0" 2091 - mkdirp ">=0.5 0" 2092 - rimraf "2" 2093 - 2094 - function-bind@^1.0.2, function-bind@^1.1.1: 2095 - version "1.1.1" 2096 - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 2097 - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 2098 - 2099 - gauge@~2.7.3: 2100 - version "2.7.4" 2101 - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 2102 - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 2103 - dependencies: 2104 - aproba "^1.0.3" 2105 - console-control-strings "^1.0.0" 2106 - has-unicode "^2.0.0" 2107 - object-assign "^4.1.0" 2108 - signal-exit "^3.0.0" 2109 - string-width "^1.0.1" 2110 - strip-ansi "^3.0.1" 2111 - wide-align "^1.1.0" 2112 - 2113 - generic-names@^1.0.3: 2114 - version "1.0.3" 2115 - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" 2116 - integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= 2117 - dependencies: 2118 - loader-utils "^0.2.16" 2119 - 2120 - get-caller-file@^1.0.1: 2121 - version "1.0.3" 2122 - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 2123 - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 2124 - 2125 - get-stream@^3.0.0: 2126 - version "3.0.0" 2127 - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 2128 - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 2129 - 2130 - get-value@^2.0.3, get-value@^2.0.6: 2131 - version "2.0.6" 2132 - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 2133 - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= 2134 - 2135 - getpass@^0.1.1: 2136 - version "0.1.7" 2137 - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 2138 - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 2139 - dependencies: 2140 - assert-plus "^1.0.0" 2141 - 2142 - github-build@^1.2.0: 2143 - version "1.2.0" 2144 - resolved "https://registry.yarnpkg.com/github-build/-/github-build-1.2.0.tgz#b0bdb705ae4088218577e863c1a301030211051f" 2145 - integrity sha512-Iq7NialLYz5yRZDkiX8zaOWd+N3BssJJfUvG7wd8r4MeLCN88SdxEYo2esseMLpLtP4vNXhgamg1eRm7hw59qw== 2146 - dependencies: 2147 - axios "0.15.3" 2148 - 2149 - github-from-package@0.0.0: 2150 - version "0.0.0" 2151 - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" 2152 - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= 2153 - 2154 - glob-base@^0.3.0: 2155 - version "0.3.0" 2156 - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 2157 - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= 2158 - dependencies: 2159 - glob-parent "^2.0.0" 2160 - is-glob "^2.0.0" 2161 - 2162 - glob-parent@^2.0.0: 2163 - version "2.0.0" 2164 - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 2165 - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= 2166 - dependencies: 2167 - is-glob "^2.0.0" 2168 - 2169 - glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: 2170 - version "7.1.3" 2171 - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 2172 - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 2173 - dependencies: 2174 - fs.realpath "^1.0.0" 2175 - inflight "^1.0.4" 2176 - inherits "2" 2177 - minimatch "^3.0.4" 2178 - once "^1.3.0" 2179 - path-is-absolute "^1.0.0" 2180 - 2181 - globals@^11.1.0: 2182 - version "11.10.0" 2183 - resolved "https://registry.yarnpkg.com/globals/-/globals-11.10.0.tgz#1e09776dffda5e01816b3bb4077c8b59c24eaa50" 2184 - integrity sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ== 2185 - 2186 - globals@^9.18.0: 2187 - version "9.18.0" 2188 - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 2189 - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== 2190 - 2191 - globalyzer@^0.1.0: 2192 - version "0.1.0" 2193 - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" 2194 - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== 2195 - 2196 - globrex@^0.1.1: 2197 - version "0.1.2" 2198 - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" 2199 - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== 2200 - 2201 - graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: 2202 - version "4.1.15" 2203 - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 2204 - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== 2205 - 2206 - "growl@~> 1.10.0": 2207 - version "1.10.5" 2208 - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 2209 - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 2210 - 2211 - growly@^1.3.0: 2212 - version "1.3.0" 2213 - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 2214 - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= 2215 - 2216 - gzip-size@^3.0.0: 2217 - version "3.0.0" 2218 - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" 2219 - integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= 2220 - dependencies: 2221 - duplexer "^0.1.1" 2222 - 2223 - gzip-size@^4.0.0: 2224 - version "4.1.0" 2225 - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-4.1.0.tgz#8ae096257eabe7d69c45be2b67c448124ffb517c" 2226 - integrity sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw= 2227 - dependencies: 2228 - duplexer "^0.1.1" 2229 - pify "^3.0.0" 2230 - 2231 - gzip-size@^5.0.0: 2232 - version "5.0.0" 2233 - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" 2234 - integrity sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA== 2235 - dependencies: 2236 - duplexer "^0.1.1" 2237 - pify "^3.0.0" 2238 - 2239 - handlebars@^4.0.3: 2240 - version "4.0.12" 2241 - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" 2242 - integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== 2243 - dependencies: 2244 - async "^2.5.0" 2245 - optimist "^0.6.1" 2246 - source-map "^0.6.1" 2247 - optionalDependencies: 2248 - uglify-js "^3.1.4" 2249 - 2250 - har-schema@^2.0.0: 2251 - version "2.0.0" 2252 - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 2253 - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 2254 - 2255 - har-validator@~5.1.0: 2256 - version "5.1.3" 2257 - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 2258 - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 2259 - dependencies: 2260 - ajv "^6.5.5" 2261 - har-schema "^2.0.0" 2262 - 2263 - has-ansi@^2.0.0: 2264 - version "2.0.0" 2265 - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 2266 - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 2267 - dependencies: 2268 - ansi-regex "^2.0.0" 2269 - 2270 - has-flag@^1.0.0: 2271 - version "1.0.0" 2272 - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 2273 - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= 2274 - 2275 - has-flag@^2.0.0: 2276 - version "2.0.0" 2277 - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 2278 - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= 2279 - 2280 - has-flag@^3.0.0: 2281 - version "3.0.0" 2282 - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 2283 - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 2284 - 2285 - has-symbols@^1.0.0: 2286 - version "1.0.0" 2287 - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 2288 - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 2289 - 2290 - has-unicode@^2.0.0: 2291 - version "2.0.1" 2292 - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 2293 - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 2294 - 2295 - has-value@^0.3.1: 2296 - version "0.3.1" 2297 - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 2298 - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= 2299 - dependencies: 2300 - get-value "^2.0.3" 2301 - has-values "^0.1.4" 2302 - isobject "^2.0.0" 2303 - 2304 - has-value@^1.0.0: 2305 - version "1.0.0" 2306 - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 2307 - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= 2308 - dependencies: 2309 - get-value "^2.0.6" 2310 - has-values "^1.0.0" 2311 - isobject "^3.0.0" 2312 - 2313 - has-values@^0.1.4: 2314 - version "0.1.4" 2315 - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 2316 - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= 2317 - 2318 - has-values@^1.0.0: 2319 - version "1.0.0" 2320 - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 2321 - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= 2322 - dependencies: 2323 - is-number "^3.0.0" 2324 - kind-of "^4.0.0" 2325 - 2326 - has@^1.0.0, has@^1.0.1, has@^1.0.3: 2327 - version "1.0.3" 2328 - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 2329 - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 2330 - dependencies: 2331 - function-bind "^1.1.1" 2332 - 2333 - hex-color-regex@^1.1.0: 2334 - version "1.1.0" 2335 - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" 2336 - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== 2337 - 2338 - home-or-tmp@^2.0.0: 2339 - version "2.0.0" 2340 - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 2341 - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= 2342 - dependencies: 2343 - os-homedir "^1.0.0" 2344 - os-tmpdir "^1.0.1" 2345 - 2346 - hosted-git-info@^2.1.4: 2347 - version "2.7.1" 2348 - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 2349 - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== 2350 - 2351 - hsl-regex@^1.0.0: 2352 - version "1.0.0" 2353 - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" 2354 - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= 2355 - 2356 - hsla-regex@^1.0.0: 2357 - version "1.0.0" 2358 - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" 2359 - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= 2360 - 2361 - html-comment-regex@^1.1.0: 2362 - version "1.1.2" 2363 - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" 2364 - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== 2365 - 2366 - html-encoding-sniffer@^1.0.2: 2367 - version "1.0.2" 2368 - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" 2369 - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== 2370 - dependencies: 2371 - whatwg-encoding "^1.0.1" 2372 - 2373 - http-signature@~1.2.0: 2374 - version "1.2.0" 2375 - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 2376 - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 2377 - dependencies: 2378 - assert-plus "^1.0.0" 2379 - jsprim "^1.2.2" 2380 - sshpk "^1.7.0" 2381 - 2382 - iconv-lite@0.4.24, iconv-lite@^0.4.4: 2383 - version "0.4.24" 2384 - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 2385 - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 2386 - dependencies: 2387 - safer-buffer ">= 2.1.2 < 3" 2388 - 2389 - icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: 2390 - version "1.1.0" 2391 - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" 2392 - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= 2393 - 2394 - ignore-walk@^3.0.1: 2395 - version "3.0.1" 2396 - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 2397 - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== 2398 - dependencies: 2399 - minimatch "^3.0.4" 2400 - 2401 - iltorb@^1.0.9: 2402 - version "1.3.10" 2403 - resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-1.3.10.tgz#a0d9e4e7d52bf510741442236cbe0cc4230fc9f8" 2404 - integrity sha512-nyB4+ru1u8CQqQ6w7YjasboKN3NQTN8GH/V/eEssNRKhW6UbdxdWhB9fJ5EEdjJfezKY0qPrcwLyIcgjL8hHxA== 2405 - dependencies: 2406 - detect-libc "^0.2.0" 2407 - nan "^2.6.2" 2408 - node-gyp "^3.6.2" 2409 - prebuild-install "^2.3.0" 2410 - 2411 - iltorb@^2.0.5: 2412 - version "2.4.1" 2413 - resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-2.4.1.tgz#3ae14f0a76ba880503884a2fe630b1f748eb4c17" 2414 - integrity sha512-huyAN7dSNe2b7VAl5AyvaeZ8XTcDTSF1b8JVYDggl+SBfHsORq3qMZeesZW7zoEy21s15SiERAITWT5cwxu1Uw== 2415 - dependencies: 2416 - detect-libc "^1.0.3" 2417 - npmlog "^4.1.2" 2418 - prebuild-install "^5.2.1" 2419 - which-pm-runs "^1.0.0" 2420 - 2421 - import-cwd@^2.1.0: 2422 - version "2.1.0" 2423 - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" 2424 - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= 2425 - dependencies: 2426 - import-from "^2.1.0" 2427 - 2428 - import-fresh@^2.0.0: 2429 - version "2.0.0" 2430 - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" 2431 - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= 2432 - dependencies: 2433 - caller-path "^2.0.0" 2434 - resolve-from "^3.0.0" 2435 - 2436 - import-from@^2.1.0: 2437 - version "2.1.0" 2438 - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" 2439 - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= 2440 - dependencies: 2441 - resolve-from "^3.0.0" 2442 - 2443 - import-local@^1.0.0: 2444 - version "1.0.0" 2445 - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" 2446 - integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== 2447 - dependencies: 2448 - pkg-dir "^2.0.0" 2449 - resolve-cwd "^2.0.0" 2450 - 2451 - imurmurhash@^0.1.4: 2452 - version "0.1.4" 2453 - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 2454 - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 2455 - 2456 - indexes-of@^1.0.1: 2457 - version "1.0.1" 2458 - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" 2459 - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= 2460 - 2461 - inflight@^1.0.4: 2462 - version "1.0.6" 2463 - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 2464 - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 2465 - dependencies: 2466 - once "^1.3.0" 2467 - wrappy "1" 2468 - 2469 - inherits@2, inherits@~2.0.0, inherits@~2.0.3: 2470 - version "2.0.3" 2471 - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 2472 - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 2473 - 2474 - ini@~1.3.0: 2475 - version "1.3.5" 2476 - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 2477 - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== 2478 - 2479 - invariant@^2.2.2, invariant@^2.2.4: 2480 - version "2.2.4" 2481 - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 2482 - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== 2483 - dependencies: 2484 - loose-envify "^1.0.0" 2485 - 2486 - invert-kv@^1.0.0: 2487 - version "1.0.0" 2488 - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 2489 - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= 2490 - 2491 - ip-regex@^3.0.0: 2492 - version "3.0.0" 2493 - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-3.0.0.tgz#0a934694b4066558c46294244a23cc33116bf732" 2494 - integrity sha512-T8wDtjy+Qf2TAPDQmBp0eGKJ8GavlWlUnamr3wRn6vvdZlKVuJXXMlSncYFRYgVHOM3If5NR1H4+OvVQU9Idvg== 2495 - 2496 - is-absolute-url@^2.0.0: 2497 - version "2.1.0" 2498 - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" 2499 - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= 2500 - 2501 - is-accessor-descriptor@^0.1.6: 2502 - version "0.1.6" 2503 - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 2504 - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= 2505 - dependencies: 2506 - kind-of "^3.0.2" 2507 - 2508 - is-accessor-descriptor@^1.0.0: 2509 - version "1.0.0" 2510 - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 2511 - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== 2512 - dependencies: 2513 - kind-of "^6.0.0" 2514 - 2515 - is-arrayish@^0.2.1: 2516 - version "0.2.1" 2517 - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 2518 - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 2519 - 2520 - is-arrayish@^0.3.1: 2521 - version "0.3.2" 2522 - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" 2523 - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== 2524 - 2525 - is-buffer@^1.1.5: 2526 - version "1.1.6" 2527 - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 2528 - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 2529 - 2530 - is-builtin-module@^1.0.0: 2531 - version "1.0.0" 2532 - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 2533 - integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= 2534 - dependencies: 2535 - builtin-modules "^1.0.0" 2536 - 2537 - is-callable@^1.1.4: 2538 - version "1.1.4" 2539 - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 2540 - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 2541 - 2542 - is-ci@^1.0.10: 2543 - version "1.2.1" 2544 - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" 2545 - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== 2546 - dependencies: 2547 - ci-info "^1.5.0" 2548 - 2549 - is-color-stop@^1.0.0: 2550 - version "1.1.0" 2551 - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" 2552 - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= 2553 - dependencies: 2554 - css-color-names "^0.0.4" 2555 - hex-color-regex "^1.1.0" 2556 - hsl-regex "^1.0.0" 2557 - hsla-regex "^1.0.0" 2558 - rgb-regex "^1.0.1" 2559 - rgba-regex "^1.0.0" 2560 - 2561 - is-data-descriptor@^0.1.4: 2562 - version "0.1.4" 2563 - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 2564 - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= 2565 - dependencies: 2566 - kind-of "^3.0.2" 2567 - 2568 - is-data-descriptor@^1.0.0: 2569 - version "1.0.0" 2570 - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 2571 - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 2572 - dependencies: 2573 - kind-of "^6.0.0" 2574 - 2575 - is-date-object@^1.0.1: 2576 - version "1.0.1" 2577 - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 2578 - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 2579 - 2580 - is-descriptor@^0.1.0: 2581 - version "0.1.6" 2582 - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 2583 - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== 2584 - dependencies: 2585 - is-accessor-descriptor "^0.1.6" 2586 - is-data-descriptor "^0.1.4" 2587 - kind-of "^5.0.0" 2588 - 2589 - is-descriptor@^1.0.0, is-descriptor@^1.0.2: 2590 - version "1.0.2" 2591 - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 2592 - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== 2593 - dependencies: 2594 - is-accessor-descriptor "^1.0.0" 2595 - is-data-descriptor "^1.0.0" 2596 - kind-of "^6.0.2" 2597 - 2598 - is-directory@^0.3.1: 2599 - version "0.3.1" 2600 - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" 2601 - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= 2602 - 2603 - is-dotfile@^1.0.0: 2604 - version "1.0.3" 2605 - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 2606 - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= 2607 - 2608 - is-equal-shallow@^0.1.3: 2609 - version "0.1.3" 2610 - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 2611 - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= 2612 - dependencies: 2613 - is-primitive "^2.0.0" 2614 - 2615 - is-extendable@^0.1.0, is-extendable@^0.1.1: 2616 - version "0.1.1" 2617 - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 2618 - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 2619 - 2620 - is-extendable@^1.0.1: 2621 - version "1.0.1" 2622 - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 2623 - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 2624 - dependencies: 2625 - is-plain-object "^2.0.4" 2626 - 2627 - is-extglob@^1.0.0: 2628 - version "1.0.0" 2629 - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 2630 - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= 2631 - 2632 - is-finite@^1.0.0: 2633 - version "1.0.2" 2634 - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 2635 - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= 2636 - dependencies: 2637 - number-is-nan "^1.0.0" 2638 - 2639 - is-fullwidth-code-point@^1.0.0: 2640 - version "1.0.0" 2641 - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 2642 - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 2643 - dependencies: 2644 - number-is-nan "^1.0.0" 2645 - 2646 - is-fullwidth-code-point@^2.0.0: 2647 - version "2.0.0" 2648 - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 2649 - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 2650 - 2651 - is-generator-fn@^1.0.0: 2652 - version "1.0.0" 2653 - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" 2654 - integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go= 2655 - 2656 - is-glob@^2.0.0, is-glob@^2.0.1: 2657 - version "2.0.1" 2658 - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 2659 - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= 2660 - dependencies: 2661 - is-extglob "^1.0.0" 2662 - 2663 - is-module@^1.0.0: 2664 - version "1.0.0" 2665 - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 2666 - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 2667 - 2668 - is-number@^2.1.0: 2669 - version "2.1.0" 2670 - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 2671 - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= 2672 - dependencies: 2673 - kind-of "^3.0.2" 2674 - 2675 - is-number@^3.0.0: 2676 - version "3.0.0" 2677 - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 2678 - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= 2679 - dependencies: 2680 - kind-of "^3.0.2" 2681 - 2682 - is-number@^4.0.0: 2683 - version "4.0.0" 2684 - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" 2685 - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== 2686 - 2687 - is-obj@^1.0.0: 2688 - version "1.0.1" 2689 - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 2690 - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 2691 - 2692 - is-plain-obj@^1.0.0: 2693 - version "1.1.0" 2694 - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 2695 - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= 2696 - 2697 - is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 2698 - version "2.0.4" 2699 - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 2700 - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 2701 - dependencies: 2702 - isobject "^3.0.1" 2703 - 2704 - is-posix-bracket@^0.1.0: 2705 - version "0.1.1" 2706 - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 2707 - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= 2708 - 2709 - is-primitive@^2.0.0: 2710 - version "2.0.0" 2711 - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 2712 - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= 2713 - 2714 - is-regex@^1.0.4: 2715 - version "1.0.4" 2716 - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 2717 - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 2718 - dependencies: 2719 - has "^1.0.1" 2720 - 2721 - is-resolvable@^1.0.0: 2722 - version "1.1.0" 2723 - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" 2724 - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== 2725 - 2726 - is-stream@^1.1.0: 2727 - version "1.1.0" 2728 - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 2729 - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 2730 - 2731 - is-svg@^2.0.0: 2732 - version "2.1.0" 2733 - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" 2734 - integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= 2735 - dependencies: 2736 - html-comment-regex "^1.1.0" 2737 - 2738 - is-svg@^3.0.0: 2739 - version "3.0.0" 2740 - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" 2741 - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== 2742 - dependencies: 2743 - html-comment-regex "^1.1.0" 2744 - 2745 - is-symbol@^1.0.2: 2746 - version "1.0.2" 2747 - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 2748 - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 2749 - dependencies: 2750 - has-symbols "^1.0.0" 2751 - 2752 - is-typedarray@~1.0.0: 2753 - version "1.0.0" 2754 - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 2755 - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 2756 - 2757 - is-utf8@^0.2.0: 2758 - version "0.2.1" 2759 - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 2760 - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= 2761 - 2762 - is-windows@^1.0.2: 2763 - version "1.0.2" 2764 - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 2765 - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 2766 - 2767 - isarray@1.0.0, isarray@~1.0.0: 2768 - version "1.0.0" 2769 - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 2770 - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 2771 - 2772 - isexe@^2.0.0: 2773 - version "2.0.0" 2774 - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 2775 - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 2776 - 2777 - isobject@^2.0.0: 2778 - version "2.1.0" 2779 - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 2780 - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 2781 - dependencies: 2782 - isarray "1.0.0" 2783 - 2784 - isobject@^3.0.0, isobject@^3.0.1: 2785 - version "3.0.1" 2786 - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 2787 - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 2788 - 2789 - isstream@~0.1.2: 2790 - version "0.1.2" 2791 - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 2792 - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 2793 - 2794 - istanbul-api@^1.3.1: 2795 - version "1.3.7" 2796 - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" 2797 - integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== 2798 - dependencies: 2799 - async "^2.1.4" 2800 - fileset "^2.0.2" 2801 - istanbul-lib-coverage "^1.2.1" 2802 - istanbul-lib-hook "^1.2.2" 2803 - istanbul-lib-instrument "^1.10.2" 2804 - istanbul-lib-report "^1.1.5" 2805 - istanbul-lib-source-maps "^1.2.6" 2806 - istanbul-reports "^1.5.1" 2807 - js-yaml "^3.7.0" 2808 - mkdirp "^0.5.1" 2809 - once "^1.4.0" 2810 - 2811 - istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: 2812 - version "1.2.1" 2813 - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" 2814 - integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== 2815 - 2816 - istanbul-lib-hook@^1.2.2: 2817 - version "1.2.2" 2818 - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" 2819 - integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== 2820 - dependencies: 2821 - append-transform "^0.4.0" 2822 - 2823 - istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: 2824 - version "1.10.2" 2825 - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" 2826 - integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== 2827 - dependencies: 2828 - babel-generator "^6.18.0" 2829 - babel-template "^6.16.0" 2830 - babel-traverse "^6.18.0" 2831 - babel-types "^6.18.0" 2832 - babylon "^6.18.0" 2833 - istanbul-lib-coverage "^1.2.1" 2834 - semver "^5.3.0" 2835 - 2836 - istanbul-lib-report@^1.1.5: 2837 - version "1.1.5" 2838 - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" 2839 - integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== 2840 - dependencies: 2841 - istanbul-lib-coverage "^1.2.1" 2842 - mkdirp "^0.5.1" 2843 - path-parse "^1.0.5" 2844 - supports-color "^3.1.2" 2845 - 2846 - istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: 2847 - version "1.2.6" 2848 - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" 2849 - integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== 2850 - dependencies: 2851 - debug "^3.1.0" 2852 - istanbul-lib-coverage "^1.2.1" 2853 - mkdirp "^0.5.1" 2854 - rimraf "^2.6.1" 2855 - source-map "^0.5.3" 2856 - 2857 - istanbul-reports@^1.5.1: 2858 - version "1.5.1" 2859 - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" 2860 - integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== 2861 - dependencies: 2862 - handlebars "^4.0.3" 2863 - 2864 - jest-changed-files@^23.4.2: 2865 - version "23.4.2" 2866 - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" 2867 - integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA== 2868 - dependencies: 2869 - throat "^4.0.0" 2870 - 2871 - jest-cli@^23.6.0: 2872 - version "23.6.0" 2873 - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" 2874 - integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ== 2875 - dependencies: 2876 - ansi-escapes "^3.0.0" 2877 - chalk "^2.0.1" 2878 - exit "^0.1.2" 2879 - glob "^7.1.2" 2880 - graceful-fs "^4.1.11" 2881 - import-local "^1.0.0" 2882 - is-ci "^1.0.10" 2883 - istanbul-api "^1.3.1" 2884 - istanbul-lib-coverage "^1.2.0" 2885 - istanbul-lib-instrument "^1.10.1" 2886 - istanbul-lib-source-maps "^1.2.4" 2887 - jest-changed-files "^23.4.2" 2888 - jest-config "^23.6.0" 2889 - jest-environment-jsdom "^23.4.0" 2890 - jest-get-type "^22.1.0" 2891 - jest-haste-map "^23.6.0" 2892 - jest-message-util "^23.4.0" 2893 - jest-regex-util "^23.3.0" 2894 - jest-resolve-dependencies "^23.6.0" 2895 - jest-runner "^23.6.0" 2896 - jest-runtime "^23.6.0" 2897 - jest-snapshot "^23.6.0" 2898 - jest-util "^23.4.0" 2899 - jest-validate "^23.6.0" 2900 - jest-watcher "^23.4.0" 2901 - jest-worker "^23.2.0" 2902 - micromatch "^2.3.11" 2903 - node-notifier "^5.2.1" 2904 - prompts "^0.1.9" 2905 - realpath-native "^1.0.0" 2906 - rimraf "^2.5.4" 2907 - slash "^1.0.0" 2908 - string-length "^2.0.0" 2909 - strip-ansi "^4.0.0" 2910 - which "^1.2.12" 2911 - yargs "^11.0.0" 2912 - 2913 - jest-config@^23.6.0: 2914 - version "23.6.0" 2915 - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" 2916 - integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ== 2917 - dependencies: 2918 - babel-core "^6.0.0" 2919 - babel-jest "^23.6.0" 2920 - chalk "^2.0.1" 2921 - glob "^7.1.1" 2922 - jest-environment-jsdom "^23.4.0" 2923 - jest-environment-node "^23.4.0" 2924 - jest-get-type "^22.1.0" 2925 - jest-jasmine2 "^23.6.0" 2926 - jest-regex-util "^23.3.0" 2927 - jest-resolve "^23.6.0" 2928 - jest-util "^23.4.0" 2929 - jest-validate "^23.6.0" 2930 - micromatch "^2.3.11" 2931 - pretty-format "^23.6.0" 2932 - 2933 - jest-diff@^23.6.0: 2934 - version "23.6.0" 2935 - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" 2936 - integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== 2937 - dependencies: 2938 - chalk "^2.0.1" 2939 - diff "^3.2.0" 2940 - jest-get-type "^22.1.0" 2941 - pretty-format "^23.6.0" 2942 - 2943 - jest-docblock@^23.2.0: 2944 - version "23.2.0" 2945 - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" 2946 - integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c= 2947 - dependencies: 2948 - detect-newline "^2.1.0" 2949 - 2950 - jest-each@^23.6.0: 2951 - version "23.6.0" 2952 - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" 2953 - integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg== 2954 - dependencies: 2955 - chalk "^2.0.1" 2956 - pretty-format "^23.6.0" 2957 - 2958 - jest-environment-jsdom@^23.4.0: 2959 - version "23.4.0" 2960 - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" 2961 - integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM= 2962 - dependencies: 2963 - jest-mock "^23.2.0" 2964 - jest-util "^23.4.0" 2965 - jsdom "^11.5.1" 2966 - 2967 - jest-environment-node@^23.4.0: 2968 - version "23.4.0" 2969 - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" 2970 - integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA= 2971 - dependencies: 2972 - jest-mock "^23.2.0" 2973 - jest-util "^23.4.0" 2974 - 2975 - jest-get-type@^22.1.0: 2976 - version "22.4.3" 2977 - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" 2978 - integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== 2979 - 2980 - jest-haste-map@^23.6.0: 2981 - version "23.6.0" 2982 - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" 2983 - integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg== 2984 - dependencies: 2985 - fb-watchman "^2.0.0" 2986 - graceful-fs "^4.1.11" 2987 - invariant "^2.2.4" 2988 - jest-docblock "^23.2.0" 2989 - jest-serializer "^23.0.1" 2990 - jest-worker "^23.2.0" 2991 - micromatch "^2.3.11" 2992 - sane "^2.0.0" 2993 - 2994 - jest-jasmine2@^23.6.0: 2995 - version "23.6.0" 2996 - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" 2997 - integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ== 2998 - dependencies: 2999 - babel-traverse "^6.0.0" 3000 - chalk "^2.0.1" 3001 - co "^4.6.0" 3002 - expect "^23.6.0" 3003 - is-generator-fn "^1.0.0" 3004 - jest-diff "^23.6.0" 3005 - jest-each "^23.6.0" 3006 - jest-matcher-utils "^23.6.0" 3007 - jest-message-util "^23.4.0" 3008 - jest-snapshot "^23.6.0" 3009 - jest-util "^23.4.0" 3010 - pretty-format "^23.6.0" 3011 - 3012 - jest-leak-detector@^23.6.0: 3013 - version "23.6.0" 3014 - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" 3015 - integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg== 3016 - dependencies: 3017 - pretty-format "^23.6.0" 3018 - 3019 - jest-matcher-utils@^23.6.0: 3020 - version "23.6.0" 3021 - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" 3022 - integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog== 3023 - dependencies: 3024 - chalk "^2.0.1" 3025 - jest-get-type "^22.1.0" 3026 - pretty-format "^23.6.0" 3027 - 3028 - jest-message-util@^23.4.0: 3029 - version "23.4.0" 3030 - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" 3031 - integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8= 3032 - dependencies: 3033 - "@babel/code-frame" "^7.0.0-beta.35" 3034 - chalk "^2.0.1" 3035 - micromatch "^2.3.11" 3036 - slash "^1.0.0" 3037 - stack-utils "^1.0.1" 3038 - 3039 - jest-mock@^23.2.0: 3040 - version "23.2.0" 3041 - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" 3042 - integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ= 3043 - 3044 - jest-regex-util@^23.3.0: 3045 - version "23.3.0" 3046 - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" 3047 - integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U= 3048 - 3049 - jest-resolve-dependencies@^23.6.0: 3050 - version "23.6.0" 3051 - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" 3052 - integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA== 3053 - dependencies: 3054 - jest-regex-util "^23.3.0" 3055 - jest-snapshot "^23.6.0" 3056 - 3057 - jest-resolve@^23.6.0: 3058 - version "23.6.0" 3059 - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" 3060 - integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA== 3061 - dependencies: 3062 - browser-resolve "^1.11.3" 3063 - chalk "^2.0.1" 3064 - realpath-native "^1.0.0" 3065 - 3066 - jest-runner@^23.6.0: 3067 - version "23.6.0" 3068 - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" 3069 - integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA== 3070 - dependencies: 3071 - exit "^0.1.2" 3072 - graceful-fs "^4.1.11" 3073 - jest-config "^23.6.0" 3074 - jest-docblock "^23.2.0" 3075 - jest-haste-map "^23.6.0" 3076 - jest-jasmine2 "^23.6.0" 3077 - jest-leak-detector "^23.6.0" 3078 - jest-message-util "^23.4.0" 3079 - jest-runtime "^23.6.0" 3080 - jest-util "^23.4.0" 3081 - jest-worker "^23.2.0" 3082 - source-map-support "^0.5.6" 3083 - throat "^4.0.0" 3084 - 3085 - jest-runtime@^23.6.0: 3086 - version "23.6.0" 3087 - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" 3088 - integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw== 3089 - dependencies: 3090 - babel-core "^6.0.0" 3091 - babel-plugin-istanbul "^4.1.6" 3092 - chalk "^2.0.1" 3093 - convert-source-map "^1.4.0" 3094 - exit "^0.1.2" 3095 - fast-json-stable-stringify "^2.0.0" 3096 - graceful-fs "^4.1.11" 3097 - jest-config "^23.6.0" 3098 - jest-haste-map "^23.6.0" 3099 - jest-message-util "^23.4.0" 3100 - jest-regex-util "^23.3.0" 3101 - jest-resolve "^23.6.0" 3102 - jest-snapshot "^23.6.0" 3103 - jest-util "^23.4.0" 3104 - jest-validate "^23.6.0" 3105 - micromatch "^2.3.11" 3106 - realpath-native "^1.0.0" 3107 - slash "^1.0.0" 3108 - strip-bom "3.0.0" 3109 - write-file-atomic "^2.1.0" 3110 - yargs "^11.0.0" 3111 - 3112 - jest-serializer@^23.0.1: 3113 - version "23.0.1" 3114 - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" 3115 - integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= 3116 - 3117 - jest-snapshot@^23.6.0: 3118 - version "23.6.0" 3119 - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" 3120 - integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg== 3121 - dependencies: 3122 - babel-types "^6.0.0" 3123 - chalk "^2.0.1" 3124 - jest-diff "^23.6.0" 3125 - jest-matcher-utils "^23.6.0" 3126 - jest-message-util "^23.4.0" 3127 - jest-resolve "^23.6.0" 3128 - mkdirp "^0.5.1" 3129 - natural-compare "^1.4.0" 3130 - pretty-format "^23.6.0" 3131 - semver "^5.5.0" 3132 - 3133 - jest-util@^23.4.0: 3134 - version "23.4.0" 3135 - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" 3136 - integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE= 3137 - dependencies: 3138 - callsites "^2.0.0" 3139 - chalk "^2.0.1" 3140 - graceful-fs "^4.1.11" 3141 - is-ci "^1.0.10" 3142 - jest-message-util "^23.4.0" 3143 - mkdirp "^0.5.1" 3144 - slash "^1.0.0" 3145 - source-map "^0.6.0" 3146 - 3147 - jest-validate@^23.6.0: 3148 - version "23.6.0" 3149 - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" 3150 - integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== 3151 - dependencies: 3152 - chalk "^2.0.1" 3153 - jest-get-type "^22.1.0" 3154 - leven "^2.1.0" 3155 - pretty-format "^23.6.0" 3156 - 3157 - jest-watcher@^23.4.0: 3158 - version "23.4.0" 3159 - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" 3160 - integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw= 3161 - dependencies: 3162 - ansi-escapes "^3.0.0" 3163 - chalk "^2.0.1" 3164 - string-length "^2.0.0" 3165 - 3166 - jest-worker@^23.2.0: 3167 - version "23.2.0" 3168 - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" 3169 - integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= 3170 - dependencies: 3171 - merge-stream "^1.0.1" 3172 - 3173 - jest@^23.5.0: 3174 - version "23.6.0" 3175 - resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" 3176 - integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw== 3177 - dependencies: 3178 - import-local "^1.0.0" 3179 - jest-cli "^23.6.0" 3180 - 3181 - js-base64@^2.1.9: 3182 - version "2.5.0" 3183 - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.0.tgz#42255ba183ab67ce59a0dee640afdc00ab5ae93e" 3184 - integrity sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g== 3185 - 3186 - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 3187 - version "4.0.0" 3188 - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 3189 - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 3190 - 3191 - js-tokens@^3.0.2: 3192 - version "3.0.2" 3193 - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 3194 - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= 3195 - 3196 - js-yaml@^3.11.0, js-yaml@^3.12.0, js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0: 3197 - version "3.12.1" 3198 - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" 3199 - integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA== 3200 - dependencies: 3201 - argparse "^1.0.7" 3202 - esprima "^4.0.0" 3203 - 3204 - js-yaml@~3.7.0: 3205 - version "3.7.0" 3206 - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" 3207 - integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= 3208 - dependencies: 3209 - argparse "^1.0.7" 3210 - esprima "^2.6.0" 3211 - 3212 - jsbn@~0.1.0: 3213 - version "0.1.1" 3214 - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 3215 - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 3216 - 3217 - jsdom@^11.5.1: 3218 - version "11.12.0" 3219 - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" 3220 - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== 3221 - dependencies: 3222 - abab "^2.0.0" 3223 - acorn "^5.5.3" 3224 - acorn-globals "^4.1.0" 3225 - array-equal "^1.0.0" 3226 - cssom ">= 0.3.2 < 0.4.0" 3227 - cssstyle "^1.0.0" 3228 - data-urls "^1.0.0" 3229 - domexception "^1.0.1" 3230 - escodegen "^1.9.1" 3231 - html-encoding-sniffer "^1.0.2" 3232 - left-pad "^1.3.0" 3233 - nwsapi "^2.0.7" 3234 - parse5 "4.0.0" 3235 - pn "^1.1.0" 3236 - request "^2.87.0" 3237 - request-promise-native "^1.0.5" 3238 - sax "^1.2.4" 3239 - symbol-tree "^3.2.2" 3240 - tough-cookie "^2.3.4" 3241 - w3c-hr-time "^1.0.1" 3242 - webidl-conversions "^4.0.2" 3243 - whatwg-encoding "^1.0.3" 3244 - whatwg-mimetype "^2.1.0" 3245 - whatwg-url "^6.4.1" 3246 - ws "^5.2.0" 3247 - xml-name-validator "^3.0.0" 3248 - 3249 - jsesc@^1.3.0: 3250 - version "1.3.0" 3251 - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 3252 - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= 3253 - 3254 - jsesc@^2.5.1: 3255 - version "2.5.2" 3256 - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 3257 - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 3258 - 3259 - jsesc@~0.5.0: 3260 - version "0.5.0" 3261 - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 3262 - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= 3263 - 3264 - json-parse-better-errors@^1.0.1: 3265 - version "1.0.2" 3266 - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 3267 - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 3268 - 3269 - json-schema-traverse@^0.4.1: 3270 - version "0.4.1" 3271 - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 3272 - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 3273 - 3274 - json-schema@0.2.3: 3275 - version "0.2.3" 3276 - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 3277 - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 3278 - 3279 - json-stringify-safe@~5.0.1: 3280 - version "5.0.1" 3281 - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 3282 - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 3283 - 3284 - json5@^0.5.0, json5@^0.5.1: 3285 - version "0.5.1" 3286 - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 3287 - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= 3288 - 3289 - json5@^2.1.0: 3290 - version "2.1.0" 3291 - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" 3292 - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== 3293 - dependencies: 3294 - minimist "^1.2.0" 3295 - 3296 - jsonfile@^4.0.0: 3297 - version "4.0.0" 3298 - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 3299 - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 3300 - optionalDependencies: 3301 - graceful-fs "^4.1.6" 3302 - 3303 - jsonify@~0.0.0: 3304 - version "0.0.0" 3305 - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 3306 - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= 3307 - 3308 - jsprim@^1.2.2: 3309 - version "1.4.1" 3310 - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 3311 - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 3312 - dependencies: 3313 - assert-plus "1.0.0" 3314 - extsprintf "1.3.0" 3315 - json-schema "0.2.3" 3316 - verror "1.10.0" 3317 - 3318 - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 3319 - version "3.2.2" 3320 - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 3321 - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 3322 - dependencies: 3323 - is-buffer "^1.1.5" 3324 - 3325 - kind-of@^4.0.0: 3326 - version "4.0.0" 3327 - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 3328 - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= 3329 - dependencies: 3330 - is-buffer "^1.1.5" 3331 - 3332 - kind-of@^5.0.0: 3333 - version "5.1.0" 3334 - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 3335 - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 3336 - 3337 - kind-of@^6.0.0, kind-of@^6.0.2: 3338 - version "6.0.2" 3339 - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 3340 - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== 3341 - 3342 - kleur@^2.0.1: 3343 - version "2.0.2" 3344 - resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" 3345 - integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== 3346 - 3347 - lcid@^1.0.0: 3348 - version "1.0.0" 3349 - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 3350 - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= 3351 - dependencies: 3352 - invert-kv "^1.0.0" 3353 - 3354 - lcov-parse@^0.0.10: 3355 - version "0.0.10" 3356 - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" 3357 - integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= 3358 - 3359 - left-pad@^1.3.0: 3360 - version "1.3.0" 3361 - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" 3362 - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== 3363 - 3364 - leven@^2.1.0: 3365 - version "2.1.0" 3366 - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" 3367 - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= 3368 - 3369 - levn@~0.3.0: 3370 - version "0.3.0" 3371 - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 3372 - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 3373 - dependencies: 3374 - prelude-ls "~1.1.2" 3375 - type-check "~0.3.2" 3376 - 3377 - load-json-file@^1.0.0: 3378 - version "1.1.0" 3379 - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 3380 - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= 3381 - dependencies: 3382 - graceful-fs "^4.1.2" 3383 - parse-json "^2.2.0" 3384 - pify "^2.0.0" 3385 - pinkie-promise "^2.0.0" 3386 - strip-bom "^2.0.0" 3387 - 3388 - load-json-file@^4.0.0: 3389 - version "4.0.0" 3390 - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 3391 - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 3392 - dependencies: 3393 - graceful-fs "^4.1.2" 3394 - parse-json "^4.0.0" 3395 - pify "^3.0.0" 3396 - strip-bom "^3.0.0" 3397 - 3398 - loader-utils@^0.2.16: 3399 - version "0.2.17" 3400 - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" 3401 - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= 3402 - dependencies: 3403 - big.js "^3.1.3" 3404 - emojis-list "^2.0.0" 3405 - json5 "^0.5.0" 3406 - object-assign "^4.0.1" 3407 - 3408 - locate-path@^2.0.0: 3409 - version "2.0.0" 3410 - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 3411 - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 3412 - dependencies: 3413 - p-locate "^2.0.0" 3414 - path-exists "^3.0.0" 3415 - 3416 - lodash.camelcase@^4.3.0: 3417 - version "4.3.0" 3418 - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 3419 - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 3420 - 3421 - lodash.foreach@^4.5.0: 3422 - version "4.5.0" 3423 - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" 3424 - integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= 3425 - 3426 - lodash.memoize@^4.1.2: 3427 - version "4.1.2" 3428 - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 3429 - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= 3430 - 3431 - lodash.sortby@^4.7.0: 3432 - version "4.7.0" 3433 - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 3434 - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 3435 - 3436 - lodash.sumby@^4.6.0: 3437 - version "4.6.0" 3438 - resolved "https://registry.yarnpkg.com/lodash.sumby/-/lodash.sumby-4.6.0.tgz#7d87737ddb216da2f7e5e7cd2dd9c403a7887346" 3439 - integrity sha1-fYdzfdshbaL35efNLdnEA6eIc0Y= 3440 - 3441 - lodash.uniq@^4.5.0: 3442 - version "4.5.0" 3443 - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" 3444 - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= 3445 - 3446 - lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4: 3447 - version "4.17.11" 3448 - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 3449 - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== 3450 - 3451 - log-driver@^1.2.7: 3452 - version "1.2.7" 3453 - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" 3454 - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== 3455 - 3456 - loose-envify@^1.0.0: 3457 - version "1.4.0" 3458 - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 3459 - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 3460 - dependencies: 3461 - js-tokens "^3.0.0 || ^4.0.0" 3462 - 3463 - lru-cache@^4.0.1: 3464 - version "4.1.5" 3465 - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 3466 - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 3467 - dependencies: 3468 - pseudomap "^1.0.2" 3469 - yallist "^2.1.2" 3470 - 3471 - magic-string@^0.22.4: 3472 - version "0.22.5" 3473 - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" 3474 - integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== 3475 - dependencies: 3476 - vlq "^0.2.2" 3477 - 3478 - magic-string@^0.25.1: 3479 - version "0.25.1" 3480 - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" 3481 - integrity sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg== 3482 - dependencies: 3483 - sourcemap-codec "^1.4.1" 3484 - 3485 - makeerror@1.0.x: 3486 - version "1.0.11" 3487 - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" 3488 - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= 3489 - dependencies: 3490 - tmpl "1.0.x" 3491 - 3492 - map-cache@^0.2.2: 3493 - version "0.2.2" 3494 - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 3495 - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 3496 - 3497 - map-visit@^1.0.0: 3498 - version "1.0.0" 3499 - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 3500 - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= 3501 - dependencies: 3502 - object-visit "^1.0.0" 3503 - 3504 - math-expression-evaluator@^1.2.14: 3505 - version "1.2.17" 3506 - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" 3507 - integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= 3508 - 3509 - math-random@^1.0.1: 3510 - version "1.0.1" 3511 - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" 3512 - integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= 3513 - 3514 - maxmin@^2.1.0: 3515 - version "2.1.0" 3516 - resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" 3517 - integrity sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY= 3518 - dependencies: 3519 - chalk "^1.0.0" 3520 - figures "^1.0.1" 3521 - gzip-size "^3.0.0" 3522 - pretty-bytes "^3.0.0" 3523 - 3524 - mdn-data@~1.1.0: 3525 - version "1.1.4" 3526 - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" 3527 - integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== 3528 - 3529 - mem@^1.1.0: 3530 - version "1.1.0" 3531 - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 3532 - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= 3533 - dependencies: 3534 - mimic-fn "^1.0.0" 3535 - 3536 - memorystream@^0.3.1: 3537 - version "0.3.1" 3538 - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" 3539 - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= 3540 - 3541 - merge-stream@^1.0.1: 3542 - version "1.0.1" 3543 - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" 3544 - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= 3545 - dependencies: 3546 - readable-stream "^2.0.1" 3547 - 3548 - merge@^1.2.0: 3549 - version "1.2.1" 3550 - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" 3551 - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== 3552 - 3553 - microbundle@^0.9.0: 3554 - version "0.9.0" 3555 - resolved "https://registry.yarnpkg.com/microbundle/-/microbundle-0.9.0.tgz#bbec53047ff238c592aba0e5fd8fea3ce7654de3" 3556 - integrity sha512-wceG5fWCig3AKUpYmlzBSGrPgtbO1y5zFxpgLQxQq67crWYYKAvjH6qRFHgIbslrhWckomu9B410fdfECdeXWw== 3557 - dependencies: 3558 - "@babel/core" "^7.1.6" 3559 - "@babel/plugin-proposal-class-properties" "7.1.0" 3560 - "@babel/plugin-syntax-jsx" "^7.0.0" 3561 - "@babel/polyfill" "^7.0.0" 3562 - asyncro "^3.0.0" 3563 - autoprefixer "^9.0.0" 3564 - babel-plugin-transform-async-to-promises "^0.8.3" 3565 - brotli-size "^0.0.3" 3566 - camelcase "^5.0.0" 3567 - chalk "^2.4.0" 3568 - cssnano "^4.1.7" 3569 - es6-promisify "^6.0.1" 3570 - gzip-size "^5.0.0" 3571 - pretty-bytes "^5.1.0" 3572 - rollup "^0.67.3" 3573 - rollup-plugin-babel "^4.1.0-0" 3574 - rollup-plugin-buble "^0.19.4" 3575 - rollup-plugin-bundle-size "^1.0.1" 3576 - rollup-plugin-commonjs "^9.0.0" 3577 - rollup-plugin-es3 "^1.1.0" 3578 - rollup-plugin-flow "^1.1.1" 3579 - rollup-plugin-json "^3.1.0" 3580 - rollup-plugin-node-resolve "^3.3.0" 3581 - rollup-plugin-postcss "^1.6.1" 3582 - rollup-plugin-preserve-shebang "^0.1.6" 3583 - rollup-plugin-sizes "^0.4.2" 3584 - rollup-plugin-terser "^3.0.0" 3585 - rollup-plugin-typescript2 "^0.18.0" 3586 - sade "^1.4.0" 3587 - tiny-glob "^0.2.6" 3588 - tslib "^1.9.0" 3589 - typescript ">=2.8.3" 3590 - 3591 - micromatch@^2.3.11: 3592 - version "2.3.11" 3593 - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 3594 - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= 3595 - dependencies: 3596 - arr-diff "^2.0.0" 3597 - array-unique "^0.2.1" 3598 - braces "^1.8.2" 3599 - expand-brackets "^0.1.4" 3600 - extglob "^0.3.1" 3601 - filename-regex "^2.0.0" 3602 - is-extglob "^1.0.0" 3603 - is-glob "^2.0.1" 3604 - kind-of "^3.0.2" 3605 - normalize-path "^2.0.1" 3606 - object.omit "^2.0.0" 3607 - parse-glob "^3.0.4" 3608 - regex-cache "^0.4.2" 3609 - 3610 - micromatch@^3.1.4: 3611 - version "3.1.10" 3612 - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 3613 - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== 3614 - dependencies: 3615 - arr-diff "^4.0.0" 3616 - array-unique "^0.3.2" 3617 - braces "^2.3.1" 3618 - define-property "^2.0.2" 3619 - extend-shallow "^3.0.2" 3620 - extglob "^2.0.4" 3621 - fragment-cache "^0.2.1" 3622 - kind-of "^6.0.2" 3623 - nanomatch "^1.2.9" 3624 - object.pick "^1.3.0" 3625 - regex-not "^1.0.0" 3626 - snapdragon "^0.8.1" 3627 - to-regex "^3.0.2" 3628 - 3629 - mime-db@~1.37.0: 3630 - version "1.37.0" 3631 - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" 3632 - integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg== 3633 - 3634 - mime-types@^2.1.12, mime-types@~2.1.19: 3635 - version "2.1.21" 3636 - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" 3637 - integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== 3638 - dependencies: 3639 - mime-db "~1.37.0" 3640 - 3641 - mimic-fn@^1.0.0: 3642 - version "1.2.0" 3643 - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 3644 - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 3645 - 3646 - mimic-response@^1.0.0: 3647 - version "1.0.1" 3648 - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 3649 - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 3650 - 3651 - minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: 3652 - version "3.0.4" 3653 - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 3654 - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 3655 - dependencies: 3656 - brace-expansion "^1.1.7" 3657 - 3658 - minimist@0.0.8: 3659 - version "0.0.8" 3660 - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 3661 - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 3662 - 3663 - minimist@^1.1.1, minimist@^1.2.0: 3664 - version "1.2.0" 3665 - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 3666 - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 3667 - 3668 - minimist@~0.0.1: 3669 - version "0.0.10" 3670 - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 3671 - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= 3672 - 3673 - minipass@^2.2.1, minipass@^2.3.4: 3674 - version "2.3.5" 3675 - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" 3676 - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== 3677 - dependencies: 3678 - safe-buffer "^5.1.2" 3679 - yallist "^3.0.0" 3680 - 3681 - minizlib@^1.1.1: 3682 - version "1.2.1" 3683 - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" 3684 - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== 3685 - dependencies: 3686 - minipass "^2.2.1" 3687 - 3688 - mixin-deep@^1.2.0: 3689 - version "1.3.1" 3690 - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 3691 - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== 3692 - dependencies: 3693 - for-in "^1.0.2" 3694 - is-extendable "^1.0.1" 3695 - 3696 - "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: 3697 - version "0.5.1" 3698 - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 3699 - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 3700 - dependencies: 3701 - minimist "0.0.8" 3702 - 3703 - module-details-from-path@^1.0.3: 3704 - version "1.0.3" 3705 - resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" 3706 - integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= 3707 - 3708 - mri@^1.1.0: 3709 - version "1.1.4" 3710 - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" 3711 - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== 3712 - 3713 - ms@2.0.0: 3714 - version "2.0.0" 3715 - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 3716 - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 3717 - 3718 - ms@^2.1.1: 3719 - version "2.1.1" 3720 - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 3721 - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 3722 - 3723 - nan@^2.6.2, nan@^2.9.2: 3724 - version "2.12.1" 3725 - resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" 3726 - integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw== 3727 - 3728 - nanomatch@^1.2.9: 3729 - version "1.2.13" 3730 - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 3731 - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== 3732 - dependencies: 3733 - arr-diff "^4.0.0" 3734 - array-unique "^0.3.2" 3735 - define-property "^2.0.2" 3736 - extend-shallow "^3.0.2" 3737 - fragment-cache "^0.2.1" 3738 - is-windows "^1.0.2" 3739 - kind-of "^6.0.2" 3740 - object.pick "^1.3.0" 3741 - regex-not "^1.0.0" 3742 - snapdragon "^0.8.1" 3743 - to-regex "^3.0.1" 3744 - 3745 - napi-build-utils@^1.0.1: 3746 - version "1.0.1" 3747 - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" 3748 - integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA== 3749 - 3750 - natural-compare@^1.4.0: 3751 - version "1.4.0" 3752 - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 3753 - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 3754 - 3755 - needle@^2.2.1: 3756 - version "2.2.4" 3757 - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" 3758 - integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== 3759 - dependencies: 3760 - debug "^2.1.2" 3761 - iconv-lite "^0.4.4" 3762 - sax "^1.2.4" 3763 - 3764 - nice-try@^1.0.4: 3765 - version "1.0.5" 3766 - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 3767 - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 3768 - 3769 - node-abi@^2.2.0: 3770 - version "2.5.1" 3771 - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.5.1.tgz#bb17288fc3b2f68fea0ed9897c66979fd754ed47" 3772 - integrity sha512-oDbFc7vCFx0RWWCweTer3hFm1u+e60N5FtGnmRV6QqvgATGFH/XRR6vqWIeBVosCYCqt6YdIr2L0exLZuEdVcQ== 3773 - dependencies: 3774 - semver "^5.4.1" 3775 - 3776 - node-gyp@^3.6.2: 3777 - version "3.8.0" 3778 - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" 3779 - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== 3780 - dependencies: 3781 - fstream "^1.0.0" 3782 - glob "^7.0.3" 3783 - graceful-fs "^4.1.2" 3784 - mkdirp "^0.5.0" 3785 - nopt "2 || 3" 3786 - npmlog "0 || 1 || 2 || 3 || 4" 3787 - osenv "0" 3788 - request "^2.87.0" 3789 - rimraf "2" 3790 - semver "~5.3.0" 3791 - tar "^2.0.0" 3792 - which "1" 3793 - 3794 - node-int64@^0.4.0: 3795 - version "0.4.0" 3796 - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 3797 - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= 3798 - 3799 - node-notifier@^5.2.1: 3800 - version "5.3.0" 3801 - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz#c77a4a7b84038733d5fb351aafd8a268bfe19a01" 3802 - integrity sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q== 3803 - dependencies: 3804 - growly "^1.3.0" 3805 - semver "^5.5.0" 3806 - shellwords "^0.1.1" 3807 - which "^1.3.0" 3808 - 3809 - node-pre-gyp@^0.10.0: 3810 - version "0.10.3" 3811 - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" 3812 - integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== 3813 - dependencies: 3814 - detect-libc "^1.0.2" 3815 - mkdirp "^0.5.1" 3816 - needle "^2.2.1" 3817 - nopt "^4.0.1" 3818 - npm-packlist "^1.1.6" 3819 - npmlog "^4.0.2" 3820 - rc "^1.2.7" 3821 - rimraf "^2.6.1" 3822 - semver "^5.3.0" 3823 - tar "^4" 3824 - 3825 - node-releases@^1.1.3: 3826 - version "1.1.3" 3827 - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.3.tgz#aad9ce0dcb98129c753f772c0aa01360fb90fbd2" 3828 - integrity sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ== 3829 - dependencies: 3830 - semver "^5.3.0" 3831 - 3832 - noop-logger@^0.1.1: 3833 - version "0.1.1" 3834 - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" 3835 - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= 3836 - 3837 - "nopt@2 || 3": 3838 - version "3.0.6" 3839 - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 3840 - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= 3841 - dependencies: 3842 - abbrev "1" 3843 - 3844 - nopt@^4.0.1: 3845 - version "4.0.1" 3846 - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 3847 - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= 3848 - dependencies: 3849 - abbrev "1" 3850 - osenv "^0.1.4" 3851 - 3852 - normalize-package-data@^2.3.2: 3853 - version "2.4.0" 3854 - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 3855 - integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== 3856 - dependencies: 3857 - hosted-git-info "^2.1.4" 3858 - is-builtin-module "^1.0.0" 3859 - semver "2 || 3 || 4 || 5" 3860 - validate-npm-package-license "^3.0.1" 3861 - 3862 - normalize-path@^2.0.1, normalize-path@^2.1.1: 3863 - version "2.1.1" 3864 - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 3865 - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= 3866 - dependencies: 3867 - remove-trailing-separator "^1.0.1" 3868 - 3869 - normalize-range@^0.1.2: 3870 - version "0.1.2" 3871 - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 3872 - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= 3873 - 3874 - normalize-url@^1.4.0: 3875 - version "1.9.1" 3876 - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" 3877 - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= 3878 - dependencies: 3879 - object-assign "^4.0.1" 3880 - prepend-http "^1.0.0" 3881 - query-string "^4.1.0" 3882 - sort-keys "^1.0.0" 3883 - 3884 - normalize-url@^3.0.0: 3885 - version "3.3.0" 3886 - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" 3887 - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== 3888 - 3889 - npm-bundled@^1.0.1: 3890 - version "1.0.5" 3891 - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" 3892 - integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== 3893 - 3894 - npm-packlist@^1.1.6: 3895 - version "1.2.0" 3896 - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.2.0.tgz#55a60e793e272f00862c7089274439a4cc31fc7f" 3897 - integrity sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ== 3898 - dependencies: 3899 - ignore-walk "^3.0.1" 3900 - npm-bundled "^1.0.1" 3901 - 3902 - npm-run-all@^4.1.5: 3903 - version "4.1.5" 3904 - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" 3905 - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== 3906 - dependencies: 3907 - ansi-styles "^3.2.1" 3908 - chalk "^2.4.1" 3909 - cross-spawn "^6.0.5" 3910 - memorystream "^0.3.1" 3911 - minimatch "^3.0.4" 3912 - pidtree "^0.3.0" 3913 - read-pkg "^3.0.0" 3914 - shell-quote "^1.6.1" 3915 - string.prototype.padend "^3.0.0" 3916 - 3917 - npm-run-path@^2.0.0: 3918 - version "2.0.2" 3919 - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 3920 - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 3921 - dependencies: 3922 - path-key "^2.0.0" 3923 - 3924 - "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: 3925 - version "4.1.2" 3926 - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 3927 - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 3928 - dependencies: 3929 - are-we-there-yet "~1.1.2" 3930 - console-control-strings "~1.1.0" 3931 - gauge "~2.7.3" 3932 - set-blocking "~2.0.0" 3933 - 3934 - nth-check@^1.0.2: 3935 - version "1.0.2" 3936 - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" 3937 - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== 3938 - dependencies: 3939 - boolbase "~1.0.0" 3940 - 3941 - num2fraction@^1.2.2: 3942 - version "1.2.2" 3943 - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" 3944 - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= 3945 - 3946 - number-is-nan@^1.0.0: 3947 - version "1.0.1" 3948 - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 3949 - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 3950 - 3951 - nwsapi@^2.0.7: 3952 - version "2.0.9" 3953 - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" 3954 - integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== 3955 - 3956 - oauth-sign@~0.9.0: 3957 - version "0.9.0" 3958 - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 3959 - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 3960 - 3961 - object-assign@^4.0.1, object-assign@^4.1.0: 3962 - version "4.1.1" 3963 - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 3964 - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 3965 - 3966 - object-copy@^0.1.0: 3967 - version "0.1.0" 3968 - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 3969 - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= 3970 - dependencies: 3971 - copy-descriptor "^0.1.0" 3972 - define-property "^0.2.5" 3973 - kind-of "^3.0.3" 3974 - 3975 - object-keys@^1.0.12: 3976 - version "1.0.12" 3977 - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" 3978 - integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== 3979 - 3980 - object-visit@^1.0.0: 3981 - version "1.0.1" 3982 - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 3983 - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= 3984 - dependencies: 3985 - isobject "^3.0.0" 3986 - 3987 - object.getownpropertydescriptors@^2.0.3: 3988 - version "2.0.3" 3989 - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 3990 - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= 3991 - dependencies: 3992 - define-properties "^1.1.2" 3993 - es-abstract "^1.5.1" 3994 - 3995 - object.omit@^2.0.0: 3996 - version "2.0.1" 3997 - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 3998 - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= 3999 - dependencies: 4000 - for-own "^0.1.4" 4001 - is-extendable "^0.1.1" 4002 - 4003 - object.pick@^1.3.0: 4004 - version "1.3.0" 4005 - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 4006 - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= 4007 - dependencies: 4008 - isobject "^3.0.1" 4009 - 4010 - object.values@^1.0.4: 4011 - version "1.1.0" 4012 - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" 4013 - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== 4014 - dependencies: 4015 - define-properties "^1.1.3" 4016 - es-abstract "^1.12.0" 4017 - function-bind "^1.1.1" 4018 - has "^1.0.3" 4019 - 4020 - once@^1.3.0, once@^1.3.1, once@^1.4.0: 4021 - version "1.4.0" 4022 - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 4023 - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 4024 - dependencies: 4025 - wrappy "1" 4026 - 4027 - optimist@^0.6.1: 4028 - version "0.6.1" 4029 - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 4030 - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 4031 - dependencies: 4032 - minimist "~0.0.1" 4033 - wordwrap "~0.0.2" 4034 - 4035 - optionator@^0.8.1: 4036 - version "0.8.2" 4037 - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 4038 - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 4039 - dependencies: 4040 - deep-is "~0.1.3" 4041 - fast-levenshtein "~2.0.4" 4042 - levn "~0.3.0" 4043 - prelude-ls "~1.1.2" 4044 - type-check "~0.3.2" 4045 - wordwrap "~1.0.0" 4046 - 4047 - os-homedir@^1.0.0, os-homedir@^1.0.1: 4048 - version "1.0.2" 4049 - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 4050 - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 4051 - 4052 - os-locale@^2.0.0: 4053 - version "2.1.0" 4054 - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" 4055 - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== 4056 - dependencies: 4057 - execa "^0.7.0" 4058 - lcid "^1.0.0" 4059 - mem "^1.1.0" 4060 - 4061 - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: 4062 - version "1.0.2" 4063 - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 4064 - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 4065 - 4066 - osenv@0, osenv@^0.1.4: 4067 - version "0.1.5" 4068 - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 4069 - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 4070 - dependencies: 4071 - os-homedir "^1.0.0" 4072 - os-tmpdir "^1.0.0" 4073 - 4074 - p-finally@^1.0.0: 4075 - version "1.0.0" 4076 - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 4077 - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 4078 - 4079 - p-limit@^1.1.0: 4080 - version "1.3.0" 4081 - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 4082 - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 4083 - dependencies: 4084 - p-try "^1.0.0" 4085 - 4086 - p-locate@^2.0.0: 4087 - version "2.0.0" 4088 - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 4089 - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 4090 - dependencies: 4091 - p-limit "^1.1.0" 4092 - 4093 - p-queue@^2.4.2: 4094 - version "2.4.2" 4095 - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" 4096 - integrity sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng== 4097 - 4098 - p-try@^1.0.0: 4099 - version "1.0.0" 4100 - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 4101 - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 4102 - 4103 - parse-glob@^3.0.4: 4104 - version "3.0.4" 4105 - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 4106 - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= 4107 - dependencies: 4108 - glob-base "^0.3.0" 4109 - is-dotfile "^1.0.0" 4110 - is-extglob "^1.0.0" 4111 - is-glob "^2.0.0" 4112 - 4113 - parse-json@^2.2.0: 4114 - version "2.2.0" 4115 - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 4116 - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 4117 - dependencies: 4118 - error-ex "^1.2.0" 4119 - 4120 - parse-json@^4.0.0: 4121 - version "4.0.0" 4122 - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 4123 - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 4124 - dependencies: 4125 - error-ex "^1.3.1" 4126 - json-parse-better-errors "^1.0.1" 4127 - 4128 - parse5@4.0.0: 4129 - version "4.0.0" 4130 - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" 4131 - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== 4132 - 4133 - pascalcase@^0.1.1: 4134 - version "0.1.1" 4135 - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 4136 - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= 4137 - 4138 - path-exists@^2.0.0: 4139 - version "2.1.0" 4140 - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 4141 - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= 4142 - dependencies: 4143 - pinkie-promise "^2.0.0" 4144 - 4145 - path-exists@^3.0.0: 4146 - version "3.0.0" 4147 - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 4148 - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 4149 - 4150 - path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 4151 - version "1.0.1" 4152 - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 4153 - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 4154 - 4155 - path-key@^2.0.0, path-key@^2.0.1: 4156 - version "2.0.1" 4157 - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 4158 - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 4159 - 4160 - path-parse@^1.0.5, path-parse@^1.0.6: 4161 - version "1.0.6" 4162 - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 4163 - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 4164 - 4165 - path-type@^1.0.0: 4166 - version "1.1.0" 4167 - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 4168 - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= 4169 - dependencies: 4170 - graceful-fs "^4.1.2" 4171 - pify "^2.0.0" 4172 - pinkie-promise "^2.0.0" 4173 - 4174 - path-type@^3.0.0: 4175 - version "3.0.0" 4176 - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 4177 - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 4178 - dependencies: 4179 - pify "^3.0.0" 4180 - 4181 - performance-now@^2.1.0: 4182 - version "2.1.0" 4183 - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 4184 - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 4185 - 4186 - pidtree@^0.3.0: 4187 - version "0.3.0" 4188 - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" 4189 - integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== 4190 - 4191 - pify@^2.0.0: 4192 - version "2.3.0" 4193 - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 4194 - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 4195 - 4196 - pify@^3.0.0: 4197 - version "3.0.0" 4198 - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 4199 - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 4200 - 4201 - pinkie-promise@^2.0.0: 4202 - version "2.0.1" 4203 - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 4204 - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 4205 - dependencies: 4206 - pinkie "^2.0.0" 4207 - 4208 - pinkie@^2.0.0: 4209 - version "2.0.4" 4210 - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 4211 - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 4212 - 4213 - pkg-dir@^2.0.0: 4214 - version "2.0.0" 4215 - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" 4216 - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 4217 - dependencies: 4218 - find-up "^2.1.0" 4219 - 4220 - pn@^1.1.0: 4221 - version "1.1.0" 4222 - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" 4223 - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== 4224 - 4225 - posix-character-classes@^0.1.0: 4226 - version "0.1.1" 4227 - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 4228 - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= 4229 - 4230 - postcss-calc@^5.2.0: 4231 - version "5.3.1" 4232 - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" 4233 - integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= 4234 - dependencies: 4235 - postcss "^5.0.2" 4236 - postcss-message-helpers "^2.0.0" 4237 - reduce-css-calc "^1.2.6" 4238 - 4239 - postcss-calc@^7.0.0: 4240 - version "7.0.1" 4241 - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" 4242 - integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== 4243 - dependencies: 4244 - css-unit-converter "^1.1.1" 4245 - postcss "^7.0.5" 4246 - postcss-selector-parser "^5.0.0-rc.4" 4247 - postcss-value-parser "^3.3.1" 4248 - 4249 - postcss-colormin@^2.1.8: 4250 - version "2.2.2" 4251 - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" 4252 - integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= 4253 - dependencies: 4254 - colormin "^1.0.5" 4255 - postcss "^5.0.13" 4256 - postcss-value-parser "^3.2.3" 4257 - 4258 - postcss-colormin@^4.0.2: 4259 - version "4.0.2" 4260 - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" 4261 - integrity sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw== 4262 - dependencies: 4263 - browserslist "^4.0.0" 4264 - color "^3.0.0" 4265 - has "^1.0.0" 4266 - postcss "^7.0.0" 4267 - postcss-value-parser "^3.0.0" 4268 - 4269 - postcss-convert-values@^2.3.4: 4270 - version "2.6.1" 4271 - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" 4272 - integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= 4273 - dependencies: 4274 - postcss "^5.0.11" 4275 - postcss-value-parser "^3.1.2" 4276 - 4277 - postcss-convert-values@^4.0.1: 4278 - version "4.0.1" 4279 - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" 4280 - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== 4281 - dependencies: 4282 - postcss "^7.0.0" 4283 - postcss-value-parser "^3.0.0" 4284 - 4285 - postcss-discard-comments@^2.0.4: 4286 - version "2.0.4" 4287 - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" 4288 - integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= 4289 - dependencies: 4290 - postcss "^5.0.14" 4291 - 4292 - postcss-discard-comments@^4.0.1: 4293 - version "4.0.1" 4294 - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" 4295 - integrity sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ== 4296 - dependencies: 4297 - postcss "^7.0.0" 4298 - 4299 - postcss-discard-duplicates@^2.0.1: 4300 - version "2.1.0" 4301 - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" 4302 - integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= 4303 - dependencies: 4304 - postcss "^5.0.4" 4305 - 4306 - postcss-discard-duplicates@^4.0.2: 4307 - version "4.0.2" 4308 - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" 4309 - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== 4310 - dependencies: 4311 - postcss "^7.0.0" 4312 - 4313 - postcss-discard-empty@^2.0.1: 4314 - version "2.1.0" 4315 - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" 4316 - integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= 4317 - dependencies: 4318 - postcss "^5.0.14" 4319 - 4320 - postcss-discard-empty@^4.0.1: 4321 - version "4.0.1" 4322 - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" 4323 - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== 4324 - dependencies: 4325 - postcss "^7.0.0" 4326 - 4327 - postcss-discard-overridden@^0.1.1: 4328 - version "0.1.1" 4329 - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" 4330 - integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= 4331 - dependencies: 4332 - postcss "^5.0.16" 4333 - 4334 - postcss-discard-overridden@^4.0.1: 4335 - version "4.0.1" 4336 - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" 4337 - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== 4338 - dependencies: 4339 - postcss "^7.0.0" 4340 - 4341 - postcss-discard-unused@^2.2.1: 4342 - version "2.2.3" 4343 - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" 4344 - integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= 4345 - dependencies: 4346 - postcss "^5.0.14" 4347 - uniqs "^2.0.0" 4348 - 4349 - postcss-filter-plugins@^2.0.0: 4350 - version "2.0.3" 4351 - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" 4352 - integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== 4353 - dependencies: 4354 - postcss "^5.0.4" 4355 - 4356 - postcss-load-config@^1.2.0: 4357 - version "1.2.0" 4358 - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" 4359 - integrity sha1-U56a/J3chiASHr+djDZz4M5Q0oo= 4360 - dependencies: 4361 - cosmiconfig "^2.1.0" 4362 - object-assign "^4.1.0" 4363 - postcss-load-options "^1.2.0" 4364 - postcss-load-plugins "^2.3.0" 4365 - 4366 - postcss-load-options@^1.2.0: 4367 - version "1.2.0" 4368 - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" 4369 - integrity sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw= 4370 - dependencies: 4371 - cosmiconfig "^2.1.0" 4372 - object-assign "^4.1.0" 4373 - 4374 - postcss-load-plugins@^2.3.0: 4375 - version "2.3.0" 4376 - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" 4377 - integrity sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI= 4378 - dependencies: 4379 - cosmiconfig "^2.1.1" 4380 - object-assign "^4.1.0" 4381 - 4382 - postcss-merge-idents@^2.1.5: 4383 - version "2.1.7" 4384 - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" 4385 - integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= 4386 - dependencies: 4387 - has "^1.0.1" 4388 - postcss "^5.0.10" 4389 - postcss-value-parser "^3.1.1" 4390 - 4391 - postcss-merge-longhand@^2.0.1: 4392 - version "2.0.2" 4393 - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" 4394 - integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= 4395 - dependencies: 4396 - postcss "^5.0.4" 4397 - 4398 - postcss-merge-longhand@^4.0.10: 4399 - version "4.0.10" 4400 - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz#c4d63ab57bdc054ab4067ab075d488c8c2978380" 4401 - integrity sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g== 4402 - dependencies: 4403 - css-color-names "0.0.4" 4404 - postcss "^7.0.0" 4405 - postcss-value-parser "^3.0.0" 4406 - stylehacks "^4.0.0" 4407 - 4408 - postcss-merge-rules@^2.0.3: 4409 - version "2.1.2" 4410 - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" 4411 - integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= 4412 - dependencies: 4413 - browserslist "^1.5.2" 4414 - caniuse-api "^1.5.2" 4415 - postcss "^5.0.4" 4416 - postcss-selector-parser "^2.2.2" 4417 - vendors "^1.0.0" 4418 - 4419 - postcss-merge-rules@^4.0.2: 4420 - version "4.0.2" 4421 - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" 4422 - integrity sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag== 4423 - dependencies: 4424 - browserslist "^4.0.0" 4425 - caniuse-api "^3.0.0" 4426 - cssnano-util-same-parent "^4.0.0" 4427 - postcss "^7.0.0" 4428 - postcss-selector-parser "^3.0.0" 4429 - vendors "^1.0.0" 4430 - 4431 - postcss-message-helpers@^2.0.0: 4432 - version "2.0.0" 4433 - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" 4434 - integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= 4435 - 4436 - postcss-minify-font-values@^1.0.2: 4437 - version "1.0.5" 4438 - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" 4439 - integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= 4440 - dependencies: 4441 - object-assign "^4.0.1" 4442 - postcss "^5.0.4" 4443 - postcss-value-parser "^3.0.2" 4444 - 4445 - postcss-minify-font-values@^4.0.2: 4446 - version "4.0.2" 4447 - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" 4448 - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== 4449 - dependencies: 4450 - postcss "^7.0.0" 4451 - postcss-value-parser "^3.0.0" 4452 - 4453 - postcss-minify-gradients@^1.0.1: 4454 - version "1.0.5" 4455 - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" 4456 - integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= 4457 - dependencies: 4458 - postcss "^5.0.12" 4459 - postcss-value-parser "^3.3.0" 4460 - 4461 - postcss-minify-gradients@^4.0.1: 4462 - version "4.0.1" 4463 - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" 4464 - integrity sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA== 4465 - dependencies: 4466 - cssnano-util-get-arguments "^4.0.0" 4467 - is-color-stop "^1.0.0" 4468 - postcss "^7.0.0" 4469 - postcss-value-parser "^3.0.0" 4470 - 4471 - postcss-minify-params@^1.0.4: 4472 - version "1.2.2" 4473 - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" 4474 - integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= 4475 - dependencies: 4476 - alphanum-sort "^1.0.1" 4477 - postcss "^5.0.2" 4478 - postcss-value-parser "^3.0.2" 4479 - uniqs "^2.0.0" 4480 - 4481 - postcss-minify-params@^4.0.1: 4482 - version "4.0.1" 4483 - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" 4484 - integrity sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg== 4485 - dependencies: 4486 - alphanum-sort "^1.0.0" 4487 - browserslist "^4.0.0" 4488 - cssnano-util-get-arguments "^4.0.0" 4489 - postcss "^7.0.0" 4490 - postcss-value-parser "^3.0.0" 4491 - uniqs "^2.0.0" 4492 - 4493 - postcss-minify-selectors@^2.0.4: 4494 - version "2.1.1" 4495 - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" 4496 - integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= 4497 - dependencies: 4498 - alphanum-sort "^1.0.2" 4499 - has "^1.0.1" 4500 - postcss "^5.0.14" 4501 - postcss-selector-parser "^2.0.0" 4502 - 4503 - postcss-minify-selectors@^4.0.1: 4504 - version "4.0.1" 4505 - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" 4506 - integrity sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg== 4507 - dependencies: 4508 - alphanum-sort "^1.0.0" 4509 - has "^1.0.0" 4510 - postcss "^7.0.0" 4511 - postcss-selector-parser "^3.0.0" 4512 - 4513 - postcss-modules-extract-imports@1.1.0: 4514 - version "1.1.0" 4515 - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" 4516 - integrity sha1-thTJcgvmgW6u41+zpfqh26agXds= 4517 - dependencies: 4518 - postcss "^6.0.1" 4519 - 4520 - postcss-modules-local-by-default@1.2.0: 4521 - version "1.2.0" 4522 - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" 4523 - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= 4524 - dependencies: 4525 - css-selector-tokenizer "^0.7.0" 4526 - postcss "^6.0.1" 4527 - 4528 - postcss-modules-scope@1.1.0: 4529 - version "1.1.0" 4530 - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" 4531 - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= 4532 - dependencies: 4533 - css-selector-tokenizer "^0.7.0" 4534 - postcss "^6.0.1" 4535 - 4536 - postcss-modules-values@1.3.0: 4537 - version "1.3.0" 4538 - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" 4539 - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= 4540 - dependencies: 4541 - icss-replace-symbols "^1.1.0" 4542 - postcss "^6.0.1" 4543 - 4544 - postcss-modules@^1.1.0: 4545 - version "1.4.1" 4546 - resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef" 4547 - integrity sha512-btTrbK+Xc3NBuYF8TPBjCMRSp5h6NoQ1iVZ6WiDQENIze6KIYCSf0+UFQuV3yJ7gRHA+4AAtF8i2jRvUpbBMMg== 4548 - dependencies: 4549 - css-modules-loader-core "^1.1.0" 4550 - generic-names "^1.0.3" 4551 - lodash.camelcase "^4.3.0" 4552 - postcss "^7.0.1" 4553 - string-hash "^1.1.1" 4554 - 4555 - postcss-normalize-charset@^1.1.0: 4556 - version "1.1.1" 4557 - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" 4558 - integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= 4559 - dependencies: 4560 - postcss "^5.0.5" 4561 - 4562 - postcss-normalize-charset@^4.0.1: 4563 - version "4.0.1" 4564 - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" 4565 - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== 4566 - dependencies: 4567 - postcss "^7.0.0" 4568 - 4569 - postcss-normalize-display-values@^4.0.1: 4570 - version "4.0.1" 4571 - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" 4572 - integrity sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg== 4573 - dependencies: 4574 - cssnano-util-get-match "^4.0.0" 4575 - postcss "^7.0.0" 4576 - postcss-value-parser "^3.0.0" 4577 - 4578 - postcss-normalize-positions@^4.0.1: 4579 - version "4.0.1" 4580 - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" 4581 - integrity sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA== 4582 - dependencies: 4583 - cssnano-util-get-arguments "^4.0.0" 4584 - has "^1.0.0" 4585 - postcss "^7.0.0" 4586 - postcss-value-parser "^3.0.0" 4587 - 4588 - postcss-normalize-repeat-style@^4.0.1: 4589 - version "4.0.1" 4590 - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" 4591 - integrity sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA== 4592 - dependencies: 4593 - cssnano-util-get-arguments "^4.0.0" 4594 - cssnano-util-get-match "^4.0.0" 4595 - postcss "^7.0.0" 4596 - postcss-value-parser "^3.0.0" 4597 - 4598 - postcss-normalize-string@^4.0.1: 4599 - version "4.0.1" 4600 - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" 4601 - integrity sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ== 4602 - dependencies: 4603 - has "^1.0.0" 4604 - postcss "^7.0.0" 4605 - postcss-value-parser "^3.0.0" 4606 - 4607 - postcss-normalize-timing-functions@^4.0.1: 4608 - version "4.0.1" 4609 - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" 4610 - integrity sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w== 4611 - dependencies: 4612 - cssnano-util-get-match "^4.0.0" 4613 - postcss "^7.0.0" 4614 - postcss-value-parser "^3.0.0" 4615 - 4616 - postcss-normalize-unicode@^4.0.1: 4617 - version "4.0.1" 4618 - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" 4619 - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== 4620 - dependencies: 4621 - browserslist "^4.0.0" 4622 - postcss "^7.0.0" 4623 - postcss-value-parser "^3.0.0" 4624 - 4625 - postcss-normalize-url@^3.0.7: 4626 - version "3.0.8" 4627 - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" 4628 - integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= 4629 - dependencies: 4630 - is-absolute-url "^2.0.0" 4631 - normalize-url "^1.4.0" 4632 - postcss "^5.0.14" 4633 - postcss-value-parser "^3.2.3" 4634 - 4635 - postcss-normalize-url@^4.0.1: 4636 - version "4.0.1" 4637 - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" 4638 - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== 4639 - dependencies: 4640 - is-absolute-url "^2.0.0" 4641 - normalize-url "^3.0.0" 4642 - postcss "^7.0.0" 4643 - postcss-value-parser "^3.0.0" 4644 - 4645 - postcss-normalize-whitespace@^4.0.1: 4646 - version "4.0.1" 4647 - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" 4648 - integrity sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw== 4649 - dependencies: 4650 - postcss "^7.0.0" 4651 - postcss-value-parser "^3.0.0" 4652 - 4653 - postcss-ordered-values@^2.1.0: 4654 - version "2.2.3" 4655 - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" 4656 - integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= 4657 - dependencies: 4658 - postcss "^5.0.4" 4659 - postcss-value-parser "^3.0.1" 4660 - 4661 - postcss-ordered-values@^4.1.1: 4662 - version "4.1.1" 4663 - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" 4664 - integrity sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q== 4665 - dependencies: 4666 - cssnano-util-get-arguments "^4.0.0" 4667 - postcss "^7.0.0" 4668 - postcss-value-parser "^3.0.0" 4669 - 4670 - postcss-reduce-idents@^2.2.2: 4671 - version "2.4.0" 4672 - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" 4673 - integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= 4674 - dependencies: 4675 - postcss "^5.0.4" 4676 - postcss-value-parser "^3.0.2" 4677 - 4678 - postcss-reduce-initial@^1.0.0: 4679 - version "1.0.1" 4680 - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" 4681 - integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= 4682 - dependencies: 4683 - postcss "^5.0.4" 4684 - 4685 - postcss-reduce-initial@^4.0.2: 4686 - version "4.0.2" 4687 - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" 4688 - integrity sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug== 4689 - dependencies: 4690 - browserslist "^4.0.0" 4691 - caniuse-api "^3.0.0" 4692 - has "^1.0.0" 4693 - postcss "^7.0.0" 4694 - 4695 - postcss-reduce-transforms@^1.0.3: 4696 - version "1.0.4" 4697 - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" 4698 - integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= 4699 - dependencies: 4700 - has "^1.0.1" 4701 - postcss "^5.0.8" 4702 - postcss-value-parser "^3.0.1" 4703 - 4704 - postcss-reduce-transforms@^4.0.1: 4705 - version "4.0.1" 4706 - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" 4707 - integrity sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA== 4708 - dependencies: 4709 - cssnano-util-get-match "^4.0.0" 4710 - has "^1.0.0" 4711 - postcss "^7.0.0" 4712 - postcss-value-parser "^3.0.0" 4713 - 4714 - postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: 4715 - version "2.2.3" 4716 - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" 4717 - integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= 4718 - dependencies: 4719 - flatten "^1.0.2" 4720 - indexes-of "^1.0.1" 4721 - uniq "^1.0.1" 4722 - 4723 - postcss-selector-parser@^3.0.0: 4724 - version "3.1.1" 4725 - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" 4726 - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= 4727 - dependencies: 4728 - dot-prop "^4.1.1" 4729 - indexes-of "^1.0.1" 4730 - uniq "^1.0.1" 4731 - 4732 - postcss-selector-parser@^5.0.0-rc.4: 4733 - version "5.0.0" 4734 - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" 4735 - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== 4736 - dependencies: 4737 - cssesc "^2.0.0" 4738 - indexes-of "^1.0.1" 4739 - uniq "^1.0.1" 4740 - 4741 - postcss-svgo@^2.1.1: 4742 - version "2.1.6" 4743 - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" 4744 - integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= 4745 - dependencies: 4746 - is-svg "^2.0.0" 4747 - postcss "^5.0.14" 4748 - postcss-value-parser "^3.2.3" 4749 - svgo "^0.7.0" 4750 - 4751 - postcss-svgo@^4.0.1: 4752 - version "4.0.1" 4753 - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" 4754 - integrity sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw== 4755 - dependencies: 4756 - is-svg "^3.0.0" 4757 - postcss "^7.0.0" 4758 - postcss-value-parser "^3.0.0" 4759 - svgo "^1.0.0" 4760 - 4761 - postcss-unique-selectors@^2.0.2: 4762 - version "2.0.2" 4763 - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" 4764 - integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= 4765 - dependencies: 4766 - alphanum-sort "^1.0.1" 4767 - postcss "^5.0.4" 4768 - uniqs "^2.0.0" 4769 - 4770 - postcss-unique-selectors@^4.0.1: 4771 - version "4.0.1" 4772 - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" 4773 - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== 4774 - dependencies: 4775 - alphanum-sort "^1.0.0" 4776 - postcss "^7.0.0" 4777 - uniqs "^2.0.0" 4778 - 4779 - postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: 4780 - version "3.3.1" 4781 - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" 4782 - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== 4783 - 4784 - postcss-zindex@^2.0.1: 4785 - version "2.2.0" 4786 - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" 4787 - integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= 4788 - dependencies: 4789 - has "^1.0.1" 4790 - postcss "^5.0.4" 4791 - uniqs "^2.0.0" 4792 - 4793 - postcss@6.0.1: 4794 - version "6.0.1" 4795 - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" 4796 - integrity sha1-AA29H47vIXqjaLmiEsX8QLKo8/I= 4797 - dependencies: 4798 - chalk "^1.1.3" 4799 - source-map "^0.5.6" 4800 - supports-color "^3.2.3" 4801 - 4802 - postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16: 4803 - version "5.2.18" 4804 - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" 4805 - integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== 4806 - dependencies: 4807 - chalk "^1.1.3" 4808 - js-base64 "^2.1.9" 4809 - source-map "^0.5.6" 4810 - supports-color "^3.2.3" 4811 - 4812 - postcss@^6.0.1, postcss@^6.0.21: 4813 - version "6.0.23" 4814 - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" 4815 - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== 4816 - dependencies: 4817 - chalk "^2.4.1" 4818 - source-map "^0.6.1" 4819 - supports-color "^5.4.0" 4820 - 4821 - postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.11, postcss@^7.0.5: 4822 - version "7.0.11" 4823 - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.11.tgz#f63c513b78026d66263bb2ca995bf02e3d1a697d" 4824 - integrity sha512-9AXb//5UcjeOEof9T+yPw3XTa5SL207ZOIC/lHYP4mbUTEh4M0rDAQekQpVANCZdwQwKhBtFZCk3i3h3h2hdWg== 4825 - dependencies: 4826 - chalk "^2.4.2" 4827 - source-map "^0.6.1" 4828 - supports-color "^6.1.0" 4829 - 4830 - prebuild-install@^2.3.0: 4831 - version "2.5.3" 4832 - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69" 4833 - integrity sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g== 4834 - dependencies: 4835 - detect-libc "^1.0.3" 4836 - expand-template "^1.0.2" 4837 - github-from-package "0.0.0" 4838 - minimist "^1.2.0" 4839 - mkdirp "^0.5.1" 4840 - node-abi "^2.2.0" 4841 - noop-logger "^0.1.1" 4842 - npmlog "^4.0.1" 4843 - os-homedir "^1.0.1" 4844 - pump "^2.0.1" 4845 - rc "^1.1.6" 4846 - simple-get "^2.7.0" 4847 - tar-fs "^1.13.0" 4848 - tunnel-agent "^0.6.0" 4849 - which-pm-runs "^1.0.0" 4850 - 4851 - prebuild-install@^5.2.1: 4852 - version "5.2.2" 4853 - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.2.tgz#237888f21bfda441d0ee5f5612484390bccd4046" 4854 - integrity sha512-4e8VJnP3zJdZv/uP0eNWmr2r9urp4NECw7Mt1OSAi3rcLrbBRxGiAkfUFtre2MhQ5wfREAjRV+K1gubvs/GPsA== 4855 - dependencies: 4856 - detect-libc "^1.0.3" 4857 - expand-template "^2.0.3" 4858 - github-from-package "0.0.0" 4859 - minimist "^1.2.0" 4860 - mkdirp "^0.5.1" 4861 - napi-build-utils "^1.0.1" 4862 - node-abi "^2.2.0" 4863 - noop-logger "^0.1.1" 4864 - npmlog "^4.0.1" 4865 - os-homedir "^1.0.1" 4866 - pump "^2.0.1" 4867 - rc "^1.2.7" 4868 - simple-get "^2.7.0" 4869 - tar-fs "^1.13.0" 4870 - tunnel-agent "^0.6.0" 4871 - which-pm-runs "^1.0.0" 4872 - 4873 - prelude-ls@~1.1.2: 4874 - version "1.1.2" 4875 - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 4876 - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 4877 - 4878 - prepend-http@^1.0.0: 4879 - version "1.0.4" 4880 - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 4881 - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= 4882 - 4883 - preserve@^0.2.0: 4884 - version "0.2.0" 4885 - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 4886 - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= 4887 - 4888 - prettier@^1.15.3: 4889 - version "1.15.3" 4890 - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a" 4891 - integrity sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg== 4892 - 4893 - pretty-bytes@^3.0.0: 4894 - version "3.0.1" 4895 - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" 4896 - integrity sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8= 4897 - dependencies: 4898 - number-is-nan "^1.0.0" 4899 - 4900 - pretty-bytes@^5.1.0: 4901 - version "5.1.0" 4902 - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.1.0.tgz#6237ecfbdc6525beaef4de722cc60a58ae0e6c6d" 4903 - integrity sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA== 4904 - 4905 - pretty-format@^23.6.0: 4906 - version "23.6.0" 4907 - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" 4908 - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== 4909 - dependencies: 4910 - ansi-regex "^3.0.0" 4911 - ansi-styles "^3.2.0" 4912 - 4913 - prettycli@^1.4.3: 4914 - version "1.4.3" 4915 - resolved "https://registry.yarnpkg.com/prettycli/-/prettycli-1.4.3.tgz#b28ec2aad9de07ae1fd75ef294fb54cbdee07ed5" 4916 - integrity sha512-KLiwAXXfSWXZqGmZlnKPuGMTFp+0QbcySplL1ft9gfteT/BNsG64Xo8u2Qr9r+qnsIZWBQ66Zs8tg+8s2fmzvw== 4917 - dependencies: 4918 - chalk "2.1.0" 4919 - 4920 - private@^0.1.8: 4921 - version "0.1.8" 4922 - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 4923 - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== 4924 - 4925 - process-nextick-args@~2.0.0: 4926 - version "2.0.0" 4927 - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 4928 - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== 4929 - 4930 - promise.series@^0.2.0: 4931 - version "0.2.0" 4932 - resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" 4933 - integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70= 4934 - 4935 - prompts@^0.1.9: 4936 - version "0.1.14" 4937 - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" 4938 - integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w== 4939 - dependencies: 4940 - kleur "^2.0.1" 4941 - sisteransi "^0.1.1" 4942 - 4943 - pseudomap@^1.0.2: 4944 - version "1.0.2" 4945 - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 4946 - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 4947 - 4948 - psl@^1.1.24, psl@^1.1.28: 4949 - version "1.1.31" 4950 - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" 4951 - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== 4952 - 4953 - pump@^1.0.0: 4954 - version "1.0.3" 4955 - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" 4956 - integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== 4957 - dependencies: 4958 - end-of-stream "^1.1.0" 4959 - once "^1.3.1" 4960 - 4961 - pump@^2.0.1: 4962 - version "2.0.1" 4963 - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" 4964 - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== 4965 - dependencies: 4966 - end-of-stream "^1.1.0" 4967 - once "^1.3.1" 4968 - 4969 - punycode@^1.4.1: 4970 - version "1.4.1" 4971 - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 4972 - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 4973 - 4974 - punycode@^2.1.0, punycode@^2.1.1: 4975 - version "2.1.1" 4976 - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 4977 - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 4978 - 4979 - q@^1.1.2: 4980 - version "1.5.1" 4981 - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" 4982 - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= 4983 - 4984 - qs@~6.5.2: 4985 - version "6.5.2" 4986 - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 4987 - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 4988 - 4989 - query-string@^4.1.0: 4990 - version "4.3.4" 4991 - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" 4992 - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= 4993 - dependencies: 4994 - object-assign "^4.1.0" 4995 - strict-uri-encode "^1.0.0" 4996 - 4997 - randomatic@^3.0.0: 4998 - version "3.1.1" 4999 - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" 5000 - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== 5001 - dependencies: 5002 - is-number "^4.0.0" 5003 - kind-of "^6.0.0" 5004 - math-random "^1.0.1" 5005 - 5006 - rc@^1.1.6, rc@^1.2.7: 5007 - version "1.2.8" 5008 - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 5009 - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 5010 - dependencies: 5011 - deep-extend "^0.6.0" 5012 - ini "~1.3.0" 5013 - minimist "^1.2.0" 5014 - strip-json-comments "~2.0.1" 5015 - 5016 - read-pkg-up@^1.0.1: 5017 - version "1.0.1" 5018 - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 5019 - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= 5020 - dependencies: 5021 - find-up "^1.0.0" 5022 - read-pkg "^1.0.0" 5023 - 5024 - read-pkg-up@^3.0.0: 5025 - version "3.0.0" 5026 - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" 5027 - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= 5028 - dependencies: 5029 - find-up "^2.0.0" 5030 - read-pkg "^3.0.0" 5031 - 5032 - read-pkg@^1.0.0: 5033 - version "1.1.0" 5034 - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 5035 - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= 5036 - dependencies: 5037 - load-json-file "^1.0.0" 5038 - normalize-package-data "^2.3.2" 5039 - path-type "^1.0.0" 5040 - 5041 - read-pkg@^3.0.0: 5042 - version "3.0.0" 5043 - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 5044 - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 5045 - dependencies: 5046 - load-json-file "^4.0.0" 5047 - normalize-package-data "^2.3.2" 5048 - path-type "^3.0.0" 5049 - 5050 - readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: 5051 - version "2.3.6" 5052 - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 5053 - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 5054 - dependencies: 5055 - core-util-is "~1.0.0" 5056 - inherits "~2.0.3" 5057 - isarray "~1.0.0" 5058 - process-nextick-args "~2.0.0" 5059 - safe-buffer "~5.1.1" 5060 - string_decoder "~1.1.1" 5061 - util-deprecate "~1.0.1" 5062 - 5063 - realpath-native@^1.0.0: 5064 - version "1.0.2" 5065 - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" 5066 - integrity sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g== 5067 - dependencies: 5068 - util.promisify "^1.0.0" 5069 - 5070 - reduce-css-calc@^1.2.6: 5071 - version "1.3.0" 5072 - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" 5073 - integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= 5074 - dependencies: 5075 - balanced-match "^0.4.2" 5076 - math-expression-evaluator "^1.2.14" 5077 - reduce-function-call "^1.0.1" 5078 - 5079 - reduce-function-call@^1.0.1: 5080 - version "1.0.2" 5081 - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" 5082 - integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= 5083 - dependencies: 5084 - balanced-match "^0.4.2" 5085 - 5086 - regenerate-unicode-properties@^7.0.0: 5087 - version "7.0.0" 5088 - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" 5089 - integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw== 5090 - dependencies: 5091 - regenerate "^1.4.0" 5092 - 5093 - regenerate@^1.2.1, regenerate@^1.4.0: 5094 - version "1.4.0" 5095 - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" 5096 - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== 5097 - 5098 - regenerator-runtime@^0.11.0: 5099 - version "0.11.1" 5100 - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 5101 - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== 5102 - 5103 - regenerator-runtime@^0.12.0: 5104 - version "0.12.1" 5105 - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" 5106 - integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== 5107 - 5108 - regex-cache@^0.4.2: 5109 - version "0.4.4" 5110 - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 5111 - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== 5112 - dependencies: 5113 - is-equal-shallow "^0.1.3" 5114 - 5115 - regex-not@^1.0.0, regex-not@^1.0.2: 5116 - version "1.0.2" 5117 - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 5118 - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 5119 - dependencies: 5120 - extend-shallow "^3.0.2" 5121 - safe-regex "^1.1.0" 5122 - 5123 - regexpu-core@^1.0.0: 5124 - version "1.0.0" 5125 - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" 5126 - integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= 5127 - dependencies: 5128 - regenerate "^1.2.1" 5129 - regjsgen "^0.2.0" 5130 - regjsparser "^0.1.4" 5131 - 5132 - regexpu-core@^4.2.0: 5133 - version "4.4.0" 5134 - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" 5135 - integrity sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA== 5136 - dependencies: 5137 - regenerate "^1.4.0" 5138 - regenerate-unicode-properties "^7.0.0" 5139 - regjsgen "^0.5.0" 5140 - regjsparser "^0.6.0" 5141 - unicode-match-property-ecmascript "^1.0.4" 5142 - unicode-match-property-value-ecmascript "^1.0.2" 5143 - 5144 - regjsgen@^0.2.0: 5145 - version "0.2.0" 5146 - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 5147 - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= 5148 - 5149 - regjsgen@^0.5.0: 5150 - version "0.5.0" 5151 - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" 5152 - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== 5153 - 5154 - regjsparser@^0.1.4: 5155 - version "0.1.5" 5156 - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 5157 - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= 5158 - dependencies: 5159 - jsesc "~0.5.0" 5160 - 5161 - regjsparser@^0.6.0: 5162 - version "0.6.0" 5163 - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" 5164 - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== 5165 - dependencies: 5166 - jsesc "~0.5.0" 5167 - 5168 - remove-trailing-separator@^1.0.1: 5169 - version "1.1.0" 5170 - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 5171 - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= 5172 - 5173 - repeat-element@^1.1.2: 5174 - version "1.1.3" 5175 - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 5176 - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== 5177 - 5178 - repeat-string@^1.5.2, repeat-string@^1.6.1: 5179 - version "1.6.1" 5180 - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 5181 - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 5182 - 5183 - repeating@^2.0.0: 5184 - version "2.0.1" 5185 - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 5186 - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= 5187 - dependencies: 5188 - is-finite "^1.0.0" 5189 - 5190 - request-promise-core@1.1.1: 5191 - version "1.1.1" 5192 - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" 5193 - integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY= 5194 - dependencies: 5195 - lodash "^4.13.1" 5196 - 5197 - request-promise-native@^1.0.5: 5198 - version "1.0.5" 5199 - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" 5200 - integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU= 5201 - dependencies: 5202 - request-promise-core "1.1.1" 5203 - stealthy-require "^1.1.0" 5204 - tough-cookie ">=2.3.3" 5205 - 5206 - request@^2.85.0, request@^2.87.0: 5207 - version "2.88.0" 5208 - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 5209 - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== 5210 - dependencies: 5211 - aws-sign2 "~0.7.0" 5212 - aws4 "^1.8.0" 5213 - caseless "~0.12.0" 5214 - combined-stream "~1.0.6" 5215 - extend "~3.0.2" 5216 - forever-agent "~0.6.1" 5217 - form-data "~2.3.2" 5218 - har-validator "~5.1.0" 5219 - http-signature "~1.2.0" 5220 - is-typedarray "~1.0.0" 5221 - isstream "~0.1.2" 5222 - json-stringify-safe "~5.0.1" 5223 - mime-types "~2.1.19" 5224 - oauth-sign "~0.9.0" 5225 - performance-now "^2.1.0" 5226 - qs "~6.5.2" 5227 - safe-buffer "^5.1.2" 5228 - tough-cookie "~2.4.3" 5229 - tunnel-agent "^0.6.0" 5230 - uuid "^3.3.2" 5231 - 5232 - require-directory@^2.1.1: 5233 - version "2.1.1" 5234 - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 5235 - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 5236 - 5237 - require-from-string@^1.1.0: 5238 - version "1.2.1" 5239 - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" 5240 - integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= 5241 - 5242 - require-main-filename@^1.0.1: 5243 - version "1.0.1" 5244 - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 5245 - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 5246 - 5247 - reserved-words@^0.1.2: 5248 - version "0.1.2" 5249 - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" 5250 - integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= 5251 - 5252 - resolve-cwd@^2.0.0: 5253 - version "2.0.0" 5254 - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" 5255 - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= 5256 - dependencies: 5257 - resolve-from "^3.0.0" 5258 - 5259 - resolve-from@^3.0.0: 5260 - version "3.0.0" 5261 - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" 5262 - integrity sha1-six699nWiBvItuZTM17rywoYh0g= 5263 - 5264 - resolve-url@^0.2.1: 5265 - version "0.2.1" 5266 - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 5267 - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 5268 - 5269 - resolve@1.1.7: 5270 - version "1.1.7" 5271 - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 5272 - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 5273 - 5274 - resolve@1.8.1: 5275 - version "1.8.1" 5276 - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" 5277 - integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== 5278 - dependencies: 5279 - path-parse "^1.0.5" 5280 - 5281 - resolve@^1.1.6, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: 5282 - version "1.9.0" 5283 - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" 5284 - integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ== 5285 - dependencies: 5286 - path-parse "^1.0.6" 5287 - 5288 - ret@~0.1.10: 5289 - version "0.1.15" 5290 - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 5291 - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 5292 - 5293 - rgb-regex@^1.0.1: 5294 - version "1.0.1" 5295 - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" 5296 - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= 5297 - 5298 - rgba-regex@^1.0.0: 5299 - version "1.0.0" 5300 - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" 5301 - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= 5302 - 5303 - rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: 5304 - version "2.6.3" 5305 - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 5306 - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 5307 - dependencies: 5308 - glob "^7.1.3" 5309 - 5310 - rollup-plugin-babel@^4.1.0-0: 5311 - version "4.3.0" 5312 - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.0.tgz#1900e66af70c3975fef26a54111b87ee22a50974" 5313 - integrity sha512-HoNMaLA56MPZ9XCeG+RD2QzTySVe168R/k6bPEm8noB9PSK8wBnY4matFluwmH2Bj3PQdqYAknV1jDqw8GAc8g== 5314 - dependencies: 5315 - "@babel/helper-module-imports" "^7.0.0" 5316 - rollup-pluginutils "^2.3.0" 5317 - 5318 - rollup-plugin-buble@^0.19.4: 5319 - version "0.19.6" 5320 - resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.19.6.tgz#55ee0995d8870d536f01f4277c3eef4276e8747e" 5321 - integrity sha512-El5Fut4/wEO17ZN/n9BZvqd7DXXB2WbJr/DKvr89LXChC/cHllE0XwiUDeAalrTkgr0WrnyLDTCQvEv+cGywWQ== 5322 - dependencies: 5323 - buble "^0.19.6" 5324 - rollup-pluginutils "^2.3.3" 5325 - 5326 - rollup-plugin-bundle-size@^1.0.1: 5327 - version "1.0.2" 5328 - resolved "https://registry.yarnpkg.com/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.2.tgz#9943ad2c7629d7d71cfeff18b0ee07a96b3b9388" 5329 - integrity sha512-yWeab5WeTAIIV0dI3wLkTBrwsLkC33/VnMRRpItPbsPDK99YK4sSkaSdw/4kzs86FA5ZFl21bVFaxnqlPVZr1g== 5330 - dependencies: 5331 - chalk "^1.1.3" 5332 - maxmin "^2.1.0" 5333 - 5334 - rollup-plugin-commonjs@^9.0.0: 5335 - version "9.2.0" 5336 - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" 5337 - integrity sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA== 5338 - dependencies: 5339 - estree-walker "^0.5.2" 5340 - magic-string "^0.25.1" 5341 - resolve "^1.8.1" 5342 - rollup-pluginutils "^2.3.3" 5343 - 5344 - rollup-plugin-es3@^1.1.0: 5345 - version "1.1.0" 5346 - resolved "https://registry.yarnpkg.com/rollup-plugin-es3/-/rollup-plugin-es3-1.1.0.tgz#f866f91b4db839e5b475d8e4a7b9d4c77ecade14" 5347 - integrity sha512-jTMqQgMZ/tkjRW4scf4ln5c0OiTSi+Lx/IEyFd41ldgGoLvvg9AQxmVOl93+KaoyB7XRYToYjiHDvO40NPF/fA== 5348 - dependencies: 5349 - magic-string "^0.22.4" 5350 - 5351 - rollup-plugin-flow@^1.1.1: 5352 - version "1.1.1" 5353 - resolved "https://registry.yarnpkg.com/rollup-plugin-flow/-/rollup-plugin-flow-1.1.1.tgz#6ce568f1dd559666b77ab76b4bae251407528db6" 5354 - integrity sha1-bOVo8d1Vlma3erdrS64lFAdSjbY= 5355 - dependencies: 5356 - flow-remove-types "^1.1.0" 5357 - rollup-pluginutils "^1.5.1" 5358 - 5359 - rollup-plugin-json@^3.1.0: 5360 - version "3.1.0" 5361 - resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz#7c1daf60c46bc21021ea016bd00863561a03321b" 5362 - integrity sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw== 5363 - dependencies: 5364 - rollup-pluginutils "^2.3.1" 5365 - 5366 - rollup-plugin-node-resolve@^3.3.0: 5367 - version "3.4.0" 5368 - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" 5369 - integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== 5370 - dependencies: 5371 - builtin-modules "^2.0.0" 5372 - is-module "^1.0.0" 5373 - resolve "^1.1.6" 5374 - 5375 - rollup-plugin-postcss@^1.6.1: 5376 - version "1.6.3" 5377 - resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-1.6.3.tgz#18256ba66f29ecd9d42a68f4ef136b92b939ddb8" 5378 - integrity sha512-se1qftVETua9ZGViud4A4gbgEQenjYnLPvjh3kTqbBZU+f0mQ9YvJptIuzPhEk5kZAHZhkwIkk2jk+byrn1XPA== 5379 - dependencies: 5380 - chalk "^2.0.0" 5381 - concat-with-sourcemaps "^1.0.5" 5382 - cssnano "^3.10.0" 5383 - fs-extra "^5.0.0" 5384 - import-cwd "^2.1.0" 5385 - p-queue "^2.4.2" 5386 - pify "^3.0.0" 5387 - postcss "^6.0.21" 5388 - postcss-load-config "^1.2.0" 5389 - postcss-modules "^1.1.0" 5390 - promise.series "^0.2.0" 5391 - reserved-words "^0.1.2" 5392 - resolve "^1.5.0" 5393 - rollup-pluginutils "^2.0.1" 5394 - style-inject "^0.3.0" 5395 - 5396 - rollup-plugin-preserve-shebang@^0.1.6: 5397 - version "0.1.6" 5398 - resolved "https://registry.yarnpkg.com/rollup-plugin-preserve-shebang/-/rollup-plugin-preserve-shebang-0.1.6.tgz#8cfc4c555d4ca87b9fbb7712869158db0e080d4a" 5399 - integrity sha512-b+psdlXZOjmlnKmL6/YAkR8PR15VPcUNXdT35urBRJ8jE6UxHyb4HXeeN3qRZJbMJJaX1eRP72XwH6IvGFh5Jw== 5400 - dependencies: 5401 - magic-string "^0.22.4" 5402 - 5403 - rollup-plugin-sizes@^0.4.2: 5404 - version "0.4.2" 5405 - resolved "https://registry.yarnpkg.com/rollup-plugin-sizes/-/rollup-plugin-sizes-0.4.2.tgz#1d97ecda2667a43afbb19d801e2476f80f67d12f" 5406 - integrity sha512-6VsnWb4aBPcW++3IBMNPo4NLSheoaXh+itXk1OcaolLhYemoQFb7A9hVNocwa0j2BctdmPNFcP7UJ3g///VVaA== 5407 - dependencies: 5408 - filesize "^3.5.11" 5409 - lodash.foreach "^4.5.0" 5410 - lodash.sumby "^4.6.0" 5411 - module-details-from-path "^1.0.3" 5412 - 5413 - rollup-plugin-terser@^3.0.0: 5414 - version "3.0.0" 5415 - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-3.0.0.tgz#045bd7cf625ee1affcfe6971dab6fffe6fb48c65" 5416 - integrity sha512-Ed9zRD7OoCBnh0XGlEAJle5TCUsFXMLClwKzZWnS1zbNO4MelHjfCSdFZxCAdH70M40nhZ1nRrY2GZQJhSMcjA== 5417 - dependencies: 5418 - "@babel/code-frame" "^7.0.0" 5419 - jest-worker "^23.2.0" 5420 - serialize-javascript "^1.5.0" 5421 - terser "^3.8.2" 5422 - 5423 - rollup-plugin-typescript2@^0.18.0: 5424 - version "0.18.1" 5425 - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.18.1.tgz#921865828080a254c088c6bc181ca654e5ef73c6" 5426 - integrity sha512-aR2m5NCCAUV/KpcKgCWX6Giy8rTko9z92b5t0NX9eZyjOftCvcdDFa1C9Ze/9yp590hnRymr5hG0O9SAXi1oUg== 5427 - dependencies: 5428 - fs-extra "7.0.0" 5429 - resolve "1.8.1" 5430 - rollup-pluginutils "2.3.3" 5431 - tslib "1.9.3" 5432 - 5433 - rollup-pluginutils@2.3.3, rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.3.3: 5434 - version "2.3.3" 5435 - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" 5436 - integrity sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA== 5437 - dependencies: 5438 - estree-walker "^0.5.2" 5439 - micromatch "^2.3.11" 5440 - 5441 - rollup-pluginutils@^1.5.1: 5442 - version "1.5.2" 5443 - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" 5444 - integrity sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg= 5445 - dependencies: 5446 - estree-walker "^0.2.1" 5447 - minimatch "^3.0.2" 5448 - 5449 - rollup@^0.67.3: 5450 - version "0.67.4" 5451 - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.67.4.tgz#8ed6b0993337f84ec8a0387f824fa6c197e833ec" 5452 - integrity sha512-AVuP73mkb4BBMUmksQ3Jw0jTrBTU1i7rLiUYjFxLZGb3xiFmtVEg40oByphkZAsiL0bJC3hRAJUQos/e5EBd+w== 5453 - dependencies: 5454 - "@types/estree" "0.0.39" 5455 - "@types/node" "*" 5456 - 5457 - rsvp@^3.3.3: 5458 - version "3.6.2" 5459 - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" 5460 - integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== 5461 - 5462 - sade@^1.4.0: 5463 - version "1.4.2" 5464 - resolved "https://registry.yarnpkg.com/sade/-/sade-1.4.2.tgz#b1946ef9ec62450b74e17d9fec30156c94f193a6" 5465 - integrity sha512-MTrQm+Nhl4m1mbssYDgAculC/HbShjj08QtHnA2GTpzivfU5aUp8EoHlECmrIHEaa8hZRZSp2Gygv8VMlpXEBw== 5466 - dependencies: 5467 - mri "^1.1.0" 5468 - 5469 - safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 5470 - version "5.1.2" 5471 - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 5472 - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 5473 - 5474 - safe-regex@^1.1.0: 5475 - version "1.1.0" 5476 - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 5477 - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= 5478 - dependencies: 5479 - ret "~0.1.10" 5480 - 5481 - "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 5482 - version "2.1.2" 5483 - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 5484 - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 5485 - 5486 - sane@^2.0.0: 5487 - version "2.5.2" 5488 - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" 5489 - integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= 5490 - dependencies: 5491 - anymatch "^2.0.0" 5492 - capture-exit "^1.2.0" 5493 - exec-sh "^0.2.0" 5494 - fb-watchman "^2.0.0" 5495 - micromatch "^3.1.4" 5496 - minimist "^1.1.1" 5497 - walker "~1.0.5" 5498 - watch "~0.18.0" 5499 - optionalDependencies: 5500 - fsevents "^1.2.3" 5501 - 5502 - sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: 5503 - version "1.2.4" 5504 - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 5505 - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 5506 - 5507 - "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: 5508 - version "5.6.0" 5509 - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 5510 - integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== 5511 - 5512 - semver@~5.3.0: 5513 - version "5.3.0" 5514 - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 5515 - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= 5516 - 5517 - serialize-javascript@^1.5.0: 5518 - version "1.6.1" 5519 - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" 5520 - integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== 5521 - 5522 - set-blocking@^2.0.0, set-blocking@~2.0.0: 5523 - version "2.0.0" 5524 - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 5525 - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 5526 - 5527 - set-value@^0.4.3: 5528 - version "0.4.3" 5529 - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 5530 - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= 5531 - dependencies: 5532 - extend-shallow "^2.0.1" 5533 - is-extendable "^0.1.1" 5534 - is-plain-object "^2.0.1" 5535 - to-object-path "^0.3.0" 5536 - 5537 - set-value@^2.0.0: 5538 - version "2.0.0" 5539 - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 5540 - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== 5541 - dependencies: 5542 - extend-shallow "^2.0.1" 5543 - is-extendable "^0.1.1" 5544 - is-plain-object "^2.0.3" 5545 - split-string "^3.0.1" 5546 - 5547 - shebang-command@^1.2.0: 5548 - version "1.2.0" 5549 - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 5550 - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 5551 - dependencies: 5552 - shebang-regex "^1.0.0" 5553 - 5554 - shebang-regex@^1.0.0: 5555 - version "1.0.0" 5556 - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 5557 - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 5558 - 5559 - shell-quote@^1.6.1: 5560 - version "1.6.1" 5561 - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" 5562 - integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= 5563 - dependencies: 5564 - array-filter "~0.0.0" 5565 - array-map "~0.0.0" 5566 - array-reduce "~0.0.0" 5567 - jsonify "~0.0.0" 5568 - 5569 - shellwords@^0.1.1: 5570 - version "0.1.1" 5571 - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" 5572 - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== 5573 - 5574 - signal-exit@^3.0.0, signal-exit@^3.0.2: 5575 - version "3.0.2" 5576 - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 5577 - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 5578 - 5579 - simple-concat@^1.0.0: 5580 - version "1.0.0" 5581 - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" 5582 - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= 5583 - 5584 - simple-get@^2.7.0: 5585 - version "2.8.1" 5586 - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" 5587 - integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== 5588 - dependencies: 5589 - decompress-response "^3.3.0" 5590 - once "^1.3.1" 5591 - simple-concat "^1.0.0" 5592 - 5593 - simple-swizzle@^0.2.2: 5594 - version "0.2.2" 5595 - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" 5596 - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= 5597 - dependencies: 5598 - is-arrayish "^0.3.1" 5599 - 5600 - sisteransi@^0.1.1: 5601 - version "0.1.1" 5602 - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" 5603 - integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== 5604 - 5605 - slash@^1.0.0: 5606 - version "1.0.0" 5607 - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 5608 - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= 5609 - 5610 - snapdragon-node@^2.0.1: 5611 - version "2.1.1" 5612 - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 5613 - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== 5614 - dependencies: 5615 - define-property "^1.0.0" 5616 - isobject "^3.0.0" 5617 - snapdragon-util "^3.0.1" 5618 - 5619 - snapdragon-util@^3.0.1: 5620 - version "3.0.1" 5621 - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 5622 - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== 5623 - dependencies: 5624 - kind-of "^3.2.0" 5625 - 5626 - snapdragon@^0.8.1: 5627 - version "0.8.2" 5628 - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 5629 - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== 5630 - dependencies: 5631 - base "^0.11.1" 5632 - debug "^2.2.0" 5633 - define-property "^0.2.5" 5634 - extend-shallow "^2.0.1" 5635 - map-cache "^0.2.2" 5636 - source-map "^0.5.6" 5637 - source-map-resolve "^0.5.0" 5638 - use "^3.1.0" 5639 - 5640 - sort-keys@^1.0.0: 5641 - version "1.1.2" 5642 - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" 5643 - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= 5644 - dependencies: 5645 - is-plain-obj "^1.0.0" 5646 - 5647 - source-map-resolve@^0.5.0: 5648 - version "0.5.2" 5649 - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 5650 - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== 5651 - dependencies: 5652 - atob "^2.1.1" 5653 - decode-uri-component "^0.2.0" 5654 - resolve-url "^0.2.1" 5655 - source-map-url "^0.4.0" 5656 - urix "^0.1.0" 5657 - 5658 - source-map-support@^0.4.15: 5659 - version "0.4.18" 5660 - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 5661 - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== 5662 - dependencies: 5663 - source-map "^0.5.6" 5664 - 5665 - source-map-support@^0.5.6: 5666 - version "0.5.9" 5667 - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" 5668 - integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== 5669 - dependencies: 5670 - buffer-from "^1.0.0" 5671 - source-map "^0.6.0" 5672 - 5673 - source-map-support@~0.5.6: 5674 - version "0.5.10" 5675 - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" 5676 - integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ== 5677 - dependencies: 5678 - buffer-from "^1.0.0" 5679 - source-map "^0.6.0" 5680 - 5681 - source-map-url@^0.4.0: 5682 - version "0.4.0" 5683 - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 5684 - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 5685 - 5686 - source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: 5687 - version "0.5.7" 5688 - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 5689 - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 5690 - 5691 - source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 5692 - version "0.6.1" 5693 - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 5694 - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 5695 - 5696 - sourcemap-codec@^1.4.1: 5697 - version "1.4.4" 5698 - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" 5699 - integrity sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg== 5700 - 5701 - spdx-correct@^3.0.0: 5702 - version "3.1.0" 5703 - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 5704 - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== 5705 - dependencies: 5706 - spdx-expression-parse "^3.0.0" 5707 - spdx-license-ids "^3.0.0" 5708 - 5709 - spdx-exceptions@^2.1.0: 5710 - version "2.2.0" 5711 - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 5712 - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== 5713 - 5714 - spdx-expression-parse@^3.0.0: 5715 - version "3.0.0" 5716 - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 5717 - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 5718 - dependencies: 5719 - spdx-exceptions "^2.1.0" 5720 - spdx-license-ids "^3.0.0" 5721 - 5722 - spdx-license-ids@^3.0.0: 5723 - version "3.0.3" 5724 - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" 5725 - integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== 5726 - 5727 - split-string@^3.0.1, split-string@^3.0.2: 5728 - version "3.1.0" 5729 - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 5730 - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== 5731 - dependencies: 5732 - extend-shallow "^3.0.0" 5733 - 5734 - sprintf-js@~1.0.2: 5735 - version "1.0.3" 5736 - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 5737 - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 5738 - 5739 - sshpk@^1.7.0: 5740 - version "1.16.0" 5741 - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.0.tgz#1d4963a2fbffe58050aa9084ca20be81741c07de" 5742 - integrity sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ== 5743 - dependencies: 5744 - asn1 "~0.2.3" 5745 - assert-plus "^1.0.0" 5746 - bcrypt-pbkdf "^1.0.0" 5747 - dashdash "^1.12.0" 5748 - ecc-jsbn "~0.1.1" 5749 - getpass "^0.1.1" 5750 - jsbn "~0.1.0" 5751 - safer-buffer "^2.0.2" 5752 - tweetnacl "~0.14.0" 5753 - 5754 - stable@~0.1.6: 5755 - version "0.1.8" 5756 - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" 5757 - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== 5758 - 5759 - stack-utils@^1.0.1: 5760 - version "1.0.2" 5761 - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" 5762 - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== 5763 - 5764 - static-extend@^0.1.1: 5765 - version "0.1.2" 5766 - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 5767 - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= 5768 - dependencies: 5769 - define-property "^0.2.5" 5770 - object-copy "^0.1.0" 5771 - 5772 - stealthy-require@^1.1.0: 5773 - version "1.1.1" 5774 - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" 5775 - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= 5776 - 5777 - strict-uri-encode@^1.0.0: 5778 - version "1.1.0" 5779 - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" 5780 - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= 5781 - 5782 - string-hash@^1.1.1: 5783 - version "1.1.3" 5784 - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" 5785 - integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= 5786 - 5787 - string-length@^2.0.0: 5788 - version "2.0.0" 5789 - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" 5790 - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= 5791 - dependencies: 5792 - astral-regex "^1.0.0" 5793 - strip-ansi "^4.0.0" 5794 - 5795 - string-width@^1.0.1: 5796 - version "1.0.2" 5797 - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 5798 - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 5799 - dependencies: 5800 - code-point-at "^1.0.0" 5801 - is-fullwidth-code-point "^1.0.0" 5802 - strip-ansi "^3.0.0" 5803 - 5804 - "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: 5805 - version "2.1.1" 5806 - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 5807 - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 5808 - dependencies: 5809 - is-fullwidth-code-point "^2.0.0" 5810 - strip-ansi "^4.0.0" 5811 - 5812 - string.prototype.padend@^3.0.0: 5813 - version "3.0.0" 5814 - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" 5815 - integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= 5816 - dependencies: 5817 - define-properties "^1.1.2" 5818 - es-abstract "^1.4.3" 5819 - function-bind "^1.0.2" 5820 - 5821 - string_decoder@~1.1.1: 5822 - version "1.1.1" 5823 - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 5824 - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 5825 - dependencies: 5826 - safe-buffer "~5.1.0" 5827 - 5828 - strip-ansi@^3.0.0, strip-ansi@^3.0.1: 5829 - version "3.0.1" 5830 - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 5831 - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 5832 - dependencies: 5833 - ansi-regex "^2.0.0" 5834 - 5835 - strip-ansi@^4.0.0: 5836 - version "4.0.0" 5837 - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 5838 - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 5839 - dependencies: 5840 - ansi-regex "^3.0.0" 5841 - 5842 - strip-bom@3.0.0, strip-bom@^3.0.0: 5843 - version "3.0.0" 5844 - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 5845 - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 5846 - 5847 - strip-bom@^2.0.0: 5848 - version "2.0.0" 5849 - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 5850 - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= 5851 - dependencies: 5852 - is-utf8 "^0.2.0" 5853 - 5854 - strip-eof@^1.0.0: 5855 - version "1.0.0" 5856 - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 5857 - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 5858 - 5859 - strip-json-comments@~2.0.1: 5860 - version "2.0.1" 5861 - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 5862 - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 5863 - 5864 - style-inject@^0.3.0: 5865 - version "0.3.0" 5866 - resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" 5867 - integrity sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== 5868 - 5869 - stylehacks@^4.0.0: 5870 - version "4.0.1" 5871 - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" 5872 - integrity sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w== 5873 - dependencies: 5874 - browserslist "^4.0.0" 5875 - postcss "^7.0.0" 5876 - postcss-selector-parser "^3.0.0" 5877 - 5878 - supports-color@^2.0.0: 5879 - version "2.0.0" 5880 - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 5881 - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 5882 - 5883 - supports-color@^3.1.2, supports-color@^3.2.3: 5884 - version "3.2.3" 5885 - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 5886 - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= 5887 - dependencies: 5888 - has-flag "^1.0.0" 5889 - 5890 - supports-color@^4.0.0: 5891 - version "4.5.0" 5892 - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" 5893 - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= 5894 - dependencies: 5895 - has-flag "^2.0.0" 5896 - 5897 - supports-color@^5.3.0, supports-color@^5.4.0: 5898 - version "5.5.0" 5899 - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 5900 - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 5901 - dependencies: 5902 - has-flag "^3.0.0" 5903 - 5904 - supports-color@^6.1.0: 5905 - version "6.1.0" 5906 - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 5907 - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== 5908 - dependencies: 5909 - has-flag "^3.0.0" 5910 - 5911 - svgo@^0.7.0: 5912 - version "0.7.2" 5913 - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" 5914 - integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= 5915 - dependencies: 5916 - coa "~1.0.1" 5917 - colors "~1.1.2" 5918 - csso "~2.3.1" 5919 - js-yaml "~3.7.0" 5920 - mkdirp "~0.5.1" 5921 - sax "~1.2.1" 5922 - whet.extend "~0.9.9" 5923 - 5924 - svgo@^1.0.0: 5925 - version "1.1.1" 5926 - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" 5927 - integrity sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g== 5928 - dependencies: 5929 - coa "~2.0.1" 5930 - colors "~1.1.2" 5931 - css-select "^2.0.0" 5932 - css-select-base-adapter "~0.1.0" 5933 - css-tree "1.0.0-alpha.28" 5934 - css-url-regex "^1.1.0" 5935 - csso "^3.5.0" 5936 - js-yaml "^3.12.0" 5937 - mkdirp "~0.5.1" 5938 - object.values "^1.0.4" 5939 - sax "~1.2.4" 5940 - stable "~0.1.6" 5941 - unquote "~1.1.1" 5942 - util.promisify "~1.0.0" 5943 - 5944 - symbol-tree@^3.2.2: 5945 - version "3.2.2" 5946 - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" 5947 - integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= 5948 - 5949 - tar-fs@^1.13.0: 5950 - version "1.16.3" 5951 - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" 5952 - integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== 5953 - dependencies: 5954 - chownr "^1.0.1" 5955 - mkdirp "^0.5.1" 5956 - pump "^1.0.0" 5957 - tar-stream "^1.1.2" 5958 - 5959 - tar-stream@^1.1.2: 5960 - version "1.6.2" 5961 - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" 5962 - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== 5963 - dependencies: 5964 - bl "^1.0.0" 5965 - buffer-alloc "^1.2.0" 5966 - end-of-stream "^1.0.0" 5967 - fs-constants "^1.0.0" 5968 - readable-stream "^2.3.0" 5969 - to-buffer "^1.1.1" 5970 - xtend "^4.0.0" 5971 - 5972 - tar@^2.0.0: 5973 - version "2.2.1" 5974 - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 5975 - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= 5976 - dependencies: 5977 - block-stream "*" 5978 - fstream "^1.0.2" 5979 - inherits "2" 5980 - 5981 - tar@^4: 5982 - version "4.4.8" 5983 - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" 5984 - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== 5985 - dependencies: 5986 - chownr "^1.1.1" 5987 - fs-minipass "^1.2.5" 5988 - minipass "^2.3.4" 5989 - minizlib "^1.1.1" 5990 - mkdirp "^0.5.0" 5991 - safe-buffer "^5.1.2" 5992 - yallist "^3.0.2" 5993 - 5994 - terser@^3.14.1, terser@^3.8.2: 5995 - version "3.14.1" 5996 - resolved "https://registry.yarnpkg.com/terser/-/terser-3.14.1.tgz#cc4764014af570bc79c79742358bd46926018a32" 5997 - integrity sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw== 5998 - dependencies: 5999 - commander "~2.17.1" 6000 - source-map "~0.6.1" 6001 - source-map-support "~0.5.6" 6002 - 6003 - test-exclude@^4.2.1: 6004 - version "4.2.3" 6005 - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" 6006 - integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== 6007 - dependencies: 6008 - arrify "^1.0.1" 6009 - micromatch "^2.3.11" 6010 - object-assign "^4.1.0" 6011 - read-pkg-up "^1.0.1" 6012 - require-main-filename "^1.0.1" 6013 - 6014 - throat@^4.0.0: 6015 - version "4.1.0" 6016 - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" 6017 - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= 6018 - 6019 - timsort@^0.3.0: 6020 - version "0.3.0" 6021 - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" 6022 - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= 6023 - 6024 - tiny-glob@^0.2.6: 6025 - version "0.2.6" 6026 - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda" 6027 - integrity sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw== 6028 - dependencies: 6029 - globalyzer "^0.1.0" 6030 - globrex "^0.1.1" 6031 - 6032 - tmpl@1.0.x: 6033 - version "1.0.4" 6034 - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" 6035 - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= 6036 - 6037 - to-buffer@^1.1.1: 6038 - version "1.1.1" 6039 - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" 6040 - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== 6041 - 6042 - to-fast-properties@^1.0.3: 6043 - version "1.0.3" 6044 - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 6045 - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= 6046 - 6047 - to-fast-properties@^2.0.0: 6048 - version "2.0.0" 6049 - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 6050 - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 6051 - 6052 - to-object-path@^0.3.0: 6053 - version "0.3.0" 6054 - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 6055 - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 6056 - dependencies: 6057 - kind-of "^3.0.2" 6058 - 6059 - to-regex-range@^2.1.0: 6060 - version "2.1.1" 6061 - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 6062 - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= 6063 - dependencies: 6064 - is-number "^3.0.0" 6065 - repeat-string "^1.6.1" 6066 - 6067 - to-regex@^3.0.1, to-regex@^3.0.2: 6068 - version "3.0.2" 6069 - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 6070 - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== 6071 - dependencies: 6072 - define-property "^2.0.2" 6073 - extend-shallow "^3.0.2" 6074 - regex-not "^1.0.2" 6075 - safe-regex "^1.1.0" 6076 - 6077 - tough-cookie@>=2.3.3: 6078 - version "3.0.0" 6079 - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.0.tgz#d2bceddebde633153ff20a52fa844a0dc71dacef" 6080 - integrity sha512-LHMvg+RBP/mAVNqVbOX8t+iJ+tqhBA/t49DuI7+IDAWHrASnesqSu1vWbKB7UrE2yk+HMFUBMadRGMkB4VCfog== 6081 - dependencies: 6082 - ip-regex "^3.0.0" 6083 - psl "^1.1.28" 6084 - punycode "^2.1.1" 6085 - 6086 - tough-cookie@^2.3.4: 6087 - version "2.5.0" 6088 - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 6089 - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 6090 - dependencies: 6091 - psl "^1.1.28" 6092 - punycode "^2.1.1" 6093 - 6094 - tough-cookie@~2.4.3: 6095 - version "2.4.3" 6096 - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 6097 - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== 6098 - dependencies: 6099 - psl "^1.1.24" 6100 - punycode "^1.4.1" 6101 - 6102 - tr46@^1.0.1: 6103 - version "1.0.1" 6104 - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" 6105 - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= 6106 - dependencies: 6107 - punycode "^2.1.0" 6108 - 6109 - trim-right@^1.0.1: 6110 - version "1.0.1" 6111 - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 6112 - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= 6113 - 6114 - tslib@1.9.3, tslib@^1.9.0: 6115 - version "1.9.3" 6116 - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 6117 - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== 6118 - 6119 - tunnel-agent@^0.6.0: 6120 - version "0.6.0" 6121 - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 6122 - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 6123 - dependencies: 6124 - safe-buffer "^5.0.1" 6125 - 6126 - tweetnacl@^0.14.3, tweetnacl@~0.14.0: 6127 - version "0.14.5" 6128 - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 6129 - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 6130 - 6131 - type-check@~0.3.2: 6132 - version "0.3.2" 6133 - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 6134 - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 6135 - dependencies: 6136 - prelude-ls "~1.1.2" 6137 - 6138 - typescript@>=2.8.3: 6139 - version "3.2.2" 6140 - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5" 6141 - integrity sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg== 6142 - 6143 - uglify-js@^3.1.4: 6144 - version "3.4.9" 6145 - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" 6146 - integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== 6147 - dependencies: 6148 - commander "~2.17.1" 6149 - source-map "~0.6.1" 6150 - 6151 - unicode-canonical-property-names-ecmascript@^1.0.4: 6152 - version "1.0.4" 6153 - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" 6154 - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== 6155 - 6156 - unicode-match-property-ecmascript@^1.0.4: 6157 - version "1.0.4" 6158 - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" 6159 - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== 6160 - dependencies: 6161 - unicode-canonical-property-names-ecmascript "^1.0.4" 6162 - unicode-property-aliases-ecmascript "^1.0.4" 6163 - 6164 - unicode-match-property-value-ecmascript@^1.0.2: 6165 - version "1.0.2" 6166 - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" 6167 - integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== 6168 - 6169 - unicode-property-aliases-ecmascript@^1.0.4: 6170 - version "1.0.4" 6171 - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" 6172 - integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== 6173 - 6174 - union-value@^1.0.0: 6175 - version "1.0.0" 6176 - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 6177 - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= 6178 - dependencies: 6179 - arr-union "^3.1.0" 6180 - get-value "^2.0.6" 6181 - is-extendable "^0.1.1" 6182 - set-value "^0.4.3" 6183 - 6184 - uniq@^1.0.1: 6185 - version "1.0.1" 6186 - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" 6187 - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= 6188 - 6189 - uniqs@^2.0.0: 6190 - version "2.0.0" 6191 - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" 6192 - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= 6193 - 6194 - universalify@^0.1.0: 6195 - version "0.1.2" 6196 - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 6197 - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 6198 - 6199 - unquote@~1.1.1: 6200 - version "1.1.1" 6201 - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" 6202 - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= 6203 - 6204 - unset-value@^1.0.0: 6205 - version "1.0.0" 6206 - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 6207 - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= 6208 - dependencies: 6209 - has-value "^0.3.1" 6210 - isobject "^3.0.0" 6211 - 6212 - uri-js@^4.2.2: 6213 - version "4.2.2" 6214 - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 6215 - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 6216 - dependencies: 6217 - punycode "^2.1.0" 6218 - 6219 - urix@^0.1.0: 6220 - version "0.1.0" 6221 - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 6222 - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 6223 - 6224 - use@^3.1.0: 6225 - version "3.1.1" 6226 - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 6227 - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== 6228 - 6229 - util-deprecate@~1.0.1: 6230 - version "1.0.2" 6231 - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 6232 - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 6233 - 6234 - util.promisify@^1.0.0, util.promisify@~1.0.0: 6235 - version "1.0.0" 6236 - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" 6237 - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== 6238 - dependencies: 6239 - define-properties "^1.1.2" 6240 - object.getownpropertydescriptors "^2.0.3" 6241 - 6242 - uuid@^3.3.2: 6243 - version "3.3.2" 6244 - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 6245 - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 6246 - 6247 - validate-npm-package-license@^3.0.1: 6248 - version "3.0.4" 6249 - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 6250 - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 6251 - dependencies: 6252 - spdx-correct "^3.0.0" 6253 - spdx-expression-parse "^3.0.0" 6254 - 6255 - vendors@^1.0.0: 6256 - version "1.0.2" 6257 - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" 6258 - integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ== 6259 - 6260 - verror@1.10.0: 6261 - version "1.10.0" 6262 - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 6263 - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 6264 - dependencies: 6265 - assert-plus "^1.0.0" 6266 - core-util-is "1.0.2" 6267 - extsprintf "^1.2.0" 6268 - 6269 - vlq@^0.2.1, vlq@^0.2.2: 6270 - version "0.2.3" 6271 - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" 6272 - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== 6273 - 6274 - vlq@^1.0.0: 6275 - version "1.0.0" 6276 - resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806" 6277 - integrity sha512-o3WmXySo+oI5thgqr7Qy8uBkT/v9Zr+sRyrh1lr8aWPUkgDWdWt4Nae2WKBrLsocgE8BuWWD0jLc+VW8LeU+2g== 6278 - 6279 - w3c-hr-time@^1.0.1: 6280 - version "1.0.1" 6281 - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" 6282 - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= 6283 - dependencies: 6284 - browser-process-hrtime "^0.1.2" 6285 - 6286 - walker@~1.0.5: 6287 - version "1.0.7" 6288 - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" 6289 - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= 6290 - dependencies: 6291 - makeerror "1.0.x" 6292 - 6293 - watch@~0.18.0: 6294 - version "0.18.0" 6295 - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" 6296 - integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= 6297 - dependencies: 6298 - exec-sh "^0.2.0" 6299 - minimist "^1.2.0" 6300 - 6301 - webidl-conversions@^4.0.2: 6302 - version "4.0.2" 6303 - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 6304 - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== 6305 - 6306 - whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: 6307 - version "1.0.5" 6308 - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" 6309 - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== 6310 - dependencies: 6311 - iconv-lite "0.4.24" 6312 - 6313 - whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: 6314 - version "2.3.0" 6315 - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" 6316 - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== 6317 - 6318 - whatwg-url@^6.4.1: 6319 - version "6.5.0" 6320 - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" 6321 - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== 6322 - dependencies: 6323 - lodash.sortby "^4.7.0" 6324 - tr46 "^1.0.1" 6325 - webidl-conversions "^4.0.2" 6326 - 6327 - whatwg-url@^7.0.0: 6328 - version "7.0.0" 6329 - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" 6330 - integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== 6331 - dependencies: 6332 - lodash.sortby "^4.7.0" 6333 - tr46 "^1.0.1" 6334 - webidl-conversions "^4.0.2" 6335 - 6336 - whet.extend@~0.9.9: 6337 - version "0.9.9" 6338 - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" 6339 - integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= 6340 - 6341 - which-module@^2.0.0: 6342 - version "2.0.0" 6343 - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 6344 - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 6345 - 6346 - which-pm-runs@^1.0.0: 6347 - version "1.0.0" 6348 - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" 6349 - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= 6350 - 6351 - which@1, which@^1.2.12, which@^1.2.9, which@^1.3.0: 6352 - version "1.3.1" 6353 - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 6354 - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 6355 - dependencies: 6356 - isexe "^2.0.0" 6357 - 6358 - wide-align@^1.1.0: 6359 - version "1.1.3" 6360 - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 6361 - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 6362 - dependencies: 6363 - string-width "^1.0.2 || 2" 6364 - 6365 - wordwrap@~0.0.2: 6366 - version "0.0.3" 6367 - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 6368 - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 6369 - 6370 - wordwrap@~1.0.0: 6371 - version "1.0.0" 6372 - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 6373 - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 6374 - 6375 - wrap-ansi@^2.0.0: 6376 - version "2.1.0" 6377 - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 6378 - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= 6379 - dependencies: 6380 - string-width "^1.0.1" 6381 - strip-ansi "^3.0.1" 6382 - 6383 - wrappy@1: 6384 - version "1.0.2" 6385 - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 6386 - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 6387 - 6388 - write-file-atomic@^2.1.0: 6389 - version "2.3.0" 6390 - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" 6391 - integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== 6392 - dependencies: 6393 - graceful-fs "^4.1.11" 6394 - imurmurhash "^0.1.4" 6395 - signal-exit "^3.0.2" 6396 - 6397 - ws@^5.2.0: 6398 - version "5.2.2" 6399 - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" 6400 - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== 6401 - dependencies: 6402 - async-limiter "~1.0.0" 6403 - 6404 - xml-name-validator@^3.0.0: 6405 - version "3.0.0" 6406 - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" 6407 - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== 6408 - 6409 - xtend@^4.0.0: 6410 - version "4.0.1" 6411 - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 6412 - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= 6413 - 6414 - y18n@^3.2.1: 6415 - version "3.2.1" 6416 - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 6417 - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= 6418 - 6419 - yallist@^2.1.2: 6420 - version "2.1.2" 6421 - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 6422 - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 6423 - 6424 - yallist@^3.0.0, yallist@^3.0.2: 6425 - version "3.0.3" 6426 - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 6427 - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== 6428 - 6429 - yargs-parser@^9.0.2: 6430 - version "9.0.2" 6431 - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" 6432 - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= 6433 - dependencies: 6434 - camelcase "^4.1.0" 6435 - 6436 - yargs@^11.0.0: 6437 - version "11.1.0" 6438 - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" 6439 - integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== 6440 - dependencies: 6441 - cliui "^4.0.0" 6442 - decamelize "^1.1.1" 6443 - find-up "^2.1.0" 6444 - get-caller-file "^1.0.1" 6445 - os-locale "^2.0.0" 6446 - require-directory "^2.1.1" 6447 - require-main-filename "^1.0.1" 6448 - set-blocking "^2.0.0" 6449 - string-width "^2.0.0" 6450 - which-module "^2.0.0" 6451 - y18n "^3.2.1" 6452 - yargs-parser "^9.0.2"