pax_global_header00006660000000000000000000000064140232240230014502gustar00rootroot0000000000000052 comment=4cdcde632ece71155f3108ec0120c1a0329a6914
yaml-1.10.2/000077500000000000000000000000001402322402300125255ustar00rootroot00000000000000yaml-1.10.2/.editorconfig000066400000000000000000000002751402322402300152060ustar00rootroot00000000000000root = true
[*]
end_of_line = lf
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = false
[*.md]
trim_trailing_whitespace = false
yaml-1.10.2/.eslintignore000066400000000000000000000001331402322402300152250ustar00rootroot00000000000000/browser/
/dist/
/docs-slate/
/package-lock.json
/playground/dist/
/tests/yaml-test-suite/
yaml-1.10.2/.eslintrc.yaml000066400000000000000000000011621402322402300153120ustar00rootroot00000000000000root: true
parser: babel-eslint
env:
node: true
extends:
- eslint:recommended
- prettier
rules:
array-callback-return: error
camelcase: error
consistent-return: error
eqeqeq: [error, always, 'null': ignore]
no-constant-condition: [error, checkLoops: false]
no-control-regex: 0
no-implicit-globals: error
no-template-curly-in-string: warn
no-unused-labels: 0
no-var: error
prefer-const: [warn, destructuring: all]
overrides:
- files: src/**/*.js
env:
es6: true
node: false
- files:
- tests/**/*.js
env:
es6: true
jest: true
rules:
camelcase: 0
yaml-1.10.2/.github/000077500000000000000000000000001402322402300140655ustar00rootroot00000000000000yaml-1.10.2/.github/workflows/000077500000000000000000000000001402322402300161225ustar00rootroot00000000000000yaml-1.10.2/.github/workflows/browsers.yml000066400000000000000000000017451402322402300205220ustar00rootroot00000000000000name: Browsers
on:
- push
- workflow_dispatch
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Checkout submodules
uses: textbook/git-checkout-submodule-action@master
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: 14.x
- name: Cache BrowserStackLocal
uses: actions/cache@v1
with:
path: ~/.browserstack
key: bsl-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
bsl-${{ runner.os }}-
- run: npm ci
- run: npm run build:browser
- name: Playground setup
working-directory: ./playground
run: npm ci
- name: Run tests on BrowserStack
working-directory: ./playground
run: npm test
env:
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
yaml-1.10.2/.github/workflows/nodejs.yml000066400000000000000000000014531402322402300201320ustar00rootroot00000000000000name: Node.js
on:
- pull_request
- push
- workflow_dispatch
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x, 12.x, 14.x]
steps:
- uses: actions/checkout@v2
- name: Checkout submodules
uses: textbook/git-checkout-submodule-action@master
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm test
- run: npm run test:dist
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: 14.x
- run: npm ci
- run: npm run lint
- run: npm run test:types
yaml-1.10.2/.gitignore000066400000000000000000000000411402322402300145100ustar00rootroot00000000000000.*
coverage/
dist/
node_modules/
yaml-1.10.2/.gitmodules000066400000000000000000000005021402322402300146770ustar00rootroot00000000000000[submodule "tests/yaml-test-suite"]
path = tests/yaml-test-suite
url = https://github.com/eemeli/yaml-test-suite.git
branch = fixed-data
[submodule "docs"]
path = docs-slate
url = https://github.com/eemeli/yaml-docs.git
[submodule "playground"]
path = playground
url = https://github.com/eemeli/yaml-playground.git
yaml-1.10.2/.prettierignore000066400000000000000000000001031402322402300155620ustar00rootroot00000000000000coverage/
dist/
node_modules/
/docs-slate/
/tests/yaml-test-suite/
yaml-1.10.2/CONTRIBUTING.md000066400000000000000000000104761402322402300147660ustar00rootroot00000000000000# Contributing to `yaml`
The YAML spec is somewhat complicated, and `yaml` tries its best to make it as easy as possible to work with it. The primary goal of this project is to make YAML as safe and pleasant as possible to work with. To that end, the order of priorities is:
1. **Be safe**. Be gracious with bad input, and make dangerous things at least difficult if not impossible. Don't allow resource exhaustion attacks. Reading or writing external files or URLs is rather explicitly left out of the core functionality for security reasons.
2. **Maintain compatibility**. There exists a number of YAML libraries written in and for various languages, based on various versions of the specification. This library currently passes more of the [YAML Test Matrix](https://matrix.yaml.io/) than any other, and it should be kept that way.
3. **Support all YAML features**. Everything that you might want to do with YAML should be possible with `yaml`. In a somewhat perverse way, this means that we need to break the spec a bit in order to allow working with comments. This also means that we want to simultaneously maintain compatibility with multiple versions of the spec, in particular the most widely used 1.1 and 1.2.
4. **Keep it simple**. Extending the library needs to be done carefully, and keep in all of its users. Different applications have different needs and so are provided with different APIs. In particular, custom tags are supported, but aren't part of the built-in schemas.
## Getting Started
To start hacking `yaml`, this should get you set up:
```sh
git clone https://github.com/eemeli/yaml.git # or your own fork
cd yaml
git submodule update --init # required by tests; also fetches the docs & playground
npm install
npm test # just to be sure
```
## Repository Directory & File Structure
- **`browser/`** - Browser-optimised build of the library, which should work in IE 11 & later. Used automatically by e.g. Webpack & Rollup via the `"browser"` value in `package.json`. A corresponding minimal set of the library's required polyfills is available at `playground/src/polyfill.js`
- **`dist/`** - Node-optimised build of the library, which should work in Node.js 6.0.0 and later without polyfills.
- **`docs/`** - Sources for the library's [documentation site](https://eemeli.org/yaml).
- **`docs-slate/`** - Compiler for the library's [documentation site](https://eemeli.org/yaml). Maintained as a git submodule to allow merges from its upstream source, [Slate](https://github.com/slatedocs/slate). See its [`README`](./docs-slate/README.md) for installation instructions. Note that the build target is the `gh-pages` branch of _this_ repo.
- **`playground/`** - Source files for a browser-based [playground](https://eemeli.org/yaml-playground/) using this library. Also contains the Selenium browser tests for the library. Maintained as a git submodule to allow for easier publication.
- **`src/`** - Source files for the library:
- **`src/cst/`** - The CST parser. Does not depend on other parts of the library.
- **`src/schema/`** - Classes and utilities for working with the data schema
- **`src/tags/`** - Implementations of the standard schemas' tags
- **`tests/`** - Tests for the library:
- **`tests/artifacts/`** - YAML files used by some of the tests
- **`tests/cst/`** - Tests for the CST parser
- **`tests/doc/`** - Tests for the AST level of the library
- **`tests/yaml-test-suite/`** - Git submodule of a custom fork of the [YAML Test Suite](https://github.com/yaml/yaml-test-suite)
- **`{index,parse-cst,types,util}.js`** - The library's published API; see the documentation site for more details. Not transpiled, so written as backwards-compatible CommonJS.
## Contributing Code
First of all, make sure that all the tests pass, and that you've added test cases covering your changes. Our set of test suites is rather extensive, and is a significant help in making sure no regressions are introduced. Note that the CI environment runs tests in e.g. Node.js 6.0 and IE 11, so using new language features may require extending the minimal set of [polyfills](./playground/src/polyfill.js)
If you're intending to contribute to the upstream repo, please make sure that your code style matches the Prettier and ESLint rules. The easiest way to do that is to configure your editor to do that for you, but `lint` and `prettier` npm scripts are also provided.
yaml-1.10.2/LICENSE000066400000000000000000000013471402322402300135370ustar00rootroot00000000000000Copyright 2018 Eemeli Aro
Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
yaml-1.10.2/README.md000066400000000000000000000106731402322402300140130ustar00rootroot00000000000000# YAML
`yaml` is a JavaScript parser and stringifier for [YAML](http://yaml.org/), a human friendly data serialization standard. It supports both parsing and stringifying data using all versions of YAML, along with all common data schemas. As a particularly distinguishing feature, `yaml` fully supports reading and writing comments and blank lines in YAML documents.
The library is released under the ISC open source license, and the code is [available on GitHub](https://github.com/eemeli/yaml/). It has no external dependencies and runs on Node.js 6 and later, and in browsers from IE 11 upwards.
For the purposes of versioning, any changes that break any of the endpoints or APIs documented here will be considered semver-major breaking changes. Undocumented library internals may change between minor versions, and previous APIs may be deprecated (but not removed).
For more information, see the project's documentation site: [**eemeli.org/yaml/v1**](https://eemeli.org/yaml/v1/)
To install:
```sh
npm install yaml
```
**Note:** This is `yaml@1`. You may also be interested in the next version, currently available as [`yaml@next`](https://www.npmjs.com/package/yaml/v/next).
## API Overview
The API provided by `yaml` has three layers, depending on how deep you need to go: [Parse & Stringify](https://eemeli.org/yaml/v1/#parse-amp-stringify), [Documents](https://eemeli.org/yaml/#documents), and the [CST Parser](https://eemeli.org/yaml/#cst-parser). The first has the simplest API and "just works", the second gets you all the bells and whistles supported by the library along with a decent [AST](https://eemeli.org/yaml/#content-nodes), and the third is the closest to YAML source, making it fast, raw, and crude.
```js
import YAML from 'yaml'
// or
const YAML = require('yaml')
```
### Parse & Stringify
- [`YAML.parse(str, options): value`](https://eemeli.org/yaml/v1/#yaml-parse)
- [`YAML.stringify(value, options): string`](https://eemeli.org/yaml/v1/#yaml-stringify)
### YAML Documents
- [`YAML.createNode(value, wrapScalars, tag): Node`](https://eemeli.org/yaml/v1/#creating-nodes)
- [`YAML.defaultOptions`](https://eemeli.org/yaml/v1/#options)
- [`YAML.Document`](https://eemeli.org/yaml/v1/#yaml-documents)
- [`constructor(options)`](https://eemeli.org/yaml/v1/#creating-documents)
- [`defaults`](https://eemeli.org/yaml/v1/#options)
- [`#anchors`](https://eemeli.org/yaml/v1/#working-with-anchors)
- [`#contents`](https://eemeli.org/yaml/v1/#content-nodes)
- [`#errors`](https://eemeli.org/yaml/v1/#errors)
- [`YAML.parseAllDocuments(str, options): YAML.Document[]`](https://eemeli.org/yaml/v1/#parsing-documents)
- [`YAML.parseDocument(str, options): YAML.Document`](https://eemeli.org/yaml/v1/#parsing-documents)
```js
import { Pair, YAMLMap, YAMLSeq } from 'yaml/types'
```
- [`new Pair(key, value)`](https://eemeli.org/yaml/v1/#creating-nodes)
- [`new YAMLMap()`](https://eemeli.org/yaml/v1/#creating-nodes)
- [`new YAMLSeq()`](https://eemeli.org/yaml/v1/#creating-nodes)
### CST Parser
```js
import parseCST from 'yaml/parse-cst'
```
- [`parseCST(str): CSTDocument[]`](https://eemeli.org/yaml/v1/#parsecst)
- [`YAML.parseCST(str): CSTDocument[]`](https://eemeli.org/yaml/v1/#parsecst)
## YAML.parse
```yaml
# file.yml
YAML:
- A human-readable data serialization language
- https://en.wikipedia.org/wiki/YAML
yaml:
- A complete JavaScript implementation
- https://www.npmjs.com/package/yaml
```
```js
import fs from 'fs'
import YAML from 'yaml'
YAML.parse('3.14159')
// 3.14159
YAML.parse('[ true, false, maybe, null ]\n')
// [ true, false, 'maybe', null ]
const file = fs.readFileSync('./file.yml', 'utf8')
YAML.parse(file)
// { YAML:
// [ 'A human-readable data serialization language',
// 'https://en.wikipedia.org/wiki/YAML' ],
// yaml:
// [ 'A complete JavaScript implementation',
// 'https://www.npmjs.com/package/yaml' ] }
```
## YAML.stringify
```js
import YAML from 'yaml'
YAML.stringify(3.14159)
// '3.14159\n'
YAML.stringify([true, false, 'maybe', null])
// `- true
// - false
// - maybe
// - null
// `
YAML.stringify({ number: 3, plain: 'string', block: 'two\nlines\n' })
// `number: 3
// plain: string
// block: >
// two
//
// lines
// `
```
---
Browser testing provided by:
yaml-1.10.2/babel.config.js000066400000000000000000000003651402322402300154000ustar00rootroot00000000000000module.exports = {
plugins: [
'@babel/plugin-proposal-class-properties',
['babel-plugin-trace', { strip: true }]
]
}
if (process.env.NODE_ENV === 'test')
module.exports.presets = [['@babel/env', { targets: { node: 'current' } }]]
yaml-1.10.2/browser/000077500000000000000000000000001402322402300142105ustar00rootroot00000000000000yaml-1.10.2/browser/dist/000077500000000000000000000000001402322402300151535ustar00rootroot00000000000000yaml-1.10.2/browser/dist/package.json000066400000000000000000000000251402322402300174360ustar00rootroot00000000000000{ "type": "module" }
yaml-1.10.2/browser/index.js000066400000000000000000000000501402322402300156500ustar00rootroot00000000000000module.exports = require('./dist').YAML
yaml-1.10.2/browser/map.js000066400000000000000000000001621402322402300153220ustar00rootroot00000000000000module.exports = require('./dist/types').YAMLMap
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/browser/pair.js000066400000000000000000000001571402322402300155040ustar00rootroot00000000000000module.exports = require('./dist/types').Pair
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/browser/parse-cst.js000066400000000000000000000000631402322402300164460ustar00rootroot00000000000000module.exports = require('./dist/parse-cst').parse
yaml-1.10.2/browser/scalar.js000066400000000000000000000001611402322402300160110ustar00rootroot00000000000000module.exports = require('./dist/types').Scalar
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/browser/schema.js000066400000000000000000000004671402322402300160150ustar00rootroot00000000000000const types = require('./dist/types')
const util = require('./dist/util')
module.exports = types.Schema
module.exports.nullOptions = types.nullOptions
module.exports.strOptions = types.strOptions
module.exports.stringify = util.stringifyString
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/browser/seq.js000066400000000000000000000001621402322402300153350ustar00rootroot00000000000000module.exports = require('./dist/types').YAMLSeq
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/browser/types.js000066400000000000000000000000511402322402300157060ustar00rootroot00000000000000module.exports = require('./dist/types')
yaml-1.10.2/browser/types/000077500000000000000000000000001402322402300153545ustar00rootroot00000000000000yaml-1.10.2/browser/types/binary.js000066400000000000000000000003471402322402300172020ustar00rootroot00000000000000'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
const legacy = require('../dist/legacy-exports')
exports.binary = legacy.binary
exports.default = [exports.binary]
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/browser/types/omap.js000066400000000000000000000001651402322402300166500ustar00rootroot00000000000000const legacy = require('../dist/legacy-exports')
module.exports = legacy.omap
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/browser/types/pairs.js000066400000000000000000000001661402322402300170330ustar00rootroot00000000000000const legacy = require('../dist/legacy-exports')
module.exports = legacy.pairs
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/browser/types/set.js000066400000000000000000000001641402322402300165060ustar00rootroot00000000000000const legacy = require('../dist/legacy-exports')
module.exports = legacy.set
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/browser/types/timestamp.js000066400000000000000000000005271402322402300177210ustar00rootroot00000000000000'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
const legacy = require('../dist/legacy-exports')
exports.default = [legacy.intTime, legacy.floatTime, legacy.timestamp]
exports.floatTime = legacy.floatTime
exports.intTime = legacy.intTime
exports.timestamp = legacy.timestamp
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/browser/util.js000066400000000000000000000000501402322402300155160ustar00rootroot00000000000000module.exports = require('./dist/util')
yaml-1.10.2/docs-slate/000077500000000000000000000000001402322402300145635ustar00rootroot00000000000000yaml-1.10.2/docs/000077500000000000000000000000001402322402300134555ustar00rootroot00000000000000yaml-1.10.2/docs/01_intro.md000066400000000000000000000047031402322402300154360ustar00rootroot00000000000000# YAML
> To install:
```sh
npm install yaml
# or
yarn add yaml
```
`yaml` is a new definitive library for [YAML](http://yaml.org/), a human friendly data serialization standard. This library:
- Supports all versions of the standard (1.0, 1.1, and 1.2),
- Passes all of the [yaml-test-suite](https://github.com/yaml/yaml-test-suite) tests,
- Can accept any string as input without throwing, parsing as much YAML out of it as it can, and
- Supports parsing, modifying, and writing YAML comments.
The library is released under the ISC open source license, and the code is [available on GitHub](https://github.com/eemeli/yaml/). It has no external dependencies and runs on Node.js 6 and later, and in browsers from IE 11 upwards.
For the purposes of versioning, any changes that break any of the endpoints or APIs documented here will be considered semver-major breaking changes. Undocumented library internals may change between minor versions, and previous APIs may be deprecated (but not removed).
## API Overview
The API provided by `yaml` has three layers, depending on how deep you need to go: [Parse & Stringify](#parse-amp-stringify), [Documents](#documents), and the [CST Parser](#cst-parser). The first has the simplest API and "just works", the second gets you all the bells and whistles supported by the library along with a decent [AST](#content-nodes), and the third is the closest to YAML source, making it fast, raw, and crude.
Parse & Stringify
```js
import YAML from 'yaml'
// or
const YAML = require('yaml')
```
- [`YAML.parse(str, options): value`](#yaml-parse)
- [`YAML.stringify(value, options): string`](#yaml-stringify)
Documents
- [`YAML.createNode(value, wrapScalars, tag): Node`](#creating-nodes)
- [`YAML.defaultOptions`](#options)
- [`YAML.Document`](#documents)
- [`constructor(options)`](#creating-documents)
- [`defaults`](#options)
- [`#anchors`](#working-with-anchors)
- [`#contents`](#content-nodes)
- [`#errors`](#errors)
- [`YAML.parseAllDocuments(str, options): YAML.Document[]`](#parsing-documents)
- [`YAML.parseDocument(str, options): YAML.Document`](#parsing-documents)
```js
import { Pair, YAMLMap, YAMLSeq } from 'yaml/types'
```
- [`new Pair(key, value)`](#creating-nodes)
- [`new YAMLMap()`](#creating-nodes)
- [`new YAMLSeq()`](#creating-nodes)
CST Parser
```js
import parseCST from 'yaml/parse-cst'
```
- [`parseCST(str): CSTDocument[]`](#parsecst)
- [`YAML.parseCST(str): CSTDocument[]`](#parsecst)
yaml-1.10.2/docs/02_parse_stringify.md000066400000000000000000000050011402322402300175040ustar00rootroot00000000000000# Parse & Stringify
```yaml
# file.yml
YAML:
- A human-readable data serialization language
- https://en.wikipedia.org/wiki/YAML
yaml:
- A complete JavaScript implementation
- https://www.npmjs.com/package/yaml
```
At its simplest, you can use `YAML.parse(str)` and `YAML.stringify(value)` just as you'd use `JSON.parse(str)` and `JSON.stringify(value)`. If that's enough for you, everything else in these docs is really just implementation details.
## YAML.parse
```js
import fs from 'fs'
import YAML from 'yaml'
YAML.parse('3.14159')
// 3.14159
YAML.parse('[ true, false, maybe, null ]\n')
// [ true, false, 'maybe', null ]
const file = fs.readFileSync('./file.yml', 'utf8')
YAML.parse(file)
// { YAML:
// [ 'A human-readable data serialization language',
// 'https://en.wikipedia.org/wiki/YAML' ],
// yaml:
// [ 'A complete JavaScript implementation',
// 'https://www.npmjs.com/package/yaml' ] }
```
#### `YAML.parse(str, options = {}): any`
`str` should be a string with YAML formatting. See [Options](#options) for more information on the second parameter, an optional configuration object.
The returned value will match the type of the root value of the parsed YAML document, so Maps become objects, Sequences arrays, and scalars result in nulls, booleans, numbers and strings.
`YAML.parse` may throw on error, and it may log warnings using `console.warn`. It only supports input consisting of a single YAML document; for multi-document support you should use [`YAML.parseAllDocuments`](#parsing-documents).
## YAML.stringify
```js
YAML.stringify(3.14159)
// '3.14159\n'
YAML.stringify([true, false, 'maybe', null])
// `- true
// - false
// - maybe
// - null
// `
YAML.stringify({ number: 3, plain: 'string', block: 'two\nlines\n' })
// `number: 3
// plain: string
// block: >
// two
//
// lines
// `
```
#### `YAML.stringify(value, options = {}): string`
`value` can be of any type. The returned string will always include `\n` as the last character, as is expected of YAML documents. See [Options](#options) for more information on the second parameter, an optional configuration object.
As strings in particular may be represented in a number of different styles, the simplest option for the value in question will always be chosen, depending mostly on the presence of escaped or control characters and leading & trailing whitespace.
To create a stream of documents, you may call `YAML.stringify` separately for each document's `value`, and concatenate the documents with the string `...\n` as a separator.
yaml-1.10.2/docs/03_options.md000066400000000000000000000244601402322402300160020ustar00rootroot00000000000000# Options
```js
YAML.defaultOptions
// { keepBlobsInJSON: true,
// keepNodeTypes: true,
// version: '1.2' }
YAML.Document.defaults
// { '1.0': { merge: true, schema: 'yaml-1.1' },
// '1.1': { merge: true, schema: 'yaml-1.1' },
// '1.2': { merge: false, schema: 'core' } }
```
#### `YAML.defaultOptions`
#### `YAML.Document.defaults`
`yaml` defines document-specific options in three places: as an argument of parse, create and stringify calls, in the values of `YAML.defaultOptions`, and in the version-dependent `YAML.Document.defaults` object. Values set in `YAML.defaultOptions` override version-dependent defaults, and argument options override both.
The `version` option value (`'1.2'` by default) may be overridden by any document-specific `%YAML` directive.
| Option | Type | Description |
| --------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| anchorPrefix | `string` | Default prefix for anchors. By default `'a'`, resulting in anchors `a1`, `a2`, etc. |
| customTags | `Tag[] ⎮ function` | Array of [additional tags](#custom-data-types) to include in the schema |
| indent | `number` | The number of spaces to use when indenting code. By default `2`. |
| indentSeq | `boolean` | Whether block sequences should be indented. By default `true`. |
| keepBlobsInJSON | `boolean` | Allow non-JSON JavaScript objects to remain in the `toJSON` output. Relevant with the YAML 1.1 `!!timestamp` and `!!binary` tags as well as BigInts. By default `true`. |
| keepCstNodes | `boolean` | Include references in the AST to each node's corresponding CST node. By default `false`. |
| keepNodeTypes | `boolean` | Store the original node type when parsing documents. By default `true`. |
| mapAsMap | `boolean` | When outputting JS, use Map rather than Object to represent mappings. By default `false`. |
| maxAliasCount | `number` | Prevent [exponential entity expansion attacks] by limiting data aliasing count; set to `-1` to disable checks; `0` disallows all alias nodes. By default `100`. |
| merge | `boolean` | Enable support for `<<` merge keys. By default `false` for YAML 1.2 and `true` for earlier versions. |
| prettyErrors | `boolean` | Include line position & node type directly in errors; drop their verbose source and context. By default `false`. |
| schema | `'core' ⎮ 'failsafe' ⎮` `'json' ⎮ 'yaml-1.1'` | The base schema to use. By default `'core'` for YAML 1.2 and `'yaml-1.1'` for earlier versions. |
| simpleKeys | `boolean` | When stringifying, require keys to be scalars and to use implicit rather than explicit notation. By default `false`. |
| sortMapEntries | `boolean ⎮` `(a, b: Pair) => number` | When stringifying, sort map entries. If `true`, sort by comparing key values with `<`. By default `false`. |
| version | `'1.0' ⎮ '1.1' ⎮ '1.2'` | The YAML version used by documents without a `%YAML` directive. By default `'1.2'`. |
[exponential entity expansion attacks]: https://en.wikipedia.org/wiki/Billion_laughs_attack
## Data Schemas
```js
YAML.parse('3') // 3
YAML.parse('3', { schema: 'failsafe' }) // '3'
YAML.parse('No') // 'No'
YAML.parse('No', { schema: 'json' }) // SyntaxError: Unresolved plain scalar "No"
YAML.parse('No', { schema: 'yaml-1.1' }) // false
YAML.parse('No', { version: '1.1' }) // false
YAML.parse('{[1, 2]: many}') // { '[1,2]': 'many' }
YAML.parse('{[1, 2]: many}', { mapAsMap: true }) // Map { [ 1, 2 ] => 'many' }
```
Aside from defining the language structure, the YAML 1.2 spec defines a number of different _schemas_ that may be used. The default is the [`core`](http://yaml.org/spec/1.2/spec.html#id2804923) schema, which is the most common one. The [`json`](http://yaml.org/spec/1.2/spec.html#id2803231) schema is effectively the minimum schema required to parse JSON; both it and the core schema are supersets of the minimal [`failsafe`](http://yaml.org/spec/1.2/spec.html#id2802346) schema.
The `yaml-1.1` schema matches the more liberal [YAML 1.1 types](http://yaml.org/type/) (also used by YAML 1.0), including binary data and timestamps as distinct tags as well as accepting greater variance in scalar values (with e.g. `'No'` being parsed as `false` rather than a string value). The `!!value` and `!!yaml` types are not supported.
```js
YAML.defaultOptions.merge = true
const mergeResult = YAML.parse(`
source: &base { a: 1, b: 2 }
target:
<<: *base
b: base
`)
mergeResult.target
// { a: 1, b: 'base' }
```
**Merge** keys are a [YAML 1.1 feature](http://yaml.org/type/merge.html) that is not a part of the 1.2 spec. To use a merge key, assign an alias node or an array of alias nodes as the value of a `<<` key in a mapping.
## Scalar Options
```js
// Without simpleKeys, an all-null-values object uses explicit keys & no values
YAML.stringify({ 'this is': null }, { simpleKeys: true })
// this is: null
YAML.scalarOptions.null.nullStr = '~'
YAML.scalarOptions.str.defaultType = 'QUOTE_SINGLE'
YAML.stringify({ 'this is': null }, { simpleKeys: true })
// 'this is': ~
```
#### `YAML.scalarOptions`
Some customization options are availabe to control the parsing and stringification of scalars. Note that these values are used by all documents.
These options objects are also exported individually from `'yaml/types'`.
| Option | Type | Default value | Description |
| ------------------ | --------- | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| binary.defaultType | `Type` | `'BLOCK_LITERAL'` | The type of string literal used to stringify `!!binary` values |
| binary.lineWidth | `number` | `76` | Maximum line width for `!!binary` values |
| bool.trueStr | `string` | `'true'` | String representation for `true` values |
| bool.falseStr | `string` | `'false'` | String representation for `false` values |
| int.asBigInt | `boolean` | `false` | Whether integers should be parsed into [BigInt] values |
| null.nullStr | `string` | `'null'` | String representation for `null` values |
| str.defaultType | `Type` | `'PLAIN'` | The default type of string literal used to stringify values |
| str.doubleQuoted | `object` | `{ jsonEncoding: false,` `minMultiLineLength: 40 }` | `jsonEncoding`: Whether to restrict double-quoted strings to use JSON-compatible syntax; `minMultiLineLength`: Minimum length to use multiple lines to represent the value |
| str.fold | `object` | `{ lineWidth: 80,` `minContentWidth: 20 }` | `lineWidth`: Maximum line width (set to `0` to disable folding); `minContentWidth`: Minimum width for highly-indented content |
[bigint]: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/BigInt
## Silencing Warnings
By default, the library will emit warnings for uses of deprecated APIs and as required by the YAML spec during parsing. If you'd like to silence these, define a global variable `YAML_SILENCE_WARNINGS` with a true-ish value. To silence only deprecation warnings, use `YAML_SILENCE_DEPRECATION_WARNINGS`. These values may also be set in `process.env`.
yaml-1.10.2/docs/04_documents.md000066400000000000000000000361121402322402300163060ustar00rootroot00000000000000# Documents
In order to work with YAML features not directly supported by native JavaScript data types, such as comments, anchors and aliases, `yaml` provides the `YAML.Document` API.
## Parsing Documents
```js
import fs from 'fs'
import YAML from 'yaml'
const file = fs.readFileSync('./file.yml', 'utf8')
const doc = YAML.parseDocument(file)
doc.contents
// YAMLMap {
// items:
// [ Pair {
// key: Scalar { value: 'YAML', range: [ 0, 4 ] },
// value:
// YAMLSeq {
// items:
// [ Scalar {
// value: 'A human-readable data serialization language',
// range: [ 10, 55 ] },
// Scalar {
// value: 'https://en.wikipedia.org/wiki/YAML',
// range: [ 59, 94 ] } ],
// tag: 'tag:yaml.org,2002:seq',
// range: [ 8, 94 ] } },
// Pair {
// key: Scalar { value: 'yaml', range: [ 94, 98 ] },
// value:
// YAMLSeq {
// items:
// [ Scalar {
// value: 'A complete JavaScript implementation',
// range: [ 104, 141 ] },
// Scalar {
// value: 'https://www.npmjs.com/package/yaml',
// range: [ 145, 180 ] } ],
// tag: 'tag:yaml.org,2002:seq',
// range: [ 102, 180 ] } } ],
// tag: 'tag:yaml.org,2002:map',
// range: [ 0, 180 ] }
```
#### `YAML.parseDocument(str, options = {}): YAML.Document`
Parses a single `YAML.Document` from the input `str`; used internally by `YAML.parse`. Will include an error if `str` contains more than one document. See [Options](#options) for more information on the second parameter.
#### `YAML.parseAllDocuments(str, options = {}): YAML.Document[]`
When parsing YAML, the input string `str` may consist of a stream of documents separated from each other by `...` document end marker lines. `YAML.parseAllDocuments` will return an array of `Document` objects that allow these documents to be parsed and manipulated with more control. See [Options](#options) for more information on the second parameter.
These functions should never throw; errors and warnings are included in the documents' `errors` and `warnings` arrays. In particular, if `errors` is not empty it's likely that the document's parsed `contents` are not entirely correct.
The `contents` of a parsed document will always consist of `Scalar`, `Map`, `Seq` or `null` values.
## Creating Documents
#### `new YAML.Document(options = {})`
| Member | Type | Description |
| ------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| anchors | [`Anchors`](#anchors) | Anchors associated with the document's nodes; also provides alias & merge node creators. |
| commentBefore | `string?` | A comment at the very beginning of the document. If not empty, separated from the rest of the document by a blank line or the directives-end indicator when stringified. |
| comment | `string?` | A comment at the end of the document. If not empty, separated from the rest of the document by a blank line when stringified. |
| contents | [`Node`](#content-nodes)|`any` | The document contents. |
| directivesEndMarker | `boolean?` | Whether the document should always include a directives-end marker `---` at its start, even if it includes no directives. |
| errors | `Error[]` | Errors encountered during parsing. |
| schema | `Schema` | The schema used with the document. |
| tagPrefixes | `Prefix[]` | Array of prefixes; each will have a string `handle` that starts and ends with `!` and a string `prefix` that the handle will be replaced by. |
| version | `string?` | The parsed version of the source document; if true-ish, stringified output will include a `%YAML` directive. |
| warnings | `Error[]` | Warnings encountered during parsing. |
```js
const doc = new YAML.Document()
doc.version = true
doc.commentBefore = ' A commented document'
doc.contents = ['some', 'values', { balloons: 99 }]
String(doc)
// # A commented document
// %YAML 1.2
// ---
// - some
// - values
// - balloons: 99
```
The Document members are all modifiable, though it's unlikely that you'll have reason to change `errors`, `schema` or `warnings`. In particular you may be interested in both reading and writing **`contents`**. Although `YAML.parseDocument()` and `YAML.parseAllDocuments()` will leave it with `Map`, `Seq`, `Scalar` or `null` contents, it can be set to anything.
During stringification, a document with a true-ish `version` value will include a `%YAML` directive; the version number will be set to `1.2` unless the `yaml-1.1` schema is in use.
## Document Methods
| Method | Returns | Description |
| ---------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| listNonDefaultTags() | `string[]` | List the tags used in the document that are not in the default `tag:yaml.org,2002:` namespace. |
| parse(cst) | `Document` | Parse a CST into this document. Mostly an internal method, modifying the document according to the contents of the parsed `cst`. Calling this multiple times on a Document is not recommended. |
| setSchema(id, customTags) | `void` | When a document is created with `new YAML.Document()`, the schema object is not set as it may be influenced by parsed directives; call this with no arguments to set it manually, or with arguments to change the schema used by the document. `id` may either be a YAML version, or the identifier of a YAML 1.2 schema; if set, `customTags` should have the same shape as the similarly-named option. |
| setTagPrefix(handle, prefix) | `void` | Set `handle` as a shorthand string for the `prefix` tag namespace. |
| toJSON() | `any` | A plain JavaScript representation of the document `contents`. |
| toString() | `string` | A YAML representation of the document. |
```js
const doc = YAML.parseDocument('a: 1\nb: [2, 3]\n')
doc.get('a') // 1
doc.getIn([]) // YAMLMap { items: [Pair, Pair], ... }
doc.hasIn(['b', 0]) // true
doc.addIn(['b'], 4) // -> doc.get('b').items.length === 3
doc.deleteIn(['b', 1]) // true
doc.getIn(['b', 1]) // 4
```
In addition to the above, the document object also provides the same **accessor methods** as [collections](#collections), based on the top-level collection: `add`, `delete`, `get`, `has`, and `set`, along with their deeper variants `addIn`, `deleteIn`, `getIn`, `hasIn`, and `setIn`. For the `*In` methods using an empty `path` value (i.e. `null`, `undefined`, or `[]`) will refer to the document's top-level `contents`.
To define a tag prefix to use when stringifying, use **`setTagPrefix(handle, prefix)`** rather than setting a value directly in `tagPrefixes`. This will guarantee that the `handle` is valid (by throwing an error), and will overwrite any previous definition for the `handle`. Use an empty `prefix` value to remove a prefix.
```js
const src = '1969-07-21T02:56:15Z'
const doc = YAML.parseDocument(src, { customTags: ['timestamp'] })
doc.toJSON()
// Date { 1969-07-21T02:56:15.000Z }
doc.options.keepBlobsInJSON = false
doc.toJSON()
// '1969-07-21T02:56:15.000Z'
String(doc)
// '1969-07-21T02:56:15\n'
```
For a plain JavaScript representation of the document, **`toJSON()`** is your friend. By default the values wrapped in scalar nodes will not be forced to JSON, so e.g. a `!!timestamp` will remain a `Date` in the output. To change this behaviour and enforce JSON values only, set the [`keepBlobsInJSON` option](#options) to `false`.
Conversely, to stringify a document as YAML, use **`toString()`**. This will also be called by `String(doc)`. This method will throw if the `errors` array is not empty.
## Working with Anchors
A description of [alias and merge nodes](#alias-nodes) is included in the next section.
#### `YAML.Document#anchors`
| Method | Returns | Description |
| -------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------- |
| createAlias(node: Node, name?: string) | `Alias` | Create a new `Alias` node, adding the required anchor for `node`. If `name` is empty, a new anchor name will be generated. |
| createMergePair(...Node) | `Merge` | Create a new `Merge` node with the given source nodes. Non-`Alias` sources will be automatically wrapped. |
| getName(node: Node) | `string?` | The anchor name associated with `node`, if set. |
| getNames() | `string[]` | List of all defined anchor names. |
| getNode(name: string) | `Node?` | The node associated with the anchor `name`, if set. |
| newName(prefix: string) | `string` | Find an available anchor name with the given `prefix` and a numerical suffix. |
| setAnchor(node: Node, name?: string) | `string?` | Associate an anchor with `node`. If `name` is empty, a new name will be generated. |
```js
const src = '[{ a: A }, { b: B }]'
const doc = YAML.parseDocument(src)
const { anchors, contents } = doc
const [a, b] = contents.items
anchors.setAnchor(a.items[0].value) // 'a1'
anchors.setAnchor(b.items[0].value) // 'a2'
anchors.setAnchor(null, 'a1') // 'a1'
anchors.getName(a) // undefined
anchors.getNode('a2')
// { value: 'B', range: [ 16, 18 ], type: 'PLAIN' }
String(doc)
// [ { a: A }, { b: &a2 B } ]
const alias = anchors.createAlias(a, 'AA')
contents.items.push(alias)
doc.toJSON()
// [ { a: 'A' }, { b: 'B' }, { a: 'A' } ]
String(doc)
// [ &AA { a: A }, { b: &a2 B }, *AA ]
const merge = anchors.createMergePair(alias)
b.items.push(merge)
doc.toJSON()
// [ { a: 'A' }, { b: 'B', a: 'A' }, { a: 'A' } ]
String(doc)
// [ &AA { a: A }, { b: &a2 B, <<: *AA }, *AA ]
// This creates a circular reference
merge.value.items.push(anchors.createAlias(b))
doc.toJSON() // [RangeError: Maximum call stack size exceeded]
String(doc)
// [
// &AA { a: A },
// &a3 {
// b: &a2 B,
// <<:
// [ *AA, *a3 ]
// },
// *AA
// ]
```
The constructors for `Alias` and `Merge` are not directly exported by the library, as they depend on the document's anchors; instead you'll need to use **`createAlias(node, name)`** and **`createMergePair(...sources)`**. You should make sure to only add alias and merge nodes to the document after the nodes to which they refer, or the document's YAML stringification will fail.
It is valid to have an anchor associated with a node even if it has no aliases. `yaml` will not allow you to associate the same name with more than one node, even though this is allowed by the YAML spec (all but the last instance will have numerical suffixes added). To add or reassign an anchor, use **`setAnchor(node, name)`**. The second parameter is optional, and if left out either the pre-existing anchor name of the node will be used, or a new one generated. To remove an anchor, use `setAnchor(null, name)`. The function will return the new anchor's name, or `null` if both of its arguments are `null`.
While the `merge` option needs to be true to parse `Merge` nodes as such, this is not required during stringification.
yaml-1.10.2/docs/05_content_nodes.md000066400000000000000000000322031402322402300171450ustar00rootroot00000000000000# Content Nodes
After parsing, the `contents` value of each `YAML.Document` is the root of an [Abstract Syntax Tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree) of nodes representing the document (or `null` for an empty document).
## Scalar Values
```js
class Node {
comment: ?string, // a comment on or immediately after this
commentBefore: ?string, // a comment before this
range: ?[number, number],
// the [start, end] range of characters of the source parsed
// into this node (undefined for pairs or if not parsed)
spaceBefore: ?boolean,
// a blank line before this node and its commentBefore
tag: ?string, // a fully qualified tag, if required
toJSON(): any // a plain JS representation of this node
}
```
For scalar values, the `tag` will not be set unless it was explicitly defined in the source document; this also applies for unsupported tags that have been resolved using a fallback tag (string, `Map`, or `Seq`).
```js
class Scalar extends Node {
format: 'BIN' | 'HEX' | 'OCT' | 'TIME' | undefined,
// By default (undefined), numbers use decimal notation.
// The YAML 1.2 core schema only supports 'HEX' and 'OCT'.
type:
'BLOCK_FOLDED' | 'BLOCK_LITERAL' | 'PLAIN' |
'QUOTE_DOUBLE' | 'QUOTE_SINGLE' | undefined,
value: any
}
```
A parsed document's contents will have all of its non-object values wrapped in `Scalar` objects, which themselves may be in some hierarchy of `Map` and `Seq` collections. However, this is not a requirement for the document's stringification, which is rather tolerant regarding its input values, and will use [`YAML.createNode`](#yaml-createnode) when encountering an unwrapped value.
When stringifying, the node `type` will be taken into account by `!!str` and `!!binary` values, and ignored by other scalars. On the other hand, `!!int` and `!!float` stringifiers will take `format` into account.
## Collections
```js
class Pair extends Node {
key: Node | any, // key and value are always Node or null
value: Node | any, // when parsed, but can be set to anything
type: 'PAIR'
}
class Map extends Node {
items: Array,
type: 'FLOW_MAP' | 'MAP' | undefined
}
class Seq extends Node {
items: Array,
type: 'FLOW_SEQ' | 'SEQ' | undefined
}
```
Within all YAML documents, two forms of collections are supported: sequential `Seq` collections and key-value `Map` collections. The JavaScript representations of these collections both have an `items` array, which may (`Seq`) or must (`Map`) consist of `Pair` objects that contain a `key` and a `value` of any type, including `null`. The `items` array of a `Seq` object may contain values of any type.
When stringifying collections, by default block notation will be used. Flow notation will be selected if `type` is `FLOW_MAP` or `FLOW_SEQ`, the collection is within a surrounding flow collection, or if the collection is in an implicit key.
The `yaml-1.1` schema includes [additional collections](https://yaml.org/type/index.html) that are based on `Map` and `Seq`: `OMap` and `Pairs` are sequences of `Pair` objects (`OMap` requires unique keys & corresponds to the JS Map object), and `Set` is a map of keys with null values that corresponds to the JS Set object.
All of the collections provide the following accessor methods:
| Method | Returns | Description |
| --------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| add(value) | `void` | Adds a value to the collection. For `!!map` and `!!omap` the value must be a Pair instance or a `{ key, value }` object, which may not have a key that already exists in the map. |
| delete(key) | `boolean` | Removes a value from the collection. Returns `true` if the item was found and removed. |
| get(key, [keepScalar]) | `any` | Returns item at `key`, or `undefined` if not found. By default unwraps scalar values from their surrounding node; to disable set `keepScalar` to `true` (collections are always returned intact). |
| has(key) | `boolean` | Checks if the collection includes a value with the key `key`. |
| set(key, value) | `any` | Sets a value in this collection. For `!!set`, `value` needs to be a boolean to add/remove the item from the set. |
```js
const map = YAML.createNode({ a: 1, b: [2, 3] })
map.add({ key: 'c', value: 4 })
// => map.get('c') === 4 && map.has('c') === true
map.addIn(['b'], 5) // -> map.getIn(['b', 2]) === 5
map.delete('c') // true
map.deleteIn(['c', 'f']) // false
map.get('a') // 1
map.get(YAML.createNode('a'), true) // Scalar { value: 1 }
map.getIn(['b', 1]) // 3
map.has('c') // false
map.hasIn(['b', '0']) // true
map.set('c', null)
// => map.get('c') === null && map.has('c') === true
map.setIn(['c', 'x'])
// throws Error:
// Expected YAML collection at c. Remaining path: x
```
For all of these methods, the keys may be nodes or their wrapped scalar values (i.e. `42` will match `Scalar { value: 42 }`) . Keys for `!!seq` should be positive integers, or their string representations. `add()` and `set()` do not automatically call `createNode()` to wrap the value.
Each of the methods also has a variant that requires an iterable as the first parameter, and allows fetching or modifying deeper collections: `addIn(path, value)`, `deleteIn(path)`, `getIn(path, keepScalar)`, `hasIn(path)`, `setIn(path, value)`. If any intermediate node in `path` is a scalar rather than a collection, an error will be thrown. If any of the intermediate collections is not found:
- `getIn` and `hasIn` will return `undefined` or `false` (respectively)
- `addIn` and `setIn` will create missing collections; non-negative integer keys will create sequences, all other keys create maps
- `deleteIn` will throw an error
Note that for `addIn` the path argument points to the collection rather than the item; for maps its `value` should be a `Pair` or an object with `{ key, value }` fields.
## Alias Nodes
```js
class Alias extends Node {
source: Scalar | Map | Seq,
type: 'ALIAS'
}
const obj = YAML.parse('[ &x { X: 42 }, Y, *x ]')
// => [ { X: 42 }, 'Y', { X: 42 } ]
obj[2].Z = 13
// => [ { X: 42, Z: 13 }, 'Y', { X: 42, Z: 13 } ]
YAML.stringify(obj)
// - &a1
// X: 42
// Z: 13
// - Y
// - *a1
```
`Alias` nodes provide a way to include a single node in multiple places in a document; the `source` of an alias node must be a preceding node in the document. Circular references are fully supported, and where possible the JS representation of alias nodes will be the actual source object.
When directly stringifying JS structures with `YAML.stringify()`, multiple references to the same object will result in including an autogenerated anchor at its first instance, and alias nodes to that anchor at later references. Directly calling `YAML.createNode()` will not create anchors or alias nodes, allowing for greater manual control.
```js
class Merge extends Pair {
key: Scalar('<<'), // defined by the type specification
value: Seq, // stringified as *A if length = 1
type: 'MERGE_PAIR'
}
```
`Merge` nodes are not a core YAML 1.2 feature, but are defined as a [YAML 1.1 type](http://yaml.org/type/merge.html). They are only valid directly within a `Map#items` array and must contain one or more `Alias` nodes that themselves refer to `Map` nodes. When the surrounding map is resolved as a plain JS object, the key-value pairs of the aliased maps will be included in the object. Earlier `Alias` nodes override later ones, as do values set in the object directly.
To create and work with alias and merge nodes, you should use the [`YAML.Document#anchors`](#working-with-anchors) object.
## Creating Nodes
```js
const seq = YAML.createNode(['some', 'values', { balloons: 99 }])
// YAMLSeq {
// items:
// [ Scalar { value: 'some' },
// Scalar { value: 'values' },
// YAMLMap {
// items:
// [ Pair {
// key: Scalar { value: 'balloons' },
// value: Scalar { value: 99 } } ] } ] }
const doc = new YAML.Document()
doc.contents = seq
seq.items[0].comment = ' A commented item'
String(doc)
// - some # A commented item
// - values
// - balloons: 99
```
#### `YAML.createNode(value, wrapScalars?, tag?): Node`
`YAML.createNode` recursively turns objects into [collections](#collections). Generic objects as well as `Map` and its descendants become mappings, while arrays and other iterable objects result in sequences. If `wrapScalars` is undefined or `true`, it also wraps plain values in `Scalar` objects; if it is false and `value` is not an object, it will be returned directly.
To specify the collection type, set `tag` to its identifying string, e.g. `"!!omap"`. Note that this requires the corresponding tag to be available based on the default options. To use a specific document's schema, use the wrapped method `doc.schema.createNode(value, wrapScalars, tag)`.
The primary purpose of this function is to enable attaching comments or other metadata to a value, or to otherwise exert more fine-grained control over the stringified output. To that end, you'll need to assign its return value to the `contents` of a Document (or somewhere within said contents), as the document's schema is required for YAML string output.
new Map(), new Seq(), new Pair(key, value)
```js
import YAML from 'yaml'
import { Pair, YAMLSeq } from 'yaml/types'
const doc = new YAML.Document()
doc.contents = new YAMLSeq()
doc.contents.items = [
'some values',
42,
{ including: 'objects', 3: 'a string' }
]
doc.contents.items.push(new Pair(1, 'a number'))
doc.toString()
// - some values
// - 42
// - "3": a string
// including: objects
// - 1: a number
```
To construct a `YAMLSeq` or `YAMLMap`, use [`YAML.createNode()`](#yaml-createnode) with array, object or iterable input, or create the collections directly by importing the classes from `yaml/types`.
Once created, normal array operations may be used to modify the `items` array. New `Pair` objects may created either by importing the class from `yaml/types` and using its `new Pair(key, value)` constructor, or by using the `doc.schema.createPair(key, value)` method. The latter will recursively wrap the `key` and `value` as nodes.
## Comments
```js
const doc = YAML.parseDocument(`
# This is YAML.
---
it has:
- an array
- of values
`)
doc.toJSON()
// { 'it has': [ 'an array', 'of values' ] }
doc.commentBefore
// ' This is YAML.'
const seq = doc.contents.items[0].value
seq.items[0].comment = ' item comment'
seq.comment = ' collection end comment'
doc.toString()
// # This is YAML.
//
// it has:
// - an array # item comment
// - of values
// # collection end comment
```
A primary differentiator between this and other YAML libraries is the ability to programmatically handle comments, which according to [the spec](http://yaml.org/spec/1.2/spec.html#id2767100) "must not have any effect on the serialization tree or representation graph. In particular, comments are not associated with a particular node."
This library does allow comments to be handled programmatically, and does attach them to particular nodes (most often, the following node). Each `Scalar`, `Map`, `Seq` and the `Document` itself has `comment` and `commentBefore` members that may be set to a stringifiable value.
The string contents of comments are not processed by the library, except for merging adjacent comment lines together and prefixing each line with the `#` comment indicator. Document comments will be separated from the rest of the document by a blank line.
**Note**: Due to implementation details, the library's comment handling is not completely stable. In particular, when creating, writing, and then reading a YAML file, comments may sometimes be associated with a different node.
## Blank Lines
```js
const doc = YAML.parseDocument('[ one, two, three ]')
doc.contents.items[0].comment = ' item comment'
doc.contents.items[1].spaceBefore = true
doc.comment = ' document end comment'
doc.toString()
// [
// one, # item comment
//
// two,
// three
// ]
//
// # document end comment
```
Similarly to comments, the YAML spec instructs non-content blank lines to be discarded. Instead of doing that, `yaml` provides a `spaceBefore` boolean property for each node. If true, the node (and its `commentBefore`, if any) will be separated from the preceding node by a blank line.
Note that scalar block values with "keep" chomping (i.e. with `+` in their header) consider any trailing empty lines to be a part of their content, so the `spaceBefore` setting of a node following such a value is ignored.
yaml-1.10.2/docs/06_custom_tags.md000066400000000000000000000301741402322402300166410ustar00rootroot00000000000000# Custom Data Types
```js
YAML.parse('!!timestamp 2001-12-15 2:59:43')
// YAMLWarning:
// The tag tag:yaml.org,2002:timestamp is unavailable,
// falling back to tag:yaml.org,2002:str
// '2001-12-15 2:59:43'
YAML.defaultOptions.customTags = ['timestamp']
YAML.parse('2001-12-15 2:59:43') // returns a Date instance
// 2001-12-15T02:59:43.000Z
const doc = YAML.parseDocument('2001-12-15 2:59:43')
doc.contents.value.toDateString()
// 'Sat Dec 15 2001'
```
The easiest way to extend a [schema](#data-schemas) is by defining the additional **tags** that you wish to support. To do that, the `customTags` option allows you to provide an array of custom tag objects or tag identifiers. In particular, the built-in tags that are a part of the `core` and `yaml-1.1` schemas may be referred to by their string identifiers. For those tags that are available in both, only the `core` variant is provided as a custom tag.
For further customisation, `customTags` may also be a function `(Tag[]) => (Tag[])` that may modify the schema's base tag array.
## Built-in Custom Tags
```js
YAML.parse('[ one, true, 42 ]').map(v => typeof v)
// [ 'string', 'boolean', 'number' ]
let opt = { schema: 'failsafe' }
YAML.parse('[ one, true, 42 ]', opt).map(v => typeof v)
// [ 'string', 'string', 'string' ]
opt = { schema: 'failsafe', customTags: ['int'] }
YAML.parse('[ one, true, 42 ]', opt).map(v => typeof v)
// [ 'string', 'string', 'number' ]
```
### YAML 1.2 Core Schema
These tags are a part of the YAML 1.2 [Core Schema](https://yaml.org/spec/1.2/spec.html#id2804923), and may be useful when constructing a parser or stringifier for a more limited set of types, based on the `failsafe` schema. Some of these define a `format` value; this will be added to the parsed nodes and affects the node's stringification.
If including more than one custom tag from this set, make sure that the `'float'` and `'int'` tags precede any of the other `!!float` and `!!int` tags.
| Identifier | Regular expression | YAML Type | Format | Example values |
| ------------ | ------------------------------------------------ | --------- | ------- | --------------- |
| `'bool'` | `true⎮True⎮TRUE⎮false⎮False⎮FALSE` | `!!bool` | | `true`, `false` |
| `'float'` | `[-+]?(0⎮[1-9][0-9]*)\.[0-9]*` | `!!float` | | `4.2`, `-0.0` |
| `'floatExp'` | `[-+]?(0⎮[1-9][0-9]*)(\.[0-9]*)?[eE][-+]?[0-9]+` | `!!float` | `'EXP'` | `4.2e9` |
| `'floatNaN'` | `[-+]?(\.inf⎮\.Inf⎮\.INF)⎮\.nan⎮\.NaN⎮\.NAN` | `!!float` | | `-Infinity` |
| `'int'` | `[-+]?[0-9]+` | `!!int` | | `42`, `-0` |
| `'intHex'` | `0x[0-9a-fA-F]+` | `!!int` | `'HEX'` | `0xff0033` |
| `'intOct'` | `0o[0-7]+` | `!!int` | `'OCT'` | `0o127` |
| `'null'` | `~⎮null⎮Null⎮NULL` | `!!null` | | `null` |
### YAML 1.1
These tags are a part of the YAML 1.1 [language-independent types](https://yaml.org/type/), but are not a part of any default YAML 1.2 schema.
| Identifier | YAML Type | JS Type | Description |
| ------------- | ----------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `'binary'` | [`!!binary`](https://yaml.org/type/binary.html) | `Uint8Array` | Binary data, represented in YAML as base64 encoded characters. |
| `'floatTime'` | [`!!float`](https://yaml.org/type/float.html) | `Number` | Sexagesimal floating-point number format, e.g. `190:20:30.15`. To stringify with this tag, the node `format` must be `'TIME'`. |
| `'intTime'` | [`!!int`](https://yaml.org/type/int.html) | `Number` | Sexagesimal integer number format, e.g. `190:20:30`. To stringify with this tag, the node `format` must be `'TIME'`. |
| `'omap'` | [`!!omap`](https://yaml.org/type/omap.html) | `Map` | Ordered sequence of key: value pairs without duplicates. Using `mapAsMap: true` together with this tag is not recommended, as it makes the parse → stringify loop non-idempotent. |
| `'pairs'` | [`!!pairs`](https://yaml.org/type/pairs.html) | `Array` | Ordered sequence of key: value pairs allowing duplicates. To create from JS, you'll need to explicitly use `'!!pairs'` as the third argument of [`createNode()`](#creating-nodes). |
| `'set'` | [`!!set`](https://yaml.org/type/set.html) | `Set` | Unordered set of non-equal values. |
| `'timestamp'` | [`!!timestamp`](https://yaml.org/type/timestamp.html) | `Date` | A point in time, e.g. `2001-12-15T02:59:43`. |
## Writing Custom Tags
```js
import { stringifyString } from 'yaml/util'
const regexp = {
identify: value => value instanceof RegExp,
tag: '!re',
resolve(doc, cst) {
const match = cst.strValue.match(/^\/([\s\S]+)\/([gimuy]*)$/)
return new RegExp(match[1], match[2])
}
}
const sharedSymbol = {
identify: value => value.constructor === Symbol,
tag: '!symbol/shared',
resolve: (doc, cst) => Symbol.for(cst.strValue),
stringify(item, ctx, onComment, onChompKeep) {
const key = Symbol.keyFor(item.value)
if (key === undefined) throw new Error('Only shared symbols are supported')
return stringifyString({ value: key }, ctx, onComment, onChompKeep)
}
}
YAML.defaultOptions.customTags = [regexp, sharedSymbol]
YAML.stringify({
regexp: /foo/gi,
symbol: Symbol.for('bar')
})
// regexp: !re /foo/gi
// symbol: !symbol/shared bar
```
In YAML-speak, a custom data type is represented by a _tag_. To define your own tag, you need to account for the ways that your data is both parsed and stringified. Furthermore, both of those processes are split into two stages by the intermediate AST node structure.
If you wish to implement your own custom tags, the [`!!binary`](https://github.com/eemeli/yaml/blob/master/src/tags/yaml-1.1/binary.js) and [`!!set`](https://github.com/eemeli/yaml/blob/master/src/tags/yaml-1.1/set.js) tags provide relatively cohesive examples to study in addition to the simple examples in the sidebar here.
### Parsing Custom Data
At the lowest level, [`YAML.parseCST()`](#cst-parser) will take care of turning string input into a concrete syntax tree (CST). In the CST all scalar values are available as strings, and maps & sequences as collections of nodes. Each schema includes a set of default data types, which handle converting at least strings, maps and sequences into their AST nodes. These are considered to have _implicit_ tags, and are autodetected. Custom tags, on the other hand, should almost always define an _explicit_ `tag` with which their value will be prefixed. This may be application-specific local `!tag`, a shorthand `!ns!tag`, or a verbatim `!`.
Once identified by matching the `tag`, the `resolve(doc, cstNode): Node | any` function will turn a CST node into an AST node. For scalars, this is relatively simple, as the stringified node value is directly available, and should be converted to its actual value. Collections are trickier, and it's almost certain that it'll make sense to use the `parseMap(doc, cstNode)` and `parseSeq(doc, cstNode)` functions exported from `'yaml/util'` to initially resolve the CST collection into a `YAMLMap` or `YAMLSeq` object, and to work with that instead -- this is for instance what the YAML 1.1 collections do.
Note that during the CST -> AST parsing, the anchors and comments attached to each node are also resolved for each node. This metadata will unfortunately be lost when converting the values to JS objects, so collections should have values that extend one of the existing collection classes. Collections should therefore either fall back to their parent classes' `toJSON()` methods, or define their own in order to allow their contents to be expressed as the appropriate JS object.
### Creating Nodes and Stringifying Custom Data
As with parsing, turning input data into its YAML string representation is a two-stage process as the input is first turned into an AST tree before stringifying it. This allows for metadata and comments to be attached to each node, and for e.g. circular references to be resolved. For scalar values, this means just wrapping the value within a `Scalar` class while keeping it unchanged.
As values may be wrapped within objects and arrays, `YAML.createNode()` uses each tag's `identify(value): boolean` function to detect custom data types. For the same reason, collections need to define their own `createNode(schema, value, ctx): Collection` functions that may recursively construct their equivalent collection class instances.
Finally, `stringify(item, ctx, ...): string` defines how your data should be represented as a YAML string, in case the default stringifiers aren't enough. For collections in particular, the default stringifier should be perfectly sufficient. `'yaml/util'` exports `stringifyNumber(item)` and `stringifyString(item, ctx, ...)`, which may be of use for custom scalar data.
### Custom Tag API
```js
import {
findPair, // (items, key) => Pair? -- Given a key, find a matching Pair
parseMap, // (doc, cstNode) => new YAMLMap
parseSeq, // (doc, cstNode) => new YAMLSeq
stringifyNumber, // (node) => string
stringifyString, // (node, ctx, ...) => string
toJSON, // (value, arg, ctx) => any -- Recursively convert to plain JS
Type, // { [string]: string } -- Used as enum for node types
YAMLReferenceError, YAMLSemanticError, YAMLSyntaxError, YAMLWarning
} from 'yaml/util'
```
To define your own tag, you'll need to define an object comprising of some of the following fields. Those in bold are required:
- `createNode(schema, value, ctx): Node` is an optional factory function, used e.g. by collections when wrapping JS objects as AST nodes.
- `format: string` If a tag has multiple forms that should be parsed and/or stringified differently, use `format` to identify them. Used by `!!int` and `!!float`.
- **`identify(value): boolean`** is used by `YAML.createNode` to detect your data type, e.g. using `typeof` or `instanceof`. Required.
- `nodeClass: Node` is the `Node` child class that implements this tag. Required for collections and tags that have overlapping JS representations.
- `options: Object` is used by some tags to configure their stringification.
- **`resolve(doc, cstNode): Node | any`** turns a CST node into an AST node; `doc` is the resulting `YAML.Document` instance. If returning a non-`Node` value, the output will be wrapped as a `Scalar`. Required.
- `stringify(item, ctx, onComment, onChompKeep): string` is an optional function stringifying the `item` AST node in the current context `ctx`. `onComment` and `onChompKeep` are callback functions for a couple of special cases. If your data includes a suitable `.toString()` method, you can probably leave this undefined and use the default stringifier.
- **`tag: string`** is the identifier for your data type, with which its stringified form will be prefixed. Should either be a !-prefixed local `!tag`, or a fully qualified `tag:domain,date:foo`. Required.
- `test: RegExp` and `default: boolean` allow for values to be stringified without an explicit tag and detected using a regular expression. For most cases, it's unlikely that you'll actually want to use these, even if you first think you do.
yaml-1.10.2/docs/07_cst_parser.md000066400000000000000000000246131402322402300164600ustar00rootroot00000000000000# CST Parser
For ease of implementation and to provide better error handling and reporting, the lowest level of the library's parser turns any input string into a [**Concrete Syntax Tree**](https://en.wikipedia.org/wiki/Concrete_syntax_tree) of nodes as if the input were YAML. This level of the API has not been designed to be particularly user-friendly for external users, but it is fast, robust, and not dependent on the rest of the library.
## parseCST
```js
import parseCST from 'yaml/parse-cst'
const cst = parseCST(`
sequence: [ one, two, ]
mapping: { sky: blue, sea: green }
---
-
"flow in block"
- >
Block scalar
- !!map # Block collection
foo : bar
`)
cst[0] // first document, containing a map with two keys
.contents[0] // document contents (as opposed to directives)
.items[3].node // the last item, a flow map
.items[3] // the fourth token, parsed as a plain value
.strValue // 'blue'
cst[1] // second document, containing a sequence
.contents[0] // document contents (as opposed to directives)
.items[1].node // the second item, a block value
.strValue // 'Block scalar\n'
```
#### `parseCST(string): CSTDocument[]`
#### `YAML.parseCST(string): CSTDocument[]`
The CST parser will not produce a CST that is necessarily valid YAML, and in particular its representation of collections of items is expected to undergo further processing and validation. The parser should never throw errors, but may include them as a value of the relevant node. On the other hand, if you feed it garbage, you'll likely get a garbage CST as well.
The public API of the CST layer is a single function which returns an array of parsed CST documents. The array and its contained nodes override the default `toString` method, each returning a YAML string representation of its contents. The same function is exported as a part of the default `YAML` object, as well as seprately at `yaml/parse-cst`. It has no dependency on the rest of the library, so importing only `parseCST` should add about 9kB to your gzipped bundle size, when the whole library will add about 27kB.
Care should be taken when modifying the CST, as no error checks are included to verify that the resulting YAML is valid, or that e.g. indentation levels aren't broken. In other words, this is an engineering tool and you may hurt yourself. If you're looking to generate a brand new YAML document, see the section on [Creating Documents](#creating-documents).
For more usage examples and CST trees, have a look through the [extensive test suite](https://github.com/eemeli/yaml/tree/master/tests/cst) included in the project's repository.
Error detection
```js
import YAML from 'yaml'
const cst = YAML.parseCST('this: is: bad YAML')
cst[0].contents[0] // Note: Simplified for clarity
// { type: 'MAP',
// items: [
// { type: 'PLAIN', strValue: 'this' },
// { type: 'MAP_VALUE',
// node: {
// type: 'MAP',
// items: [
// { type: 'PLAIN', strValue: 'is' },
// { type: 'MAP_VALUE',
// node: { type: 'PLAIN', strValue: 'bad YAML' } } ] } } ] }
const doc = new YAML.Document()
doc.parse(cst[0])
doc.errors
// [ {
// name: 'YAMLSemanticError',
// message: 'Nested mappings are not allowed in compact mappings',
// source: {
// type: 'MAP',
// range: { start: 6, end: 18 },
// ...,
// rawValue: 'is: bad YAML' } } ]
doc.contents.items[0].value.items[0].value.value
// 'bad YAML'
```
While the YAML spec considers e.g. block collections within a flow collection to be an error, this error will not be detected by the CST parser. For complete validation, you will need to parse the CST into a `YAML.Document`. If the document contains errors, they will be included in the document's `errors` array, and each error will will contain a `source` reference to the CST node where it was encountered. Do note that even if an error is encountered, the document contents might still be available. In such a case, the error will be a [`YAMLSemanticError`](#yamlsemanticerror) rather than a [`YAMLSyntaxError`](#yamlsyntaxerror).
Dealing with CRLF line terminators
```js
import parseCST from 'yaml/parse-cst'
const src = '- foo\r\n- bar\r\n'
const cst = parseCST(src)
cst.setOrigRanges() // true
const { range, valueRange } = cst[0].contents[0].items[1].node
src.slice(range.origStart, range.origEnd)
// 'bar\r\n'
src.slice(valueRange.origStart, valueRange.origEnd)
// 'bar'
```
#### `CST#setOrigRanges(): bool`
The array returned by `parseCST()` will also include a method `setOrigRanges` to help deal with input that includes `\r\n` line terminators, which are converted to just `\n` before parsing into documents. This conversion will obviously change the total length of the string, as well as the offsets of all ranges. If the method returns `false`, the input did not include `\r\n` line terminators and no changes were made. However, if the method returns `true`, each `Range` object within the CST will have its `origStart` and `origEnd` values set appropriately to refer to the original input string.
## CST Nodes
> Node type definitions use Flow-ish notation, so `+` as a prefix indicates a read-only getter property.
```js
class Range {
start: number, // offset of first character
end: number, // offset after last character
isEmpty(): boolean, // true if end is not greater than start
origStart: ?number, // set by CST#setOrigRanges(), source
origEnd: ?number // offsets for input with CRLF terminators
}
```
**Note**: The `Node`, `Scalar` and other values referred to in this section are the CST representations of said objects, and are not the same as those used in preceding parts.
Actual values in the CST nodes are stored as `start`, `end` indices of the input string. This allows for memory consumption to be minimised by making string generation really lazy.
Node
```js
class Node {
context: { // not enumerable, to simplify logging
atLineStart: boolean, // is this node the first one on this line
indent: number, // current level of indentation (may be -1)
root: CSTDocument, // a reference to the parent document
src: string // the full original source
},
error: ?Error, // if not null, indicates a parser failure
props: Array, // anchors, tags and comments
range: Range, // span of context.src parsed into this node
type: // specific node type
'ALIAS' | 'BLOCK_FOLDED' | 'BLOCK_LITERAL' | 'COMMENT' |
'DIRECTIVE' | 'DOCUMENT' | 'FLOW_MAP' | 'FLOW_SEQ' |
'MAP' | 'MAP_KEY' | 'MAP_VALUE' | 'PLAIN' |
'QUOTE_DOUBLE' | 'QUOTE_SINGLE' | 'SEQ' | 'SEQ_ITEM',
value: ?string // if set to a non-null value, overrides
// source value when stringified
+anchor: ?string, // anchor, if set
+comment: ?string, // newline-delimited comment(s), if any
+rangeAsLinePos: // human-friendly source location
?{ start: LinePos, end: ?LinePos },
// LinePos here is { line: number, col: number }
+rawValue: ?string, // an unprocessed slice of context.src
// determining this node's value
+tag: // this node's tag, if set
null | { verbatim: string } | { handle: string, suffix: string },
toString(): string // a YAML string representation of this node
}
type ContentNode =
Comment | Alias | Scalar | Map | Seq | FlowCollection
```
Each node in the CST extends a common ancestor `Node`. Additional undocumented properties are available, but are likely only useful during parsing.
If a node has its `value` set, that will be used when re-stringifying (initially `undefined` for all nodes).
Scalars
```js
class Alias extends Node {
// rawValue will contain the anchor without the * prefix
type: 'ALIAS'
}
class Scalar extends Node {
type: 'PLAIN' | 'QUOTE_DOUBLE' | 'QUOTE_SINGLE' |
'BLOCK_FOLDED' | 'BLOCK_LITERAL'
+strValue: ?string | // unescaped string value
{ str: string, errors: YAMLSyntaxError[] }
}
class Comment extends Node {
type: 'COMMENT', // PLAIN nodes may also be comment-only
+anchor: null,
+comment: string,
+rawValue: null,
+tag: null
}
class BlankLine extends Comment {
type: 'BLANK_LINE', // represents a single blank line, which
+comment: null // may include whitespace
}
```
While `Alias`, `BlankLine` and `Comment` nodes are not technically scalars, they are parsed as such at this level.
Due to parsing differences, each scalar type is implemented using its own class.
Collections
```js
class MapItem extends Node {
node: ContentNode | null,
type: 'MAP_KEY' | 'MAP_VALUE'
}
class Map extends Node {
// implicit keys are not wrapped
items: Array,
type: 'MAP'
}
class SeqItem extends Node {
node: ContentNode | null,
type: 'SEQ_ITEM'
}
class Seq extends Node {
items: Array,
type: 'SEQ'
}
type FlowChar = '{' | '}' | '[' | ']' | ',' | '?' | ':'
class FlowCollection extends Node {
items: Array,
type: 'FLOW_MAP' | 'FLOW_SEQ'
}
```
Block and flow collections are parsed rather differently, due to their representation differences.
An `Alias` or `Scalar` item directly within a `Map` should be treated as an implicit map key.
In actual code, `MapItem` and `SeqItem` are implemented as `CollectionItem`, and correspondingly `Map` and `Seq` as `Collection`.
Document Structure
```js
class Directive extends Node {
name: string, // should only be 'TAG' or 'YAML'
type: 'DIRECTIVE',
+anchor: null,
+parameters: Array,
+tag: null
}
class CSTDocument extends Node {
directives: Array,
contents: Array,
type: 'DOCUMENT',
directivesEndMarker: Range | null,
documentEndMarker: Range | null,
+anchor: null,
+comment: null,
+tag: null
}
```
The CST tree of a valid YAML document should have a single non-`Comment` `ContentNode` in its `contents` array. Multiple values indicates that the input is malformed in a way that made it impossible to determine the proper structure of the document. If `directivesEndMarker` or `documentEndMarker` are non-empty, the document includes (respectively) a directives-end marker `---` or a document-end marker `...` with the indicated range.
yaml-1.10.2/docs/08_errors.md000066400000000000000000000057051402322402300156310ustar00rootroot00000000000000# Errors
Nearly all errors and warnings produced by the `yaml` parser functions contain the following fields:
| Member | Type | Description |
| ------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name | `string` | One of `YAMLReferenceError`, `YAMLSemanticError`, `YAMLSyntaxError`, or `YAMLWarning` |
| message | `string` | A human-readable description of the error |
| source | `CST Node` | The CST node at which this error or warning was encountered. Note that in particular `source.context` is likely to be a complex object and include some circular references. |
If the `prettyErrors` option is enabled, `source` is dropped from the errors and the following fields are added with summary information regarding the error's source node, if available:
| Member | Type | Description |
| -------- | ----------------------------------- | --------------------------------------------------------------------------------------------- |
| nodeType | `string` | A string constant identifying the type of node |
| range | `{ start: number, end: ?number }` | Character offset in the input string |
| linePos | `{ start: LinePos, end: ?LinePos }` | One-indexed human-friendly source location. `LinePos` here is `{ line: number, col: number }` |
In rare cases, the library may produce a more generic error. In particular, `TypeError` may occur when parsing invalid input using the `json` schema, and `ReferenceError` when the `maxAliasCount` limit is enountered.
## YAMLReferenceError
An error resolving a tag or an anchor that is referred to in the source. It is likely that the contents of the `source` node have not been completely parsed into the document. Not used by the CST parser.
## YAMLSemanticError
An error related to the metadata of the document, or an error with limitations imposed by the YAML spec. The data contents of the document should be valid, but the metadata may be broken.
## YAMLSyntaxError
A serious parsing error; the document contents will not be complete, and the CST is likely to be rather broken.
## YAMLWarning
Not an error, but a spec-mandated warning about unsupported directives or a fallback resolution being used for a node with an unavailable tag. Not used by the CST parser.
yaml-1.10.2/docs/09_yaml_syntax.md000066400000000000000000000145671402322402300166740ustar00rootroot00000000000000# YAML Syntax
A YAML _schema_ is a combination of a set of tags and a mechanism for resolving non-specific tags, i.e. values that do not have an explicit tag such as `!!int`. The [default schema](#data-schemas) is the `'core'` schema, which is the recommended one for YAML 1.2. For YAML 1.0 and YAML 1.1 documents the default is `'yaml-1.1'`.
## Tags
```js
YAML.parse('"42"')
// '42'
YAML.parse('!!int "42"')
// 42
YAML.parse(`
%TAG ! tag:example.com,2018:app/
---
!foo 42
`)
// YAMLWarning:
// The tag tag:example.com,2018:app/foo is unavailable,
// falling back to tag:yaml.org,2002:str
// '42'
```
The default prefix for YAML tags is `tag:yaml.org,2002:`, for which the shorthand `!!` is used when stringified. Shorthands for other prefixes may also be defined by document-specific directives, e.g. `!e!` or just `!` for `tag:example.com,2018:app/`, but this is not required to use a tag with a different prefix.
During parsing, unresolved tags should not result in errors (though they will be noted as `warnings`), with the tagged value being parsed according to the data type that it would have under automatic tag resolution rules. This should not result in any data loss, allowing such tags to be handled by the calling app.
In order to have `yaml` provide you with automatic parsing and stringification of non-standard data types, it will need to be configured with a suitable tag object. For more information, see [Custom Tags](#custom-tags).
The YAML 1.0 tag specification is [slightly different](#changes-from-yaml-1-0-to-1-1) from that used in later versions, and implements prefixing shorthands rather differently.
## Version Differences
This library's parser is based on the 1.2 version of the [YAML spec](http://yaml.org/spec/1.2/spec.html), which is mostly backwards-compatible with [YAML 1.1](http://yaml.org/spec/1.1/) as well as [YAML 1.0](http://yaml.org/spec/1.0/). Some specific relaxations have been added for backwards compatibility, but if you encounter an issue please [report it](https://github.com/eemeli/yaml/issues).
### Changes from YAML 1.1 to 1.2
```yaml
%YAML 1.1
---
true: Yes
octal: 014
sexagesimal: 3:25:45
picture: !!binary |
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=
```
```js
{ true: true,
octal: 12,
sexagesimal: 12345,
picture:
Buffer [Uint8Array] [
71, 73, 70, 56, 57, 97, 12, 0, 12, 0, 132, 0, 0,
255, 255, 247, 245, 245, 238, 233, 233, 229, 102,
102, 102, 0, 0, 0, 231, 231, 231, 94, 94, 94, 243,
243, 237, 142, 142, 142, 224, 224, 224, 159, 159,
159, 147, 147, 147, 167, 167, 167, 158, 158, 158,
105, 94, 16, 39, 32, 130, 10, 1, 0, 59 ] }
```
The most significant difference between YAML 1.1 and YAML 1.2 is the introduction of the core data schema as the recommended default, replacing the YAML 1.1 type library:
- Only `true` and `false` strings are parsed as booleans (including `True` and `TRUE`); `y`, `yes`, `on`, and their negative counterparts are parsed as strings.
- Underlines `_` cannot be used within numerical values.
- Octal values need a `0o` prefix; e.g. `010` is now parsed with the value 10 rather than 8.
- The binary and sexagesimal integer formats have been dropped.
- The `!!pairs`, `!!omap`, `!!set`, `!!timestamp` and `!!binary` types have been dropped.
- The merge `<<` and value `=` special mapping keys have been removed.
The other major change has been to make sure that YAML 1.2 is a valid superset of JSON. Additionally there are some minor differences between the parsing rules:
- The next-line `\x85`, line-separator `\u2028` and paragraph-separator `\u2029` characters are no longer considered line-break characters. Within scalar values, this means that next-line characters will not be included in the white-space normalisation. Using any of these outside scalar values is likely to result in errors during parsing. For a relatively robust solution, try replacing `\x85` and `\u2028` with `\n` and `\u2029` with `\n\n`.
- Tag shorthands can no longer include any of the characters `,[]{}`, but can include `#`. To work around this, either fix your tag names or use verbatim tags.
- Anchors can no longer include any of the characters `,[]{}`.
- Inside double-quoted strings `\/` is now a valid escape for the `/` character.
- Quoted content can include practically all Unicode characters.
- Documents in streams are now independent of each other, and no longer inherit preceding document directives if they do not define their own.
### Changes from YAML 1.0 to 1.1
```text
%YAML:1.0
---
date: 2001-01-23
number: !int '123'
string: !str 123
pool: !!ball { number: 8 }
invoice: !domain.tld,2002/^invoice
customers: !seq
- !^customer
given : Chris
family : Dumars
```
```js
// YAMLWarning:
// The tag tag:private.yaml.org,2002:ball is unavailable,
// falling back to tag:yaml.org,2002:map
// YAMLWarning:
// The tag tag:domain.tld,2002/^invoice is unavailable,
// falling back to tag:yaml.org,2002:map
// YAMLWarning:
// The tag ^customer is unavailable,
// falling back to tag:yaml.org,2002:map
{ date: '2001-01-23T00:00:00.000Z',
number: 123,
string: '123',
pool: { number: 8 },
invoice: { customers: [ { given: 'Chris', family: 'Dumars' } ] } }
```
The most significant difference between these versions is the complete refactoring of the tag syntax:
- The `%TAG` directive has been added, along with the `!foo!` tag prefix shorthand notation.
- The `^` character no longer enables tag prefixing.
- The private vs. default scoping of `!` and `!!` tag prefixes has been switched around; `!!str` is now a default tag while `!bar` is an application-specific tag.
- Verbatim `!` tag notation has been added.
- The formal `tag:domain,date/path` format for tag names has been dropped as a requirement.
Additionally, the formal description of the language describing the document structure has been completely refactored between these versions, but the described intent has not changed. Other changes include:
- A `\` escape has been added for the tab character, in addition to the pre-existing `\t`
- The `\^` escape has been removed
- Directives now use a blank space `' '` rather than `:` as the separator between the name and its parameter/value.
`yaml` supports parsing and stringifying YAML 1.0 tags, but does not expand tags using the `^` notation. If this is something you'd find useful, please file a [GitHub issue](https://github.com/eemeli/yaml/issues) about it.
yaml-1.10.2/docs/README.md000066400000000000000000000020241402322402300147320ustar00rootroot00000000000000## YAML Docs
These documentation source files are compiled into [eemeli.org/yaml](https://eemeli.org/yaml) using a [Slate](https://github.com/slatedocs/slate) instance that's a git submodule of this repo at `docs-slate/`.
### How to Preview Changes
1. Modify these source files, noting that sections are defined in `index.html.md`
2. Make sure that the Slate submodule is properly initialised. If you've just cloned the repo, the command you'll want is `git submodule update --init`
3. Note that `docs-slate/source` contains symlinks to this folder, which may need extra configuration to work in Windows environments
4. See [docs-slate/README.md](../docs-slate/README.md) for its install instructions
5. Use `npm run docs` from this repo's root to preview the site at http://localhost:4567
### How to Publish Changes
In addition to the preview steps:
1. Add this repo as the "yaml" remote for the `docs-slate` submodule repo: `git remote add yaml git@github.com:eemeli/yaml.git`
2. Run the `deploy.sh` script from the `docs-slate` folder
yaml-1.10.2/docs/index.html.md000066400000000000000000000007431402322402300160550ustar00rootroot00000000000000---
title: YAML
toc_footers:
- Version 1.x.y (changelog)
- github.com/eemeli/yaml
- npm install yaml
includes:
- 01_intro
- 02_parse_stringify
- 03_options
- 04_documents
- 05_content_nodes
- 06_custom_tags
- 07_cst_parser
- 08_errors
- 09_yaml_syntax
search: true
---
yaml-1.10.2/index.d.ts000066400000000000000000000247701402322402300144400ustar00rootroot00000000000000import { CST } from './parse-cst'
import {
AST,
Alias,
Collection,
Merge,
Node,
Scalar,
Schema,
YAMLMap,
YAMLSeq
} from './types'
import { Type, YAMLError, YAMLWarning } from './util'
export { AST, CST }
export { default as parseCST } from './parse-cst'
/**
* `yaml` defines document-specific options in three places: as an argument of
* parse, create and stringify calls, in the values of `YAML.defaultOptions`,
* and in the version-dependent `YAML.Document.defaults` object. Values set in
* `YAML.defaultOptions` override version-dependent defaults, and argument
* options override both.
*/
export const defaultOptions: Options
export interface Options extends Schema.Options {
/**
* Default prefix for anchors.
*
* Default: `'a'`, resulting in anchors `a1`, `a2`, etc.
*/
anchorPrefix?: string
/**
* The number of spaces to use when indenting code.
*
* Default: `2`
*/
indent?: number
/**
* Whether block sequences should be indented.
*
* Default: `true`
*/
indentSeq?: boolean
/**
* Allow non-JSON JavaScript objects to remain in the `toJSON` output.
* Relevant with the YAML 1.1 `!!timestamp` and `!!binary` tags as well as BigInts.
*
* Default: `true`
*/
keepBlobsInJSON?: boolean
/**
* Include references in the AST to each node's corresponding CST node.
*
* Default: `false`
*/
keepCstNodes?: boolean
/**
* Store the original node type when parsing documents.
*
* Default: `true`
*/
keepNodeTypes?: boolean
/**
* When outputting JS, use Map rather than Object to represent mappings.
*
* Default: `false`
*/
mapAsMap?: boolean
/**
* Prevent exponential entity expansion attacks by limiting data aliasing count;
* set to `-1` to disable checks; `0` disallows all alias nodes.
*
* Default: `100`
*/
maxAliasCount?: number
/**
* Include line position & node type directly in errors; drop their verbose source and context.
*
* Default: `false`
*/
prettyErrors?: boolean
/**
* When stringifying, require keys to be scalars and to use implicit rather than explicit notation.
*
* Default: `false`
*/
simpleKeys?: boolean
/**
* The YAML version used by documents without a `%YAML` directive.
*
* Default: `"1.2"`
*/
version?: '1.0' | '1.1' | '1.2'
}
/**
* Some customization options are availabe to control the parsing and
* stringification of scalars. Note that these values are used by all documents.
*/
export const scalarOptions: {
binary: scalarOptions.Binary
bool: scalarOptions.Bool
int: scalarOptions.Int
null: scalarOptions.Null
str: scalarOptions.Str
}
export namespace scalarOptions {
interface Binary {
/**
* The type of string literal used to stringify `!!binary` values.
*
* Default: `'BLOCK_LITERAL'`
*/
defaultType: Scalar.Type
/**
* Maximum line width for `!!binary`.
*
* Default: `76`
*/
lineWidth: number
}
interface Bool {
/**
* String representation for `true`. With the core schema, use `'true' | 'True' | 'TRUE'`.
*
* Default: `'true'`
*/
trueStr: string
/**
* String representation for `false`. With the core schema, use `'false' | 'False' | 'FALSE'`.
*
* Default: `'false'`
*/
falseStr: string
}
interface Int {
/**
* Whether integers should be parsed into BigInt values.
*
* Default: `false`
*/
asBigInt: boolean
}
interface Null {
/**
* String representation for `null`. With the core schema, use `'null' | 'Null' | 'NULL' | '~' | ''`.
*
* Default: `'null'`
*/
nullStr: string
}
interface Str {
/**
* The default type of string literal used to stringify values
*
* Default: `'PLAIN'`
*/
defaultType: Scalar.Type
doubleQuoted: {
/**
* Whether to restrict double-quoted strings to use JSON-compatible syntax.
*
* Default: `false`
*/
jsonEncoding: boolean
/**
* Minimum length to use multiple lines to represent the value.
*
* Default: `40`
*/
minMultiLineLength: number
}
fold: {
/**
* Maximum line width (set to `0` to disable folding).
*
* Default: `80`
*/
lineWidth: number
/**
* Minimum width for highly-indented content.
*
* Default: `20`
*/
minContentWidth: number
}
}
}
export class Document extends Collection {
cstNode?: CST.Document
constructor(options?: Options)
tag: never
directivesEndMarker?: boolean
type: Type.DOCUMENT
/**
* Anchors associated with the document's nodes;
* also provides alias & merge node creators.
*/
anchors: Document.Anchors
/** The document contents. */
contents: any
/** Errors encountered during parsing. */
errors: YAMLError[]
/**
* The schema used with the document. Use `setSchema()` to change or
* initialise.
*/
schema?: Schema
/**
* Array of prefixes; each will have a string `handle` that
* starts and ends with `!` and a string `prefix` that the handle will be replaced by.
*/
tagPrefixes: Document.TagPrefix[]
/**
* The parsed version of the source document;
* if true-ish, stringified output will include a `%YAML` directive.
*/
version?: string
/** Warnings encountered during parsing. */
warnings: YAMLWarning[]
/**
* List the tags used in the document that are not in the default
* `tag:yaml.org,2002:` namespace.
*/
listNonDefaultTags(): string[]
/** Parse a CST into this document */
parse(cst: CST.Document): this
/**
* When a document is created with `new YAML.Document()`, the schema object is
* not set as it may be influenced by parsed directives; call this with no
* arguments to set it manually, or with arguments to change the schema used
* by the document.
**/
setSchema(
id?: Options['version'] | Schema.Name,
customTags?: (Schema.TagId | Schema.Tag)[]
): void
/** Set `handle` as a shorthand string for the `prefix` tag namespace. */
setTagPrefix(handle: string, prefix: string): void
/**
* A plain JavaScript representation of the document `contents`.
*
* @param arg Used by `JSON.stringify` to indicate the array index or property
* name. If its value is a `string` and the document `contents` has a scalar
* value, the `keepBlobsInJSON` option has no effect.
* @param onAnchor If defined, called with the resolved `value` and reference
* `count` for each anchor in the document.
* */
toJSON(arg?: string, onAnchor?: (value: any, count: number) => void): any
/** A YAML representation of the document. */
toString(): string
}
export namespace Document {
interface Parsed extends Document {
contents: Scalar | YAMLMap | YAMLSeq | null
/** The schema used with the document. */
schema: Schema
}
interface Anchors {
/**
* Create a new `Alias` node, adding the required anchor for `node`.
* If `name` is empty, a new anchor name will be generated.
*/
createAlias(node: Node, name?: string): Alias
/**
* Create a new `Merge` node with the given source nodes.
* Non-`Alias` sources will be automatically wrapped.
*/
createMergePair(...nodes: Node[]): Merge
/** The anchor name associated with `node`, if set. */
getName(node: Node): undefined | string
/** List of all defined anchor names. */
getNames(): string[]
/** The node associated with the anchor `name`, if set. */
getNode(name: string): undefined | Node
/**
* Find an available anchor name with the given `prefix` and a
* numerical suffix.
*/
newName(prefix: string): string
/**
* Associate an anchor with `node`. If `name` is empty, a new name will be generated.
* To remove an anchor, use `setAnchor(null, name)`.
*/
setAnchor(node: Node | null, name?: string): void | string
}
interface TagPrefix {
handle: string
prefix: string
}
}
/**
* Recursively turns objects into collections. Generic objects as well as `Map`
* and its descendants become mappings, while arrays and other iterable objects
* result in sequences.
*
* The primary purpose of this function is to enable attaching comments or other
* metadata to a value, or to otherwise exert more fine-grained control over the
* stringified output. To that end, you'll need to assign its return value to
* the `contents` of a Document (or somewhere within said contents), as the
* document's schema is required for YAML string output.
*
* @param wrapScalars If undefined or `true`, also wraps plain values in
* `Scalar` objects; if `false` and `value` is not an object, it will be
* returned directly.
* @param tag Use to specify the collection type, e.g. `"!!omap"`. Note that
* this requires the corresponding tag to be available based on the default
* options. To use a specific document's schema, use `doc.schema.createNode`.
*/
export function createNode(
value: any,
wrapScalars?: true,
tag?: string
): YAMLMap | YAMLSeq | Scalar
/**
* YAML.createNode recursively turns objects into Map and arrays to Seq collections.
* Its primary use is to enable attaching comments or other metadata to a value,
* or to otherwise exert more fine-grained control over the stringified output.
*
* Doesn't wrap plain values in Scalar objects.
*/
export function createNode(
value: any,
wrapScalars: false,
tag?: string
): YAMLMap | YAMLSeq | string | number | boolean | null
/**
* Parse an input string into a single YAML.Document.
*/
export function parseDocument(str: string, options?: Options): Document.Parsed
/**
* Parse the input as a stream of YAML documents.
*
* Documents should be separated from each other by `...` or `---` marker lines.
*/
export function parseAllDocuments(
str: string,
options?: Options
): Document.Parsed[]
/**
* Parse an input string into JavaScript.
*
* Only supports input consisting of a single YAML document; for multi-document
* support you should use `YAML.parseAllDocuments`. May throw on error, and may
* log warnings using `console.warn`.
*
* @param str A string with YAML formatting.
* @returns The value will match the type of the root value of the parsed YAML
* document, so Maps become objects, Sequences arrays, and scalars result in
* nulls, booleans, numbers and strings.
*/
export function parse(str: string, options?: Options): any
/**
* @returns Will always include \n as the last character, as is expected of YAML documents.
*/
export function stringify(value: any, options?: Options): string
yaml-1.10.2/index.js000066400000000000000000000000501402322402300141650ustar00rootroot00000000000000module.exports = require('./dist').YAML
yaml-1.10.2/jest.config.js000066400000000000000000000020301402322402300152670ustar00rootroot00000000000000let moduleNameMapper
const testPathIgnorePatterns = ['tests/common', 'cst/common']
// The npm script name is significant.
switch (process.env.npm_lifecycle_event) {
case 'test:dist':
moduleNameMapper = {}
testPathIgnorePatterns.push(
'cst/Node',
'cst/set-value',
'cst/source-utils',
'cst/YAML-1.2',
'doc/createNode',
'doc/errors',
'doc/foldFlowLines',
'doc/types'
)
break
case 'test':
default:
process.env.TRACE_LEVEL = 'log'
moduleNameMapper = {
'^\\./dist$': '/src/index.js',
'^\\./dist/parse-cst(\\.js)?$': '/src/cst/parse.js',
'^\\./dist/types(\\.js)?$': '/src/types.js',
'^\\./dist/(.+)$': '/src/$1',
'^\\.\\./dist/test-events.js$': '/src/test-events.js'
}
}
module.exports = {
collectCoverageFrom: ['src/**/*.js'],
moduleNameMapper,
testEnvironment: 'node',
testMatch: ['**/tests/**/*.js'],
testPathIgnorePatterns,
transform: { '/(src|tests)/.*\\.js$': 'babel-jest' }
}
yaml-1.10.2/map.js000066400000000000000000000001621402322402300136370ustar00rootroot00000000000000module.exports = require('./dist/types').YAMLMap
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/package-lock.json000066400000000000000000024116371402322402300157570ustar00rootroot00000000000000{
"name": "yaml",
"version": "1.10.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"version": "1.10.2",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.12.10",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/preset-env": "^7.12.11",
"@rollup/plugin-babel": "^5.2.3",
"babel-eslint": "^10.1.0",
"babel-jest": "^26.6.3",
"babel-plugin-trace": "^1.1.0",
"common-tags": "^1.8.0",
"cross-env": "^7.0.3",
"eslint": "^7.19.0",
"eslint-config-prettier": "^7.2.0",
"fast-check": "^2.12.0",
"jest": "^26.6.3",
"prettier": "^2.2.1",
"rollup": "^2.38.2",
"typescript": "^4.1.3"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/@babel/code-frame": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
"integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
"dev": true,
"dependencies": {
"@babel/highlight": "^7.12.13"
}
},
"node_modules/@babel/compat-data": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.8.tgz",
"integrity": "sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog==",
"dev": true
},
"node_modules/@babel/core": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz",
"integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9",
"@babel/helper-compilation-targets": "^7.13.10",
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helpers": "^7.13.10",
"@babel/parser": "^7.13.10",
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.1.2",
"lodash": "^4.17.19",
"semver": "^6.3.0",
"source-map": "^0.5.0"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"node_modules/@babel/generator": {
"version": "7.13.9",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
"integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
"dev": true,
"dependencies": {
"@babel/types": "^7.13.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
}
},
"node_modules/@babel/helper-annotate-as-pure": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz",
"integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==",
"dev": true,
"dependencies": {
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz",
"integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==",
"dev": true,
"dependencies": {
"@babel/helper-explode-assignable-expression": "^7.12.13",
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz",
"integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.13.8",
"@babel/helper-validator-option": "^7.12.17",
"browserslist": "^4.14.5",
"semver": "^6.3.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.10.tgz",
"integrity": "sha512-YV7r2YxdTUaw84EwNkyrRke/TJHR/UXGiyvACRqvdVJ2/syV2rQuJNnaRLSuYiop8cMRXOgseTGoJCWX0q2fFg==",
"dev": true,
"dependencies": {
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-member-expression-to-functions": "^7.13.0",
"@babel/helper-optimise-call-expression": "^7.12.13",
"@babel/helper-replace-supers": "^7.13.0",
"@babel/helper-split-export-declaration": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz",
"integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.12.13",
"regexpu-core": "^4.7.1"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
"integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
"dev": true,
"dependencies": {
"@babel/helper-compilation-targets": "^7.13.0",
"@babel/helper-module-imports": "^7.12.13",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/traverse": "^7.13.0",
"debug": "^4.1.1",
"lodash.debounce": "^4.0.8",
"resolve": "^1.14.2",
"semver": "^6.1.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0-0"
}
},
"node_modules/@babel/helper-explode-assignable-expression": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz",
"integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==",
"dev": true,
"dependencies": {
"@babel/types": "^7.13.0"
}
},
"node_modules/@babel/helper-function-name": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
"integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==",
"dev": true,
"dependencies": {
"@babel/helper-get-function-arity": "^7.12.13",
"@babel/template": "^7.12.13",
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/helper-get-function-arity": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
"integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/helper-hoist-variables": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz",
"integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz",
"integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==",
"dev": true,
"dependencies": {
"@babel/types": "^7.13.0"
}
},
"node_modules/@babel/helper-module-imports": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz",
"integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==",
"dev": true,
"dependencies": {
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz",
"integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.12.13",
"@babel/helper-replace-supers": "^7.13.0",
"@babel/helper-simple-access": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13",
"@babel/helper-validator-identifier": "^7.12.11",
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0",
"lodash": "^4.17.19"
}
},
"node_modules/@babel/helper-optimise-call-expression": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
"integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
"dev": true,
"dependencies": {
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz",
"integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==",
"dev": true
},
"node_modules/@babel/helper-remap-async-to-generator": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz",
"integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.12.13",
"@babel/helper-wrap-function": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"node_modules/@babel/helper-replace-supers": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz",
"integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==",
"dev": true,
"dependencies": {
"@babel/helper-member-expression-to-functions": "^7.13.0",
"@babel/helper-optimise-call-expression": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"node_modules/@babel/helper-simple-access": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz",
"integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==",
"dev": true,
"dependencies": {
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
"integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==",
"dev": true,
"dependencies": {
"@babel/types": "^7.12.1"
}
},
"node_modules/@babel/helper-split-export-declaration": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
"integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
"dev": true
},
"node_modules/@babel/helper-validator-option": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz",
"integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==",
"dev": true
},
"node_modules/@babel/helper-wrap-function": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz",
"integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==",
"dev": true,
"dependencies": {
"@babel/helper-function-name": "^7.12.13",
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"node_modules/@babel/helpers": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz",
"integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==",
"dev": true,
"dependencies": {
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"node_modules/@babel/highlight": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
"integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.12.11",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"node_modules/@babel/parser": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.10.tgz",
"integrity": "sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/plugin-proposal-async-generator-functions": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz",
"integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-remap-async-to-generator": "^7.13.0",
"@babel/plugin-syntax-async-generators": "^7.8.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-class-properties": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz",
"integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==",
"dev": true,
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-dynamic-import": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz",
"integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-export-namespace-from": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz",
"integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-json-strings": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz",
"integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-json-strings": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-logical-assignment-operators": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz",
"integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz",
"integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-numeric-separator": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz",
"integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-object-rest-spread": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz",
"integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.13.8",
"@babel/helper-compilation-targets": "^7.13.8",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-transform-parameters": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-optional-catch-binding": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz",
"integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-optional-chaining": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz",
"integrity": "sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-private-methods": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz",
"integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==",
"dev": true,
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-unicode-property-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz",
"integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==",
"dev": true,
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
},
"engines": {
"node": ">=4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-bigint": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-dynamic-import": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
"integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-export-namespace-from": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
"integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
"integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz",
"integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz",
"integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.12.13",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-remap-async-to-generator": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz",
"integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz",
"integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-classes": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz",
"integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.12.13",
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-optimise-call-expression": "^7.12.13",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-replace-supers": "^7.13.0",
"@babel/helper-split-export-declaration": "^7.12.13",
"globals": "^11.1.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz",
"integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-destructuring": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz",
"integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz",
"integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==",
"dev": true,
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz",
"integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz",
"integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==",
"dev": true,
"dependencies": {
"@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-for-of": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz",
"integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-function-name": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz",
"integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==",
"dev": true,
"dependencies": {
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-literals": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz",
"integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz",
"integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz",
"integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==",
"dev": true,
"dependencies": {
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz",
"integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==",
"dev": true,
"dependencies": {
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-simple-access": "^7.12.13",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz",
"integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==",
"dev": true,
"dependencies": {
"@babel/helper-hoist-variables": "^7.13.0",
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-validator-identifier": "^7.12.11",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz",
"integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==",
"dev": true,
"dependencies": {
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz",
"integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==",
"dev": true,
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-transform-new-target": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz",
"integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-object-super": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz",
"integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13",
"@babel/helper-replace-supers": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-parameters": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz",
"integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-property-literals": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz",
"integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-regenerator": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz",
"integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==",
"dev": true,
"dependencies": {
"regenerator-transform": "^0.14.2"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz",
"integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz",
"integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-spread": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz",
"integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz",
"integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-template-literals": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz",
"integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.13.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz",
"integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz",
"integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz",
"integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==",
"dev": true,
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/preset-env": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.10.tgz",
"integrity": "sha512-nOsTScuoRghRtUsRr/c69d042ysfPHcu+KOB4A9aAO9eJYqrkat+LF8G1yp1HD18QiwixT2CisZTr/0b3YZPXQ==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.13.8",
"@babel/helper-compilation-targets": "^7.13.10",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-validator-option": "^7.12.17",
"@babel/plugin-proposal-async-generator-functions": "^7.13.8",
"@babel/plugin-proposal-class-properties": "^7.13.0",
"@babel/plugin-proposal-dynamic-import": "^7.13.8",
"@babel/plugin-proposal-export-namespace-from": "^7.12.13",
"@babel/plugin-proposal-json-strings": "^7.13.8",
"@babel/plugin-proposal-logical-assignment-operators": "^7.13.8",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8",
"@babel/plugin-proposal-numeric-separator": "^7.12.13",
"@babel/plugin-proposal-object-rest-spread": "^7.13.8",
"@babel/plugin-proposal-optional-catch-binding": "^7.13.8",
"@babel/plugin-proposal-optional-chaining": "^7.13.8",
"@babel/plugin-proposal-private-methods": "^7.13.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.12.13",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
"@babel/plugin-syntax-numeric-separator": "^7.10.4",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-top-level-await": "^7.12.13",
"@babel/plugin-transform-arrow-functions": "^7.13.0",
"@babel/plugin-transform-async-to-generator": "^7.13.0",
"@babel/plugin-transform-block-scoped-functions": "^7.12.13",
"@babel/plugin-transform-block-scoping": "^7.12.13",
"@babel/plugin-transform-classes": "^7.13.0",
"@babel/plugin-transform-computed-properties": "^7.13.0",
"@babel/plugin-transform-destructuring": "^7.13.0",
"@babel/plugin-transform-dotall-regex": "^7.12.13",
"@babel/plugin-transform-duplicate-keys": "^7.12.13",
"@babel/plugin-transform-exponentiation-operator": "^7.12.13",
"@babel/plugin-transform-for-of": "^7.13.0",
"@babel/plugin-transform-function-name": "^7.12.13",
"@babel/plugin-transform-literals": "^7.12.13",
"@babel/plugin-transform-member-expression-literals": "^7.12.13",
"@babel/plugin-transform-modules-amd": "^7.13.0",
"@babel/plugin-transform-modules-commonjs": "^7.13.8",
"@babel/plugin-transform-modules-systemjs": "^7.13.8",
"@babel/plugin-transform-modules-umd": "^7.13.0",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13",
"@babel/plugin-transform-new-target": "^7.12.13",
"@babel/plugin-transform-object-super": "^7.12.13",
"@babel/plugin-transform-parameters": "^7.13.0",
"@babel/plugin-transform-property-literals": "^7.12.13",
"@babel/plugin-transform-regenerator": "^7.12.13",
"@babel/plugin-transform-reserved-words": "^7.12.13",
"@babel/plugin-transform-shorthand-properties": "^7.12.13",
"@babel/plugin-transform-spread": "^7.13.0",
"@babel/plugin-transform-sticky-regex": "^7.12.13",
"@babel/plugin-transform-template-literals": "^7.13.0",
"@babel/plugin-transform-typeof-symbol": "^7.12.13",
"@babel/plugin-transform-unicode-escapes": "^7.12.13",
"@babel/plugin-transform-unicode-regex": "^7.12.13",
"@babel/preset-modules": "^0.1.4",
"@babel/types": "^7.13.0",
"babel-plugin-polyfill-corejs2": "^0.1.4",
"babel-plugin-polyfill-corejs3": "^0.1.3",
"babel-plugin-polyfill-regenerator": "^0.1.2",
"core-js-compat": "^3.9.0",
"semver": "^6.3.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/preset-modules": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
"integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
"@babel/plugin-transform-dotall-regex": "^7.4.4",
"@babel/types": "^7.4.4",
"esutils": "^2.0.2"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/runtime": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
"integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
"dev": true,
"dependencies": {
"regenerator-runtime": "^0.13.4"
}
},
"node_modules/@babel/template": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
"integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
"@babel/parser": "^7.12.13",
"@babel/types": "^7.12.13"
}
},
"node_modules/@babel/traverse": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz",
"integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.0",
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13",
"@babel/parser": "^7.13.0",
"@babel/types": "^7.13.0",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.19"
}
},
"node_modules/@babel/types": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz",
"integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.12.11",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
},
"node_modules/@bcoe/v8-coverage": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
"node_modules/@cnakazawa/watch": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
"integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
"dev": true,
"dependencies": {
"exec-sh": "^0.3.2",
"minimist": "^1.2.0"
},
"bin": {
"watch": "cli.js"
},
"engines": {
"node": ">=0.1.95"
}
},
"node_modules/@eslint/eslintrc": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz",
"integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.1.1",
"espree": "^7.3.0",
"globals": "^12.1.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
"js-yaml": "^3.13.1",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"engines": {
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
"version": "12.4.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
"integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
"dev": true,
"dependencies": {
"type-fest": "^0.8.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
"integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
"get-package-type": "^0.1.0",
"js-yaml": "^3.13.1",
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/console": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz",
"integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
"jest-message-util": "^26.6.2",
"jest-util": "^26.6.2",
"slash": "^3.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/console/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@jest/console/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/@jest/console/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/@jest/console/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/@jest/console/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/console/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/core": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz",
"integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==",
"dev": true,
"dependencies": {
"@jest/console": "^26.6.2",
"@jest/reporters": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/transform": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-changed-files": "^26.6.2",
"jest-config": "^26.6.3",
"jest-haste-map": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-regex-util": "^26.0.0",
"jest-resolve": "^26.6.2",
"jest-resolve-dependencies": "^26.6.3",
"jest-runner": "^26.6.3",
"jest-runtime": "^26.6.3",
"jest-snapshot": "^26.6.2",
"jest-util": "^26.6.2",
"jest-validate": "^26.6.2",
"jest-watcher": "^26.6.2",
"micromatch": "^4.0.2",
"p-each-series": "^2.1.0",
"rimraf": "^3.0.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/core/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@jest/core/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/@jest/core/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/@jest/core/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/@jest/core/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/core/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/environment": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz",
"integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==",
"dev": true,
"dependencies": {
"@jest/fake-timers": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"jest-mock": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/fake-timers": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz",
"integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"@sinonjs/fake-timers": "^6.0.1",
"@types/node": "*",
"jest-message-util": "^26.6.2",
"jest-mock": "^26.6.2",
"jest-util": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/globals": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz",
"integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==",
"dev": true,
"dependencies": {
"@jest/environment": "^26.6.2",
"@jest/types": "^26.6.2",
"expect": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/reporters": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz",
"integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/transform": "^26.6.2",
"@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
"glob": "^7.1.2",
"graceful-fs": "^4.2.4",
"istanbul-lib-coverage": "^3.0.0",
"istanbul-lib-instrument": "^4.0.3",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
"jest-haste-map": "^26.6.2",
"jest-resolve": "^26.6.2",
"jest-util": "^26.6.2",
"jest-worker": "^26.6.2",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
"terminal-link": "^2.0.0",
"v8-to-istanbul": "^7.0.0"
},
"engines": {
"node": ">= 10.14.2"
},
"optionalDependencies": {
"node-notifier": "^8.0.0"
}
},
"node_modules/@jest/reporters/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@jest/reporters/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/@jest/reporters/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/@jest/reporters/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/@jest/reporters/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/reporters/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@jest/reporters/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/source-map": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz",
"integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==",
"dev": true,
"dependencies": {
"callsites": "^3.0.0",
"graceful-fs": "^4.2.4",
"source-map": "^0.6.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/source-map/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@jest/test-result": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz",
"integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==",
"dev": true,
"dependencies": {
"@jest/console": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/test-sequencer": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz",
"integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==",
"dev": true,
"dependencies": {
"@jest/test-result": "^26.6.2",
"graceful-fs": "^4.2.4",
"jest-haste-map": "^26.6.2",
"jest-runner": "^26.6.3",
"jest-runtime": "^26.6.3"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/transform": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
"integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
"@jest/types": "^26.6.2",
"babel-plugin-istanbul": "^6.0.0",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
"jest-haste-map": "^26.6.2",
"jest-regex-util": "^26.0.0",
"jest-util": "^26.6.2",
"micromatch": "^4.0.2",
"pirates": "^4.0.1",
"slash": "^3.0.0",
"source-map": "^0.6.1",
"write-file-atomic": "^3.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/transform/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@jest/transform/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/@jest/transform/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/@jest/transform/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/@jest/transform/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/transform/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@jest/transform/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/types": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
"integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/@jest/types/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@jest/types/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/@jest/types/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/@jest/types/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/@jest/types/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/types/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@rollup/plugin-babel": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz",
"integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.10.4",
"@rollup/pluginutils": "^3.1.0"
},
"engines": {
"node": ">= 10.0.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0",
"@types/babel__core": "^7.1.9",
"rollup": "^1.20.0||^2.0.0"
},
"peerDependenciesMeta": {
"@types/babel__core": {
"optional": true
}
}
},
"node_modules/@rollup/pluginutils": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
"integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
"dev": true,
"dependencies": {
"@types/estree": "0.0.39",
"estree-walker": "^1.0.1",
"picomatch": "^2.2.2"
},
"engines": {
"node": ">= 8.0.0"
},
"peerDependencies": {
"rollup": "^1.20.0||^2.0.0"
}
},
"node_modules/@sinonjs/commons": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz",
"integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==",
"dev": true,
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
"integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
"dev": true,
"dependencies": {
"@sinonjs/commons": "^1.7.0"
}
},
"node_modules/@types/babel__core": {
"version": "7.1.12",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz",
"integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0",
"@types/babel__generator": "*",
"@types/babel__template": "*",
"@types/babel__traverse": "*"
}
},
"node_modules/@types/babel__generator": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
"integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
"dev": true,
"dependencies": {
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__template": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz",
"integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__traverse": {
"version": "7.11.0",
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz",
"integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.3.0"
}
},
"node_modules/@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
"node_modules/@types/graceful-fs": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
"integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
"integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
"dev": true
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
"integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
},
"node_modules/@types/istanbul-reports": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz",
"integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-report": "*"
}
},
"node_modules/@types/node": {
"version": "14.14.34",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz",
"integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA==",
"dev": true
},
"node_modules/@types/normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
"dev": true
},
"node_modules/@types/prettier": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.2.tgz",
"integrity": "sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg==",
"dev": true
},
"node_modules/@types/stack-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
"integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
"dev": true
},
"node_modules/@types/yargs": {
"version": "15.0.13",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz",
"integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@types/yargs-parser": {
"version": "20.2.0",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz",
"integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==",
"dev": true
},
"node_modules/abab": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
"integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
"dev": true
},
"node_modules/acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/acorn-globals": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
"integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
"dev": true,
"dependencies": {
"acorn": "^7.1.1",
"acorn-walk": "^7.1.1"
}
},
"node_modules/acorn-jsx": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
"dev": true,
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/ansi-escapes": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
"integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
"dev": true,
"dependencies": {
"type-fest": "^0.11.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/anymatch": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"dev": true,
"dependencies": {
"safer-buffer": "~2.1.0"
}
},
"node_modules/assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true,
"engines": {
"node": ">=0.8"
}
},
"node_modules/assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
"node_modules/atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true,
"bin": {
"atob": "bin/atob.js"
},
"engines": {
"node": ">= 4.5.0"
}
},
"node_modules/aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/aws4": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
"dev": true
},
"node_modules/babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
"integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
"deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
"@babel/parser": "^7.7.0",
"@babel/traverse": "^7.7.0",
"@babel/types": "^7.7.0",
"eslint-visitor-keys": "^1.0.0",
"resolve": "^1.12.0"
},
"engines": {
"node": ">=6"
},
"peerDependencies": {
"eslint": ">= 4.12.1"
}
},
"node_modules/babel-jest": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
"integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
"dev": true,
"dependencies": {
"@jest/transform": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/babel__core": "^7.1.7",
"babel-plugin-istanbul": "^6.0.0",
"babel-preset-jest": "^26.6.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"slash": "^3.0.0"
},
"engines": {
"node": ">= 10.14.2"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/babel-jest/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/babel-jest/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/babel-jest/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/babel-jest/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/babel-jest/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/babel-jest/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/babel-plugin-dynamic-import-node": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
"integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
"dev": true,
"dependencies": {
"object.assign": "^4.1.0"
}
},
"node_modules/babel-plugin-istanbul": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
"integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-instrument": "^4.0.0",
"test-exclude": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/babel-plugin-jest-hoist": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
"integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
"dev": true,
"dependencies": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
"@types/babel__core": "^7.0.0",
"@types/babel__traverse": "^7.0.6"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz",
"integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==",
"dev": true,
"dependencies": {
"@babel/compat-data": "^7.13.0",
"@babel/helper-define-polyfill-provider": "^0.1.5",
"semver": "^6.1.1"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
"integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
"dev": true,
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.1.5",
"core-js-compat": "^3.8.1"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz",
"integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==",
"dev": true,
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.1.5"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/babel-plugin-trace": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/babel-plugin-trace/-/babel-plugin-trace-1.1.0.tgz",
"integrity": "sha512-joLw8IjwmBNcvQKQsJOxNTI7pXN8ipKU1HeZt7DeyIXPgZCd0EuDIxyZPv01PjKQsW8IbSLDZGZ4zafQXI+6Hw==",
"dev": true
},
"node_modules/babel-preset-current-node-syntax": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
"integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
"dev": true,
"dependencies": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
"@babel/plugin-syntax-class-properties": "^7.8.3",
"@babel/plugin-syntax-import-meta": "^7.8.3",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
"@babel/plugin-syntax-numeric-separator": "^7.8.3",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-top-level-await": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/babel-preset-jest": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
"integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
"dev": true,
"dependencies": {
"babel-plugin-jest-hoist": "^26.6.2",
"babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
"node": ">= 10.14.2"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"node_modules/base": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
"dependencies": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
"component-emitter": "^1.2.1",
"define-property": "^1.0.0",
"isobject": "^3.0.1",
"mixin-deep": "^1.2.0",
"pascalcase": "^0.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/base/node_modules/define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"dependencies": {
"is-descriptor": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
"dependencies": {
"tweetnacl": "^0.14.3"
}
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/browser-process-hrtime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
"dev": true
},
"node_modules/browserslist": {
"version": "4.16.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
"integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
"dev": true,
"dependencies": {
"caniuse-lite": "^1.0.30001181",
"colorette": "^1.2.1",
"electron-to-chromium": "^1.3.649",
"escalade": "^3.1.1",
"node-releases": "^1.1.70"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
}
},
"node_modules/bser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
"integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
"dependencies": {
"node-int64": "^0.4.0"
}
},
"node_modules/buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
"node_modules/cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
"dependencies": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
"get-value": "^2.0.6",
"has-value": "^1.0.0",
"isobject": "^3.0.1",
"set-value": "^2.0.0",
"to-object-path": "^0.3.0",
"union-value": "^1.0.0",
"unset-value": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001199",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001199.tgz",
"integrity": "sha512-ifbK2eChUCFUwGhlEzIoVwzFt1+iriSjyKKFYNfv6hN34483wyWpLLavYQXhnR036LhkdUYaSDpHg1El++VgHQ==",
"dev": true
},
"node_modules/capture-exit": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
"integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
"dev": true,
"dependencies": {
"rsvp": "^4.8.4"
},
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/char-regex": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
"dev": true,
"engines": {
"node": ">=10"
}
},
"node_modules/ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
"dev": true
},
"node_modules/cjs-module-lexer": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz",
"integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==",
"dev": true
},
"node_modules/class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true,
"dependencies": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
"isobject": "^3.0.0",
"static-extend": "^0.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/class-utils/node_modules/define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"dependencies": {
"is-descriptor": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/class-utils/node_modules/is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/class-utils/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/class-utils/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"dependencies": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/class-utils/node_modules/kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"dev": true,
"engines": {
"iojs": ">= 1.0.0",
"node": ">= 0.12.0"
}
},
"node_modules/collect-v8-coverage": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
"integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
"dev": true
},
"node_modules/collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
"dev": true,
"dependencies": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"node_modules/colorette": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
"integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
"dev": true
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dev": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/common-tags": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
"integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
"dev": true,
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"dev": true
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"node_modules/convert-source-map": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
"integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
"dev": true,
"dependencies": {
"safe-buffer": "~5.1.1"
}
},
"node_modules/copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/core-js-compat": {
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz",
"integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==",
"dev": true,
"dependencies": {
"browserslist": "^4.16.3",
"semver": "7.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"node_modules/core-js-compat/node_modules/semver": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
"integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
"node_modules/cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
"integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.1"
},
"bin": {
"cross-env": "src/bin/cross-env.js",
"cross-env-shell": "src/bin/cross-env-shell.js"
},
"engines": {
"node": ">=10.14",
"npm": ">=6",
"yarn": ">=1"
}
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/cssom": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
"integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
"dev": true
},
"node_modules/cssstyle": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
"dev": true,
"dependencies": {
"cssom": "~0.3.6"
},
"engines": {
"node": ">=8"
}
},
"node_modules/cssstyle/node_modules/cssom": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
"dev": true
},
"node_modules/dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"dependencies": {
"assert-plus": "^1.0.0"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/data-urls": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
"integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
"dev": true,
"dependencies": {
"abab": "^2.0.3",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/debug": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/decimal.js": {
"version": "10.2.1",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz",
"integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==",
"dev": true
},
"node_modules/decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true,
"engines": {
"node": ">=0.10"
}
},
"node_modules/deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
"node_modules/deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"dependencies": {
"object-keys": "^1.0.12"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/diff-sequences": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
"integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==",
"dev": true,
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"dependencies": {
"esutils": "^2.0.2"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/domexception": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
"integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
"dev": true,
"dependencies": {
"webidl-conversions": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/domexception/node_modules/webidl-conversions": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
"integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
"dependencies": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"node_modules/electron-to-chromium": {
"version": "1.3.687",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.687.tgz",
"integrity": "sha512-IpzksdQNl3wdgkzf7dnA7/v10w0Utf1dF2L+B4+gKrloBrxCut+au+kky3PYvle3RMdSxZP+UiCZtLbcYRxSNQ==",
"dev": true
},
"node_modules/emittery": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz",
"integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/emittery?sponsor=1"
}
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"node_modules/end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/enquirer": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
"dev": true,
"dependencies": {
"ansi-colors": "^4.1.1"
},
"engines": {
"node": ">=8.6"
}
},
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/escodegen": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
"integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
"dev": true,
"dependencies": {
"esprima": "^4.0.1",
"estraverse": "^5.2.0",
"esutils": "^2.0.2",
"optionator": "^0.8.1"
},
"bin": {
"escodegen": "bin/escodegen.js",
"esgenerate": "bin/esgenerate.js"
},
"engines": {
"node": ">=6.0"
},
"optionalDependencies": {
"source-map": "~0.6.1"
}
},
"node_modules/escodegen/node_modules/estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true,
"engines": {
"node": ">=4.0"
}
},
"node_modules/escodegen/node_modules/levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true,
"dependencies": {
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/escodegen/node_modules/optionator": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"dev": true,
"dependencies": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
"word-wrap": "~1.2.3"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/escodegen/node_modules/prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true,
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/escodegen/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"optional": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/escodegen/node_modules/type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"dependencies": {
"prelude-ls": "~1.1.2"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/eslint": {
"version": "7.22.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz",
"integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.0.1",
"doctrine": "^3.0.0",
"enquirer": "^2.3.5",
"eslint-scope": "^5.1.1",
"eslint-utils": "^2.1.0",
"eslint-visitor-keys": "^2.0.0",
"espree": "^7.3.1",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
"glob-parent": "^5.0.0",
"globals": "^13.6.0",
"ignore": "^4.0.6",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash": "^4.17.21",
"minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
"progress": "^2.0.0",
"regexpp": "^3.1.0",
"semver": "^7.2.1",
"strip-ansi": "^6.0.0",
"strip-json-comments": "^3.1.0",
"table": "^6.0.4",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"bin": {
"eslint": "bin/eslint.js"
},
"engines": {
"node": "^10.12.0 || >=12.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint-config-prettier": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz",
"integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==",
"dev": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
"peerDependencies": {
"eslint": ">=7.0.0"
}
},
"node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/eslint-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true,
"dependencies": {
"eslint-visitor-keys": "^1.1.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/mysticatea"
}
},
"node_modules/eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/eslint/node_modules/@babel/code-frame": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
"dev": true,
"dependencies": {
"@babel/highlight": "^7.10.4"
}
},
"node_modules/eslint/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/eslint/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/eslint/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/eslint/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
"integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
"dev": true,
"engines": {
"node": ">=10"
}
},
"node_modules/eslint/node_modules/globals": {
"version": "13.6.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz",
"integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/eslint/node_modules/semver": {
"version": "7.3.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/eslint/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/eslint/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true,
"dependencies": {
"acorn": "^7.4.0",
"acorn-jsx": "^5.3.1",
"eslint-visitor-keys": "^1.3.0"
},
"engines": {
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true,
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/esquery": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
"integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
"dev": true,
"dependencies": {
"estraverse": "^5.1.0"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/esquery/node_modules/estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true,
"engines": {
"node": ">=4.0"
}
},
"node_modules/esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"dependencies": {
"estraverse": "^5.2.0"
},
"engines": {
"node": ">=4.0"
}
},
"node_modules/esrecurse/node_modules/estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true,
"engines": {
"node": ">=4.0"
}
},
"node_modules/estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
"engines": {
"node": ">=4.0"
}
},
"node_modules/estree-walker": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
"dev": true
},
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/exec-sh": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
"integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
"dev": true
},
"node_modules/execa": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
"integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
"get-stream": "^5.0.0",
"human-signals": "^1.1.1",
"is-stream": "^2.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^4.0.0",
"onetime": "^5.1.0",
"signal-exit": "^3.0.2",
"strip-final-newline": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
"node_modules/exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
"dev": true,
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"dependencies": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
"extend-shallow": "^2.0.1",
"posix-character-classes": "^0.1.0",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/expand-brackets/node_modules/define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"dependencies": {
"is-descriptor": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"dependencies": {
"is-extendable": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"dependencies": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/expand-brackets/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"node_modules/expect": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz",
"integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"ansi-styles": "^4.0.0",
"jest-get-type": "^26.3.0",
"jest-matcher-utils": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-regex-util": "^26.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/expect/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/expect/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/expect/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
"node_modules/extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
"dev": true,
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/extglob": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"dependencies": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
"expand-brackets": "^2.1.4",
"extend-shallow": "^2.0.1",
"fragment-cache": "^0.2.1",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/extglob/node_modules/define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"dependencies": {
"is-descriptor": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/extglob/node_modules/extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"dependencies": {
"is-extendable": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/extglob/node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true,
"engines": [
"node >=0.6.0"
]
},
"node_modules/fast-check": {
"version": "2.13.0",
"resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.13.0.tgz",
"integrity": "sha512-IOfzKm/SCA+jpUEgAfqAuxHYPmgtmpnnwljQmYPRGrqYczcTKApXKHza/SNxFxYkecWfZilYa0DJdBvqz1bcSw==",
"dev": true,
"dependencies": {
"pure-rand": "^4.1.1"
},
"engines": {
"node": ">=8.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
"node_modules/fb-watchman": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
"integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
"dev": true,
"dependencies": {
"bser": "2.1.1"
}
},
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
"dependencies": {
"flat-cache": "^3.0.4"
},
"engines": {
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/flat-cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
"dev": true,
"dependencies": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
},
"engines": {
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flatted": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
"integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
"dev": true
},
"node_modules/for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 0.12"
}
},
"node_modules/fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
"dev": true,
"dependencies": {
"map-cache": "^0.2.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"node_modules/functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"dependencies": {
"pump": "^3.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"dependencies": {
"assert-plus": "^1.0.0"
}
},
"node_modules/glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/graceful-fs": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
"dev": true
},
"node_modules/growly": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
"integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
"dev": true,
"optional": true
},
"node_modules/har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"deprecated": "this library is no longer supported",
"dev": true,
"dependencies": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/has-symbols": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
"dev": true,
"dependencies": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
"isobject": "^3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/has-values": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
"dev": true,
"dependencies": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/has-values/node_modules/is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/has-values/node_modules/kind-of": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/hosted-git-info": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
"dev": true
},
"node_modules/html-encoding-sniffer": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
"integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
"dev": true,
"dependencies": {
"whatwg-encoding": "^1.0.5"
},
"engines": {
"node": ">=10"
}
},
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
"node_modules/http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"dependencies": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
},
"engines": {
"node": ">=0.8",
"npm": ">=1.3.7"
}
},
"node_modules/human-signals": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"dev": true,
"engines": {
"node": ">=8.12.0"
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true,
"engines": {
"node": ">= 4"
}
},
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/import-fresh/node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/import-local": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
"integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
"dev": true,
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
},
"bin": {
"import-local-fixture": "fixtures/cli.js"
},
"engines": {
"node": ">=8"
}
},
"node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true,
"engines": {
"node": ">=0.8.19"
}
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"node_modules/is-accessor-descriptor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"dependencies": {
"kind-of": "^6.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
"node_modules/is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
"node_modules/is-ci": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
"integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
"dev": true,
"dependencies": {
"ci-info": "^2.0.0"
},
"bin": {
"is-ci": "bin.js"
}
},
"node_modules/is-core-module": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-data-descriptor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"dependencies": {
"kind-of": "^6.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-descriptor": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"dependencies": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-docker": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
"integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
"dev": true,
"optional": true,
"bin": {
"is-docker": "cli.js"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-extendable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"dependencies": {
"is-plain-object": "^2.0.4"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"dependencies": {
"isobject": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-potential-custom-element-name": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
"integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=",
"dev": true
},
"node_modules/is-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
"node_modules/is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
"optional": true,
"dependencies": {
"is-docker": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
"node_modules/isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
"node_modules/istanbul-lib-coverage": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
"integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-instrument": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
"integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
"dev": true,
"dependencies": {
"@babel/core": "^7.7.5",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.0.0",
"semver": "^6.3.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-report": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
"integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
"dev": true,
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^3.0.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-report/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-report/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
"integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
"dev": true,
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-source-maps/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/istanbul-reports": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
"integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz",
"integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==",
"dev": true,
"dependencies": {
"@jest/core": "^26.6.3",
"import-local": "^3.0.2",
"jest-cli": "^26.6.3"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-changed-files": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz",
"integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"execa": "^4.0.0",
"throat": "^5.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-cli": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
"integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
"dev": true,
"dependencies": {
"@jest/core": "^26.6.3",
"@jest/test-result": "^26.6.2",
"@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
"is-ci": "^2.0.0",
"jest-config": "^26.6.3",
"jest-util": "^26.6.2",
"jest-validate": "^26.6.2",
"prompts": "^2.0.1",
"yargs": "^15.4.1"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-cli/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-cli/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-cli/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-cli/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-cli/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-cli/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-config": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz",
"integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
"@jest/test-sequencer": "^26.6.3",
"@jest/types": "^26.6.2",
"babel-jest": "^26.6.3",
"chalk": "^4.0.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
"jest-environment-jsdom": "^26.6.2",
"jest-environment-node": "^26.6.2",
"jest-get-type": "^26.3.0",
"jest-jasmine2": "^26.6.3",
"jest-regex-util": "^26.0.0",
"jest-resolve": "^26.6.2",
"jest-util": "^26.6.2",
"jest-validate": "^26.6.2",
"micromatch": "^4.0.2",
"pretty-format": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
},
"peerDependencies": {
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
"ts-node": {
"optional": true
}
}
},
"node_modules/jest-config/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-config/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-config/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-config/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-config/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-config/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-diff": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
"integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^26.6.2",
"jest-get-type": "^26.3.0",
"pretty-format": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-diff/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-diff/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-diff/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-diff/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-diff/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-diff/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-docblock": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz",
"integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==",
"dev": true,
"dependencies": {
"detect-newline": "^3.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-each": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz",
"integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"jest-get-type": "^26.3.0",
"jest-util": "^26.6.2",
"pretty-format": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-each/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-each/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-each/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-each/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-each/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-each/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-environment-jsdom": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz",
"integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==",
"dev": true,
"dependencies": {
"@jest/environment": "^26.6.2",
"@jest/fake-timers": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"jest-mock": "^26.6.2",
"jest-util": "^26.6.2",
"jsdom": "^16.4.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-environment-node": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz",
"integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==",
"dev": true,
"dependencies": {
"@jest/environment": "^26.6.2",
"@jest/fake-timers": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"jest-mock": "^26.6.2",
"jest-util": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-get-type": {
"version": "26.3.0",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
"integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
"dev": true,
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-haste-map": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
"integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"@types/graceful-fs": "^4.1.2",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.4",
"jest-regex-util": "^26.0.0",
"jest-serializer": "^26.6.2",
"jest-util": "^26.6.2",
"jest-worker": "^26.6.2",
"micromatch": "^4.0.2",
"sane": "^4.0.3",
"walker": "^1.0.7"
},
"engines": {
"node": ">= 10.14.2"
},
"optionalDependencies": {
"fsevents": "^2.1.2"
}
},
"node_modules/jest-jasmine2": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz",
"integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.1.0",
"@jest/environment": "^26.6.2",
"@jest/source-map": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"expect": "^26.6.2",
"is-generator-fn": "^2.0.0",
"jest-each": "^26.6.2",
"jest-matcher-utils": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-runtime": "^26.6.3",
"jest-snapshot": "^26.6.2",
"jest-util": "^26.6.2",
"pretty-format": "^26.6.2",
"throat": "^5.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-jasmine2/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-jasmine2/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-jasmine2/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-jasmine2/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-jasmine2/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-jasmine2/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-leak-detector": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz",
"integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==",
"dev": true,
"dependencies": {
"jest-get-type": "^26.3.0",
"pretty-format": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-matcher-utils": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz",
"integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
"jest-diff": "^26.6.2",
"jest-get-type": "^26.3.0",
"pretty-format": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-matcher-utils/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-matcher-utils/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-matcher-utils/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-matcher-utils/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-matcher-utils/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-matcher-utils/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-message-util": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz",
"integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
"@jest/types": "^26.6.2",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.2",
"pretty-format": "^26.6.2",
"slash": "^3.0.0",
"stack-utils": "^2.0.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-message-util/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-message-util/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-message-util/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-message-util/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-message-util/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-message-util/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-mock": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz",
"integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"@types/node": "*"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-pnp-resolver": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
"dev": true,
"engines": {
"node": ">=6"
},
"peerDependencies": {
"jest-resolve": "*"
},
"peerDependenciesMeta": {
"jest-resolve": {
"optional": true
}
}
},
"node_modules/jest-regex-util": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
"integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
"dev": true,
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-resolve": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz",
"integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"jest-pnp-resolver": "^1.2.2",
"jest-util": "^26.6.2",
"read-pkg-up": "^7.0.1",
"resolve": "^1.18.1",
"slash": "^3.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-resolve-dependencies": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz",
"integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"jest-regex-util": "^26.0.0",
"jest-snapshot": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-resolve/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-resolve/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-resolve/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-resolve/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-resolve/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-resolve/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-runner": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz",
"integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==",
"dev": true,
"dependencies": {
"@jest/console": "^26.6.2",
"@jest/environment": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.7.1",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-config": "^26.6.3",
"jest-docblock": "^26.0.0",
"jest-haste-map": "^26.6.2",
"jest-leak-detector": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-resolve": "^26.6.2",
"jest-runtime": "^26.6.3",
"jest-util": "^26.6.2",
"jest-worker": "^26.6.2",
"source-map-support": "^0.5.6",
"throat": "^5.0.0"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-runner/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-runner/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-runner/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-runner/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-runner/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-runner/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-runtime": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz",
"integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==",
"dev": true,
"dependencies": {
"@jest/console": "^26.6.2",
"@jest/environment": "^26.6.2",
"@jest/fake-timers": "^26.6.2",
"@jest/globals": "^26.6.2",
"@jest/source-map": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/transform": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0",
"cjs-module-lexer": "^0.6.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
"jest-config": "^26.6.3",
"jest-haste-map": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-mock": "^26.6.2",
"jest-regex-util": "^26.0.0",
"jest-resolve": "^26.6.2",
"jest-snapshot": "^26.6.2",
"jest-util": "^26.6.2",
"jest-validate": "^26.6.2",
"slash": "^3.0.0",
"strip-bom": "^4.0.0",
"yargs": "^15.4.1"
},
"bin": {
"jest-runtime": "bin/jest-runtime.js"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-runtime/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-runtime/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-runtime/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-runtime/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-runtime/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-runtime/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-serializer": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz",
"integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==",
"dev": true,
"dependencies": {
"@types/node": "*",
"graceful-fs": "^4.2.4"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-snapshot": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz",
"integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==",
"dev": true,
"dependencies": {
"@babel/types": "^7.0.0",
"@jest/types": "^26.6.2",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.0.0",
"chalk": "^4.0.0",
"expect": "^26.6.2",
"graceful-fs": "^4.2.4",
"jest-diff": "^26.6.2",
"jest-get-type": "^26.3.0",
"jest-haste-map": "^26.6.2",
"jest-matcher-utils": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-resolve": "^26.6.2",
"natural-compare": "^1.4.0",
"pretty-format": "^26.6.2",
"semver": "^7.3.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-snapshot/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-snapshot/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-snapshot/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-snapshot/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-snapshot/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-snapshot/node_modules/semver": {
"version": "7.3.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/jest-snapshot/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-util": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
"integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"is-ci": "^2.0.0",
"micromatch": "^4.0.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-util/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-util/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-util/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-util/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-util/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-util/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-validate": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz",
"integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"camelcase": "^6.0.0",
"chalk": "^4.0.0",
"jest-get-type": "^26.3.0",
"leven": "^3.1.0",
"pretty-format": "^26.6.2"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-validate/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-validate/node_modules/camelcase": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/jest-validate/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-validate/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-validate/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-validate/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-validate/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-watcher": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz",
"integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==",
"dev": true,
"dependencies": {
"@jest/test-result": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"jest-util": "^26.6.2",
"string-length": "^4.0.1"
},
"engines": {
"node": ">= 10.14.2"
}
},
"node_modules/jest-watcher/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-watcher/node_modules/chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-watcher/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/jest-watcher/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/jest-watcher/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-watcher/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jest-worker": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
"integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
"dev": true,
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^7.0.0"
},
"engines": {
"node": ">= 10.13.0"
}
},
"node_modules/jest-worker/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/jest-worker/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
"node_modules/jsdom": {
"version": "16.5.1",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.5.1.tgz",
"integrity": "sha512-pF73EOsJgwZekbDHEY5VO/yKXUkab/DuvrQB/ANVizbr6UAHJsDdHXuotZYwkJSGQl1JM+ivXaqY+XBDDL4TiA==",
"dev": true,
"dependencies": {
"abab": "^2.0.5",
"acorn": "^8.0.5",
"acorn-globals": "^6.0.0",
"cssom": "^0.4.4",
"cssstyle": "^2.3.0",
"data-urls": "^2.0.0",
"decimal.js": "^10.2.1",
"domexception": "^2.0.1",
"escodegen": "^2.0.0",
"html-encoding-sniffer": "^2.0.1",
"is-potential-custom-element-name": "^1.0.0",
"nwsapi": "^2.2.0",
"parse5": "6.0.1",
"request": "^2.88.2",
"request-promise-native": "^1.0.9",
"saxes": "^5.0.1",
"symbol-tree": "^3.2.4",
"tough-cookie": "^4.0.0",
"w3c-hr-time": "^1.0.2",
"w3c-xmlserializer": "^2.0.0",
"webidl-conversions": "^6.1.0",
"whatwg-encoding": "^1.0.5",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.0.0",
"ws": "^7.4.4",
"xml-name-validator": "^3.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"canvas": "^2.5.0"
},
"peerDependenciesMeta": {
"canvas": {
"optional": true
}
}
},
"node_modules/jsdom/node_modules/acorn": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
"integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true,
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
"node": ">=4"
}
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"node_modules/json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
"node_modules/json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
"node_modules/json5": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
"integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
"dev": true,
"dependencies": {
"minimist": "^1.2.5"
},
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"engines": [
"node >=0.6.0"
],
"dependencies": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/lines-and-columns": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
"dev": true
},
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
"dev": true
},
"node_modules/lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
"dev": true
},
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"dev": true,
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/makeerror": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
"integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
"dev": true,
"dependencies": {
"tmpl": "1.0.x"
}
},
"node_modules/map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
"dev": true,
"dependencies": {
"object-visit": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
"node_modules/micromatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
"dev": true,
"dependencies": {
"braces": "^3.0.1",
"picomatch": "^2.0.5"
},
"engines": {
"node": ">=8"
}
},
"node_modules/mime-db": {
"version": "1.46.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
"integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.29",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
"integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
"dev": true,
"dependencies": {
"mime-db": "1.46.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"node_modules/mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
"dependencies": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"node_modules/nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"fragment-cache": "^0.2.1",
"is-windows": "^1.0.2",
"kind-of": "^6.0.2",
"object.pick": "^1.3.0",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
"node_modules/nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
"integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
"dev": true
},
"node_modules/node-modules-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
"integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/node-notifier": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz",
"integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==",
"dev": true,
"optional": true,
"dependencies": {
"growly": "^1.3.0",
"is-wsl": "^2.2.0",
"semver": "^7.3.2",
"shellwords": "^0.1.1",
"uuid": "^8.3.0",
"which": "^2.0.2"
}
},
"node_modules/node-notifier/node_modules/semver": {
"version": "7.3.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"dev": true,
"optional": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/node-releases": {
"version": "1.1.71",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
"integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
"dev": true
},
"node_modules/normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
"node_modules/normalize-package-data/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true,
"bin": {
"semver": "bin/semver"
}
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"dependencies": {
"path-key": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/nwsapi": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
"integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
"dev": true
},
"node_modules/oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
"dev": true,
"dependencies": {
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
"kind-of": "^3.0.3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-copy/node_modules/define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"dependencies": {
"is-descriptor": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-copy/node_modules/is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-copy/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-copy/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"dependencies": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-copy/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object-visit": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
"dev": true,
"dependencies": {
"isobject": "^3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object.assign": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
"integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3",
"has-symbols": "^1.0.1",
"object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
"dev": true,
"dependencies": {
"isobject": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"dependencies": {
"wrappy": "1"
}
},
"node_modules/onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"dependencies": {
"mimic-fn": "^2.1.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
"dev": true,
"dependencies": {
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0",
"word-wrap": "^1.2.3"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/p-each-series": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
"integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"dependencies": {
"callsites": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
"json-parse-even-better-errors": "^2.3.0",
"lines-and-columns": "^1.1.6"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
"dev": true
},
"node_modules/pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
"node_modules/picomatch": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
"dev": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/pirates": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
"integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
"dev": true,
"dependencies": {
"node-modules-regexp": "^1.0.0"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"dependencies": {
"find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/prettier": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
"integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/pretty-format": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
"integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
"dev": true,
"dependencies": {
"@jest/types": "^26.6.2",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^17.0.1"
},
"engines": {
"node": ">= 10"
}
},
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/pretty-format/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/pretty-format/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/prompts": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
"integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
"dev": true,
"dependencies": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
"dev": true
},
"node_modules/pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/pure-rand": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-4.1.2.tgz",
"integrity": "sha512-uLzZpQWfroIqyFWmX/pl0OL2JHJdoU3dbh0dvZ25fChHFJJi56J5oQZhW6QgbT2Llwh1upki84LnTwlZvsungA==",
"dev": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
},
"node_modules/qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true,
"engines": {
"node": ">=0.6"
}
},
"node_modules/react-is": {
"version": "17.0.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
"integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==",
"dev": true
},
"node_modules/read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
"integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
"dev": true,
"dependencies": {
"@types/normalize-package-data": "^2.4.0",
"normalize-package-data": "^2.5.0",
"parse-json": "^5.0.0",
"type-fest": "^0.6.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/read-pkg-up": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
"integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
"dev": true,
"dependencies": {
"find-up": "^4.1.0",
"read-pkg": "^5.2.0",
"type-fest": "^0.8.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/read-pkg-up/node_modules/type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/read-pkg/node_modules/type-fest": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
"integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
"dev": true
},
"node_modules/regenerate-unicode-properties": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
"integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
"dev": true,
"dependencies": {
"regenerate": "^1.4.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/regenerator-runtime": {
"version": "0.13.7",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
"dev": true
},
"node_modules/regenerator-transform": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
"integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.8.4"
}
},
"node_modules/regex-not": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"dependencies": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/regexpp": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
"integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/mysticatea"
}
},
"node_modules/regexpu-core": {
"version": "4.7.1",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
"integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
"dev": true,
"dependencies": {
"regenerate": "^1.4.0",
"regenerate-unicode-properties": "^8.2.0",
"regjsgen": "^0.5.1",
"regjsparser": "^0.6.4",
"unicode-match-property-ecmascript": "^1.0.4",
"unicode-match-property-value-ecmascript": "^1.2.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/regjsgen": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
"integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
"dev": true
},
"node_modules/regjsparser": {
"version": "0.6.7",
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz",
"integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==",
"dev": true,
"dependencies": {
"jsesc": "~0.5.0"
},
"bin": {
"regjsparser": "bin/parser"
}
},
"node_modules/regjsparser/node_modules/jsesc": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
"dev": true,
"bin": {
"jsesc": "bin/jsesc"
}
},
"node_modules/remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true
},
"node_modules/repeat-element": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
"integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true,
"engines": {
"node": ">=0.10"
}
},
"node_modules/request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
"dev": true,
"dependencies": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.3",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/request-promise-core": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
"integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
"dev": true,
"dependencies": {
"lodash": "^4.17.19"
},
"engines": {
"node": ">=0.10.0"
},
"peerDependencies": {
"request": "^2.34"
}
},
"node_modules/request-promise-native": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
"integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
"deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142",
"dev": true,
"dependencies": {
"request-promise-core": "1.1.4",
"stealthy-require": "^1.1.1",
"tough-cookie": "^2.3.3"
},
"engines": {
"node": ">=0.12.0"
},
"peerDependencies": {
"request": "^2.34"
}
},
"node_modules/request-promise-native/node_modules/tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dev": true,
"dependencies": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/request/node_modules/tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dev": true,
"dependencies": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/request/node_modules/uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"dev": true,
"bin": {
"uuid": "bin/uuid"
}
},
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
"node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dev": true,
"dependencies": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"dependencies": {
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
"deprecated": "https://github.com/lydell/resolve-url#deprecated",
"dev": true
},
"node_modules/ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true,
"engines": {
"node": ">=0.12"
}
},
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rollup": {
"version": "2.41.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.2.tgz",
"integrity": "sha512-6u8fJJXJx6fmvKrAC9DHYZgONvSkz8S9b/VFBjoQ6dkKdHyPpPbpqiNl2Bao9XBzDHpq672X6sGZ9G1ZBqAHMg==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
"node": ">=10.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.1"
}
},
"node_modules/rsvp": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
"integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
"dev": true,
"engines": {
"node": "6.* || >= 7.*"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"node_modules/safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"dev": true,
"dependencies": {
"ret": "~0.1.10"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
"node_modules/sane": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
"integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
"dev": true,
"dependencies": {
"@cnakazawa/watch": "^1.0.3",
"anymatch": "^2.0.0",
"capture-exit": "^2.0.0",
"exec-sh": "^0.3.2",
"execa": "^1.0.0",
"fb-watchman": "^2.0.0",
"micromatch": "^3.1.4",
"minimist": "^1.1.1",
"walker": "~1.0.5"
},
"bin": {
"sane": "src/cli.js"
},
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/sane/node_modules/anymatch": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
"dependencies": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
}
},
"node_modules/sane/node_modules/braces": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"dependencies": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
"extend-shallow": "^2.0.1",
"fill-range": "^4.0.0",
"isobject": "^3.0.1",
"repeat-element": "^1.1.2",
"snapdragon": "^0.8.1",
"snapdragon-node": "^2.0.1",
"split-string": "^3.0.2",
"to-regex": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/braces/node_modules/extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"dependencies": {
"is-extendable": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"dependencies": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
},
"engines": {
"node": ">=4.8"
}
},
"node_modules/sane/node_modules/execa": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"dependencies": {
"cross-spawn": "^6.0.0",
"get-stream": "^4.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/sane/node_modules/fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"dependencies": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
"repeat-string": "^1.6.1",
"to-regex-range": "^2.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"dependencies": {
"is-extendable": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"dependencies": {
"pump": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/sane/node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/is-number/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
"braces": "^2.3.1",
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"extglob": "^2.0.4",
"fragment-cache": "^0.2.1",
"kind-of": "^6.0.2",
"nanomatch": "^1.2.9",
"object.pick": "^1.3.0",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"dependencies": {
"remove-trailing-separator": "^1.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"dev": true,
"dependencies": {
"path-key": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/sane/node_modules/path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/sane/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true,
"bin": {
"semver": "bin/semver"
}
},
"node_modules/sane/node_modules/shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"dependencies": {
"shebang-regex": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/to-regex-range": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
"dev": true,
"dependencies": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sane/node_modules/which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"which": "bin/which"
}
},
"node_modules/saxes": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
"integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
"dev": true,
"dependencies": {
"xmlchars": "^2.2.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
},
"node_modules/set-value": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
"dependencies": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
"is-plain-object": "^2.0.3",
"split-string": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/set-value/node_modules/extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"dependencies": {
"is-extendable": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/set-value/node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/shellwords": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
"integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
"dev": true,
"optional": true
},
"node_modules/signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
"dev": true
},
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
"dev": true
},
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/slice-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
"is-fullwidth-code-point": "^3.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/slice-ansi/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/slice-ansi/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/slice-ansi/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"dev": true,
"dependencies": {
"base": "^0.11.1",
"debug": "^2.2.0",
"define-property": "^0.2.5",
"extend-shallow": "^2.0.1",
"map-cache": "^0.2.2",
"source-map": "^0.5.6",
"source-map-resolve": "^0.5.0",
"use": "^3.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon-node": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true,
"dependencies": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
"snapdragon-util": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon-node/node_modules/define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"dependencies": {
"is-descriptor": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon-util": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"dev": true,
"dependencies": {
"kind-of": "^3.2.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon-util/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/snapdragon/node_modules/define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"dependencies": {
"is-descriptor": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"dependencies": {
"is-extendable": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"dependencies": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/snapdragon/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
"dev": true,
"dependencies": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
"urix": "^0.1.0"
}
},
"node_modules/source-map-support": {
"version": "0.5.19",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
"dev": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"node_modules/source-map-support/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-url": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
"integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"dev": true
},
"node_modules/spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
"integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
"dev": true,
"dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-exceptions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
"dev": true
},
"node_modules/spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"dev": true,
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-license-ids": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
"integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
"dev": true
},
"node_modules/split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"dev": true,
"dependencies": {
"extend-shallow": "^3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
"node_modules/sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"dev": true,
"dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
},
"bin": {
"sshpk-conv": "bin/sshpk-conv",
"sshpk-sign": "bin/sshpk-sign",
"sshpk-verify": "bin/sshpk-verify"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/stack-utils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
"integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
"dev": true,
"dependencies": {
"escape-string-regexp": "^2.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/stack-utils/node_modules/escape-string-regexp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
"dev": true,
"dependencies": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/static-extend/node_modules/define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"dependencies": {
"is-descriptor": "^0.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/static-extend/node_modules/is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/static-extend/node_modules/is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/static-extend/node_modules/is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"dependencies": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/static-extend/node_modules/kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/stealthy-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/string-length": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz",
"integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==",
"dev": true,
"dependencies": {
"char-regex": "^1.0.2",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"dev": true,
"dependencies": {
"ansi-regex": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/supports-hyperlinks": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz",
"integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0",
"supports-color": "^7.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/supports-hyperlinks/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/supports-hyperlinks/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
"node_modules/table": {
"version": "6.0.7",
"resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz",
"integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==",
"dev": true,
"dependencies": {
"ajv": "^7.0.2",
"lodash": "^4.17.20",
"slice-ansi": "^4.0.0",
"string-width": "^4.2.0"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/table/node_modules/ajv": {
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz",
"integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/table/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/terminal-link": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
"integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
"dev": true,
"dependencies": {
"ansi-escapes": "^4.2.1",
"supports-hyperlinks": "^2.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
},
"engines": {
"node": ">=8"
}
},
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
"node_modules/throat": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
"integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
"dev": true
},
"node_modules/tmpl": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
"integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
"dev": true
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/to-object-path/node_modules/kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"dependencies": {
"is-buffer": "^1.1.5"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/to-regex": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
"dev": true,
"dependencies": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"regex-not": "^1.0.2",
"safe-regex": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"node_modules/tough-cookie": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
"integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
"dev": true,
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
"universalify": "^0.1.2"
},
"engines": {
"node": ">=6"
}
},
"node_modules/tr46": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
"integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
"dev": true,
"dependencies": {
"punycode": "^2.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"dependencies": {
"safe-buffer": "^5.0.1"
},
"engines": {
"node": "*"
}
},
"node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
},
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"dependencies": {
"prelude-ls": "^1.2.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/type-fest": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
"integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"dev": true,
"dependencies": {
"is-typedarray": "^1.0.0"
}
},
"node_modules/typescript": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz",
"integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
"integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-match-property-ecmascript": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
"integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
"dev": true,
"dependencies": {
"unicode-canonical-property-names-ecmascript": "^1.0.4",
"unicode-property-aliases-ecmascript": "^1.0.4"
},
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-match-property-value-ecmascript": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
"integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-property-aliases-ecmascript": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
"dependencies": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
"is-extendable": "^0.1.1",
"set-value": "^2.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/union-value/node_modules/is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true,
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
"dev": true,
"dependencies": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/unset-value/node_modules/has-value": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
"dev": true,
"dependencies": {
"get-value": "^2.0.3",
"has-values": "^0.1.4",
"isobject": "^2.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
"dev": true,
"dependencies": {
"isarray": "1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/unset-value/node_modules/has-values": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
"deprecated": "Please see https://github.com/lydell/urix#deprecated",
"dev": true
},
"node_modules/use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true,
"optional": true,
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
"node_modules/v8-to-istanbul": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz",
"integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-coverage": "^2.0.1",
"convert-source-map": "^1.6.0",
"source-map": "^0.7.3"
},
"engines": {
"node": ">=10.10.0"
}
},
"node_modules/v8-to-istanbul/node_modules/source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"dev": true,
"engines": {
"node": ">= 8"
}
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
"dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
"node_modules/verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"engines": [
"node >=0.6.0"
],
"dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"node_modules/w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
"dev": true,
"dependencies": {
"browser-process-hrtime": "^1.0.0"
}
},
"node_modules/w3c-xmlserializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
"integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
"dev": true,
"dependencies": {
"xml-name-validator": "^3.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/walker": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
"integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
"dev": true,
"dependencies": {
"makeerror": "1.0.x"
}
},
"node_modules/webidl-conversions": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
"dev": true,
"engines": {
"node": ">=10.4"
}
},
"node_modules/whatwg-encoding": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
"integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
"dev": true,
"dependencies": {
"iconv-lite": "0.4.24"
}
},
"node_modules/whatwg-mimetype": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
"integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
"dev": true
},
"node_modules/whatwg-url": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz",
"integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==",
"dev": true,
"dependencies": {
"lodash.sortby": "^4.7.0",
"tr46": "^2.0.2",
"webidl-conversions": "^6.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
"node_modules/word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/wrap-ansi/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/wrap-ansi/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/wrap-ansi/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
"node_modules/write-file-atomic": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
"integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
"dev": true,
"dependencies": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
"signal-exit": "^3.0.2",
"typedarray-to-buffer": "^3.1.5"
}
},
"node_modules/ws": {
"version": "7.4.4",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
"integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
"dev": true,
"engines": {
"node": ">=8.3.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
"integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
"dev": true
},
"node_modules/xmlchars": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true
},
"node_modules/y18n": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
"integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
"dev": true
},
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"node_modules/yargs": {
"version": "15.4.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dev": true,
"dependencies": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.2"
},
"engines": {
"node": ">=8"
}
},
"node_modules/yargs-parser": {
"version": "18.1.3",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"dev": true,
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
},
"engines": {
"node": ">=6"
}
}
},
"dependencies": {
"@babel/code-frame": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
"integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
"dev": true,
"requires": {
"@babel/highlight": "^7.12.13"
}
},
"@babel/compat-data": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.8.tgz",
"integrity": "sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog==",
"dev": true
},
"@babel/core": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz",
"integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9",
"@babel/helper-compilation-targets": "^7.13.10",
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helpers": "^7.13.10",
"@babel/parser": "^7.13.10",
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.1.2",
"lodash": "^4.17.19",
"semver": "^6.3.0",
"source-map": "^0.5.0"
}
},
"@babel/generator": {
"version": "7.13.9",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
"integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
"dev": true,
"requires": {
"@babel/types": "^7.13.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
}
},
"@babel/helper-annotate-as-pure": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz",
"integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==",
"dev": true,
"requires": {
"@babel/types": "^7.12.13"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz",
"integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==",
"dev": true,
"requires": {
"@babel/helper-explode-assignable-expression": "^7.12.13",
"@babel/types": "^7.12.13"
}
},
"@babel/helper-compilation-targets": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz",
"integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.13.8",
"@babel/helper-validator-option": "^7.12.17",
"browserslist": "^4.14.5",
"semver": "^6.3.0"
}
},
"@babel/helper-create-class-features-plugin": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.10.tgz",
"integrity": "sha512-YV7r2YxdTUaw84EwNkyrRke/TJHR/UXGiyvACRqvdVJ2/syV2rQuJNnaRLSuYiop8cMRXOgseTGoJCWX0q2fFg==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-member-expression-to-functions": "^7.13.0",
"@babel/helper-optimise-call-expression": "^7.12.13",
"@babel/helper-replace-supers": "^7.13.0",
"@babel/helper-split-export-declaration": "^7.12.13"
}
},
"@babel/helper-create-regexp-features-plugin": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz",
"integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.12.13",
"regexpu-core": "^4.7.1"
}
},
"@babel/helper-define-polyfill-provider": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
"integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
"dev": true,
"requires": {
"@babel/helper-compilation-targets": "^7.13.0",
"@babel/helper-module-imports": "^7.12.13",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/traverse": "^7.13.0",
"debug": "^4.1.1",
"lodash.debounce": "^4.0.8",
"resolve": "^1.14.2",
"semver": "^6.1.2"
}
},
"@babel/helper-explode-assignable-expression": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz",
"integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==",
"dev": true,
"requires": {
"@babel/types": "^7.13.0"
}
},
"@babel/helper-function-name": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
"integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==",
"dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.12.13",
"@babel/template": "^7.12.13",
"@babel/types": "^7.12.13"
}
},
"@babel/helper-get-function-arity": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
"integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
"dev": true,
"requires": {
"@babel/types": "^7.12.13"
}
},
"@babel/helper-hoist-variables": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz",
"integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==",
"dev": true,
"requires": {
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"@babel/helper-member-expression-to-functions": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz",
"integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==",
"dev": true,
"requires": {
"@babel/types": "^7.13.0"
}
},
"@babel/helper-module-imports": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz",
"integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==",
"dev": true,
"requires": {
"@babel/types": "^7.12.13"
}
},
"@babel/helper-module-transforms": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz",
"integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.12.13",
"@babel/helper-replace-supers": "^7.13.0",
"@babel/helper-simple-access": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13",
"@babel/helper-validator-identifier": "^7.12.11",
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0",
"lodash": "^4.17.19"
}
},
"@babel/helper-optimise-call-expression": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
"integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
"dev": true,
"requires": {
"@babel/types": "^7.12.13"
}
},
"@babel/helper-plugin-utils": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz",
"integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==",
"dev": true
},
"@babel/helper-remap-async-to-generator": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz",
"integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.12.13",
"@babel/helper-wrap-function": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"@babel/helper-replace-supers": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz",
"integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==",
"dev": true,
"requires": {
"@babel/helper-member-expression-to-functions": "^7.13.0",
"@babel/helper-optimise-call-expression": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"@babel/helper-simple-access": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz",
"integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==",
"dev": true,
"requires": {
"@babel/types": "^7.12.13"
}
},
"@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
"integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==",
"dev": true,
"requires": {
"@babel/types": "^7.12.1"
}
},
"@babel/helper-split-export-declaration": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
"integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
"dev": true,
"requires": {
"@babel/types": "^7.12.13"
}
},
"@babel/helper-validator-identifier": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
"dev": true
},
"@babel/helper-validator-option": {
"version": "7.12.17",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz",
"integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==",
"dev": true
},
"@babel/helper-wrap-function": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz",
"integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.12.13",
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"@babel/helpers": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz",
"integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==",
"dev": true,
"requires": {
"@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0",
"@babel/types": "^7.13.0"
}
},
"@babel/highlight": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
"integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.12.11",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.10.tgz",
"integrity": "sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ==",
"dev": true
},
"@babel/plugin-proposal-async-generator-functions": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz",
"integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-remap-async-to-generator": "^7.13.0",
"@babel/plugin-syntax-async-generators": "^7.8.4"
}
},
"@babel/plugin-proposal-class-properties": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz",
"integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==",
"dev": true,
"requires": {
"@babel/helper-create-class-features-plugin": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-proposal-dynamic-import": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz",
"integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
}
},
"@babel/plugin-proposal-export-namespace-from": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz",
"integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
}
},
"@babel/plugin-proposal-json-strings": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz",
"integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-json-strings": "^7.8.3"
}
},
"@babel/plugin-proposal-logical-assignment-operators": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz",
"integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
}
},
"@babel/plugin-proposal-nullish-coalescing-operator": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz",
"integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
}
},
"@babel/plugin-proposal-numeric-separator": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz",
"integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
}
},
"@babel/plugin-proposal-object-rest-spread": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz",
"integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.13.8",
"@babel/helper-compilation-targets": "^7.13.8",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-transform-parameters": "^7.13.0"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz",
"integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
}
},
"@babel/plugin-proposal-optional-chaining": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz",
"integrity": "sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
}
},
"@babel/plugin-proposal-private-methods": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz",
"integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==",
"dev": true,
"requires": {
"@babel/helper-create-class-features-plugin": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-proposal-unicode-property-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz",
"integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==",
"dev": true,
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
"@babel/plugin-syntax-bigint": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
"@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-syntax-dynamic-import": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
"integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
"@babel/plugin-syntax-export-namespace-from": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
"integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.3"
}
},
"@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
"@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
"@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
"@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
"@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
"@babel/plugin-syntax-top-level-await": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
"integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-arrow-functions": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz",
"integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-transform-async-to-generator": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz",
"integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.12.13",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-remap-async-to-generator": "^7.13.0"
}
},
"@babel/plugin-transform-block-scoped-functions": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz",
"integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-block-scoping": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz",
"integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-classes": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz",
"integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.12.13",
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-optimise-call-expression": "^7.12.13",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-replace-supers": "^7.13.0",
"@babel/helper-split-export-declaration": "^7.12.13",
"globals": "^11.1.0"
}
},
"@babel/plugin-transform-computed-properties": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz",
"integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-transform-destructuring": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz",
"integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-transform-dotall-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz",
"integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==",
"dev": true,
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-duplicate-keys": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz",
"integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-exponentiation-operator": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz",
"integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==",
"dev": true,
"requires": {
"@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-for-of": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz",
"integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-transform-function-name": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz",
"integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-literals": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz",
"integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-member-expression-literals": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz",
"integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-modules-amd": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz",
"integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==",
"dev": true,
"requires": {
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-commonjs": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz",
"integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==",
"dev": true,
"requires": {
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-simple-access": "^7.12.13",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-systemjs": {
"version": "7.13.8",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz",
"integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==",
"dev": true,
"requires": {
"@babel/helper-hoist-variables": "^7.13.0",
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-validator-identifier": "^7.12.11",
"babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-umd": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz",
"integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==",
"dev": true,
"requires": {
"@babel/helper-module-transforms": "^7.13.0",
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz",
"integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==",
"dev": true,
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.12.13"
}
},
"@babel/plugin-transform-new-target": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz",
"integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-object-super": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz",
"integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13",
"@babel/helper-replace-supers": "^7.12.13"
}
},
"@babel/plugin-transform-parameters": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz",
"integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-transform-property-literals": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz",
"integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-regenerator": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz",
"integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==",
"dev": true,
"requires": {
"regenerator-transform": "^0.14.2"
}
},
"@babel/plugin-transform-reserved-words": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz",
"integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-shorthand-properties": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz",
"integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-spread": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz",
"integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
}
},
"@babel/plugin-transform-sticky-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz",
"integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-template-literals": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz",
"integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.13.0"
}
},
"@babel/plugin-transform-typeof-symbol": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz",
"integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-unicode-escapes": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz",
"integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/plugin-transform-unicode-regex": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz",
"integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==",
"dev": true,
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.12.13",
"@babel/helper-plugin-utils": "^7.12.13"
}
},
"@babel/preset-env": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.10.tgz",
"integrity": "sha512-nOsTScuoRghRtUsRr/c69d042ysfPHcu+KOB4A9aAO9eJYqrkat+LF8G1yp1HD18QiwixT2CisZTr/0b3YZPXQ==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.13.8",
"@babel/helper-compilation-targets": "^7.13.10",
"@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-validator-option": "^7.12.17",
"@babel/plugin-proposal-async-generator-functions": "^7.13.8",
"@babel/plugin-proposal-class-properties": "^7.13.0",
"@babel/plugin-proposal-dynamic-import": "^7.13.8",
"@babel/plugin-proposal-export-namespace-from": "^7.12.13",
"@babel/plugin-proposal-json-strings": "^7.13.8",
"@babel/plugin-proposal-logical-assignment-operators": "^7.13.8",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8",
"@babel/plugin-proposal-numeric-separator": "^7.12.13",
"@babel/plugin-proposal-object-rest-spread": "^7.13.8",
"@babel/plugin-proposal-optional-catch-binding": "^7.13.8",
"@babel/plugin-proposal-optional-chaining": "^7.13.8",
"@babel/plugin-proposal-private-methods": "^7.13.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.12.13",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
"@babel/plugin-syntax-numeric-separator": "^7.10.4",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-top-level-await": "^7.12.13",
"@babel/plugin-transform-arrow-functions": "^7.13.0",
"@babel/plugin-transform-async-to-generator": "^7.13.0",
"@babel/plugin-transform-block-scoped-functions": "^7.12.13",
"@babel/plugin-transform-block-scoping": "^7.12.13",
"@babel/plugin-transform-classes": "^7.13.0",
"@babel/plugin-transform-computed-properties": "^7.13.0",
"@babel/plugin-transform-destructuring": "^7.13.0",
"@babel/plugin-transform-dotall-regex": "^7.12.13",
"@babel/plugin-transform-duplicate-keys": "^7.12.13",
"@babel/plugin-transform-exponentiation-operator": "^7.12.13",
"@babel/plugin-transform-for-of": "^7.13.0",
"@babel/plugin-transform-function-name": "^7.12.13",
"@babel/plugin-transform-literals": "^7.12.13",
"@babel/plugin-transform-member-expression-literals": "^7.12.13",
"@babel/plugin-transform-modules-amd": "^7.13.0",
"@babel/plugin-transform-modules-commonjs": "^7.13.8",
"@babel/plugin-transform-modules-systemjs": "^7.13.8",
"@babel/plugin-transform-modules-umd": "^7.13.0",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13",
"@babel/plugin-transform-new-target": "^7.12.13",
"@babel/plugin-transform-object-super": "^7.12.13",
"@babel/plugin-transform-parameters": "^7.13.0",
"@babel/plugin-transform-property-literals": "^7.12.13",
"@babel/plugin-transform-regenerator": "^7.12.13",
"@babel/plugin-transform-reserved-words": "^7.12.13",
"@babel/plugin-transform-shorthand-properties": "^7.12.13",
"@babel/plugin-transform-spread": "^7.13.0",
"@babel/plugin-transform-sticky-regex": "^7.12.13",
"@babel/plugin-transform-template-literals": "^7.13.0",
"@babel/plugin-transform-typeof-symbol": "^7.12.13",
"@babel/plugin-transform-unicode-escapes": "^7.12.13",
"@babel/plugin-transform-unicode-regex": "^7.12.13",
"@babel/preset-modules": "^0.1.4",
"@babel/types": "^7.13.0",
"babel-plugin-polyfill-corejs2": "^0.1.4",
"babel-plugin-polyfill-corejs3": "^0.1.3",
"babel-plugin-polyfill-regenerator": "^0.1.2",
"core-js-compat": "^3.9.0",
"semver": "^6.3.0"
}
},
"@babel/preset-modules": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
"integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
"@babel/plugin-transform-dotall-regex": "^7.4.4",
"@babel/types": "^7.4.4",
"esutils": "^2.0.2"
}
},
"@babel/runtime": {
"version": "7.13.10",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
"integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"@babel/template": {
"version": "7.12.13",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
"integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
"@babel/parser": "^7.12.13",
"@babel/types": "^7.12.13"
}
},
"@babel/traverse": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz",
"integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.0",
"@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13",
"@babel/parser": "^7.13.0",
"@babel/types": "^7.13.0",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.19"
}
},
"@babel/types": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz",
"integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.12.11",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
},
"@bcoe/v8-coverage": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
"@cnakazawa/watch": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
"integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
"dev": true,
"requires": {
"exec-sh": "^0.3.2",
"minimist": "^1.2.0"
}
},
"@eslint/eslintrc": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz",
"integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.1.1",
"espree": "^7.3.0",
"globals": "^12.1.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
"js-yaml": "^3.13.1",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
"globals": {
"version": "12.4.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
"integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
"dev": true,
"requires": {
"type-fest": "^0.8.1"
}
},
"type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true
}
}
},
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
"integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
"requires": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
"get-package-type": "^0.1.0",
"js-yaml": "^3.13.1",
"resolve-from": "^5.0.0"
}
},
"@istanbuljs/schema": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true
},
"@jest/console": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz",
"integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
"jest-message-util": "^26.6.2",
"jest-util": "^26.6.2",
"slash": "^3.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"@jest/core": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz",
"integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==",
"dev": true,
"requires": {
"@jest/console": "^26.6.2",
"@jest/reporters": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/transform": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-changed-files": "^26.6.2",
"jest-config": "^26.6.3",
"jest-haste-map": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-regex-util": "^26.0.0",
"jest-resolve": "^26.6.2",
"jest-resolve-dependencies": "^26.6.3",
"jest-runner": "^26.6.3",
"jest-runtime": "^26.6.3",
"jest-snapshot": "^26.6.2",
"jest-util": "^26.6.2",
"jest-validate": "^26.6.2",
"jest-watcher": "^26.6.2",
"micromatch": "^4.0.2",
"p-each-series": "^2.1.0",
"rimraf": "^3.0.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"@jest/environment": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz",
"integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==",
"dev": true,
"requires": {
"@jest/fake-timers": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"jest-mock": "^26.6.2"
}
},
"@jest/fake-timers": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz",
"integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"@sinonjs/fake-timers": "^6.0.1",
"@types/node": "*",
"jest-message-util": "^26.6.2",
"jest-mock": "^26.6.2",
"jest-util": "^26.6.2"
}
},
"@jest/globals": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz",
"integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==",
"dev": true,
"requires": {
"@jest/environment": "^26.6.2",
"@jest/types": "^26.6.2",
"expect": "^26.6.2"
}
},
"@jest/reporters": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz",
"integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/transform": "^26.6.2",
"@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
"glob": "^7.1.2",
"graceful-fs": "^4.2.4",
"istanbul-lib-coverage": "^3.0.0",
"istanbul-lib-instrument": "^4.0.3",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
"jest-haste-map": "^26.6.2",
"jest-resolve": "^26.6.2",
"jest-util": "^26.6.2",
"jest-worker": "^26.6.2",
"node-notifier": "^8.0.0",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
"terminal-link": "^2.0.0",
"v8-to-istanbul": "^7.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"@jest/source-map": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz",
"integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==",
"dev": true,
"requires": {
"callsites": "^3.0.0",
"graceful-fs": "^4.2.4",
"source-map": "^0.6.0"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"@jest/test-result": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz",
"integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==",
"dev": true,
"requires": {
"@jest/console": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
}
},
"@jest/test-sequencer": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz",
"integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==",
"dev": true,
"requires": {
"@jest/test-result": "^26.6.2",
"graceful-fs": "^4.2.4",
"jest-haste-map": "^26.6.2",
"jest-runner": "^26.6.3",
"jest-runtime": "^26.6.3"
}
},
"@jest/transform": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
"integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
"@jest/types": "^26.6.2",
"babel-plugin-istanbul": "^6.0.0",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
"jest-haste-map": "^26.6.2",
"jest-regex-util": "^26.0.0",
"jest-util": "^26.6.2",
"micromatch": "^4.0.2",
"pirates": "^4.0.1",
"slash": "^3.0.0",
"source-map": "^0.6.1",
"write-file-atomic": "^3.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"@jest/types": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
"integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"@rollup/plugin-babel": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz",
"integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.10.4",
"@rollup/pluginutils": "^3.1.0"
}
},
"@rollup/pluginutils": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
"integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
"dev": true,
"requires": {
"@types/estree": "0.0.39",
"estree-walker": "^1.0.1",
"picomatch": "^2.2.2"
}
},
"@sinonjs/commons": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz",
"integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
},
"@sinonjs/fake-timers": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
"integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
"dev": true,
"requires": {
"@sinonjs/commons": "^1.7.0"
}
},
"@types/babel__core": {
"version": "7.1.12",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz",
"integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0",
"@types/babel__generator": "*",
"@types/babel__template": "*",
"@types/babel__traverse": "*"
}
},
"@types/babel__generator": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
"integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0"
}
},
"@types/babel__template": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz",
"integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
}
},
"@types/babel__traverse": {
"version": "7.11.0",
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz",
"integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==",
"dev": true,
"requires": {
"@babel/types": "^7.3.0"
}
},
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
"@types/graceful-fs": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
"integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/istanbul-lib-coverage": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
"integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
"dev": true
},
"@types/istanbul-lib-report": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
"integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "*"
}
},
"@types/istanbul-reports": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz",
"integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==",
"dev": true,
"requires": {
"@types/istanbul-lib-report": "*"
}
},
"@types/node": {
"version": "14.14.34",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.34.tgz",
"integrity": "sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA==",
"dev": true
},
"@types/normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
"dev": true
},
"@types/prettier": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.2.tgz",
"integrity": "sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg==",
"dev": true
},
"@types/stack-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
"integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
"dev": true
},
"@types/yargs": {
"version": "15.0.13",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz",
"integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
}
},
"@types/yargs-parser": {
"version": "20.2.0",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz",
"integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==",
"dev": true
},
"abab": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
"integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
"dev": true
},
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true
},
"acorn-globals": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
"integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
"dev": true,
"requires": {
"acorn": "^7.1.1",
"acorn-walk": "^7.1.1"
}
},
"acorn-jsx": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
"dev": true,
"requires": {}
},
"acorn-walk": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true
},
"ansi-escapes": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
"integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
"dev": true,
"requires": {
"type-fest": "^0.11.0"
}
},
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"dev": true
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"anymatch": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
},
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
"dev": true
},
"arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true
},
"arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true
},
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"dev": true,
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
},
"assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"dev": true
},
"astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true
},
"aws4": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
"dev": true
},
"babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
"integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"@babel/parser": "^7.7.0",
"@babel/traverse": "^7.7.0",
"@babel/types": "^7.7.0",
"eslint-visitor-keys": "^1.0.0",
"resolve": "^1.12.0"
}
},
"babel-jest": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
"integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
"dev": true,
"requires": {
"@jest/transform": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/babel__core": "^7.1.7",
"babel-plugin-istanbul": "^6.0.0",
"babel-preset-jest": "^26.6.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"slash": "^3.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"babel-plugin-dynamic-import-node": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
"integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
"dev": true,
"requires": {
"object.assign": "^4.1.0"
}
},
"babel-plugin-istanbul": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
"integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-instrument": "^4.0.0",
"test-exclude": "^6.0.0"
}
},
"babel-plugin-jest-hoist": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
"integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
"dev": true,
"requires": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
"@types/babel__core": "^7.0.0",
"@types/babel__traverse": "^7.0.6"
}
},
"babel-plugin-polyfill-corejs2": {
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz",
"integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.13.0",
"@babel/helper-define-polyfill-provider": "^0.1.5",
"semver": "^6.1.1"
}
},
"babel-plugin-polyfill-corejs3": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
"integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
"dev": true,
"requires": {
"@babel/helper-define-polyfill-provider": "^0.1.5",
"core-js-compat": "^3.8.1"
}
},
"babel-plugin-polyfill-regenerator": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz",
"integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==",
"dev": true,
"requires": {
"@babel/helper-define-polyfill-provider": "^0.1.5"
}
},
"babel-plugin-trace": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/babel-plugin-trace/-/babel-plugin-trace-1.1.0.tgz",
"integrity": "sha512-joLw8IjwmBNcvQKQsJOxNTI7pXN8ipKU1HeZt7DeyIXPgZCd0EuDIxyZPv01PjKQsW8IbSLDZGZ4zafQXI+6Hw==",
"dev": true
},
"babel-preset-current-node-syntax": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
"integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
"dev": true,
"requires": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
"@babel/plugin-syntax-class-properties": "^7.8.3",
"@babel/plugin-syntax-import-meta": "^7.8.3",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
"@babel/plugin-syntax-numeric-separator": "^7.8.3",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-top-level-await": "^7.8.3"
}
},
"babel-preset-jest": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
"integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
"dev": true,
"requires": {
"babel-plugin-jest-hoist": "^26.6.2",
"babel-preset-current-node-syntax": "^1.0.0"
}
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"base": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
"requires": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
"component-emitter": "^1.2.1",
"define-property": "^1.0.0",
"isobject": "^3.0.1",
"mixin-deep": "^1.2.0",
"pascalcase": "^0.1.1"
},
"dependencies": {
"define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
}
}
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
"requires": {
"tweetnacl": "^0.14.3"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
},
"browser-process-hrtime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
"dev": true
},
"browserslist": {
"version": "4.16.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
"integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
"dev": true,
"requires": {
"caniuse-lite": "^1.0.30001181",
"colorette": "^1.2.1",
"electron-to-chromium": "^1.3.649",
"escalade": "^3.1.1",
"node-releases": "^1.1.70"
}
},
"bser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
"integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
"requires": {
"node-int64": "^0.4.0"
}
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
"requires": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
"get-value": "^2.0.6",
"has-value": "^1.0.0",
"isobject": "^3.0.1",
"set-value": "^2.0.0",
"to-object-path": "^0.3.0",
"union-value": "^1.0.0",
"unset-value": "^1.0.0"
}
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true
},
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
"caniuse-lite": {
"version": "1.0.30001199",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001199.tgz",
"integrity": "sha512-ifbK2eChUCFUwGhlEzIoVwzFt1+iriSjyKKFYNfv6hN34483wyWpLLavYQXhnR036LhkdUYaSDpHg1El++VgHQ==",
"dev": true
},
"capture-exit": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
"integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
"dev": true,
"requires": {
"rsvp": "^4.8.4"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"char-regex": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
"dev": true
},
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
"dev": true
},
"cjs-module-lexer": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz",
"integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==",
"dev": true
},
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true,
"requires": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
"isobject": "^3.0.0",
"static-extend": "^0.1.1"
},
"dependencies": {
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
}
},
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true
}
}
},
"cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"dev": true
},
"collect-v8-coverage": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
"integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
"dev": true
},
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
"dev": true,
"requires": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"colorette": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
"integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
"dev": true
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dev": true,
"requires": {
"delayed-stream": "~1.0.0"
}
},
"common-tags": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
"integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
"dev": true
},
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"convert-source-map": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
"integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.1"
}
},
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true
},
"core-js-compat": {
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz",
"integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==",
"dev": true,
"requires": {
"browserslist": "^4.16.3",
"semver": "7.0.0"
},
"dependencies": {
"semver": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
"integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
"dev": true
}
}
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
"cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
"integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
"dev": true,
"requires": {
"cross-spawn": "^7.0.1"
}
},
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"cssom": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
"integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
"dev": true
},
"cssstyle": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
"dev": true,
"requires": {
"cssom": "~0.3.6"
},
"dependencies": {
"cssom": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
"dev": true
}
}
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"data-urls": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
"integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
"dev": true,
"requires": {
"abab": "^2.0.3",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.0.0"
}
},
"debug": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dev": true,
"requires": {
"ms": "2.1.2"
}
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
"decimal.js": {
"version": "10.2.1",
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz",
"integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==",
"dev": true
},
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
"deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true
},
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": {
"object-keys": "^1.0.12"
}
},
"define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"requires": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
"detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true
},
"diff-sequences": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
"integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==",
"dev": true
},
"doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"requires": {
"esutils": "^2.0.2"
}
},
"domexception": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
"integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
"dev": true,
"requires": {
"webidl-conversions": "^5.0.0"
},
"dependencies": {
"webidl-conversions": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
"integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
"dev": true
}
}
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"electron-to-chromium": {
"version": "1.3.687",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.687.tgz",
"integrity": "sha512-IpzksdQNl3wdgkzf7dnA7/v10w0Utf1dF2L+B4+gKrloBrxCut+au+kky3PYvle3RMdSxZP+UiCZtLbcYRxSNQ==",
"dev": true
},
"emittery": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz",
"integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==",
"dev": true
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
},
"enquirer": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
"dev": true,
"requires": {
"ansi-colors": "^4.1.1"
}
},
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
"requires": {
"is-arrayish": "^0.2.1"
}
},
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"escodegen": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
"integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
"dev": true,
"requires": {
"esprima": "^4.0.1",
"estraverse": "^5.2.0",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.6.1"
},
"dependencies": {
"estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true
},
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true,
"requires": {
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2"
}
},
"optionator": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"dev": true,
"requires": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
"word-wrap": "~1.2.3"
}
},
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"optional": true
},
"type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"requires": {
"prelude-ls": "~1.1.2"
}
}
}
},
"eslint": {
"version": "7.22.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz",
"integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==",
"dev": true,
"requires": {
"@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.0",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.0.1",
"doctrine": "^3.0.0",
"enquirer": "^2.3.5",
"eslint-scope": "^5.1.1",
"eslint-utils": "^2.1.0",
"eslint-visitor-keys": "^2.0.0",
"espree": "^7.3.1",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
"glob-parent": "^5.0.0",
"globals": "^13.6.0",
"ignore": "^4.0.6",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash": "^4.17.21",
"minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
"progress": "^2.0.0",
"regexpp": "^3.1.0",
"semver": "^7.2.1",
"strip-ansi": "^6.0.0",
"strip-json-comments": "^3.1.0",
"table": "^6.0.4",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
"@babel/code-frame": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
"dev": true,
"requires": {
"@babel/highlight": "^7.10.4"
}
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"eslint-visitor-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
"integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
"dev": true
},
"globals": {
"version": "13.6.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz",
"integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"semver": {
"version": "7.3.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true
}
}
},
"eslint-config-prettier": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz",
"integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==",
"dev": true,
"requires": {}
},
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
}
},
"eslint-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true,
"requires": {
"eslint-visitor-keys": "^1.1.0"
}
},
"eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true
},
"espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true,
"requires": {
"acorn": "^7.4.0",
"acorn-jsx": "^5.3.1",
"eslint-visitor-keys": "^1.3.0"
}
},
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
"esquery": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
"integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
"dev": true,
"requires": {
"estraverse": "^5.1.0"
},
"dependencies": {
"estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true
}
}
},
"esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"requires": {
"estraverse": "^5.2.0"
},
"dependencies": {
"estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true
}
}
},
"estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"estree-walker": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
"dev": true
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"exec-sh": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
"integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
"dev": true
},
"execa": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
"integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
"dev": true,
"requires": {
"cross-spawn": "^7.0.0",
"get-stream": "^5.0.0",
"human-signals": "^1.1.1",
"is-stream": "^2.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^4.0.0",
"onetime": "^5.1.0",
"signal-exit": "^3.0.2",
"strip-final-newline": "^2.0.0"
}
},
"exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
"dev": true
},
"expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
"extend-shallow": "^2.0.1",
"posix-character-classes": "^0.1.0",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
},
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
}
},
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
},
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
"expect": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz",
"integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"ansi-styles": "^4.0.0",
"jest-get-type": "^26.3.0",
"jest-matcher-utils": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-regex-util": "^26.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
}
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
"extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
"dev": true,
"requires": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
}
},
"extglob": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
"expand-brackets": "^2.1.4",
"extend-shallow": "^2.0.1",
"fragment-cache": "^0.2.1",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
"dependencies": {
"define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
},
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
},
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
}
}
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
},
"fast-check": {
"version": "2.13.0",
"resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.13.0.tgz",
"integrity": "sha512-IOfzKm/SCA+jpUEgAfqAuxHYPmgtmpnnwljQmYPRGrqYczcTKApXKHza/SNxFxYkecWfZilYa0DJdBvqz1bcSw==",
"dev": true,
"requires": {
"pure-rand": "^4.1.1"
}
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
"fb-watchman": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
"integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
"dev": true,
"requires": {
"bser": "2.1.1"
}
},
"file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
"requires": {
"flat-cache": "^3.0.4"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
},
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
"flat-cache": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
"dev": true,
"requires": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
}
},
"flatted": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
"integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
"dev": true
},
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
"dev": true,
"requires": {
"map-cache": "^0.2.2"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"optional": true
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
"gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true
},
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1"
}
},
"get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true
},
"get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"requires": {
"pump": "^3.0.0"
}
},
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
"dev": true
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
}
},
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
"graceful-fs": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
"dev": true
},
"growly": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
"integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
"dev": true,
"optional": true
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"dev": true,
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
"function-bind": "^1.1.1"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"has-symbols": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"dev": true
},
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
"dev": true,
"requires": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
"isobject": "^3.0.0"
}
},
"has-values": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
"dev": true,
"requires": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
},
"dependencies": {
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"kind-of": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"hosted-git-info": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
"dev": true
},
"html-encoding-sniffer": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
"integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
"dev": true,
"requires": {
"whatwg-encoding": "^1.0.5"
}
},
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"human-signals": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"dev": true
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
},
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"requires": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
},
"dependencies": {
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
}
}
},
"import-local": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
"integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
"dev": true,
"requires": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
}
},
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"is-accessor-descriptor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
"kind-of": "^6.0.0"
}
},
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
"is-ci": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
"integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
"dev": true,
"requires": {
"ci-info": "^2.0.0"
}
},
"is-core-module": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-data-descriptor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
"kind-of": "^6.0.0"
}
},
"is-descriptor": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
}
},
"is-docker": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
"integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
"dev": true,
"optional": true
},
"is-extendable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"requires": {
"is-plain-object": "^2.0.4"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
"is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"requires": {
"isobject": "^3.0.1"
}
},
"is-potential-custom-element-name": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
"integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=",
"dev": true
},
"is-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
"dev": true
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true
},
"is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
"optional": true,
"requires": {
"is-docker": "^2.0.0"
}
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
"istanbul-lib-coverage": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
"integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
"dev": true
},
"istanbul-lib-instrument": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
"integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
"dev": true,
"requires": {
"@babel/core": "^7.7.5",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.0.0",
"semver": "^6.3.0"
}
},
"istanbul-lib-report": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
"integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
"dev": true,
"requires": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^3.0.0",
"supports-color": "^7.1.0"
},
"dependencies": {
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"istanbul-lib-source-maps": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
"integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
"dev": true,
"requires": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"istanbul-reports": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
"integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
"dev": true,
"requires": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
}
},
"jest": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz",
"integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==",
"dev": true,
"requires": {
"@jest/core": "^26.6.3",
"import-local": "^3.0.2",
"jest-cli": "^26.6.3"
}
},
"jest-changed-files": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz",
"integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"execa": "^4.0.0",
"throat": "^5.0.0"
}
},
"jest-cli": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
"integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
"dev": true,
"requires": {
"@jest/core": "^26.6.3",
"@jest/test-result": "^26.6.2",
"@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
"is-ci": "^2.0.0",
"jest-config": "^26.6.3",
"jest-util": "^26.6.2",
"jest-validate": "^26.6.2",
"prompts": "^2.0.1",
"yargs": "^15.4.1"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-config": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz",
"integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
"@jest/test-sequencer": "^26.6.3",
"@jest/types": "^26.6.2",
"babel-jest": "^26.6.3",
"chalk": "^4.0.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
"jest-environment-jsdom": "^26.6.2",
"jest-environment-node": "^26.6.2",
"jest-get-type": "^26.3.0",
"jest-jasmine2": "^26.6.3",
"jest-regex-util": "^26.0.0",
"jest-resolve": "^26.6.2",
"jest-util": "^26.6.2",
"jest-validate": "^26.6.2",
"micromatch": "^4.0.2",
"pretty-format": "^26.6.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-diff": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
"integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"diff-sequences": "^26.6.2",
"jest-get-type": "^26.3.0",
"pretty-format": "^26.6.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-docblock": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz",
"integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==",
"dev": true,
"requires": {
"detect-newline": "^3.0.0"
}
},
"jest-each": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz",
"integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"jest-get-type": "^26.3.0",
"jest-util": "^26.6.2",
"pretty-format": "^26.6.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-environment-jsdom": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz",
"integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==",
"dev": true,
"requires": {
"@jest/environment": "^26.6.2",
"@jest/fake-timers": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"jest-mock": "^26.6.2",
"jest-util": "^26.6.2",
"jsdom": "^16.4.0"
}
},
"jest-environment-node": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz",
"integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==",
"dev": true,
"requires": {
"@jest/environment": "^26.6.2",
"@jest/fake-timers": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"jest-mock": "^26.6.2",
"jest-util": "^26.6.2"
}
},
"jest-get-type": {
"version": "26.3.0",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
"integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
"dev": true
},
"jest-haste-map": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
"integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"@types/graceful-fs": "^4.1.2",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"fsevents": "^2.1.2",
"graceful-fs": "^4.2.4",
"jest-regex-util": "^26.0.0",
"jest-serializer": "^26.6.2",
"jest-util": "^26.6.2",
"jest-worker": "^26.6.2",
"micromatch": "^4.0.2",
"sane": "^4.0.3",
"walker": "^1.0.7"
}
},
"jest-jasmine2": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz",
"integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==",
"dev": true,
"requires": {
"@babel/traverse": "^7.1.0",
"@jest/environment": "^26.6.2",
"@jest/source-map": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"expect": "^26.6.2",
"is-generator-fn": "^2.0.0",
"jest-each": "^26.6.2",
"jest-matcher-utils": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-runtime": "^26.6.3",
"jest-snapshot": "^26.6.2",
"jest-util": "^26.6.2",
"pretty-format": "^26.6.2",
"throat": "^5.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-leak-detector": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz",
"integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==",
"dev": true,
"requires": {
"jest-get-type": "^26.3.0",
"pretty-format": "^26.6.2"
}
},
"jest-matcher-utils": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz",
"integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"jest-diff": "^26.6.2",
"jest-get-type": "^26.3.0",
"pretty-format": "^26.6.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-message-util": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz",
"integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"@jest/types": "^26.6.2",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.2",
"pretty-format": "^26.6.2",
"slash": "^3.0.0",
"stack-utils": "^2.0.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-mock": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz",
"integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"@types/node": "*"
}
},
"jest-pnp-resolver": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
"dev": true,
"requires": {}
},
"jest-regex-util": {
"version": "26.0.0",
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
"integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
"dev": true
},
"jest-resolve": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz",
"integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"jest-pnp-resolver": "^1.2.2",
"jest-util": "^26.6.2",
"read-pkg-up": "^7.0.1",
"resolve": "^1.18.1",
"slash": "^3.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-resolve-dependencies": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz",
"integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"jest-regex-util": "^26.0.0",
"jest-snapshot": "^26.6.2"
}
},
"jest-runner": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz",
"integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==",
"dev": true,
"requires": {
"@jest/console": "^26.6.2",
"@jest/environment": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.7.1",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-config": "^26.6.3",
"jest-docblock": "^26.0.0",
"jest-haste-map": "^26.6.2",
"jest-leak-detector": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-resolve": "^26.6.2",
"jest-runtime": "^26.6.3",
"jest-util": "^26.6.2",
"jest-worker": "^26.6.2",
"source-map-support": "^0.5.6",
"throat": "^5.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-runtime": {
"version": "26.6.3",
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz",
"integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==",
"dev": true,
"requires": {
"@jest/console": "^26.6.2",
"@jest/environment": "^26.6.2",
"@jest/fake-timers": "^26.6.2",
"@jest/globals": "^26.6.2",
"@jest/source-map": "^26.6.2",
"@jest/test-result": "^26.6.2",
"@jest/transform": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/yargs": "^15.0.0",
"chalk": "^4.0.0",
"cjs-module-lexer": "^0.6.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
"jest-config": "^26.6.3",
"jest-haste-map": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-mock": "^26.6.2",
"jest-regex-util": "^26.0.0",
"jest-resolve": "^26.6.2",
"jest-snapshot": "^26.6.2",
"jest-util": "^26.6.2",
"jest-validate": "^26.6.2",
"slash": "^3.0.0",
"strip-bom": "^4.0.0",
"yargs": "^15.4.1"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-serializer": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz",
"integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==",
"dev": true,
"requires": {
"@types/node": "*",
"graceful-fs": "^4.2.4"
}
},
"jest-snapshot": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz",
"integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0",
"@jest/types": "^26.6.2",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.0.0",
"chalk": "^4.0.0",
"expect": "^26.6.2",
"graceful-fs": "^4.2.4",
"jest-diff": "^26.6.2",
"jest-get-type": "^26.3.0",
"jest-haste-map": "^26.6.2",
"jest-matcher-utils": "^26.6.2",
"jest-message-util": "^26.6.2",
"jest-resolve": "^26.6.2",
"natural-compare": "^1.4.0",
"pretty-format": "^26.6.2",
"semver": "^7.3.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"semver": {
"version": "7.3.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-util": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
"integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"is-ci": "^2.0.0",
"micromatch": "^4.0.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-validate": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz",
"integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"camelcase": "^6.0.0",
"chalk": "^4.0.0",
"jest-get-type": "^26.3.0",
"leven": "^3.1.0",
"pretty-format": "^26.6.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"camelcase": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
"dev": true
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-watcher": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz",
"integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==",
"dev": true,
"requires": {
"@jest/test-result": "^26.6.2",
"@jest/types": "^26.6.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"jest-util": "^26.6.2",
"string-length": "^4.0.1"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"jest-worker": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
"integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
"dev": true,
"requires": {
"@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^7.0.0"
},
"dependencies": {
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
"jsdom": {
"version": "16.5.1",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.5.1.tgz",
"integrity": "sha512-pF73EOsJgwZekbDHEY5VO/yKXUkab/DuvrQB/ANVizbr6UAHJsDdHXuotZYwkJSGQl1JM+ivXaqY+XBDDL4TiA==",
"dev": true,
"requires": {
"abab": "^2.0.5",
"acorn": "^8.0.5",
"acorn-globals": "^6.0.0",
"cssom": "^0.4.4",
"cssstyle": "^2.3.0",
"data-urls": "^2.0.0",
"decimal.js": "^10.2.1",
"domexception": "^2.0.1",
"escodegen": "^2.0.0",
"html-encoding-sniffer": "^2.0.1",
"is-potential-custom-element-name": "^1.0.0",
"nwsapi": "^2.2.0",
"parse5": "6.0.1",
"request": "^2.88.2",
"request-promise-native": "^1.0.9",
"saxes": "^5.0.1",
"symbol-tree": "^3.2.4",
"tough-cookie": "^4.0.0",
"w3c-hr-time": "^1.0.2",
"w3c-xmlserializer": "^2.0.0",
"webidl-conversions": "^6.1.0",
"whatwg-encoding": "^1.0.5",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.0.0",
"ws": "^7.4.4",
"xml-name-validator": "^3.0.0"
},
"dependencies": {
"acorn": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
"integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==",
"dev": true
}
}
},
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
},
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
"json5": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
"integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
}
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
},
"kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true
},
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true
},
"levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"requires": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
}
},
"lines-and-columns": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
"dev": true
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": {
"p-locate": "^4.1.0"
}
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
"dev": true
},
"lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
"dev": true
},
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
},
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"dev": true,
"requires": {
"semver": "^6.0.0"
}
},
"makeerror": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
"integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
"dev": true,
"requires": {
"tmpl": "1.0.x"
}
},
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
"dev": true
},
"map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
"dev": true,
"requires": {
"object-visit": "^1.0.0"
}
},
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
"micromatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
"dev": true,
"requires": {
"braces": "^3.0.1",
"picomatch": "^2.0.5"
}
},
"mime-db": {
"version": "1.46.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
"integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
"dev": true
},
"mime-types": {
"version": "2.1.29",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
"integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
"dev": true,
"requires": {
"mime-db": "1.46.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
"requires": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"fragment-cache": "^0.2.1",
"is-windows": "^1.0.2",
"kind-of": "^6.0.2",
"object.pick": "^1.3.0",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
}
},
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
"integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
"dev": true
},
"node-modules-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
"integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
"dev": true
},
"node-notifier": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz",
"integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==",
"dev": true,
"optional": true,
"requires": {
"growly": "^1.3.0",
"is-wsl": "^2.2.0",
"semver": "^7.3.2",
"shellwords": "^0.1.1",
"uuid": "^8.3.0",
"which": "^2.0.2"
},
"dependencies": {
"semver": {
"version": "7.3.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"dev": true,
"optional": true,
"requires": {
"lru-cache": "^6.0.0"
}
}
}
},
"node-releases": {
"version": "1.1.71",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
"integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
"dev": true
},
"normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
},
"dependencies": {
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
}
}
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"requires": {
"path-key": "^3.0.0"
}
},
"nwsapi": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
"integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
"dev": true
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"dev": true
},
"object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
"dev": true,
"requires": {
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
"kind-of": "^3.0.3"
},
"dependencies": {
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
},
"dependencies": {
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true
}
}
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
"object-visit": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
"dev": true,
"requires": {
"isobject": "^3.0.0"
}
},
"object.assign": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
"integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3",
"has-symbols": "^1.0.1",
"object-keys": "^1.1.1"
}
},
"object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
"dev": true,
"requires": {
"isobject": "^3.0.1"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
}
},
"optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
"dev": true,
"requires": {
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0",
"word-wrap": "^1.2.3"
}
},
"p-each-series": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
"integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
"dev": true
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": {
"p-limit": "^2.2.0"
}
},
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"requires": {
"callsites": "^3.0.0"
}
},
"parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
"json-parse-even-better-errors": "^2.3.0",
"lines-and-columns": "^1.1.6"
}
},
"parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
"dev": true
},
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
"dev": true
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
"picomatch": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
"dev": true
},
"pirates": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
"integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
"dev": true,
"requires": {
"node-modules-regexp": "^1.0.0"
}
},
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"requires": {
"find-up": "^4.0.0"
}
},
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
"dev": true
},
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true
},
"prettier": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
"integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
"dev": true
},
"pretty-format": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
"integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
"dev": true,
"requires": {
"@jest/types": "^26.6.2",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^17.0.1"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
}
}
},
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
"prompts": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
"integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
"dev": true,
"requires": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
}
},
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
"dev": true
},
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
"pure-rand": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-4.1.2.tgz",
"integrity": "sha512-uLzZpQWfroIqyFWmX/pl0OL2JHJdoU3dbh0dvZ25fChHFJJi56J5oQZhW6QgbT2Llwh1upki84LnTwlZvsungA==",
"dev": true
},
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
},
"react-is": {
"version": "17.0.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
"integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==",
"dev": true
},
"read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
"integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
"dev": true,
"requires": {
"@types/normalize-package-data": "^2.4.0",
"normalize-package-data": "^2.5.0",
"parse-json": "^5.0.0",
"type-fest": "^0.6.0"
},
"dependencies": {
"type-fest": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
"integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
"dev": true
}
}
},
"read-pkg-up": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
"integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
"dev": true,
"requires": {
"find-up": "^4.1.0",
"read-pkg": "^5.2.0",
"type-fest": "^0.8.1"
},
"dependencies": {
"type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true
}
}
},
"regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
"dev": true
},
"regenerate-unicode-properties": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
"integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
"dev": true,
"requires": {
"regenerate": "^1.4.0"
}
},
"regenerator-runtime": {
"version": "0.13.7",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
"dev": true
},
"regenerator-transform": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
"integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
"dev": true,
"requires": {
"@babel/runtime": "^7.8.4"
}
},
"regex-not": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"requires": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
}
},
"regexpp": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
"integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true
},
"regexpu-core": {
"version": "4.7.1",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
"integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
"dev": true,
"requires": {
"regenerate": "^1.4.0",
"regenerate-unicode-properties": "^8.2.0",
"regjsgen": "^0.5.1",
"regjsparser": "^0.6.4",
"unicode-match-property-ecmascript": "^1.0.4",
"unicode-match-property-value-ecmascript": "^1.2.0"
}
},
"regjsgen": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
"integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
"dev": true
},
"regjsparser": {
"version": "0.6.7",
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz",
"integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==",
"dev": true,
"requires": {
"jsesc": "~0.5.0"
},
"dependencies": {
"jsesc": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
"dev": true
}
}
},
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true
},
"repeat-element": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
"integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
"dev": true
},
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true
},
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"dev": true,
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.3",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"dependencies": {
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dev": true,
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"dev": true
}
}
},
"request-promise-core": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
"integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
"dev": true,
"requires": {
"lodash": "^4.17.19"
}
},
"request-promise-native": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
"integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
"dev": true,
"requires": {
"request-promise-core": "1.1.4",
"stealthy-require": "^1.1.1",
"tough-cookie": "^2.3.3"
},
"dependencies": {
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dev": true,
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
}
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dev": true,
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
},
"resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"requires": {
"resolve-from": "^5.0.0"
}
},
"resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
},
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
"dev": true
},
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
"rollup": {
"version": "2.41.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.41.2.tgz",
"integrity": "sha512-6u8fJJXJx6fmvKrAC9DHYZgONvSkz8S9b/VFBjoQ6dkKdHyPpPbpqiNl2Bao9XBzDHpq672X6sGZ9G1ZBqAHMg==",
"dev": true,
"requires": {
"fsevents": "~2.3.1"
}
},
"rsvp": {
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
"integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
"dev": true
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"dev": true,
"requires": {
"ret": "~0.1.10"
}
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
"sane": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
"integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
"dev": true,
"requires": {
"@cnakazawa/watch": "^1.0.3",
"anymatch": "^2.0.0",
"capture-exit": "^2.0.0",
"exec-sh": "^0.3.2",
"execa": "^1.0.0",
"fb-watchman": "^2.0.0",
"micromatch": "^3.1.4",
"minimist": "^1.1.1",
"walker": "~1.0.5"
},
"dependencies": {
"anymatch": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
"requires": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
}
},
"braces": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
"extend-shallow": "^2.0.1",
"fill-range": "^4.0.0",
"isobject": "^3.0.1",
"repeat-element": "^1.1.2",
"snapdragon": "^0.8.1",
"snapdragon-node": "^2.0.1",
"split-string": "^3.0.2",
"to-regex": "^3.0.1"
},
"dependencies": {
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
}
}
},
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"execa": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
"cross-spawn": "^6.0.0",
"get-stream": "^4.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
}
},
"fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
"repeat-string": "^1.6.1",
"to-regex-range": "^2.1.0"
},
"dependencies": {
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
}
}
},
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"requires": {
"pump": "^3.0.0"
}
},
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
},
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
"braces": "^2.3.1",
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"extglob": "^2.0.4",
"fragment-cache": "^0.2.1",
"kind-of": "^6.0.2",
"nanomatch": "^1.2.9",
"object.pick": "^1.3.0",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.2"
}
},
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
}
},
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"dev": true,
"requires": {
"path-key": "^2.0.0"
}
},
"path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
"shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
"to-regex-range": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
"dev": true,
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
}
},
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
}
}
},
"saxes": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
"integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
"dev": true,
"requires": {
"xmlchars": "^2.2.0"
}
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
},
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
},
"set-value": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
"is-plain-object": "^2.0.3",
"split-string": "^3.0.1"
},
"dependencies": {
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
},
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
}
}
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"shellwords": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
"integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
"dev": true
},
"sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
"dev": true
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
"slice-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
"is-fullwidth-code-point": "^3.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
}
}
},
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"dev": true,
"requires": {
"base": "^0.11.1",
"debug": "^2.2.0",
"define-property": "^0.2.5",
"extend-shallow": "^2.0.1",
"map-cache": "^0.2.2",
"source-map": "^0.5.6",
"source-map-resolve": "^0.5.0",
"use": "^3.1.0"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
},
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
}
},
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
},
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
"snapdragon-node": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true,
"requires": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
"snapdragon-util": "^3.0.1"
},
"dependencies": {
"define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
}
}
},
"snapdragon-util": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"dev": true,
"requires": {
"kind-of": "^3.2.0"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
"dev": true,
"requires": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
"urix": "^0.1.0"
}
},
"source-map-support": {
"version": "0.5.19",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"source-map-url": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
"integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"dev": true
},
"spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
"integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
"dev": true
},
"spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
"integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
"dev": true
},
"split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"dev": true,
"requires": {
"extend-shallow": "^3.0.0"
}
},
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
}
},
"stack-utils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
"integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
"dev": true,
"requires": {
"escape-string-regexp": "^2.0.0"
},
"dependencies": {
"escape-string-regexp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true
}
}
},
"static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
"dev": true,
"requires": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
},
"dependencies": {
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "^0.1.6",
"is-data-descriptor": "^0.1.4",
"kind-of": "^5.0.0"
}
},
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true
}
}
},
"stealthy-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
"dev": true
},
"string-length": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz",
"integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==",
"dev": true,
"requires": {
"char-regex": "^1.0.2",
"strip-ansi": "^6.0.0"
}
},
"string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
}
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"dev": true,
"requires": {
"ansi-regex": "^5.0.0"
}
},
"strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true
},
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
"strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true
},
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"supports-hyperlinks": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz",
"integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==",
"dev": true,
"requires": {
"has-flag": "^4.0.0",
"supports-color": "^7.0.0"
},
"dependencies": {
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
"table": {
"version": "6.0.7",
"resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz",
"integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==",
"dev": true,
"requires": {
"ajv": "^7.0.2",
"lodash": "^4.17.20",
"slice-ansi": "^4.0.0",
"string-width": "^4.2.0"
},
"dependencies": {
"ajv": {
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz",
"integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
}
},
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
}
}
},
"terminal-link": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
"integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
"dev": true,
"requires": {
"ansi-escapes": "^4.2.1",
"supports-hyperlinks": "^2.0.0"
}
},
"test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
"requires": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
}
},
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
"throat": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
"integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
"dev": true
},
"tmpl": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
"integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
"dev": true
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"dev": true
},
"to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"to-regex": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
"dev": true,
"requires": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"regex-not": "^1.0.2",
"safe-regex": "^1.1.0"
}
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
},
"tough-cookie": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
"integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
"dev": true,
"requires": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
"universalify": "^0.1.2"
}
},
"tr46": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
"integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
"dev": true,
"requires": {
"punycode": "^2.1.1"
}
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true
},
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"requires": {
"prelude-ls": "^1.2.1"
}
},
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
"type-fest": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
"integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
"dev": true
},
"typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"dev": true,
"requires": {
"is-typedarray": "^1.0.0"
}
},
"typescript": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz",
"integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==",
"dev": true
},
"unicode-canonical-property-names-ecmascript": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
"integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
"dev": true
},
"unicode-match-property-ecmascript": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
"integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
"dev": true,
"requires": {
"unicode-canonical-property-names-ecmascript": "^1.0.4",
"unicode-property-aliases-ecmascript": "^1.0.4"
}
},
"unicode-match-property-value-ecmascript": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
"integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
"dev": true
},
"unicode-property-aliases-ecmascript": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
"is-extendable": "^0.1.1",
"set-value": "^2.0.1"
},
"dependencies": {
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
}
}
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true
},
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
"dev": true,
"requires": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
},
"dependencies": {
"has-value": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
"dev": true,
"requires": {
"get-value": "^2.0.3",
"has-values": "^0.1.4",
"isobject": "^2.0.0"
},
"dependencies": {
"isobject": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
"dev": true,
"requires": {
"isarray": "1.0.0"
}
}
}
},
"has-values": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
"dev": true
}
}
},
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
}
},
"urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
"dev": true
},
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"dev": true
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true,
"optional": true
},
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
"v8-to-istanbul": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz",
"integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.1",
"convert-source-map": "^1.6.0",
"source-map": "^0.7.3"
},
"dependencies": {
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"dev": true
}
}
},
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
"requires": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
"dev": true,
"requires": {
"browser-process-hrtime": "^1.0.0"
}
},
"w3c-xmlserializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
"integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
"dev": true,
"requires": {
"xml-name-validator": "^3.0.0"
}
},
"walker": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
"integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
"dev": true,
"requires": {
"makeerror": "1.0.x"
}
},
"webidl-conversions": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
"dev": true
},
"whatwg-encoding": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
"integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
"dev": true,
"requires": {
"iconv-lite": "0.4.24"
}
},
"whatwg-mimetype": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
"integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
"dev": true
},
"whatwg-url": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz",
"integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==",
"dev": true,
"requires": {
"lodash.sortby": "^4.7.0",
"tr46": "^2.0.2",
"webidl-conversions": "^6.1.0"
}
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
"wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
}
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
"write-file-atomic": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
"integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
"signal-exit": "^3.0.2",
"typedarray-to-buffer": "^3.1.5"
}
},
"ws": {
"version": "7.4.4",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
"integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
"dev": true,
"requires": {}
},
"xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
"integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
"dev": true
},
"xmlchars": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true
},
"y18n": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
"integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
"dev": true
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"yargs": {
"version": "15.4.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dev": true,
"requires": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.2"
}
},
"yargs-parser": {
"version": "18.1.3",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
}
}
}
yaml-1.10.2/package.json000066400000000000000000000060111402322402300150110ustar00rootroot00000000000000{
"name": "yaml",
"version": "1.10.2",
"license": "ISC",
"author": "Eemeli Aro ",
"repository": "github:eemeli/yaml",
"description": "JavaScript parser and stringifier for YAML",
"keywords": [
"YAML",
"parser",
"stringifier"
],
"homepage": "https://eemeli.org/yaml/v1/",
"files": [
"browser/",
"dist/",
"types/",
"*.d.ts",
"*.js",
"*.mjs",
"!*config.js"
],
"type": "commonjs",
"main": "./index.js",
"browser": {
"./index.js": "./browser/index.js",
"./map.js": "./browser/map.js",
"./pair.js": "./browser/pair.js",
"./parse-cst.js": "./browser/parse-cst.js",
"./scalar.js": "./browser/scalar.js",
"./schema.js": "./browser/schema.js",
"./seq.js": "./browser/seq.js",
"./types.js": "./browser/types.js",
"./types.mjs": "./browser/types.js",
"./types/binary.js": "./browser/types/binary.js",
"./types/omap.js": "./browser/types/omap.js",
"./types/pairs.js": "./browser/types/pairs.js",
"./types/set.js": "./browser/types/set.js",
"./types/timestamp.js": "./browser/types/timestamp.js",
"./util.js": "./browser/util.js",
"./util.mjs": "./browser/util.js"
},
"exports": {
".": "./index.js",
"./parse-cst": "./parse-cst.js",
"./types": [
{
"import": "./types.mjs"
},
"./types.js"
],
"./util": [
{
"import": "./util.mjs"
},
"./util.js"
],
"./": "./"
},
"scripts": {
"build": "npm run build:node && npm run build:browser",
"build:browser": "rollup -c rollup.browser-config.js",
"build:node": "rollup -c rollup.node-config.js",
"clean": "git clean -fdxe node_modules",
"lint": "eslint src/",
"prettier": "prettier --write .",
"start": "cross-env TRACE_LEVEL=log npm run build:node && node -i -e 'YAML=require(\".\")'",
"test": "jest",
"test:browsers": "cd playground && npm test",
"test:dist": "npm run build:node && jest",
"test:types": "tsc --lib ES2017 --noEmit tests/typings.ts",
"docs:install": "cd docs-slate && bundle install",
"docs:deploy": "cd docs-slate && ./deploy.sh",
"docs": "cd docs-slate && bundle exec middleman server",
"preversion": "npm test && npm run build",
"prepublishOnly": "npm run clean && npm test && npm run build"
},
"browserslist": "> 0.5%, not dead",
"prettier": {
"arrowParens": "avoid",
"semi": false,
"singleQuote": true,
"trailingComma": "none"
},
"devDependencies": {
"@babel/core": "^7.12.10",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/preset-env": "^7.12.11",
"@rollup/plugin-babel": "^5.2.3",
"babel-eslint": "^10.1.0",
"babel-jest": "^26.6.3",
"babel-plugin-trace": "^1.1.0",
"common-tags": "^1.8.0",
"cross-env": "^7.0.3",
"eslint": "^7.19.0",
"eslint-config-prettier": "^7.2.0",
"fast-check": "^2.12.0",
"jest": "^26.6.3",
"prettier": "^2.2.1",
"rollup": "^2.38.2",
"typescript": "^4.1.3"
},
"engines": {
"node": ">= 6"
}
}
yaml-1.10.2/pair.js000066400000000000000000000001571402322402300140210ustar00rootroot00000000000000module.exports = require('./dist/types').Pair
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/parse-cst.d.ts000066400000000000000000000106401402322402300152210ustar00rootroot00000000000000import { Type, YAMLSyntaxError } from './util'
export default function parseCST(str: string): ParsedCST
export interface ParsedCST extends Array {
setOrigRanges(): boolean
}
export namespace CST {
interface Range {
start: number
end: number
origStart?: number
origEnd?: number
isEmpty(): boolean
}
interface ParseContext {
/** Node starts at beginning of line */
atLineStart: boolean
/** true if currently in a collection context */
inCollection: boolean
/** true if currently in a flow context */
inFlow: boolean
/** Current level of indentation */
indent: number
/** Start of the current line */
lineStart: number
/** The parent of the node */
parent: Node
/** Source of the YAML document */
src: string
}
interface Node {
context: ParseContext | null
/** if not null, indicates a parser failure */
error: YAMLSyntaxError | null
/** span of context.src parsed into this node */
range: Range | null
valueRange: Range | null
/** anchors, tags and comments */
props: Range[]
/** specific node type */
type: Type
/** if non-null, overrides source value */
value: string | null
readonly anchor: string | null
readonly comment: string | null
readonly hasComment: boolean
readonly hasProps: boolean
readonly jsonLike: boolean
readonly rangeAsLinePos: null | {
start: { line: number; col: number }
end?: { line: number; col: number }
}
readonly rawValue: string | null
readonly tag:
| null
| { verbatim: string }
| { handle: string; suffix: string }
readonly valueRangeContainsNewline: boolean
}
interface Alias extends Node {
type: Type.ALIAS
/** contain the anchor without the * prefix */
readonly rawValue: string
}
type Scalar = BlockValue | PlainValue | QuoteValue
interface BlockValue extends Node {
type: Type.BLOCK_FOLDED | Type.BLOCK_LITERAL
chomping: 'CLIP' | 'KEEP' | 'STRIP'
blockIndent: number | null
header: Range
readonly strValue: string | null
}
interface BlockFolded extends BlockValue {
type: Type.BLOCK_FOLDED
}
interface BlockLiteral extends BlockValue {
type: Type.BLOCK_LITERAL
}
interface PlainValue extends Node {
type: Type.PLAIN
readonly strValue: string | null
}
interface QuoteValue extends Node {
type: Type.QUOTE_DOUBLE | Type.QUOTE_SINGLE
readonly strValue:
| null
| string
| { str: string; errors: YAMLSyntaxError[] }
}
interface QuoteDouble extends QuoteValue {
type: Type.QUOTE_DOUBLE
}
interface QuoteSingle extends QuoteValue {
type: Type.QUOTE_SINGLE
}
interface Comment extends Node {
type: Type.COMMENT
readonly anchor: null
readonly comment: string
readonly rawValue: null
readonly tag: null
}
interface BlankLine extends Node {
type: Type.BLANK_LINE
}
interface MapItem extends Node {
type: Type.MAP_KEY | Type.MAP_VALUE
node: ContentNode | null
}
interface MapKey extends MapItem {
type: Type.MAP_KEY
}
interface MapValue extends MapItem {
type: Type.MAP_VALUE
}
interface Map extends Node {
type: Type.MAP
/** implicit keys are not wrapped */
items: Array
}
interface SeqItem extends Node {
type: Type.SEQ_ITEM
node: ContentNode | null
}
interface Seq extends Node {
type: Type.SEQ
items: Array
}
interface FlowChar {
char: '{' | '}' | '[' | ']' | ',' | '?' | ':'
offset: number
origOffset?: number
}
interface FlowCollection extends Node {
type: Type.FLOW_MAP | Type.FLOW_SEQ
items: Array<
FlowChar | BlankLine | Comment | Alias | Scalar | FlowCollection
>
}
interface FlowMap extends FlowCollection {
type: Type.FLOW_MAP
}
interface FlowSeq extends FlowCollection {
type: Type.FLOW_SEQ
}
type ContentNode = Alias | Scalar | Map | Seq | FlowCollection
interface Directive extends Node {
type: Type.DIRECTIVE
name: string
readonly anchor: null
readonly parameters: string[]
readonly tag: null
}
interface Document extends Node {
type: Type.DOCUMENT
directives: Array
contents: Array
readonly anchor: null
readonly comment: null
readonly tag: null
}
}
yaml-1.10.2/parse-cst.js000066400000000000000000000000631402322402300147630ustar00rootroot00000000000000module.exports = require('./dist/parse-cst').parse
yaml-1.10.2/playground/000077500000000000000000000000001402322402300147115ustar00rootroot00000000000000yaml-1.10.2/rollup.browser-config.js000066400000000000000000000006301402322402300173240ustar00rootroot00000000000000import babel from '@rollup/plugin-babel'
export default {
input: {
index: 'src/index.js',
'legacy-exports': 'src/legacy-exports.js',
'parse-cst': 'src/cst/parse.js',
types: 'src/types.js',
util: 'src/util.js'
},
output: { dir: 'browser/dist', format: 'esm' },
plugins: [
babel({
babelHelpers: 'bundled',
presets: [['@babel/env', { modules: false }]]
})
]
}
yaml-1.10.2/rollup.node-config.js000066400000000000000000000007441402322402300165740ustar00rootroot00000000000000import babel from '@rollup/plugin-babel'
export default {
input: {
index: 'src/index.js',
'legacy-exports': 'src/legacy-exports.js',
'parse-cst': 'src/cst/parse.js',
'test-events': 'src/test-events.js',
types: 'src/types.js',
util: 'src/util.js'
},
output: { dir: 'dist', format: 'cjs', esModule: false },
plugins: [
babel({
babelHelpers: 'bundled',
presets: [['@babel/env', { modules: false, targets: { node: '6.5' } }]]
})
]
}
yaml-1.10.2/scalar.js000066400000000000000000000001611402322402300143260ustar00rootroot00000000000000module.exports = require('./dist/types').Scalar
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/schema.js000066400000000000000000000004671402322402300143320ustar00rootroot00000000000000const types = require('./dist/types')
const util = require('./dist/util')
module.exports = types.Schema
module.exports.nullOptions = types.nullOptions
module.exports.strOptions = types.strOptions
module.exports.stringify = util.stringifyString
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/seq.js000066400000000000000000000001621402322402300136520ustar00rootroot00000000000000module.exports = require('./dist/types').YAMLSeq
require('./dist/legacy-exports').warnFileDeprecation(__filename)
yaml-1.10.2/src/000077500000000000000000000000001402322402300133145ustar00rootroot00000000000000yaml-1.10.2/src/ast/000077500000000000000000000000001402322402300141035ustar00rootroot00000000000000yaml-1.10.2/src/ast/Alias.js000066400000000000000000000050141402322402300154720ustar00rootroot00000000000000import { Type } from '../constants.js'
import { YAMLReferenceError } from '../errors.js'
import { Collection } from './Collection.js'
import { Node } from './Node.js'
import { Pair } from './Pair.js'
import { toJSON } from './toJSON.js'
const getAliasCount = (node, anchors) => {
if (node instanceof Alias) {
const anchor = anchors.get(node.source)
return anchor.count * anchor.aliasCount
} else if (node instanceof Collection) {
let count = 0
for (const item of node.items) {
const c = getAliasCount(item, anchors)
if (c > count) count = c
}
return count
} else if (node instanceof Pair) {
const kc = getAliasCount(node.key, anchors)
const vc = getAliasCount(node.value, anchors)
return Math.max(kc, vc)
}
return 1
}
export class Alias extends Node {
static default = true
static stringify(
{ range, source },
{ anchors, doc, implicitKey, inStringifyKey }
) {
let anchor = Object.keys(anchors).find(a => anchors[a] === source)
if (!anchor && inStringifyKey)
anchor = doc.anchors.getName(source) || doc.anchors.newName()
if (anchor) return `*${anchor}${implicitKey ? ' ' : ''}`
const msg = doc.anchors.getName(source)
? 'Alias node must be after source node'
: 'Source node not found for alias node'
throw new Error(`${msg} [${range}]`)
}
constructor(source) {
super()
this.source = source
this.type = Type.ALIAS
}
set tag(t) {
throw new Error('Alias nodes cannot have tags')
}
toJSON(arg, ctx) {
if (!ctx) return toJSON(this.source, arg, ctx)
const { anchors, maxAliasCount } = ctx
const anchor = anchors.get(this.source)
/* istanbul ignore if */
if (!anchor || anchor.res === undefined) {
const msg = 'This should not happen: Alias anchor was not resolved?'
if (this.cstNode) throw new YAMLReferenceError(this.cstNode, msg)
else throw new ReferenceError(msg)
}
if (maxAliasCount >= 0) {
anchor.count += 1
if (anchor.aliasCount === 0)
anchor.aliasCount = getAliasCount(this.source, anchors)
if (anchor.count * anchor.aliasCount > maxAliasCount) {
const msg =
'Excessive alias count indicates a resource exhaustion attack'
if (this.cstNode) throw new YAMLReferenceError(this.cstNode, msg)
else throw new ReferenceError(msg)
}
}
return anchor.res
}
// Only called when stringifying an alias mapping key while constructing
// Object output.
toString(ctx) {
return Alias.stringify(this, ctx)
}
}
yaml-1.10.2/src/ast/Collection.js000066400000000000000000000132471402322402300165430ustar00rootroot00000000000000import { addComment } from '../stringify/addComment.js'
import { Type } from '../constants.js'
import { Node } from './Node.js'
import { Scalar } from './Scalar.js'
function collectionFromPath(schema, path, value) {
let v = value
for (let i = path.length - 1; i >= 0; --i) {
const k = path[i]
if (Number.isInteger(k) && k >= 0) {
const a = []
a[k] = v
v = a
} else {
const o = {}
Object.defineProperty(o, k, {
value: v,
writable: true,
enumerable: true,
configurable: true
})
v = o
}
}
return schema.createNode(v, false)
}
// null, undefined, or an empty non-string iterable (e.g. [])
export const isEmptyPath = path =>
path == null ||
(typeof path === 'object' && path[Symbol.iterator]().next().done)
export class Collection extends Node {
static maxFlowStringSingleLineLength = 60
items = []
constructor(schema) {
super()
this.schema = schema
}
addIn(path, value) {
if (isEmptyPath(path)) this.add(value)
else {
const [key, ...rest] = path
const node = this.get(key, true)
if (node instanceof Collection) node.addIn(rest, value)
else if (node === undefined && this.schema)
this.set(key, collectionFromPath(this.schema, rest, value))
else
throw new Error(
`Expected YAML collection at ${key}. Remaining path: ${rest}`
)
}
}
deleteIn([key, ...rest]) {
if (rest.length === 0) return this.delete(key)
const node = this.get(key, true)
if (node instanceof Collection) return node.deleteIn(rest)
else
throw new Error(
`Expected YAML collection at ${key}. Remaining path: ${rest}`
)
}
getIn([key, ...rest], keepScalar) {
const node = this.get(key, true)
if (rest.length === 0)
return !keepScalar && node instanceof Scalar ? node.value : node
else
return node instanceof Collection
? node.getIn(rest, keepScalar)
: undefined
}
hasAllNullValues() {
return this.items.every(node => {
if (!node || node.type !== 'PAIR') return false
const n = node.value
return (
n == null ||
(n instanceof Scalar &&
n.value == null &&
!n.commentBefore &&
!n.comment &&
!n.tag)
)
})
}
hasIn([key, ...rest]) {
if (rest.length === 0) return this.has(key)
const node = this.get(key, true)
return node instanceof Collection ? node.hasIn(rest) : false
}
setIn([key, ...rest], value) {
if (rest.length === 0) {
this.set(key, value)
} else {
const node = this.get(key, true)
if (node instanceof Collection) node.setIn(rest, value)
else if (node === undefined && this.schema)
this.set(key, collectionFromPath(this.schema, rest, value))
else
throw new Error(
`Expected YAML collection at ${key}. Remaining path: ${rest}`
)
}
}
// overridden in implementations
/* istanbul ignore next */
toJSON() {
return null
}
toString(
ctx,
{ blockItem, flowChars, isMap, itemIndent },
onComment,
onChompKeep
) {
const { indent, indentStep, stringify } = ctx
const inFlow =
this.type === Type.FLOW_MAP || this.type === Type.FLOW_SEQ || ctx.inFlow
if (inFlow) itemIndent += indentStep
const allNullValues = isMap && this.hasAllNullValues()
ctx = Object.assign({}, ctx, {
allNullValues,
indent: itemIndent,
inFlow,
type: null
})
let chompKeep = false
let hasItemWithNewLine = false
const nodes = this.items.reduce((nodes, item, i) => {
let comment
if (item) {
if (!chompKeep && item.spaceBefore)
nodes.push({ type: 'comment', str: '' })
if (item.commentBefore)
item.commentBefore.match(/^.*$/gm).forEach(line => {
nodes.push({ type: 'comment', str: `#${line}` })
})
if (item.comment) comment = item.comment
if (
inFlow &&
((!chompKeep && item.spaceBefore) ||
item.commentBefore ||
item.comment ||
(item.key && (item.key.commentBefore || item.key.comment)) ||
(item.value && (item.value.commentBefore || item.value.comment)))
)
hasItemWithNewLine = true
}
chompKeep = false
let str = stringify(
item,
ctx,
() => (comment = null),
() => (chompKeep = true)
)
if (inFlow && !hasItemWithNewLine && str.includes('\n'))
hasItemWithNewLine = true
if (inFlow && i < this.items.length - 1) str += ','
str = addComment(str, itemIndent, comment)
if (chompKeep && (comment || inFlow)) chompKeep = false
nodes.push({ type: 'item', str })
return nodes
}, [])
let str
if (nodes.length === 0) {
str = flowChars.start + flowChars.end
} else if (inFlow) {
const { start, end } = flowChars
const strings = nodes.map(n => n.str)
if (
hasItemWithNewLine ||
strings.reduce((sum, str) => sum + str.length + 2, 2) >
Collection.maxFlowStringSingleLineLength
) {
str = start
for (const s of strings) {
str += s ? `\n${indentStep}${indent}${s}` : '\n'
}
str += `\n${indent}${end}`
} else {
str = `${start} ${strings.join(' ')} ${end}`
}
} else {
const strings = nodes.map(blockItem)
str = strings.shift()
for (const s of strings) str += s ? `\n${indent}${s}` : '\n'
}
if (this.comment) {
str += '\n' + this.comment.replace(/^/gm, `${indent}#`)
if (onComment) onComment()
} else if (chompKeep && onChompKeep) onChompKeep()
return str
}
}
yaml-1.10.2/src/ast/Merge.js000066400000000000000000000040271402322402300155030ustar00rootroot00000000000000import { Pair } from './Pair.js'
import { Scalar } from './Scalar.js'
import { YAMLMap } from './YAMLMap.js'
import { YAMLSeq } from './YAMLSeq.js'
export const MERGE_KEY = '<<'
export class Merge extends Pair {
constructor(pair) {
if (pair instanceof Pair) {
let seq = pair.value
if (!(seq instanceof YAMLSeq)) {
seq = new YAMLSeq()
seq.items.push(pair.value)
seq.range = pair.value.range
}
super(pair.key, seq)
this.range = pair.range
} else {
super(new Scalar(MERGE_KEY), new YAMLSeq())
}
this.type = Pair.Type.MERGE_PAIR
}
// If the value associated with a merge key is a single mapping node, each of
// its key/value pairs is inserted into the current mapping, unless the key
// already exists in it. If the value associated with the merge key is a
// sequence, then this sequence is expected to contain mapping nodes and each
// of these nodes is merged in turn according to its order in the sequence.
// Keys in mapping nodes earlier in the sequence override keys specified in
// later mapping nodes. -- http://yaml.org/type/merge.html
addToJSMap(ctx, map) {
for (const { source } of this.value.items) {
if (!(source instanceof YAMLMap))
throw new Error('Merge sources must be maps')
const srcMap = source.toJSON(null, ctx, Map)
for (const [key, value] of srcMap) {
if (map instanceof Map) {
if (!map.has(key)) map.set(key, value)
} else if (map instanceof Set) {
map.add(key)
} else if (!Object.prototype.hasOwnProperty.call(map, key)) {
Object.defineProperty(map, key, {
value,
writable: true,
enumerable: true,
configurable: true
})
}
}
}
return map
}
toString(ctx, onComment) {
const seq = this.value
if (seq.items.length > 1) return super.toString(ctx, onComment)
this.value = seq.items[0]
const str = super.toString(ctx, onComment)
this.value = seq
return str
}
}
yaml-1.10.2/src/ast/Node.js000066400000000000000000000000251402322402300153230ustar00rootroot00000000000000export class Node {}
yaml-1.10.2/src/ast/Pair.js000066400000000000000000000126361402322402300153440ustar00rootroot00000000000000import { Type } from '../constants.js'
import { addComment } from '../stringify/addComment.js'
import { Collection } from './Collection.js'
import { Node } from './Node.js'
import { Scalar } from './Scalar.js'
import { YAMLSeq } from './YAMLSeq.js'
import { toJSON } from './toJSON.js'
const stringifyKey = (key, jsKey, ctx) => {
if (jsKey === null) return ''
if (typeof jsKey !== 'object') return String(jsKey)
if (key instanceof Node && ctx && ctx.doc)
return key.toString({
anchors: Object.create(null),
doc: ctx.doc,
indent: '',
indentStep: ctx.indentStep,
inFlow: true,
inStringifyKey: true,
stringify: ctx.stringify
})
return JSON.stringify(jsKey)
}
export class Pair extends Node {
static Type = {
PAIR: 'PAIR',
MERGE_PAIR: 'MERGE_PAIR'
}
constructor(key, value = null) {
super()
this.key = key
this.value = value
this.type = Pair.Type.PAIR
}
get commentBefore() {
return this.key instanceof Node ? this.key.commentBefore : undefined
}
set commentBefore(cb) {
if (this.key == null) this.key = new Scalar(null)
if (this.key instanceof Node) this.key.commentBefore = cb
else {
const msg =
'Pair.commentBefore is an alias for Pair.key.commentBefore. To set it, the key must be a Node.'
throw new Error(msg)
}
}
addToJSMap(ctx, map) {
const key = toJSON(this.key, '', ctx)
if (map instanceof Map) {
const value = toJSON(this.value, key, ctx)
map.set(key, value)
} else if (map instanceof Set) {
map.add(key)
} else {
const stringKey = stringifyKey(this.key, key, ctx)
const value = toJSON(this.value, stringKey, ctx)
if (stringKey in map)
Object.defineProperty(map, stringKey, {
value,
writable: true,
enumerable: true,
configurable: true
})
else map[stringKey] = value
}
return map
}
toJSON(_, ctx) {
const pair = ctx && ctx.mapAsMap ? new Map() : {}
return this.addToJSMap(ctx, pair)
}
toString(ctx, onComment, onChompKeep) {
if (!ctx || !ctx.doc) return JSON.stringify(this)
const { indent: indentSize, indentSeq, simpleKeys } = ctx.doc.options
let { key, value } = this
let keyComment = key instanceof Node && key.comment
if (simpleKeys) {
if (keyComment) {
throw new Error('With simple keys, key nodes cannot have comments')
}
if (key instanceof Collection) {
const msg = 'With simple keys, collection cannot be used as a key value'
throw new Error(msg)
}
}
let explicitKey =
!simpleKeys &&
(!key ||
keyComment ||
(key instanceof Node
? key instanceof Collection ||
key.type === Type.BLOCK_FOLDED ||
key.type === Type.BLOCK_LITERAL
: typeof key === 'object'))
const { doc, indent, indentStep, stringify } = ctx
ctx = Object.assign({}, ctx, {
implicitKey: !explicitKey,
indent: indent + indentStep
})
let chompKeep = false
let str = stringify(
key,
ctx,
() => (keyComment = null),
() => (chompKeep = true)
)
str = addComment(str, ctx.indent, keyComment)
if (!explicitKey && str.length > 1024) {
if (simpleKeys)
throw new Error(
'With simple keys, single line scalar must not span more than 1024 characters'
)
explicitKey = true
}
if (ctx.allNullValues && !simpleKeys) {
if (this.comment) {
str = addComment(str, ctx.indent, this.comment)
if (onComment) onComment()
} else if (chompKeep && !keyComment && onChompKeep) onChompKeep()
return ctx.inFlow && !explicitKey ? str : `? ${str}`
}
str = explicitKey ? `? ${str}\n${indent}:` : `${str}:`
if (this.comment) {
// expected (but not strictly required) to be a single-line comment
str = addComment(str, ctx.indent, this.comment)
if (onComment) onComment()
}
let vcb = ''
let valueComment = null
if (value instanceof Node) {
if (value.spaceBefore) vcb = '\n'
if (value.commentBefore) {
const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`)
vcb += `\n${cs}`
}
valueComment = value.comment
} else if (value && typeof value === 'object') {
value = doc.schema.createNode(value, true)
}
ctx.implicitKey = false
if (!explicitKey && !this.comment && value instanceof Scalar)
ctx.indentAtStart = str.length + 1
chompKeep = false
if (
!indentSeq &&
indentSize >= 2 &&
!ctx.inFlow &&
!explicitKey &&
value instanceof YAMLSeq &&
value.type !== Type.FLOW_SEQ &&
!value.tag &&
!doc.anchors.getName(value)
) {
// If indentSeq === false, consider '- ' as part of indentation where possible
ctx.indent = ctx.indent.substr(2)
}
const valueStr = stringify(
value,
ctx,
() => (valueComment = null),
() => (chompKeep = true)
)
let ws = ' '
if (vcb || this.comment) {
ws = `${vcb}\n${ctx.indent}`
} else if (!explicitKey && value instanceof Collection) {
const flow = valueStr[0] === '[' || valueStr[0] === '{'
if (!flow || valueStr.includes('\n')) ws = `\n${ctx.indent}`
} else if (valueStr[0] === '\n') ws = ''
if (chompKeep && !valueComment && onChompKeep) onChompKeep()
return addComment(str + ws + valueStr, ctx.indent, valueComment)
}
}
yaml-1.10.2/src/ast/Scalar.js000066400000000000000000000004751402322402300156540ustar00rootroot00000000000000import { Node } from './Node.js'
import { toJSON } from './toJSON.js'
export class Scalar extends Node {
constructor(value) {
super()
this.value = value
}
toJSON(arg, ctx) {
return ctx && ctx.keep ? this.value : toJSON(this.value, arg, ctx)
}
toString() {
return String(this.value)
}
}
yaml-1.10.2/src/ast/YAMLMap.js000066400000000000000000000047151402322402300156500ustar00rootroot00000000000000import { Collection } from './Collection.js'
import { Pair } from './Pair.js'
import { Scalar } from './Scalar.js'
export function findPair(items, key) {
const k = key instanceof Scalar ? key.value : key
for (const it of items) {
if (it instanceof Pair) {
if (it.key === key || it.key === k) return it
if (it.key && it.key.value === k) return it
}
}
return undefined
}
export class YAMLMap extends Collection {
add(pair, overwrite) {
if (!pair) pair = new Pair(pair)
else if (!(pair instanceof Pair))
pair = new Pair(pair.key || pair, pair.value)
const prev = findPair(this.items, pair.key)
const sortEntries = this.schema && this.schema.sortMapEntries
if (prev) {
if (overwrite) prev.value = pair.value
else throw new Error(`Key ${pair.key} already set`)
} else if (sortEntries) {
const i = this.items.findIndex(item => sortEntries(pair, item) < 0)
if (i === -1) this.items.push(pair)
else this.items.splice(i, 0, pair)
} else {
this.items.push(pair)
}
}
delete(key) {
const it = findPair(this.items, key)
if (!it) return false
const del = this.items.splice(this.items.indexOf(it), 1)
return del.length > 0
}
get(key, keepScalar) {
const it = findPair(this.items, key)
const node = it && it.value
return !keepScalar && node instanceof Scalar ? node.value : node
}
has(key) {
return !!findPair(this.items, key)
}
set(key, value) {
this.add(new Pair(key, value), true)
}
/**
* @param {*} arg ignored
* @param {*} ctx Conversion context, originally set in Document#toJSON()
* @param {Class} Type If set, forces the returned collection type
* @returns {*} Instance of Type, Map, or Object
*/
toJSON(_, ctx, Type) {
const map = Type ? new Type() : ctx && ctx.mapAsMap ? new Map() : {}
if (ctx && ctx.onCreate) ctx.onCreate(map)
for (const item of this.items) item.addToJSMap(ctx, map)
return map
}
toString(ctx, onComment, onChompKeep) {
if (!ctx) return JSON.stringify(this)
for (const item of this.items) {
if (!(item instanceof Pair))
throw new Error(
`Map items must all be pairs; found ${JSON.stringify(item)} instead`
)
}
return super.toString(
ctx,
{
blockItem: n => n.str,
flowChars: { start: '{', end: '}' },
isMap: true,
itemIndent: ctx.indent || ''
},
onComment,
onChompKeep
)
}
}
yaml-1.10.2/src/ast/YAMLSeq.js000066400000000000000000000031451402322402300156570ustar00rootroot00000000000000import { Collection } from './Collection.js'
import { Scalar } from './Scalar.js'
import { toJSON } from './toJSON.js'
function asItemIndex(key) {
let idx = key instanceof Scalar ? key.value : key
if (idx && typeof idx === 'string') idx = Number(idx)
return Number.isInteger(idx) && idx >= 0 ? idx : null
}
export class YAMLSeq extends Collection {
add(value) {
this.items.push(value)
}
delete(key) {
const idx = asItemIndex(key)
if (typeof idx !== 'number') return false
const del = this.items.splice(idx, 1)
return del.length > 0
}
get(key, keepScalar) {
const idx = asItemIndex(key)
if (typeof idx !== 'number') return undefined
const it = this.items[idx]
return !keepScalar && it instanceof Scalar ? it.value : it
}
has(key) {
const idx = asItemIndex(key)
return typeof idx === 'number' && idx < this.items.length
}
set(key, value) {
const idx = asItemIndex(key)
if (typeof idx !== 'number')
throw new Error(`Expected a valid index, not ${key}.`)
this.items[idx] = value
}
toJSON(_, ctx) {
const seq = []
if (ctx && ctx.onCreate) ctx.onCreate(seq)
let i = 0
for (const item of this.items) seq.push(toJSON(item, String(i++), ctx))
return seq
}
toString(ctx, onComment, onChompKeep) {
if (!ctx) return JSON.stringify(this)
return super.toString(
ctx,
{
blockItem: n => (n.type === 'comment' ? n.str : `- ${n.str}`),
flowChars: { start: '[', end: ']' },
isMap: false,
itemIndent: (ctx.indent || '') + ' '
},
onComment,
onChompKeep
)
}
}
yaml-1.10.2/src/ast/index.js000066400000000000000000000005451402322402300155540ustar00rootroot00000000000000export { Alias } from './Alias.js'
export { Collection, isEmptyPath } from './Collection.js'
export { Merge } from './Merge.js'
export { Node } from './Node.js'
export { Pair } from './Pair.js'
export { Scalar } from './Scalar.js'
export { YAMLMap, findPair } from './YAMLMap.js'
export { YAMLSeq } from './YAMLSeq.js'
export { toJSON } from './toJSON.js'
yaml-1.10.2/src/ast/toJSON.js000066400000000000000000000010521402322402300155530ustar00rootroot00000000000000export function toJSON(value, arg, ctx) {
if (Array.isArray(value))
return value.map((v, i) => toJSON(v, String(i), ctx))
if (value && typeof value.toJSON === 'function') {
const anchor = ctx && ctx.anchors && ctx.anchors.get(value)
if (anchor)
ctx.onCreate = res => {
anchor.res = res
delete ctx.onCreate
}
const res = value.toJSON(arg, ctx)
if (anchor && ctx.onCreate) ctx.onCreate(res)
return res
}
if ((!ctx || !ctx.keep) && typeof value === 'bigint') return Number(value)
return value
}
yaml-1.10.2/src/constants.js000066400000000000000000000013301402322402300156630ustar00rootroot00000000000000export const Char = {
ANCHOR: '&',
COMMENT: '#',
TAG: '!',
DIRECTIVES_END: '-',
DOCUMENT_END: '.'
}
export const Type = {
ALIAS: 'ALIAS',
BLANK_LINE: 'BLANK_LINE',
BLOCK_FOLDED: 'BLOCK_FOLDED',
BLOCK_LITERAL: 'BLOCK_LITERAL',
COMMENT: 'COMMENT',
DIRECTIVE: 'DIRECTIVE',
DOCUMENT: 'DOCUMENT',
FLOW_MAP: 'FLOW_MAP',
FLOW_SEQ: 'FLOW_SEQ',
MAP: 'MAP',
MAP_KEY: 'MAP_KEY',
MAP_VALUE: 'MAP_VALUE',
PLAIN: 'PLAIN',
QUOTE_DOUBLE: 'QUOTE_DOUBLE',
QUOTE_SINGLE: 'QUOTE_SINGLE',
SEQ: 'SEQ',
SEQ_ITEM: 'SEQ_ITEM'
}
export const defaultTagPrefix = 'tag:yaml.org,2002:'
export const defaultTags = {
MAP: 'tag:yaml.org,2002:map',
SEQ: 'tag:yaml.org,2002:seq',
STR: 'tag:yaml.org,2002:str'
}
yaml-1.10.2/src/cst/000077500000000000000000000000001402322402300141055ustar00rootroot00000000000000yaml-1.10.2/src/cst/Alias.js000066400000000000000000000013311402322402300154720ustar00rootroot00000000000000import { Node } from './Node.js'
import { Range } from './Range.js'
export class Alias extends Node {
/**
* Parses an *alias from the source
*
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this scalar
*/
parse(context, start) {
this.context = context
const { src } = context
let offset = Node.endOfIdentifier(src, start + 1)
this.valueRange = new Range(start + 1, offset)
offset = Node.endOfWhiteSpace(src, offset)
offset = this.parseComment(offset)
trace: this.type,
{ valueRange: this.valueRange, comment: this.comment },
JSON.stringify(this.rawValue)
return offset
}
}
yaml-1.10.2/src/cst/BlankLine.js000066400000000000000000000013531402322402300163040ustar00rootroot00000000000000import { Type } from '../constants.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class BlankLine extends Node {
constructor() {
super(Type.BLANK_LINE)
}
/* istanbul ignore next */
get includesTrailingLines() {
// This is never called from anywhere, but if it were,
// this is the value it should return.
return true
}
/**
* Parses a blank line from the source
*
* @param {ParseContext} context
* @param {number} start - Index of first \n character
* @returns {number} - Index of the character after this
*/
parse(context, start) {
this.context = context
this.range = new Range(start, start + 1)
trace: this.type, this.range
return start + 1
}
}
yaml-1.10.2/src/cst/BlockValue.js000066400000000000000000000136231402322402300164770ustar00rootroot00000000000000import { Type } from '../constants.js'
import { YAMLSemanticError } from '../errors.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export const Chomp = {
CLIP: 'CLIP',
KEEP: 'KEEP',
STRIP: 'STRIP'
}
export class BlockValue extends Node {
constructor(type, props) {
super(type, props)
this.blockIndent = null
this.chomping = Chomp.CLIP
this.header = null
}
get includesTrailingLines() {
return this.chomping === Chomp.KEEP
}
get strValue() {
if (!this.valueRange || !this.context) return null
let { start, end } = this.valueRange
const { indent, src } = this.context
if (this.valueRange.isEmpty()) return ''
let lastNewLine = null
let ch = src[end - 1]
while (ch === '\n' || ch === '\t' || ch === ' ') {
end -= 1
if (end <= start) {
if (this.chomping === Chomp.KEEP) break
else return '' // probably never happens
}
if (ch === '\n') lastNewLine = end
ch = src[end - 1]
}
let keepStart = end + 1
if (lastNewLine) {
if (this.chomping === Chomp.KEEP) {
keepStart = lastNewLine
end = this.valueRange.end
} else {
end = lastNewLine
}
}
const bi = indent + this.blockIndent
const folded = this.type === Type.BLOCK_FOLDED
let atStart = true
let str = ''
let sep = ''
let prevMoreIndented = false
for (let i = start; i < end; ++i) {
for (let j = 0; j < bi; ++j) {
if (src[i] !== ' ') break
i += 1
}
const ch = src[i]
if (ch === '\n') {
if (sep === '\n') str += '\n'
else sep = '\n'
} else {
const lineEnd = Node.endOfLine(src, i)
const line = src.slice(i, lineEnd)
i = lineEnd
if (folded && (ch === ' ' || ch === '\t') && i < keepStart) {
if (sep === ' ') sep = '\n'
else if (!prevMoreIndented && !atStart && sep === '\n') sep = '\n\n'
str += sep + line //+ ((lineEnd < end && src[lineEnd]) || '')
sep = (lineEnd < end && src[lineEnd]) || ''
prevMoreIndented = true
} else {
str += sep + line
sep = folded && i < keepStart ? ' ' : '\n'
prevMoreIndented = false
}
if (atStart && line !== '') atStart = false
}
}
return this.chomping === Chomp.STRIP ? str : str + '\n'
}
parseBlockHeader(start) {
const { src } = this.context
let offset = start + 1
let bi = ''
while (true) {
const ch = src[offset]
switch (ch) {
case '-':
this.chomping = Chomp.STRIP
break
case '+':
this.chomping = Chomp.KEEP
break
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
bi += ch
break
default:
this.blockIndent = Number(bi) || null
this.header = new Range(start, offset)
return offset
}
offset += 1
}
}
parseBlockValue(start) {
const { indent, src } = this.context
const explicit = !!this.blockIndent
let offset = start
let valueEnd = start
let minBlockIndent = 1
for (let ch = src[offset]; ch === '\n'; ch = src[offset]) {
offset += 1
if (Node.atDocumentBoundary(src, offset)) break
const end = Node.endOfBlockIndent(src, indent, offset) // should not include tab?
if (end === null) break
const ch = src[end]
const lineIndent = end - (offset + indent)
if (!this.blockIndent) {
// no explicit block indent, none yet detected
if (src[end] !== '\n') {
// first line with non-whitespace content
if (lineIndent < minBlockIndent) {
const msg =
'Block scalars with more-indented leading empty lines must use an explicit indentation indicator'
this.error = new YAMLSemanticError(this, msg)
}
this.blockIndent = lineIndent
} else if (lineIndent > minBlockIndent) {
// empty line with more whitespace
minBlockIndent = lineIndent
}
} else if (ch && ch !== '\n' && lineIndent < this.blockIndent) {
if (src[end] === '#') break
if (!this.error) {
const src = explicit ? 'explicit indentation indicator' : 'first line'
const msg = `Block scalars must not be less indented than their ${src}`
this.error = new YAMLSemanticError(this, msg)
}
}
if (src[end] === '\n') {
offset = end
} else {
offset = valueEnd = Node.endOfLine(src, end)
}
}
if (this.chomping !== Chomp.KEEP) {
offset = src[valueEnd] ? valueEnd + 1 : valueEnd
}
this.valueRange = new Range(start + 1, offset)
return offset
}
/**
* Parses a block value from the source
*
* Accepted forms are:
* ```
* BS
* block
* lines
*
* BS #comment
* block
* lines
* ```
* where the block style BS matches the regexp `[|>][-+1-9]*` and block lines
* are empty or have an indent level greater than `indent`.
*
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this block
*/
parse(context, start) {
this.context = context
trace: 'block-start', context.pretty, { start }
const { src } = context
let offset = this.parseBlockHeader(start)
offset = Node.endOfWhiteSpace(src, offset)
offset = this.parseComment(offset)
offset = this.parseBlockValue(offset)
trace: this.type,
{
style: this.blockStyle,
valueRange: this.valueRange,
comment: this.comment
},
JSON.stringify(this.rawValue)
return offset
}
setOrigRanges(cr, offset) {
offset = super.setOrigRanges(cr, offset)
return this.header ? this.header.setOrigRange(cr, offset) : offset
}
}
yaml-1.10.2/src/cst/Collection.js000066400000000000000000000174751402322402300165540ustar00rootroot00000000000000import { Type } from '../constants.js'
import { YAMLSyntaxError } from '../errors.js'
import { BlankLine } from './BlankLine.js'
import { CollectionItem } from './CollectionItem.js'
import { Comment } from './Comment.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export function grabCollectionEndComments(node) {
let cnode = node
while (cnode instanceof CollectionItem) cnode = cnode.node
if (!(cnode instanceof Collection)) return null
const len = cnode.items.length
let ci = -1
for (let i = len - 1; i >= 0; --i) {
const n = cnode.items[i]
if (n.type === Type.COMMENT) {
// Keep sufficiently indented comments with preceding node
const { indent, lineStart } = n.context
if (indent > 0 && n.range.start >= lineStart + indent) break
ci = i
} else if (n.type === Type.BLANK_LINE) ci = i
else break
}
if (ci === -1) return null
const ca = cnode.items.splice(ci, len - ci)
trace: 'item-end-comments', ca
const prevEnd = ca[0].range.start
while (true) {
cnode.range.end = prevEnd
if (cnode.valueRange && cnode.valueRange.end > prevEnd)
cnode.valueRange.end = prevEnd
if (cnode === node) break
cnode = cnode.context.parent
}
return ca
}
export class Collection extends Node {
static nextContentHasIndent(src, offset, indent) {
const lineStart = Node.endOfLine(src, offset) + 1
offset = Node.endOfWhiteSpace(src, lineStart)
const ch = src[offset]
if (!ch) return false
if (offset >= lineStart + indent) return true
if (ch !== '#' && ch !== '\n') return false
return Collection.nextContentHasIndent(src, offset, indent)
}
constructor(firstItem) {
super(firstItem.type === Type.SEQ_ITEM ? Type.SEQ : Type.MAP)
for (let i = firstItem.props.length - 1; i >= 0; --i) {
if (firstItem.props[i].start < firstItem.context.lineStart) {
// props on previous line are assumed by the collection
this.props = firstItem.props.slice(0, i + 1)
firstItem.props = firstItem.props.slice(i + 1)
const itemRange = firstItem.props[0] || firstItem.valueRange
firstItem.range.start = itemRange.start
break
}
}
this.items = [firstItem]
const ec = grabCollectionEndComments(firstItem)
if (ec) Array.prototype.push.apply(this.items, ec)
}
get includesTrailingLines() {
return this.items.length > 0
}
/**
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this
*/
parse(context, start) {
trace: 'collection-start', context.pretty, { start }
this.context = context
const { parseNode, src } = context
// It's easier to recalculate lineStart here rather than tracking down the
// last context from which to read it -- eemeli/yaml#2
let lineStart = Node.startOfLine(src, start)
const firstItem = this.items[0]
// First-item context needs to be correct for later comment handling
// -- eemeli/yaml#17
firstItem.context.parent = this
this.valueRange = Range.copy(firstItem.valueRange)
const indent = firstItem.range.start - firstItem.context.lineStart
let offset = start
offset = Node.normalizeOffset(src, offset)
let ch = src[offset]
let atLineStart = Node.endOfWhiteSpace(src, lineStart) === offset
let prevIncludesTrailingLines = false
trace: 'items-start', { offset, indent, lineStart, ch: JSON.stringify(ch) }
while (ch) {
while (ch === '\n' || ch === '#') {
if (atLineStart && ch === '\n' && !prevIncludesTrailingLines) {
const blankLine = new BlankLine()
offset = blankLine.parse({ src }, offset)
this.valueRange.end = offset
if (offset >= src.length) {
ch = null
break
}
this.items.push(blankLine)
trace: 'collection-blankline', blankLine.range
offset -= 1 // blankLine.parse() consumes terminal newline
} else if (ch === '#') {
if (
offset < lineStart + indent &&
!Collection.nextContentHasIndent(src, offset, indent)
) {
trace: 'end:comment-unindent', { offset, lineStart, indent }
return offset
}
const comment = new Comment()
offset = comment.parse({ indent, lineStart, src }, offset)
this.items.push(comment)
this.valueRange.end = offset
if (offset >= src.length) {
ch = null
break
}
}
lineStart = offset + 1
offset = Node.endOfIndent(src, lineStart)
if (Node.atBlank(src, offset)) {
const wsEnd = Node.endOfWhiteSpace(src, offset)
const next = src[wsEnd]
if (!next || next === '\n' || next === '#') {
offset = wsEnd
}
}
ch = src[offset]
atLineStart = true
}
if (!ch) {
trace: 'end:src', { offset }
break
}
if (offset !== lineStart + indent && (atLineStart || ch !== ':')) {
if (offset < lineStart + indent) {
trace: 'end:unindent',
{ offset, lineStart, indent, ch: JSON.stringify(ch) }
if (lineStart > start) offset = lineStart
break
} else if (!this.error) {
const msg = 'All collection items must start at the same column'
this.error = new YAMLSyntaxError(this, msg)
}
}
if (firstItem.type === Type.SEQ_ITEM) {
if (ch !== '-') {
trace: 'end:typeswitch',
{ offset, lineStart, indent, ch: JSON.stringify(ch) }
if (lineStart > start) offset = lineStart
break
}
} else if (ch === '-' && !this.error) {
// map key may start with -, as long as it's followed by a non-whitespace char
const next = src[offset + 1]
if (!next || next === '\n' || next === '\t' || next === ' ') {
const msg = 'A collection cannot be both a mapping and a sequence'
this.error = new YAMLSyntaxError(this, msg)
}
}
trace: 'item-start', this.items.length, { ch: JSON.stringify(ch) }
const node = parseNode(
{ atLineStart, inCollection: true, indent, lineStart, parent: this },
offset
)
if (!node) return offset // at next document start
this.items.push(node)
this.valueRange.end = node.valueRange.end
offset = Node.normalizeOffset(src, node.range.end)
ch = src[offset]
atLineStart = false
prevIncludesTrailingLines = node.includesTrailingLines
// Need to reset lineStart and atLineStart here if preceding node's range
// has advanced to check the current line's indentation level
// -- eemeli/yaml#10 & eemeli/yaml#38
if (ch) {
let ls = offset - 1
let prev = src[ls]
while (prev === ' ' || prev === '\t') prev = src[--ls]
if (prev === '\n') {
lineStart = ls + 1
atLineStart = true
}
}
const ec = grabCollectionEndComments(node)
if (ec) Array.prototype.push.apply(this.items, ec)
trace: 'item-end', node.type, { offset, ch: JSON.stringify(ch) }
}
trace: 'items', this.items
return offset
}
setOrigRanges(cr, offset) {
offset = super.setOrigRanges(cr, offset)
this.items.forEach(node => {
offset = node.setOrigRanges(cr, offset)
})
return offset
}
toString() {
const {
context: { src },
items,
range,
value
} = this
if (value != null) return value
let str = src.slice(range.start, items[0].range.start) + String(items[0])
for (let i = 1; i < items.length; ++i) {
const item = items[i]
const { atLineStart, indent } = item.context
if (atLineStart) for (let i = 0; i < indent; ++i) str += ' '
str += String(item)
}
return Node.addStringTerminator(src, range.end, str)
}
}
yaml-1.10.2/src/cst/CollectionItem.js000066400000000000000000000067631402322402300173710ustar00rootroot00000000000000import { Type } from '../constants.js'
import { YAMLSemanticError } from '../errors.js'
import { BlankLine } from './BlankLine.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class CollectionItem extends Node {
constructor(type, props) {
super(type, props)
this.node = null
}
get includesTrailingLines() {
return !!this.node && this.node.includesTrailingLines
}
/**
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this
*/
parse(context, start) {
this.context = context
trace: 'item-start', context.pretty, { start }
const { parseNode, src } = context
let { atLineStart, lineStart } = context
if (!atLineStart && this.type === Type.SEQ_ITEM)
this.error = new YAMLSemanticError(
this,
'Sequence items must not have preceding content on the same line'
)
const indent = atLineStart ? start - lineStart : context.indent
let offset = Node.endOfWhiteSpace(src, start + 1)
let ch = src[offset]
const inlineComment = ch === '#'
const comments = []
let blankLine = null
while (ch === '\n' || ch === '#') {
if (ch === '#') {
const end = Node.endOfLine(src, offset + 1)
comments.push(new Range(offset, end))
offset = end
} else {
atLineStart = true
lineStart = offset + 1
const wsEnd = Node.endOfWhiteSpace(src, lineStart)
if (src[wsEnd] === '\n' && comments.length === 0) {
blankLine = new BlankLine()
lineStart = blankLine.parse({ src }, lineStart)
}
offset = Node.endOfIndent(src, lineStart)
}
ch = src[offset]
}
trace: 'item-parse?',
{
indentDiff: offset - (lineStart + indent),
ch: ch && JSON.stringify(ch)
}
if (
Node.nextNodeIsIndented(
ch,
offset - (lineStart + indent),
this.type !== Type.SEQ_ITEM
)
) {
this.node = parseNode(
{ atLineStart, inCollection: false, indent, lineStart, parent: this },
offset
)
} else if (ch && lineStart > start + 1) {
offset = lineStart - 1
}
if (this.node) {
if (blankLine) {
// Only blank lines preceding non-empty nodes are captured. Note that
// this means that collection item range start indices do not always
// increase monotonically. -- eemeli/yaml#126
const items = context.parent.items || context.parent.contents
if (items) items.push(blankLine)
}
if (comments.length) Array.prototype.push.apply(this.props, comments)
offset = this.node.range.end
} else {
if (inlineComment) {
const c = comments[0]
this.props.push(c)
offset = c.end
} else {
offset = Node.endOfLine(src, start + 1)
}
}
const end = this.node ? this.node.valueRange.end : offset
trace: 'item-end', { start, end, offset }
this.valueRange = new Range(start, end)
return offset
}
setOrigRanges(cr, offset) {
offset = super.setOrigRanges(cr, offset)
return this.node ? this.node.setOrigRanges(cr, offset) : offset
}
toString() {
const {
context: { src },
node,
range,
value
} = this
if (value != null) return value
const str = node
? src.slice(range.start, node.range.start) + String(node)
: src.slice(range.start, range.end)
return Node.addStringTerminator(src, range.end, str)
}
}
yaml-1.10.2/src/cst/Comment.js000066400000000000000000000011501402322402300160420ustar00rootroot00000000000000import { Type } from '../constants.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class Comment extends Node {
constructor() {
super(Type.COMMENT)
}
/**
* Parses a comment line from the source
*
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this scalar
*/
parse(context, start) {
this.context = context
const offset = this.parseComment(start)
this.range = new Range(start, offset)
trace: this.type, this.range, this.comment
return offset
}
}
yaml-1.10.2/src/cst/Directive.js000066400000000000000000000020511402322402300163570ustar00rootroot00000000000000import { Type } from '../constants.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class Directive extends Node {
constructor() {
super(Type.DIRECTIVE)
this.name = null
}
get parameters() {
const raw = this.rawValue
return raw ? raw.trim().split(/[ \t]+/) : []
}
parseName(start) {
const { src } = this.context
let offset = start
let ch = src[offset]
while (ch && ch !== '\n' && ch !== '\t' && ch !== ' ')
ch = src[(offset += 1)]
this.name = src.slice(start, offset)
return offset
}
parseParameters(start) {
const { src } = this.context
let offset = start
let ch = src[offset]
while (ch && ch !== '\n' && ch !== '#') ch = src[(offset += 1)]
this.valueRange = new Range(start, offset)
return offset
}
parse(context, start) {
this.context = context
let offset = this.parseName(start + 1)
offset = this.parseParameters(offset)
offset = this.parseComment(offset)
this.range = new Range(start, offset)
return offset
}
}
yaml-1.10.2/src/cst/Document.js000066400000000000000000000157461402322402300162360ustar00rootroot00000000000000import { Char, Type } from '../constants.js'
import { YAMLSemanticError, YAMLSyntaxError } from '../errors.js'
import { BlankLine } from './BlankLine.js'
import { grabCollectionEndComments } from './Collection.js'
import { Comment } from './Comment.js'
import { Directive } from './Directive.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class Document extends Node {
static startCommentOrEndBlankLine(src, start) {
const offset = Node.endOfWhiteSpace(src, start)
const ch = src[offset]
return ch === '#' || ch === '\n' ? offset : start
}
constructor() {
super(Type.DOCUMENT)
this.directives = null
this.contents = null
this.directivesEndMarker = null
this.documentEndMarker = null
}
parseDirectives(start) {
const { src } = this.context
this.directives = []
let atLineStart = true
let hasDirectives = false
let offset = start
while (!Node.atDocumentBoundary(src, offset, Char.DIRECTIVES_END)) {
offset = Document.startCommentOrEndBlankLine(src, offset)
switch (src[offset]) {
case '\n':
if (atLineStart) {
const blankLine = new BlankLine()
offset = blankLine.parse({ src }, offset)
if (offset < src.length) {
this.directives.push(blankLine)
trace: 'directive-blankline', blankLine.range
}
} else {
offset += 1
atLineStart = true
}
break
case '#':
{
const comment = new Comment()
offset = comment.parse({ src }, offset)
this.directives.push(comment)
atLineStart = false
trace: 'directive-comment', comment.comment
}
break
case '%':
{
const directive = new Directive()
offset = directive.parse({ parent: this, src }, offset)
this.directives.push(directive)
hasDirectives = true
atLineStart = false
trace: 'directive',
{ valueRange: directive.valueRange, comment: directive.comment },
JSON.stringify(directive.rawValue)
}
break
default:
if (hasDirectives) {
this.error = new YAMLSemanticError(
this,
'Missing directives-end indicator line'
)
} else if (this.directives.length > 0) {
this.contents = this.directives
this.directives = []
}
return offset
}
}
if (src[offset]) {
this.directivesEndMarker = new Range(offset, offset + 3)
return offset + 3
}
if (hasDirectives) {
this.error = new YAMLSemanticError(
this,
'Missing directives-end indicator line'
)
} else if (this.directives.length > 0) {
this.contents = this.directives
this.directives = []
}
return offset
}
parseContents(start) {
const { parseNode, src } = this.context
if (!this.contents) this.contents = []
let lineStart = start
while (src[lineStart - 1] === '-') lineStart -= 1
let offset = Node.endOfWhiteSpace(src, start)
let atLineStart = lineStart === start
this.valueRange = new Range(offset)
while (!Node.atDocumentBoundary(src, offset, Char.DOCUMENT_END)) {
switch (src[offset]) {
case '\n':
if (atLineStart) {
const blankLine = new BlankLine()
offset = blankLine.parse({ src }, offset)
if (offset < src.length) {
this.contents.push(blankLine)
trace: 'content-blankline', blankLine.range
}
} else {
offset += 1
atLineStart = true
}
lineStart = offset
break
case '#':
{
const comment = new Comment()
offset = comment.parse({ src }, offset)
this.contents.push(comment)
trace: 'content-comment', comment.comment
atLineStart = false
}
break
default: {
const iEnd = Node.endOfIndent(src, offset)
const context = {
atLineStart,
indent: -1,
inFlow: false,
inCollection: false,
lineStart,
parent: this
}
const node = parseNode(context, iEnd)
if (!node) return (this.valueRange.end = iEnd) // at next document start
this.contents.push(node)
offset = node.range.end
atLineStart = false
const ec = grabCollectionEndComments(node)
if (ec) Array.prototype.push.apply(this.contents, ec)
trace: 'content-node',
{ valueRange: node.valueRange, comment: node.comment },
JSON.stringify(node.rawValue)
}
}
offset = Document.startCommentOrEndBlankLine(src, offset)
}
this.valueRange.end = offset
if (src[offset]) {
this.documentEndMarker = new Range(offset, offset + 3)
offset += 3
if (src[offset]) {
offset = Node.endOfWhiteSpace(src, offset)
if (src[offset] === '#') {
const comment = new Comment()
offset = comment.parse({ src }, offset)
this.contents.push(comment)
trace: 'document-suffix-comment', comment.comment
}
switch (src[offset]) {
case '\n':
offset += 1
break
case undefined:
break
default:
this.error = new YAMLSyntaxError(
this,
'Document end marker line cannot have a non-comment suffix'
)
}
}
}
return offset
}
/**
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this
*/
parse(context, start) {
context.root = this
this.context = context
const { src } = context
trace: 'DOC START', JSON.stringify(src.slice(start))
let offset = src.charCodeAt(start) === 0xfeff ? start + 1 : start // skip BOM
offset = this.parseDirectives(offset)
offset = this.parseContents(offset)
trace: 'DOC', this.contents
return offset
}
setOrigRanges(cr, offset) {
offset = super.setOrigRanges(cr, offset)
this.directives.forEach(node => {
offset = node.setOrigRanges(cr, offset)
})
if (this.directivesEndMarker)
offset = this.directivesEndMarker.setOrigRange(cr, offset)
this.contents.forEach(node => {
offset = node.setOrigRanges(cr, offset)
})
if (this.documentEndMarker)
offset = this.documentEndMarker.setOrigRange(cr, offset)
return offset
}
toString() {
const { contents, directives, value } = this
if (value != null) return value
let str = directives.join('')
if (contents.length > 0) {
if (directives.length > 0 || contents[0].type === Type.COMMENT)
str += '---\n'
str += contents.join('')
}
if (str[str.length - 1] !== '\n') str += '\n'
return str
}
}
yaml-1.10.2/src/cst/FlowCollection.js000066400000000000000000000117341402322402300173740ustar00rootroot00000000000000import { Type } from '../constants.js'
import { YAMLSemanticError } from '../errors.js'
import { BlankLine } from './BlankLine.js'
import { Comment } from './Comment.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class FlowCollection extends Node {
constructor(type, props) {
super(type, props)
this.items = null
}
prevNodeIsJsonLike(idx = this.items.length) {
const node = this.items[idx - 1]
return (
!!node &&
(node.jsonLike ||
(node.type === Type.COMMENT && this.prevNodeIsJsonLike(idx - 1)))
)
}
/**
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this
*/
parse(context, start) {
trace: 'flow-start', context.pretty, { start }
this.context = context
const { parseNode, src } = context
let { indent, lineStart } = context
let char = src[start] // { or [
this.items = [{ char, offset: start }]
let offset = Node.endOfWhiteSpace(src, start + 1)
char = src[offset]
while (char && char !== ']' && char !== '}') {
trace: 'item-start', this.items.length, char
switch (char) {
case '\n':
{
lineStart = offset + 1
const wsEnd = Node.endOfWhiteSpace(src, lineStart)
if (src[wsEnd] === '\n') {
const blankLine = new BlankLine()
lineStart = blankLine.parse({ src }, lineStart)
this.items.push(blankLine)
}
offset = Node.endOfIndent(src, lineStart)
if (offset <= lineStart + indent) {
char = src[offset]
if (
offset < lineStart + indent ||
(char !== ']' && char !== '}')
) {
const msg = 'Insufficient indentation in flow collection'
this.error = new YAMLSemanticError(this, msg)
}
}
}
break
case ',':
{
this.items.push({ char, offset })
offset += 1
}
break
case '#':
{
const comment = new Comment()
offset = comment.parse({ src }, offset)
this.items.push(comment)
}
break
case '?':
case ':': {
const next = src[offset + 1]
if (
next === '\n' ||
next === '\t' ||
next === ' ' ||
next === ',' ||
// in-flow : after JSON-like key does not need to be followed by whitespace
(char === ':' && this.prevNodeIsJsonLike())
) {
this.items.push({ char, offset })
offset += 1
break
}
}
// fallthrough
default: {
const node = parseNode(
{
atLineStart: false,
inCollection: false,
inFlow: true,
indent: -1,
lineStart,
parent: this
},
offset
)
if (!node) {
// at next document start
this.valueRange = new Range(start, offset)
return offset
}
this.items.push(node)
offset = Node.normalizeOffset(src, node.range.end)
}
}
offset = Node.endOfWhiteSpace(src, offset)
char = src[offset]
}
this.valueRange = new Range(start, offset + 1)
if (char) {
this.items.push({ char, offset })
offset = Node.endOfWhiteSpace(src, offset + 1)
offset = this.parseComment(offset)
}
trace: 'items', this.items, JSON.stringify(this.comment)
return offset
}
setOrigRanges(cr, offset) {
offset = super.setOrigRanges(cr, offset)
this.items.forEach(node => {
if (node instanceof Node) {
offset = node.setOrigRanges(cr, offset)
} else if (cr.length === 0) {
node.origOffset = node.offset
} else {
let i = offset
while (i < cr.length) {
if (cr[i] > node.offset) break
else ++i
}
node.origOffset = node.offset + i
offset = i
}
})
return offset
}
toString() {
const {
context: { src },
items,
range,
value
} = this
if (value != null) return value
const nodes = items.filter(item => item instanceof Node)
let str = ''
let prevEnd = range.start
nodes.forEach(node => {
const prefix = src.slice(prevEnd, node.range.start)
prevEnd = node.range.end
str += prefix + String(node)
if (
str[str.length - 1] === '\n' &&
src[prevEnd - 1] !== '\n' &&
src[prevEnd] === '\n'
) {
// Comment range does not include the terminal newline, but its
// stringified value does. Without this fix, newlines at comment ends
// get duplicated.
prevEnd += 1
}
})
str += src.slice(prevEnd, range.end)
return Node.addStringTerminator(src, range.end, str)
}
}
yaml-1.10.2/src/cst/Node.js000066400000000000000000000201451402322402300153320ustar00rootroot00000000000000import { Char, Type } from '../constants.js'
import { getLinePos } from './source-utils.js'
import { Range } from './Range.js'
/** Root class of all nodes */
export class Node {
static addStringTerminator(src, offset, str) {
if (str[str.length - 1] === '\n') return str
const next = Node.endOfWhiteSpace(src, offset)
return next >= src.length || src[next] === '\n' ? str + '\n' : str
}
// ^(---|...)
static atDocumentBoundary(src, offset, sep) {
const ch0 = src[offset]
if (!ch0) return true
const prev = src[offset - 1]
if (prev && prev !== '\n') return false
if (sep) {
if (ch0 !== sep) return false
} else {
if (ch0 !== Char.DIRECTIVES_END && ch0 !== Char.DOCUMENT_END) return false
}
const ch1 = src[offset + 1]
const ch2 = src[offset + 2]
if (ch1 !== ch0 || ch2 !== ch0) return false
const ch3 = src[offset + 3]
return !ch3 || ch3 === '\n' || ch3 === '\t' || ch3 === ' '
}
static endOfIdentifier(src, offset) {
let ch = src[offset]
const isVerbatim = ch === '<'
const notOk = isVerbatim
? ['\n', '\t', ' ', '>']
: ['\n', '\t', ' ', '[', ']', '{', '}', ',']
while (ch && notOk.indexOf(ch) === -1) ch = src[(offset += 1)]
if (isVerbatim && ch === '>') offset += 1
return offset
}
static endOfIndent(src, offset) {
let ch = src[offset]
while (ch === ' ') ch = src[(offset += 1)]
return offset
}
static endOfLine(src, offset) {
let ch = src[offset]
while (ch && ch !== '\n') ch = src[(offset += 1)]
return offset
}
static endOfWhiteSpace(src, offset) {
let ch = src[offset]
while (ch === '\t' || ch === ' ') ch = src[(offset += 1)]
return offset
}
static startOfLine(src, offset) {
let ch = src[offset - 1]
if (ch === '\n') return offset
while (ch && ch !== '\n') ch = src[(offset -= 1)]
return offset + 1
}
/**
* End of indentation, or null if the line's indent level is not more
* than `indent`
*
* @param {string} src
* @param {number} indent
* @param {number} lineStart
* @returns {?number}
*/
static endOfBlockIndent(src, indent, lineStart) {
const inEnd = Node.endOfIndent(src, lineStart)
if (inEnd > lineStart + indent) {
return inEnd
} else {
const wsEnd = Node.endOfWhiteSpace(src, inEnd)
const ch = src[wsEnd]
if (!ch || ch === '\n') return wsEnd
}
return null
}
static atBlank(src, offset, endAsBlank) {
const ch = src[offset]
return ch === '\n' || ch === '\t' || ch === ' ' || (endAsBlank && !ch)
}
static nextNodeIsIndented(ch, indentDiff, indicatorAsIndent) {
if (!ch || indentDiff < 0) return false
if (indentDiff > 0) return true
return indicatorAsIndent && ch === '-'
}
// should be at line or string end, or at next non-whitespace char
static normalizeOffset(src, offset) {
const ch = src[offset]
return !ch
? offset
: ch !== '\n' && src[offset - 1] === '\n'
? offset - 1
: Node.endOfWhiteSpace(src, offset)
}
// fold single newline into space, multiple newlines to N - 1 newlines
// presumes src[offset] === '\n'
static foldNewline(src, offset, indent) {
let inCount = 0
let error = false
let fold = ''
let ch = src[offset + 1]
while (ch === ' ' || ch === '\t' || ch === '\n') {
switch (ch) {
case '\n':
inCount = 0
offset += 1
fold += '\n'
break
case '\t':
if (inCount <= indent) error = true
offset = Node.endOfWhiteSpace(src, offset + 2) - 1
break
case ' ':
inCount += 1
offset += 1
break
}
ch = src[offset + 1]
}
if (!fold) fold = ' '
if (ch && inCount <= indent) error = true
return { fold, offset, error }
}
constructor(type, props, context) {
Object.defineProperty(this, 'context', {
value: context || null,
writable: true
})
this.error = null
this.range = null
this.valueRange = null
this.props = props || []
this.type = type
this.value = null
}
getPropValue(idx, key, skipKey) {
if (!this.context) return null
const { src } = this.context
const prop = this.props[idx]
return prop && src[prop.start] === key
? src.slice(prop.start + (skipKey ? 1 : 0), prop.end)
: null
}
get anchor() {
for (let i = 0; i < this.props.length; ++i) {
const anchor = this.getPropValue(i, Char.ANCHOR, true)
if (anchor != null) return anchor
}
return null
}
get comment() {
const comments = []
for (let i = 0; i < this.props.length; ++i) {
const comment = this.getPropValue(i, Char.COMMENT, true)
if (comment != null) comments.push(comment)
}
return comments.length > 0 ? comments.join('\n') : null
}
commentHasRequiredWhitespace(start) {
const { src } = this.context
if (this.header && start === this.header.end) return false
if (!this.valueRange) return false
const { end } = this.valueRange
return start !== end || Node.atBlank(src, end - 1)
}
get hasComment() {
if (this.context) {
const { src } = this.context
for (let i = 0; i < this.props.length; ++i) {
if (src[this.props[i].start] === Char.COMMENT) return true
}
}
return false
}
get hasProps() {
if (this.context) {
const { src } = this.context
for (let i = 0; i < this.props.length; ++i) {
if (src[this.props[i].start] !== Char.COMMENT) return true
}
}
return false
}
get includesTrailingLines() {
return false
}
get jsonLike() {
const jsonLikeTypes = [
Type.FLOW_MAP,
Type.FLOW_SEQ,
Type.QUOTE_DOUBLE,
Type.QUOTE_SINGLE
]
return jsonLikeTypes.indexOf(this.type) !== -1
}
get rangeAsLinePos() {
if (!this.range || !this.context) return undefined
const start = getLinePos(this.range.start, this.context.root)
if (!start) return undefined
const end = getLinePos(this.range.end, this.context.root)
return { start, end }
}
get rawValue() {
if (!this.valueRange || !this.context) return null
const { start, end } = this.valueRange
return this.context.src.slice(start, end)
}
get tag() {
for (let i = 0; i < this.props.length; ++i) {
const tag = this.getPropValue(i, Char.TAG, false)
if (tag != null) {
if (tag[1] === '<') {
return { verbatim: tag.slice(2, -1) }
} else {
// eslint-disable-next-line no-unused-vars
const [_, handle, suffix] = tag.match(/^(.*!)([^!]*)$/)
return { handle, suffix }
}
}
}
return null
}
get valueRangeContainsNewline() {
if (!this.valueRange || !this.context) return false
const { start, end } = this.valueRange
const { src } = this.context
for (let i = start; i < end; ++i) {
if (src[i] === '\n') return true
}
return false
}
parseComment(start) {
const { src } = this.context
if (src[start] === Char.COMMENT) {
const end = Node.endOfLine(src, start + 1)
const commentRange = new Range(start, end)
this.props.push(commentRange)
trace: commentRange,
JSON.stringify(
this.getPropValue(this.props.length - 1, Char.COMMENT, true)
)
return end
}
return start
}
/**
* Populates the `origStart` and `origEnd` values of all ranges for this
* node. Extended by child classes to handle descendant nodes.
*
* @param {number[]} cr - Positions of dropped CR characters
* @param {number} offset - Starting index of `cr` from the last call
* @returns {number} - The next offset, matching the one found for `origStart`
*/
setOrigRanges(cr, offset) {
if (this.range) offset = this.range.setOrigRange(cr, offset)
if (this.valueRange) this.valueRange.setOrigRange(cr, offset)
this.props.forEach(prop => prop.setOrigRange(cr, offset))
return offset
}
toString() {
const {
context: { src },
range,
value
} = this
if (value != null) return value
const str = src.slice(range.start, range.end)
return Node.addStringTerminator(src, range.end, str)
}
}
yaml-1.10.2/src/cst/ParseContext.js000066400000000000000000000173451402322402300170740ustar00rootroot00000000000000import { Char, Type } from '../constants.js'
import { YAMLSyntaxError } from '../errors.js'
import { Alias } from './Alias.js'
import { BlockValue } from './BlockValue.js'
import { Collection } from './Collection.js'
import { CollectionItem } from './CollectionItem.js'
import { FlowCollection } from './FlowCollection.js'
import { Node } from './Node.js'
import { PlainValue } from './PlainValue.js'
import { QuoteDouble } from './QuoteDouble.js'
import { QuoteSingle } from './QuoteSingle.js'
import { Range } from './Range.js'
function createNewNode(type, props) {
switch (type) {
case Type.ALIAS:
return new Alias(type, props)
case Type.BLOCK_FOLDED:
case Type.BLOCK_LITERAL:
return new BlockValue(type, props)
case Type.FLOW_MAP:
case Type.FLOW_SEQ:
return new FlowCollection(type, props)
case Type.MAP_KEY:
case Type.MAP_VALUE:
case Type.SEQ_ITEM:
return new CollectionItem(type, props)
case Type.COMMENT:
case Type.PLAIN:
return new PlainValue(type, props)
case Type.QUOTE_DOUBLE:
return new QuoteDouble(type, props)
case Type.QUOTE_SINGLE:
return new QuoteSingle(type, props)
/* istanbul ignore next */
default:
return null // should never happen
}
}
/**
* @param {boolean} atLineStart - Node starts at beginning of line
* @param {boolean} inFlow - true if currently in a flow context
* @param {boolean} inCollection - true if currently in a collection context
* @param {number} indent - Current level of indentation
* @param {number} lineStart - Start of the current line
* @param {Node} parent - The parent of the node
* @param {string} src - Source of the YAML document
*/
export class ParseContext {
static parseType(src, offset, inFlow) {
switch (src[offset]) {
case '*':
return Type.ALIAS
case '>':
return Type.BLOCK_FOLDED
case '|':
return Type.BLOCK_LITERAL
case '{':
return Type.FLOW_MAP
case '[':
return Type.FLOW_SEQ
case '?':
return !inFlow && Node.atBlank(src, offset + 1, true)
? Type.MAP_KEY
: Type.PLAIN
case ':':
return !inFlow && Node.atBlank(src, offset + 1, true)
? Type.MAP_VALUE
: Type.PLAIN
case '-':
return !inFlow && Node.atBlank(src, offset + 1, true)
? Type.SEQ_ITEM
: Type.PLAIN
case '"':
return Type.QUOTE_DOUBLE
case "'":
return Type.QUOTE_SINGLE
default:
return Type.PLAIN
}
}
constructor(
orig = {},
{ atLineStart, inCollection, inFlow, indent, lineStart, parent } = {}
) {
this.atLineStart =
atLineStart != null ? atLineStart : orig.atLineStart || false
this.inCollection =
inCollection != null ? inCollection : orig.inCollection || false
this.inFlow = inFlow != null ? inFlow : orig.inFlow || false
this.indent = indent != null ? indent : orig.indent
this.lineStart = lineStart != null ? lineStart : orig.lineStart
this.parent = parent != null ? parent : orig.parent || {}
this.root = orig.root
this.src = orig.src
}
nodeStartsCollection(node) {
const { inCollection, inFlow, src } = this
if (inCollection || inFlow) return false
if (node instanceof CollectionItem) return true
// check for implicit key
let offset = node.range.end
if (src[offset] === '\n' || src[offset - 1] === '\n') return false
offset = Node.endOfWhiteSpace(src, offset)
return src[offset] === ':'
}
// Anchor and tag are before type, which determines the node implementation
// class; hence this intermediate step.
parseProps(offset) {
const { inFlow, parent, src } = this
const props = []
let lineHasProps = false
offset = this.atLineStart
? Node.endOfIndent(src, offset)
: Node.endOfWhiteSpace(src, offset)
let ch = src[offset]
while (
ch === Char.ANCHOR ||
ch === Char.COMMENT ||
ch === Char.TAG ||
ch === '\n'
) {
if (ch === '\n') {
let inEnd = offset
let lineStart
do {
lineStart = inEnd + 1
inEnd = Node.endOfIndent(src, lineStart)
} while (src[inEnd] === '\n')
const indentDiff = inEnd - (lineStart + this.indent)
const noIndicatorAsIndent =
parent.type === Type.SEQ_ITEM && parent.context.atLineStart
if (
src[inEnd] !== '#' &&
!Node.nextNodeIsIndented(src[inEnd], indentDiff, !noIndicatorAsIndent)
)
break
this.atLineStart = true
this.lineStart = lineStart
lineHasProps = false
offset = inEnd
} else if (ch === Char.COMMENT) {
const end = Node.endOfLine(src, offset + 1)
props.push(new Range(offset, end))
offset = end
} else {
let end = Node.endOfIdentifier(src, offset + 1)
if (
ch === Char.TAG &&
src[end] === ',' &&
/^[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+,\d\d\d\d(-\d\d){0,2}\/\S/.test(
src.slice(offset + 1, end + 13)
)
) {
// Let's presume we're dealing with a YAML 1.0 domain tag here, rather
// than an empty but 'foo.bar' private-tagged node in a flow collection
// followed without whitespace by a plain string starting with a year
// or date divided by something.
end = Node.endOfIdentifier(src, end + 5)
}
props.push(new Range(offset, end))
lineHasProps = true
offset = Node.endOfWhiteSpace(src, end)
}
ch = src[offset]
}
// '- &a : b' has an anchor on an empty node
if (lineHasProps && ch === ':' && Node.atBlank(src, offset + 1, true))
offset -= 1
const type = ParseContext.parseType(src, offset, inFlow)
trace: 'props', type, { props, offset }
return { props, type, valueStart: offset }
}
/**
* Parses a node from the source
* @param {ParseContext} overlay
* @param {number} start - Index of first non-whitespace character for the node
* @returns {?Node} - null if at a document boundary
*/
parseNode = (overlay, start) => {
if (Node.atDocumentBoundary(this.src, start)) return null
const context = new ParseContext(this, overlay)
const { props, type, valueStart } = context.parseProps(start)
trace: 'START',
{ start, valueStart, type, props },
{
start: `${context.lineStart} + ${context.indent}`,
atLineStart: context.atLineStart,
inCollection: context.inCollection,
inFlow: context.inFlow,
parent: context.parent.type
}
const node = createNewNode(type, props)
let offset = node.parse(context, valueStart)
node.range = new Range(start, offset)
/* istanbul ignore if */
if (offset <= start) {
// This should never happen, but if it does, let's make sure to at least
// step one character forward to avoid a busy loop.
node.error = new Error(`Node#parse consumed no characters`)
node.error.parseEnd = offset
node.error.source = node
node.range.end = start + 1
}
trace: node.type, node.range, JSON.stringify(node.rawValue)
if (context.nodeStartsCollection(node)) {
trace: 'collection-start'
if (
!node.error &&
!context.atLineStart &&
context.parent.type === Type.DOCUMENT
) {
node.error = new YAMLSyntaxError(
node,
'Block collection must not have preceding content here (e.g. directives-end indicator)'
)
}
const collection = new Collection(node)
offset = collection.parse(new ParseContext(context), offset)
collection.range = new Range(start, offset)
trace: collection.type,
collection.range,
JSON.stringify(collection.rawValue)
return collection
}
return node
}
}
yaml-1.10.2/src/cst/PlainValue.js000066400000000000000000000100071402322402300165010ustar00rootroot00000000000000import { YAMLSemanticError } from '../errors.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class PlainValue extends Node {
static endOfLine(src, start, inFlow) {
let ch = src[start]
let offset = start
while (ch && ch !== '\n') {
if (
inFlow &&
(ch === '[' || ch === ']' || ch === '{' || ch === '}' || ch === ',')
)
break
const next = src[offset + 1]
if (
ch === ':' &&
(!next ||
next === '\n' ||
next === '\t' ||
next === ' ' ||
(inFlow && next === ','))
)
break
if ((ch === ' ' || ch === '\t') && next === '#') break
offset += 1
ch = next
}
return offset
}
get strValue() {
if (!this.valueRange || !this.context) return null
let { start, end } = this.valueRange
const { src } = this.context
let ch = src[end - 1]
while (start < end && (ch === '\n' || ch === '\t' || ch === ' '))
ch = src[--end - 1]
let str = ''
for (let i = start; i < end; ++i) {
const ch = src[i]
if (ch === '\n') {
const { fold, offset } = Node.foldNewline(src, i, -1)
str += fold
i = offset
} else if (ch === ' ' || ch === '\t') {
// trim trailing whitespace
const wsStart = i
let next = src[i + 1]
while (i < end && (next === ' ' || next === '\t')) {
i += 1
next = src[i + 1]
}
if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch
} else {
str += ch
}
}
const ch0 = src[start]
switch (ch0) {
case '\t': {
const msg = 'Plain value cannot start with a tab character'
const errors = [new YAMLSemanticError(this, msg)]
return { errors, str }
}
case '@':
case '`': {
const msg = `Plain value cannot start with reserved character ${ch0}`
const errors = [new YAMLSemanticError(this, msg)]
return { errors, str }
}
default:
return str
}
}
parseBlockValue(start) {
const { indent, inFlow, src } = this.context
let offset = start
let valueEnd = start
for (let ch = src[offset]; ch === '\n'; ch = src[offset]) {
if (Node.atDocumentBoundary(src, offset + 1)) break
const end = Node.endOfBlockIndent(src, indent, offset + 1)
if (end === null || src[end] === '#') break
if (src[end] === '\n') {
offset = end
} else {
valueEnd = PlainValue.endOfLine(src, end, inFlow)
offset = valueEnd
}
}
if (this.valueRange.isEmpty()) this.valueRange.start = start
this.valueRange.end = valueEnd
trace: this.valueRange, JSON.stringify(this.rawValue)
return valueEnd
}
/**
* Parses a plain value from the source
*
* Accepted forms are:
* ```
* #comment
*
* first line
*
* first line #comment
*
* first line
* block
* lines
*
* #comment
* block
* lines
* ```
* where block lines are empty or have an indent level greater than `indent`.
*
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this scalar, may be `\n`
*/
parse(context, start) {
this.context = context
trace: 'plain-start', context.pretty, { start }
const { inFlow, src } = context
let offset = start
const ch = src[offset]
if (ch && ch !== '#' && ch !== '\n') {
offset = PlainValue.endOfLine(src, start, inFlow)
}
this.valueRange = new Range(start, offset)
offset = Node.endOfWhiteSpace(src, offset)
offset = this.parseComment(offset)
trace: 'first line',
{ offset, valueRange: this.valueRange, comment: this.comment },
JSON.stringify(this.rawValue)
if (!this.hasComment || this.valueRange.isEmpty()) {
offset = this.parseBlockValue(offset)
}
trace: this.type,
{ offset, valueRange: this.valueRange },
JSON.stringify(this.rawValue)
return offset
}
}
yaml-1.10.2/src/cst/QuoteDouble.js000066400000000000000000000122741402322402300167010ustar00rootroot00000000000000import { YAMLSemanticError, YAMLSyntaxError } from '../errors.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class QuoteDouble extends Node {
static endOfQuote(src, offset) {
let ch = src[offset]
while (ch && ch !== '"') {
offset += ch === '\\' ? 2 : 1
ch = src[offset]
}
return offset + 1
}
/**
* @returns {string | { str: string, errors: YAMLSyntaxError[] }}
*/
get strValue() {
if (!this.valueRange || !this.context) return null
const errors = []
const { start, end } = this.valueRange
const { indent, src } = this.context
if (src[end - 1] !== '"')
errors.push(new YAMLSyntaxError(this, 'Missing closing "quote'))
// Using String#replace is too painful with escaped newlines preceded by
// escaped backslashes; also, this should be faster.
let str = ''
for (let i = start + 1; i < end - 1; ++i) {
const ch = src[i]
if (ch === '\n') {
if (Node.atDocumentBoundary(src, i + 1))
errors.push(
new YAMLSemanticError(
this,
'Document boundary indicators are not allowed within string values'
)
)
const { fold, offset, error } = Node.foldNewline(src, i, indent)
str += fold
i = offset
if (error)
errors.push(
new YAMLSemanticError(
this,
'Multi-line double-quoted string needs to be sufficiently indented'
)
)
} else if (ch === '\\') {
i += 1
switch (src[i]) {
case '0':
str += '\0'
break // null character
case 'a':
str += '\x07'
break // bell character
case 'b':
str += '\b'
break // backspace
case 'e':
str += '\x1b'
break // escape character
case 'f':
str += '\f'
break // form feed
case 'n':
str += '\n'
break // line feed
case 'r':
str += '\r'
break // carriage return
case 't':
str += '\t'
break // horizontal tab
case 'v':
str += '\v'
break // vertical tab
case 'N':
str += '\u0085'
break // Unicode next line
case '_':
str += '\u00a0'
break // Unicode non-breaking space
case 'L':
str += '\u2028'
break // Unicode line separator
case 'P':
str += '\u2029'
break // Unicode paragraph separator
case ' ':
str += ' '
break
case '"':
str += '"'
break
case '/':
str += '/'
break
case '\\':
str += '\\'
break
case '\t':
str += '\t'
break
case 'x':
str += this.parseCharCode(i + 1, 2, errors)
i += 2
break
case 'u':
str += this.parseCharCode(i + 1, 4, errors)
i += 4
break
case 'U':
str += this.parseCharCode(i + 1, 8, errors)
i += 8
break
case '\n':
// skip escaped newlines, but still trim the following line
while (src[i + 1] === ' ' || src[i + 1] === '\t') i += 1
break
default:
errors.push(
new YAMLSyntaxError(
this,
`Invalid escape sequence ${src.substr(i - 1, 2)}`
)
)
str += '\\' + src[i]
}
} else if (ch === ' ' || ch === '\t') {
// trim trailing whitespace
const wsStart = i
let next = src[i + 1]
while (next === ' ' || next === '\t') {
i += 1
next = src[i + 1]
}
if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch
} else {
str += ch
}
}
return errors.length > 0 ? { errors, str } : str
}
parseCharCode(offset, length, errors) {
const { src } = this.context
const cc = src.substr(offset, length)
const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc)
const code = ok ? parseInt(cc, 16) : NaN
if (isNaN(code)) {
errors.push(
new YAMLSyntaxError(
this,
`Invalid escape sequence ${src.substr(offset - 2, length + 2)}`
)
)
return src.substr(offset - 2, length + 2)
}
return String.fromCodePoint(code)
}
/**
* Parses a "double quoted" value from the source
*
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this scalar
*/
parse(context, start) {
this.context = context
const { src } = context
let offset = QuoteDouble.endOfQuote(src, start + 1)
this.valueRange = new Range(start, offset)
offset = Node.endOfWhiteSpace(src, offset)
offset = this.parseComment(offset)
trace: this.type,
{ valueRange: this.valueRange, comment: this.comment },
JSON.stringify(this.rawValue)
return offset
}
}
yaml-1.10.2/src/cst/QuoteSingle.js000066400000000000000000000053431402322402300167070ustar00rootroot00000000000000import { YAMLSemanticError, YAMLSyntaxError } from '../errors.js'
import { Node } from './Node.js'
import { Range } from './Range.js'
export class QuoteSingle extends Node {
static endOfQuote(src, offset) {
let ch = src[offset]
while (ch) {
if (ch === "'") {
if (src[offset + 1] !== "'") break
ch = src[(offset += 2)]
} else {
ch = src[(offset += 1)]
}
}
return offset + 1
}
/**
* @returns {string | { str: string, errors: YAMLSyntaxError[] }}
*/
get strValue() {
if (!this.valueRange || !this.context) return null
const errors = []
const { start, end } = this.valueRange
const { indent, src } = this.context
if (src[end - 1] !== "'")
errors.push(new YAMLSyntaxError(this, "Missing closing 'quote"))
let str = ''
for (let i = start + 1; i < end - 1; ++i) {
const ch = src[i]
if (ch === '\n') {
if (Node.atDocumentBoundary(src, i + 1))
errors.push(
new YAMLSemanticError(
this,
'Document boundary indicators are not allowed within string values'
)
)
const { fold, offset, error } = Node.foldNewline(src, i, indent)
str += fold
i = offset
if (error)
errors.push(
new YAMLSemanticError(
this,
'Multi-line single-quoted string needs to be sufficiently indented'
)
)
} else if (ch === "'") {
str += ch
i += 1
if (src[i] !== "'")
errors.push(
new YAMLSyntaxError(
this,
'Unescaped single quote? This should not happen.'
)
)
} else if (ch === ' ' || ch === '\t') {
// trim trailing whitespace
const wsStart = i
let next = src[i + 1]
while (next === ' ' || next === '\t') {
i += 1
next = src[i + 1]
}
if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch
} else {
str += ch
}
}
return errors.length > 0 ? { errors, str } : str
}
/**
* Parses a 'single quoted' value from the source
*
* @param {ParseContext} context
* @param {number} start - Index of first character
* @returns {number} - Index of the character after this scalar
*/
parse(context, start) {
this.context = context
const { src } = context
let offset = QuoteSingle.endOfQuote(src, start + 1)
this.valueRange = new Range(start, offset)
offset = Node.endOfWhiteSpace(src, offset)
offset = this.parseComment(offset)
trace: this.type,
{ valueRange: this.valueRange, comment: this.comment },
JSON.stringify(this.rawValue)
return offset
}
}
yaml-1.10.2/src/cst/README.md000066400000000000000000000001571402322402300153670ustar00rootroot00000000000000# YAML CST Parser
Documentation for the CST parser has been moved to
yaml-1.10.2/src/cst/Range.js000066400000000000000000000022231402322402300154760ustar00rootroot00000000000000export class Range {
static copy(orig) {
return new Range(orig.start, orig.end)
}
constructor(start, end) {
this.start = start
this.end = end || start
}
isEmpty() {
return typeof this.start !== 'number' || !this.end || this.end <= this.start
}
/**
* Set `origStart` and `origEnd` to point to the original source range for
* this node, which may differ due to dropped CR characters.
*
* @param {number[]} cr - Positions of dropped CR characters
* @param {number} offset - Starting index of `cr` from the last call
* @returns {number} - The next offset, matching the one found for `origStart`
*/
setOrigRange(cr, offset) {
const { start, end } = this
if (cr.length === 0 || end <= cr[0]) {
this.origStart = start
this.origEnd = end
return offset
}
let i = offset
while (i < cr.length) {
if (cr[i] > start) break
else ++i
}
this.origStart = start + i
const nextOffset = i
while (i < cr.length) {
// if end was at \n, it should now be at \r
if (cr[i] >= end) break
else ++i
}
this.origEnd = end + i
return nextOffset
}
}
yaml-1.10.2/src/cst/parse.js000066400000000000000000000016431402322402300155610ustar00rootroot00000000000000// Published as 'yaml/parse-cst'
import { Document } from './Document.js'
import { ParseContext } from './ParseContext.js'
export function parse(src) {
const cr = []
if (src.indexOf('\r') !== -1) {
src = src.replace(/\r\n?/g, (match, offset) => {
if (match.length > 1) cr.push(offset)
return '\n'
})
}
const documents = []
let offset = 0
do {
const doc = new Document()
const context = new ParseContext({ src })
offset = doc.parse(context, offset)
documents.push(doc)
} while (offset < src.length)
documents.setOrigRanges = () => {
if (cr.length === 0) return false
for (let i = 1; i < cr.length; ++i) cr[i] -= i
let crOffset = 0
for (let i = 0; i < documents.length; ++i) {
crOffset = documents[i].setOrigRanges(cr, crOffset)
}
cr.splice(0, cr.length)
return true
}
documents.toString = () => documents.join('...\n')
return documents
}
yaml-1.10.2/src/cst/source-utils.js000066400000000000000000000076111402322402300171060ustar00rootroot00000000000000function findLineStarts(src) {
const ls = [0]
let offset = src.indexOf('\n')
while (offset !== -1) {
offset += 1
ls.push(offset)
offset = src.indexOf('\n', offset)
}
return ls
}
function getSrcInfo(cst) {
let lineStarts, src
if (typeof cst === 'string') {
lineStarts = findLineStarts(cst)
src = cst
} else {
if (Array.isArray(cst)) cst = cst[0]
if (cst && cst.context) {
if (!cst.lineStarts) cst.lineStarts = findLineStarts(cst.context.src)
lineStarts = cst.lineStarts
src = cst.context.src
}
}
return { lineStarts, src }
}
/**
* @typedef {Object} LinePos - One-indexed position in the source
* @property {number} line
* @property {number} col
*/
/**
* Determine the line/col position matching a character offset.
*
* Accepts a source string or a CST document as the second parameter. With
* the latter, starting indices for lines are cached in the document as
* `lineStarts: number[]`.
*
* Returns a one-indexed `{ line, col }` location if found, or
* `undefined` otherwise.
*
* @param {number} offset
* @param {string|Document|Document[]} cst
* @returns {?LinePos}
*/
export function getLinePos(offset, cst) {
if (typeof offset !== 'number' || offset < 0) return null
const { lineStarts, src } = getSrcInfo(cst)
if (!lineStarts || !src || offset > src.length) return null
for (let i = 0; i < lineStarts.length; ++i) {
const start = lineStarts[i]
if (offset < start) {
return { line: i, col: offset - lineStarts[i - 1] + 1 }
}
if (offset === start) return { line: i + 1, col: 1 }
}
const line = lineStarts.length
return { line, col: offset - lineStarts[line - 1] + 1 }
}
/**
* Get a specified line from the source.
*
* Accepts a source string or a CST document as the second parameter. With
* the latter, starting indices for lines are cached in the document as
* `lineStarts: number[]`.
*
* Returns the line as a string if found, or `null` otherwise.
*
* @param {number} line One-indexed line number
* @param {string|Document|Document[]} cst
* @returns {?string}
*/
export function getLine(line, cst) {
const { lineStarts, src } = getSrcInfo(cst)
if (!lineStarts || !(line >= 1) || line > lineStarts.length) return null
const start = lineStarts[line - 1]
let end = lineStarts[line] // undefined for last line; that's ok for slice()
while (end && end > start && src[end - 1] === '\n') --end
return src.slice(start, end)
}
/**
* Pretty-print the starting line from the source indicated by the range `pos`
*
* Trims output to `maxWidth` chars while keeping the starting column visible,
* using `…` at either end to indicate dropped characters.
*
* Returns a two-line string (or `null`) with `\n` as separator; the second line
* will hold appropriately indented `^` marks indicating the column range.
*
* @param {Object} pos
* @param {LinePos} pos.start
* @param {LinePos} [pos.end]
* @param {string|Document|Document[]*} cst
* @param {number} [maxWidth=80]
* @returns {?string}
*/
export function getPrettyContext({ start, end }, cst, maxWidth = 80) {
let src = getLine(start.line, cst)
if (!src) return null
let { col } = start
if (src.length > maxWidth) {
if (col <= maxWidth - 10) {
src = src.substr(0, maxWidth - 1) + '…'
} else {
const halfWidth = Math.round(maxWidth / 2)
if (src.length > col + halfWidth)
src = src.substr(0, col + halfWidth - 1) + '…'
col -= src.length - maxWidth
src = '…' + src.substr(1 - maxWidth)
}
}
let errLen = 1
let errEnd = ''
if (end) {
if (
end.line === start.line &&
col + (end.col - start.col) <= maxWidth + 1
) {
errLen = end.col - start.col
} else {
errLen = Math.min(src.length + 1, maxWidth) - col
errEnd = '…'
}
}
const offset = col > 1 ? ' '.repeat(col - 1) : ''
const err = '^'.repeat(errLen)
return `${src}\n${offset}${err}${errEnd}`
}
yaml-1.10.2/src/doc/000077500000000000000000000000001402322402300140615ustar00rootroot00000000000000yaml-1.10.2/src/doc/Anchors.js000066400000000000000000000042761402322402300160250ustar00rootroot00000000000000import { Alias, Merge, Scalar, YAMLMap, YAMLSeq } from '../ast/index.js'
export class Anchors {
static validAnchorNode(node) {
return (
node instanceof Scalar ||
node instanceof YAMLSeq ||
node instanceof YAMLMap
)
}
map = Object.create(null)
constructor(prefix) {
this.prefix = prefix
}
createAlias(node, name) {
this.setAnchor(node, name)
return new Alias(node)
}
createMergePair(...sources) {
const merge = new Merge()
merge.value.items = sources.map(s => {
if (s instanceof Alias) {
if (s.source instanceof YAMLMap) return s
} else if (s instanceof YAMLMap) {
return this.createAlias(s)
}
throw new Error('Merge sources must be Map nodes or their Aliases')
})
return merge
}
getName(node) {
const { map } = this
return Object.keys(map).find(a => map[a] === node)
}
getNames() {
return Object.keys(this.map)
}
getNode(name) {
return this.map[name]
}
newName(prefix) {
if (!prefix) prefix = this.prefix
const names = Object.keys(this.map)
for (let i = 1; true; ++i) {
const name = `${prefix}${i}`
if (!names.includes(name)) return name
}
}
// During parsing, map & aliases contain CST nodes
resolveNodes() {
const { map, _cstAliases } = this
Object.keys(map).forEach(a => {
map[a] = map[a].resolved
})
_cstAliases.forEach(a => {
a.source = a.source.resolved
})
delete this._cstAliases
}
setAnchor(node, name) {
if (node != null && !Anchors.validAnchorNode(node)) {
throw new Error('Anchors may only be set for Scalar, Seq and Map nodes')
}
if (name && /[\x00-\x19\s,[\]{}]/.test(name)) {
throw new Error(
'Anchor names must not contain whitespace or control characters'
)
}
const { map } = this
const prev = node && Object.keys(map).find(a => map[a] === node)
if (prev) {
if (!name) {
return prev
} else if (prev !== name) {
delete map[prev]
map[name] = node
}
} else {
if (!name) {
if (!node) return null
name = this.newName()
}
map[name] = node
}
return name
}
}
yaml-1.10.2/src/doc/Document.js000066400000000000000000000177241402322402300162100ustar00rootroot00000000000000import { Collection, Node, Scalar, isEmptyPath, toJSON } from '../ast/index.js'
import { YAMLError } from '../errors.js'
import { documentOptions } from '../options.js'
import { addComment } from '../stringify/addComment.js'
import { stringify } from '../stringify/stringify.js'
import { Anchors } from './Anchors.js'
import { Schema } from './Schema.js'
import { listTagNames } from './listTagNames.js'
import { parseContents } from './parseContents.js'
import { parseDirectives } from './parseDirectives.js'
function assertCollection(contents) {
if (contents instanceof Collection) return true
throw new Error('Expected a YAML collection as document contents')
}
export class Document {
static defaults = documentOptions
constructor(options) {
this.anchors = new Anchors(options.anchorPrefix)
this.commentBefore = null
this.comment = null
this.contents = null
this.directivesEndMarker = null
this.errors = []
this.options = options
this.schema = null
this.tagPrefixes = []
this.version = null
this.warnings = []
}
add(value) {
assertCollection(this.contents)
return this.contents.add(value)
}
addIn(path, value) {
assertCollection(this.contents)
this.contents.addIn(path, value)
}
delete(key) {
assertCollection(this.contents)
return this.contents.delete(key)
}
deleteIn(path) {
if (isEmptyPath(path)) {
if (this.contents == null) return false
this.contents = null
return true
}
assertCollection(this.contents)
return this.contents.deleteIn(path)
}
getDefaults() {
return (
Document.defaults[this.version] ||
Document.defaults[this.options.version] ||
{}
)
}
get(key, keepScalar) {
return this.contents instanceof Collection
? this.contents.get(key, keepScalar)
: undefined
}
getIn(path, keepScalar) {
if (isEmptyPath(path))
return !keepScalar && this.contents instanceof Scalar
? this.contents.value
: this.contents
return this.contents instanceof Collection
? this.contents.getIn(path, keepScalar)
: undefined
}
has(key) {
return this.contents instanceof Collection ? this.contents.has(key) : false
}
hasIn(path) {
if (isEmptyPath(path)) return this.contents !== undefined
return this.contents instanceof Collection
? this.contents.hasIn(path)
: false
}
set(key, value) {
assertCollection(this.contents)
this.contents.set(key, value)
}
setIn(path, value) {
if (isEmptyPath(path)) this.contents = value
else {
assertCollection(this.contents)
this.contents.setIn(path, value)
}
}
setSchema(id, customTags) {
if (!id && !customTags && this.schema) return
if (typeof id === 'number') id = id.toFixed(1)
if (id === '1.0' || id === '1.1' || id === '1.2') {
if (this.version) this.version = id
else this.options.version = id
delete this.options.schema
} else if (id && typeof id === 'string') {
this.options.schema = id
}
if (Array.isArray(customTags)) this.options.customTags = customTags
const opt = Object.assign({}, this.getDefaults(), this.options)
this.schema = new Schema(opt)
}
parse(node, prevDoc) {
if (this.options.keepCstNodes) this.cstNode = node
if (this.options.keepNodeTypes) this.type = 'DOCUMENT'
const {
directives = [],
contents = [],
directivesEndMarker,
error,
valueRange
} = node
if (error) {
if (!error.source) error.source = this
this.errors.push(error)
}
parseDirectives(this, directives, prevDoc)
if (directivesEndMarker) this.directivesEndMarker = true
this.range = valueRange ? [valueRange.start, valueRange.end] : null
this.setSchema()
this.anchors._cstAliases = []
parseContents(this, contents)
this.anchors.resolveNodes()
if (this.options.prettyErrors) {
for (const error of this.errors)
if (error instanceof YAMLError) error.makePretty()
for (const warn of this.warnings)
if (warn instanceof YAMLError) warn.makePretty()
}
return this
}
listNonDefaultTags() {
return listTagNames(this.contents).filter(
t => t.indexOf(Schema.defaultPrefix) !== 0
)
}
setTagPrefix(handle, prefix) {
if (handle[0] !== '!' || handle[handle.length - 1] !== '!')
throw new Error('Handle must start and end with !')
if (prefix) {
const prev = this.tagPrefixes.find(p => p.handle === handle)
if (prev) prev.prefix = prefix
else this.tagPrefixes.push({ handle, prefix })
} else {
this.tagPrefixes = this.tagPrefixes.filter(p => p.handle !== handle)
}
}
toJSON(arg, onAnchor) {
const { keepBlobsInJSON, mapAsMap, maxAliasCount } = this.options
const keep =
keepBlobsInJSON &&
(typeof arg !== 'string' || !(this.contents instanceof Scalar))
const ctx = {
doc: this,
indentStep: ' ',
keep,
mapAsMap: keep && !!mapAsMap,
maxAliasCount,
stringify // Requiring directly in Pair would create circular dependencies
}
const anchorNames = Object.keys(this.anchors.map)
if (anchorNames.length > 0)
ctx.anchors = new Map(
anchorNames.map(name => [
this.anchors.map[name],
{ alias: [], aliasCount: 0, count: 1 }
])
)
const res = toJSON(this.contents, arg, ctx)
if (typeof onAnchor === 'function' && ctx.anchors)
for (const { count, res } of ctx.anchors.values()) onAnchor(res, count)
return res
}
toString() {
if (this.errors.length > 0)
throw new Error('Document with errors cannot be stringified')
const indentSize = this.options.indent
if (!Number.isInteger(indentSize) || indentSize <= 0) {
const s = JSON.stringify(indentSize)
throw new Error(`"indent" option must be a positive integer, not ${s}`)
}
this.setSchema()
const lines = []
let hasDirectives = false
if (this.version) {
let vd = '%YAML 1.2'
if (this.schema.name === 'yaml-1.1') {
if (this.version === '1.0') vd = '%YAML:1.0'
else if (this.version === '1.1') vd = '%YAML 1.1'
}
lines.push(vd)
hasDirectives = true
}
const tagNames = this.listNonDefaultTags()
this.tagPrefixes.forEach(({ handle, prefix }) => {
if (tagNames.some(t => t.indexOf(prefix) === 0)) {
lines.push(`%TAG ${handle} ${prefix}`)
hasDirectives = true
}
})
if (hasDirectives || this.directivesEndMarker) lines.push('---')
if (this.commentBefore) {
if (hasDirectives || !this.directivesEndMarker) lines.unshift('')
lines.unshift(this.commentBefore.replace(/^/gm, '#'))
}
const ctx = {
anchors: Object.create(null),
doc: this,
indent: '',
indentStep: ' '.repeat(indentSize),
stringify // Requiring directly in nodes would create circular dependencies
}
let chompKeep = false
let contentComment = null
if (this.contents) {
if (this.contents instanceof Node) {
if (
this.contents.spaceBefore &&
(hasDirectives || this.directivesEndMarker)
)
lines.push('')
if (this.contents.commentBefore)
lines.push(this.contents.commentBefore.replace(/^/gm, '#'))
// top-level block scalars need to be indented if followed by a comment
ctx.forceBlockIndent = !!this.comment
contentComment = this.contents.comment
}
const onChompKeep = contentComment ? null : () => (chompKeep = true)
const body = stringify(
this.contents,
ctx,
() => (contentComment = null),
onChompKeep
)
lines.push(addComment(body, '', contentComment))
} else if (this.contents !== undefined) {
lines.push(stringify(this.contents, ctx))
}
if (this.comment) {
if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
lines.push('')
lines.push(this.comment.replace(/^/gm, '#'))
}
return lines.join('\n') + '\n'
}
}
yaml-1.10.2/src/doc/Schema.js000066400000000000000000000027661402322402300156320ustar00rootroot00000000000000import { Pair } from '../ast/Pair.js'
import { defaultTagPrefix, defaultTags } from '../constants.js'
import { schemas, tags } from '../tags/index.js'
import { warnOptionDeprecation } from '../warnings.js'
import { createNode } from './createNode.js'
import { getSchemaTags } from './getSchemaTags.js'
const sortMapEntriesByKey = (a, b) =>
a.key < b.key ? -1 : a.key > b.key ? 1 : 0
export class Schema {
static defaultPrefix = defaultTagPrefix // TODO: remove in v2
static defaultTags = defaultTags // TODO: remove in v2
constructor({
customTags,
merge,
schema,
sortMapEntries,
tags: deprecatedCustomTags
}) {
this.merge = !!merge
this.name = schema
this.sortMapEntries =
sortMapEntries === true ? sortMapEntriesByKey : sortMapEntries || null
if (!customTags && deprecatedCustomTags)
warnOptionDeprecation('tags', 'customTags')
this.tags = getSchemaTags(
schemas,
tags,
customTags || deprecatedCustomTags,
schema
)
}
createNode(value, wrapScalars, tagName, ctx) {
const baseCtx = {
defaultPrefix: Schema.defaultPrefix,
schema: this,
wrapScalars
}
const createCtx = ctx ? Object.assign(ctx, baseCtx) : baseCtx
return createNode(value, tagName, createCtx)
}
createPair(key, value, ctx) {
if (!ctx) ctx = { wrapScalars: true }
const k = this.createNode(key, ctx.wrapScalars, null, ctx)
const v = this.createNode(value, ctx.wrapScalars, null, ctx)
return new Pair(k, v)
}
}
yaml-1.10.2/src/doc/createNode.js000066400000000000000000000040501402322402300164670ustar00rootroot00000000000000import { Alias } from '../ast/Alias.js'
import { Node } from '../ast/Node.js'
import { Scalar } from '../ast/Scalar.js'
import { map } from '../tags/failsafe/map.js'
import { seq } from '../tags/failsafe/seq.js'
function findTagObject(value, tagName, tags) {
if (tagName) {
const match = tags.filter(t => t.tag === tagName)
const tagObj = match.find(t => !t.format) || match[0]
if (!tagObj) throw new Error(`Tag ${tagName} not found`)
return tagObj
}
// TODO: deprecate/remove class check
return tags.find(
t =>
((t.identify && t.identify(value)) ||
(t.class && value instanceof t.class)) &&
!t.format
)
}
export function createNode(value, tagName, ctx) {
if (value instanceof Node) return value
const { defaultPrefix, onTagObj, prevObjects, schema, wrapScalars } = ctx
if (tagName && tagName.startsWith('!!'))
tagName = defaultPrefix + tagName.slice(2)
let tagObj = findTagObject(value, tagName, schema.tags)
if (!tagObj) {
if (typeof value.toJSON === 'function') value = value.toJSON()
if (!value || typeof value !== 'object')
return wrapScalars ? new Scalar(value) : value
tagObj = value instanceof Map ? map : value[Symbol.iterator] ? seq : map
}
if (onTagObj) {
onTagObj(tagObj)
delete ctx.onTagObj
}
// Detect duplicate references to the same object & use Alias nodes for all
// after first. The `obj` wrapper allows for circular references to resolve.
const obj = { value: undefined, node: undefined }
if (value && typeof value === 'object' && prevObjects) {
const prev = prevObjects.get(value)
if (prev) {
const alias = new Alias(prev) // leaves source dirty; must be cleaned by caller
ctx.aliasNodes.push(alias) // defined along with prevObjects
return alias
}
obj.value = value
prevObjects.set(value, obj)
}
obj.node = tagObj.createNode
? tagObj.createNode(ctx.schema, value, ctx)
: wrapScalars
? new Scalar(value)
: value
if (tagName && obj.node instanceof Node) obj.node.tag = tagName
return obj.node
}
yaml-1.10.2/src/doc/getSchemaTags.js000066400000000000000000000016301402322402300171360ustar00rootroot00000000000000export function getSchemaTags(schemas, knownTags, customTags, schemaId) {
let tags = schemas[schemaId.replace(/\W/g, '')] // 'yaml-1.1' -> 'yaml11'
if (!tags) {
const keys = Object.keys(schemas)
.map(key => JSON.stringify(key))
.join(', ')
throw new Error(`Unknown schema "${schemaId}"; use one of ${keys}`)
}
if (Array.isArray(customTags)) {
for (const tag of customTags) tags = tags.concat(tag)
} else if (typeof customTags === 'function') {
tags = customTags(tags.slice())
}
for (let i = 0; i < tags.length; ++i) {
const tag = tags[i]
if (typeof tag === 'string') {
const tagObj = knownTags[tag]
if (!tagObj) {
const keys = Object.keys(knownTags)
.map(key => JSON.stringify(key))
.join(', ')
throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`)
}
tags[i] = tagObj
}
}
return tags
}
yaml-1.10.2/src/doc/listTagNames.js000066400000000000000000000010311402322402300170050ustar00rootroot00000000000000import { Collection, Pair, Scalar } from '../ast/index.js'
const visit = (node, tags) => {
if (node && typeof node === 'object') {
const { tag } = node
if (node instanceof Collection) {
if (tag) tags[tag] = true
node.items.forEach(n => visit(n, tags))
} else if (node instanceof Pair) {
visit(node.key, tags)
visit(node.value, tags)
} else if (node instanceof Scalar) {
if (tag) tags[tag] = true
}
}
return tags
}
export const listTagNames = node => Object.keys(visit(node, {}))
yaml-1.10.2/src/doc/parseContents.js000066400000000000000000000032611402322402300172510ustar00rootroot00000000000000import { Collection } from '../ast/index.js'
import { Type } from '../constants.js'
import { YAMLSyntaxError } from '../errors.js'
import { resolveNode } from '../resolve/resolveNode.js'
export function parseContents(doc, contents) {
const comments = { before: [], after: [] }
let body = undefined
let spaceBefore = false
for (const node of contents) {
if (node.valueRange) {
if (body !== undefined) {
const msg =
'Document contains trailing content not separated by a ... or --- line'
doc.errors.push(new YAMLSyntaxError(node, msg))
break
}
const res = resolveNode(doc, node)
if (spaceBefore) {
res.spaceBefore = true
spaceBefore = false
}
body = res
} else if (node.comment !== null) {
const cc = body === undefined ? comments.before : comments.after
cc.push(node.comment)
} else if (node.type === Type.BLANK_LINE) {
spaceBefore = true
if (
body === undefined &&
comments.before.length > 0 &&
!doc.commentBefore
) {
// space-separated comments at start are parsed as document comments
doc.commentBefore = comments.before.join('\n')
comments.before = []
}
}
}
doc.contents = body || null
if (!body) {
doc.comment = comments.before.concat(comments.after).join('\n') || null
} else {
const cb = comments.before.join('\n')
if (cb) {
const cbNode =
body instanceof Collection && body.items[0] ? body.items[0] : body
cbNode.commentBefore = cbNode.commentBefore
? `${cb}\n${cbNode.commentBefore}`
: cb
}
doc.comment = comments.after.join('\n') || null
}
}
yaml-1.10.2/src/doc/parseDirectives.js000066400000000000000000000050511402322402300175540ustar00rootroot00000000000000import { YAMLSemanticError, YAMLWarning } from '../errors.js'
import { documentOptions } from '../options.js'
function resolveTagDirective({ tagPrefixes }, directive) {
const [handle, prefix] = directive.parameters
if (!handle || !prefix) {
const msg = 'Insufficient parameters given for %TAG directive'
throw new YAMLSemanticError(directive, msg)
}
if (tagPrefixes.some(p => p.handle === handle)) {
const msg =
'The %TAG directive must only be given at most once per handle in the same document.'
throw new YAMLSemanticError(directive, msg)
}
return { handle, prefix }
}
function resolveYamlDirective(doc, directive) {
let [version] = directive.parameters
if (directive.name === 'YAML:1.0') version = '1.0'
if (!version) {
const msg = 'Insufficient parameters given for %YAML directive'
throw new YAMLSemanticError(directive, msg)
}
if (!documentOptions[version]) {
const v0 = doc.version || doc.options.version
const msg = `Document will be parsed as YAML ${v0} rather than YAML ${version}`
doc.warnings.push(new YAMLWarning(directive, msg))
}
return version
}
export function parseDirectives(doc, directives, prevDoc) {
const directiveComments = []
let hasDirectives = false
for (const directive of directives) {
const { comment, name } = directive
switch (name) {
case 'TAG':
try {
doc.tagPrefixes.push(resolveTagDirective(doc, directive))
} catch (error) {
doc.errors.push(error)
}
hasDirectives = true
break
case 'YAML':
case 'YAML:1.0':
if (doc.version) {
const msg =
'The %YAML directive must only be given at most once per document.'
doc.errors.push(new YAMLSemanticError(directive, msg))
}
try {
doc.version = resolveYamlDirective(doc, directive)
} catch (error) {
doc.errors.push(error)
}
hasDirectives = true
break
default:
if (name) {
const msg = `YAML only supports %TAG and %YAML directives, and not %${name}`
doc.warnings.push(new YAMLWarning(directive, msg))
}
}
if (comment) directiveComments.push(comment)
}
if (
prevDoc &&
!hasDirectives &&
'1.1' === (doc.version || prevDoc.version || doc.options.version)
) {
const copyTagPrefix = ({ handle, prefix }) => ({ handle, prefix })
doc.tagPrefixes = prevDoc.tagPrefixes.map(copyTagPrefix)
doc.version = prevDoc.version
}
doc.commentBefore = directiveComments.join('\n') || null
}
yaml-1.10.2/src/errors.js000066400000000000000000000034001402322402300151630ustar00rootroot00000000000000import { Node } from './cst/Node.js'
import { getLinePos, getPrettyContext } from './cst/source-utils.js'
import { Range } from './cst/Range.js'
export class YAMLError extends Error {
constructor(name, source, message) {
if (!message || !(source instanceof Node))
throw new Error(`Invalid arguments for new ${name}`)
super()
this.name = name
this.message = message
this.source = source
}
makePretty() {
if (!this.source) return
this.nodeType = this.source.type
const cst = this.source.context && this.source.context.root
if (typeof this.offset === 'number') {
this.range = new Range(this.offset, this.offset + 1)
const start = cst && getLinePos(this.offset, cst)
if (start) {
const end = { line: start.line, col: start.col + 1 }
this.linePos = { start, end }
}
delete this.offset
} else {
this.range = this.source.range
this.linePos = this.source.rangeAsLinePos
}
if (this.linePos) {
const { line, col } = this.linePos.start
this.message += ` at line ${line}, column ${col}`
const ctx = cst && getPrettyContext(this.linePos, cst)
if (ctx) this.message += `:\n\n${ctx}\n`
}
delete this.source
}
}
export class YAMLReferenceError extends YAMLError {
constructor(source, message) {
super('YAMLReferenceError', source, message)
}
}
export class YAMLSemanticError extends YAMLError {
constructor(source, message) {
super('YAMLSemanticError', source, message)
}
}
export class YAMLSyntaxError extends YAMLError {
constructor(source, message) {
super('YAMLSyntaxError', source, message)
}
}
export class YAMLWarning extends YAMLError {
constructor(source, message) {
super('YAMLWarning', source, message)
}
}
yaml-1.10.2/src/index.js000066400000000000000000000034451402322402300147670ustar00rootroot00000000000000import { parse as parseCST } from './cst/parse.js'
import { Document as YAMLDocument } from './doc/Document.js'
import { Schema } from './doc/Schema.js'
import { YAMLSemanticError } from './errors.js'
import { defaultOptions, scalarOptions } from './options.js'
import { warn } from './warnings.js'
function createNode(value, wrapScalars = true, tag) {
if (tag === undefined && typeof wrapScalars === 'string') {
tag = wrapScalars
wrapScalars = true
}
const options = Object.assign(
{},
YAMLDocument.defaults[defaultOptions.version],
defaultOptions
)
const schema = new Schema(options)
return schema.createNode(value, wrapScalars, tag)
}
class Document extends YAMLDocument {
constructor(options) {
super(Object.assign({}, defaultOptions, options))
}
}
function parseAllDocuments(src, options) {
const stream = []
let prev
for (const cstDoc of parseCST(src)) {
const doc = new Document(options)
doc.parse(cstDoc, prev)
stream.push(doc)
prev = doc
}
return stream
}
function parseDocument(src, options) {
const cst = parseCST(src)
const doc = new Document(options).parse(cst[0])
if (cst.length > 1) {
const errMsg =
'Source contains multiple documents; please use YAML.parseAllDocuments()'
doc.errors.unshift(new YAMLSemanticError(cst[1], errMsg))
}
return doc
}
function parse(src, options) {
const doc = parseDocument(src, options)
doc.warnings.forEach(warning => warn(warning))
if (doc.errors.length > 0) throw doc.errors[0]
return doc.toJSON()
}
function stringify(value, options) {
const doc = new Document(options)
doc.contents = value
return String(doc)
}
export const YAML = {
createNode,
defaultOptions,
Document,
parse,
parseAllDocuments,
parseCST,
parseDocument,
scalarOptions,
stringify
}
yaml-1.10.2/src/legacy-exports.js000066400000000000000000000004771402322402300166300ustar00rootroot00000000000000export { binary } from './tags/yaml-1.1/binary.js'
export { omap } from './tags/yaml-1.1/omap.js'
export { pairs } from './tags/yaml-1.1/pairs.js'
export { set } from './tags/yaml-1.1/set.js'
export { floatTime, intTime, timestamp } from './tags/yaml-1.1/timestamp.js'
export { warnFileDeprecation } from './warnings'
yaml-1.10.2/src/options.js000066400000000000000000000030311402322402300153420ustar00rootroot00000000000000import { defaultTagPrefix } from './constants.js'
import {
binaryOptions,
boolOptions,
intOptions,
nullOptions,
strOptions
} from './tags/options.js'
export const defaultOptions = {
anchorPrefix: 'a',
customTags: null,
indent: 2,
indentSeq: true,
keepCstNodes: false,
keepNodeTypes: true,
keepBlobsInJSON: true,
mapAsMap: false,
maxAliasCount: 100,
prettyErrors: false, // TODO Set true in v2
simpleKeys: false,
version: '1.2'
}
export const scalarOptions = {
get binary() {
return binaryOptions
},
set binary(opt) {
Object.assign(binaryOptions, opt)
},
get bool() {
return boolOptions
},
set bool(opt) {
Object.assign(boolOptions, opt)
},
get int() {
return intOptions
},
set int(opt) {
Object.assign(intOptions, opt)
},
get null() {
return nullOptions
},
set null(opt) {
Object.assign(nullOptions, opt)
},
get str() {
return strOptions
},
set str(opt) {
Object.assign(strOptions, opt)
}
}
export const documentOptions = {
'1.0': {
schema: 'yaml-1.1',
merge: true,
tagPrefixes: [
{ handle: '!', prefix: defaultTagPrefix },
{ handle: '!!', prefix: 'tag:private.yaml.org,2002:' }
]
},
1.1: {
schema: 'yaml-1.1',
merge: true,
tagPrefixes: [
{ handle: '!', prefix: '!' },
{ handle: '!!', prefix: defaultTagPrefix }
]
},
1.2: {
schema: 'core',
merge: false,
tagPrefixes: [
{ handle: '!', prefix: '!' },
{ handle: '!!', prefix: defaultTagPrefix }
]
}
}
yaml-1.10.2/src/resolve/000077500000000000000000000000001402322402300147735ustar00rootroot00000000000000yaml-1.10.2/src/resolve/collection-utils.js000066400000000000000000000043051402322402300206240ustar00rootroot00000000000000import { YAMLSemanticError } from '../errors.js'
import { Type } from '../constants.js'
export function checkFlowCollectionEnd(errors, cst) {
let char, name
switch (cst.type) {
case Type.FLOW_MAP:
char = '}'
name = 'flow map'
break
case Type.FLOW_SEQ:
char = ']'
name = 'flow sequence'
break
default:
errors.push(new YAMLSemanticError(cst, 'Not a flow collection!?'))
return
}
let lastItem
for (let i = cst.items.length - 1; i >= 0; --i) {
const item = cst.items[i]
if (!item || item.type !== Type.COMMENT) {
lastItem = item
break
}
}
if (lastItem && lastItem.char !== char) {
const msg = `Expected ${name} to end with ${char}`
let err
if (typeof lastItem.offset === 'number') {
err = new YAMLSemanticError(cst, msg)
err.offset = lastItem.offset + 1
} else {
err = new YAMLSemanticError(lastItem, msg)
if (lastItem.range && lastItem.range.end)
err.offset = lastItem.range.end - lastItem.range.start
}
errors.push(err)
}
}
export function checkFlowCommentSpace(errors, comment) {
const prev = comment.context.src[comment.range.start - 1]
if (prev !== '\n' && prev !== '\t' && prev !== ' ') {
const msg =
'Comments must be separated from other tokens by white space characters'
errors.push(new YAMLSemanticError(comment, msg))
}
}
export function getLongKeyError(source, key) {
const sk = String(key)
const k = sk.substr(0, 8) + '...' + sk.substr(-8)
return new YAMLSemanticError(source, `The "${k}" key is too long`)
}
export function resolveComments(collection, comments) {
for (const { afterKey, before, comment } of comments) {
let item = collection.items[before]
if (!item) {
if (comment !== undefined) {
if (collection.comment) collection.comment += '\n' + comment
else collection.comment = comment
}
} else {
if (afterKey && item.value) item = item.value
if (comment === undefined) {
if (afterKey || !item.commentBefore) item.spaceBefore = true
} else {
if (item.commentBefore) item.commentBefore += '\n' + comment
else item.commentBefore = comment
}
}
}
}
yaml-1.10.2/src/resolve/resolveMap.js000066400000000000000000000217241402322402300174540ustar00rootroot00000000000000import { Alias } from '../ast/Alias.js'
import { Collection } from '../ast/Collection.js'
import { Merge, MERGE_KEY } from '../ast/Merge.js'
import { Pair } from '../ast/Pair.js'
import { YAMLMap } from '../ast/YAMLMap.js'
import { Char, Type } from '../constants.js'
import { PlainValue } from '../cst/PlainValue.js'
import { YAMLSemanticError, YAMLSyntaxError, YAMLWarning } from '../errors.js'
import {
checkFlowCollectionEnd,
checkFlowCommentSpace,
getLongKeyError,
resolveComments
} from './collection-utils.js'
import { resolveNode } from './resolveNode.js'
export function resolveMap(doc, cst) {
if (cst.type !== Type.MAP && cst.type !== Type.FLOW_MAP) {
const msg = `A ${cst.type} node cannot be resolved as a mapping`
doc.errors.push(new YAMLSyntaxError(cst, msg))
return null
}
const { comments, items } =
cst.type === Type.FLOW_MAP
? resolveFlowMapItems(doc, cst)
: resolveBlockMapItems(doc, cst)
const map = new YAMLMap()
map.items = items
resolveComments(map, comments)
let hasCollectionKey = false
for (let i = 0; i < items.length; ++i) {
const { key: iKey } = items[i]
if (iKey instanceof Collection) hasCollectionKey = true
if (doc.schema.merge && iKey && iKey.value === MERGE_KEY) {
items[i] = new Merge(items[i])
const sources = items[i].value.items
let error = null
sources.some(node => {
if (node instanceof Alias) {
// During parsing, alias sources are CST nodes; to account for
// circular references their resolved values can't be used here.
const { type } = node.source
if (type === Type.MAP || type === Type.FLOW_MAP) return false
return (error = 'Merge nodes aliases can only point to maps')
}
return (error = 'Merge nodes can only have Alias nodes as values')
})
if (error) doc.errors.push(new YAMLSemanticError(cst, error))
} else {
for (let j = i + 1; j < items.length; ++j) {
const { key: jKey } = items[j]
if (
iKey === jKey ||
(iKey &&
jKey &&
Object.prototype.hasOwnProperty.call(iKey, 'value') &&
iKey.value === jKey.value)
) {
const msg = `Map keys must be unique; "${iKey}" is repeated`
doc.errors.push(new YAMLSemanticError(cst, msg))
break
}
}
}
}
if (hasCollectionKey && !doc.options.mapAsMap) {
const warn =
'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'
doc.warnings.push(new YAMLWarning(cst, warn))
}
cst.resolved = map
return map
}
const valueHasPairComment = ({ context: { lineStart, node, src }, props }) => {
if (props.length === 0) return false
const { start } = props[0]
if (node && start > node.valueRange.start) return false
if (src[start] !== Char.COMMENT) return false
for (let i = lineStart; i < start; ++i) if (src[i] === '\n') return false
return true
}
function resolvePairComment(item, pair) {
if (!valueHasPairComment(item)) return
const comment = item.getPropValue(0, Char.COMMENT, true)
let found = false
const cb = pair.value.commentBefore
if (cb && cb.startsWith(comment)) {
pair.value.commentBefore = cb.substr(comment.length + 1)
found = true
} else {
const cc = pair.value.comment
if (!item.node && cc && cc.startsWith(comment)) {
pair.value.comment = cc.substr(comment.length + 1)
found = true
}
}
if (found) pair.comment = comment
}
function resolveBlockMapItems(doc, cst) {
const comments = []
const items = []
let key = undefined
let keyStart = null
for (let i = 0; i < cst.items.length; ++i) {
const item = cst.items[i]
switch (item.type) {
case Type.BLANK_LINE:
comments.push({ afterKey: !!key, before: items.length })
break
case Type.COMMENT:
comments.push({
afterKey: !!key,
before: items.length,
comment: item.comment
})
break
case Type.MAP_KEY:
if (key !== undefined) items.push(new Pair(key))
if (item.error) doc.errors.push(item.error)
key = resolveNode(doc, item.node)
keyStart = null
break
case Type.MAP_VALUE:
{
if (key === undefined) key = null
if (item.error) doc.errors.push(item.error)
if (
!item.context.atLineStart &&
item.node &&
item.node.type === Type.MAP &&
!item.node.context.atLineStart
) {
const msg = 'Nested mappings are not allowed in compact mappings'
doc.errors.push(new YAMLSemanticError(item.node, msg))
}
let valueNode = item.node
if (!valueNode && item.props.length > 0) {
// Comments on an empty mapping value need to be preserved, so we
// need to construct a minimal empty node here to use instead of the
// missing `item.node`. -- eemeli/yaml#19
valueNode = new PlainValue(Type.PLAIN, [])
valueNode.context = { parent: item, src: item.context.src }
const pos = item.range.start + 1
valueNode.range = { start: pos, end: pos }
valueNode.valueRange = { start: pos, end: pos }
if (typeof item.range.origStart === 'number') {
const origPos = item.range.origStart + 1
valueNode.range.origStart = valueNode.range.origEnd = origPos
valueNode.valueRange.origStart = valueNode.valueRange.origEnd = origPos
}
}
const pair = new Pair(key, resolveNode(doc, valueNode))
resolvePairComment(item, pair)
items.push(pair)
if (key && typeof keyStart === 'number') {
if (item.range.start > keyStart + 1024)
doc.errors.push(getLongKeyError(cst, key))
}
key = undefined
keyStart = null
}
break
default:
if (key !== undefined) items.push(new Pair(key))
key = resolveNode(doc, item)
keyStart = item.range.start
if (item.error) doc.errors.push(item.error)
next: for (let j = i + 1; ; ++j) {
const nextItem = cst.items[j]
switch (nextItem && nextItem.type) {
case Type.BLANK_LINE:
case Type.COMMENT:
continue next
case Type.MAP_VALUE:
break next
default: {
const msg = 'Implicit map keys need to be followed by map values'
doc.errors.push(new YAMLSemanticError(item, msg))
break next
}
}
}
if (item.valueRangeContainsNewline) {
const msg = 'Implicit map keys need to be on a single line'
doc.errors.push(new YAMLSemanticError(item, msg))
}
}
}
if (key !== undefined) items.push(new Pair(key))
return { comments, items }
}
function resolveFlowMapItems(doc, cst) {
const comments = []
const items = []
let key = undefined
let explicitKey = false
let next = '{'
for (let i = 0; i < cst.items.length; ++i) {
const item = cst.items[i]
if (typeof item.char === 'string') {
const { char, offset } = item
if (char === '?' && key === undefined && !explicitKey) {
explicitKey = true
next = ':'
continue
}
if (char === ':') {
if (key === undefined) key = null
if (next === ':') {
next = ','
continue
}
} else {
if (explicitKey) {
if (key === undefined && char !== ',') key = null
explicitKey = false
}
if (key !== undefined) {
items.push(new Pair(key))
key = undefined
if (char === ',') {
next = ':'
continue
}
}
}
if (char === '}') {
if (i === cst.items.length - 1) continue
} else if (char === next) {
next = ':'
continue
}
const msg = `Flow map contains an unexpected ${char}`
const err = new YAMLSyntaxError(cst, msg)
err.offset = offset
doc.errors.push(err)
} else if (item.type === Type.BLANK_LINE) {
comments.push({ afterKey: !!key, before: items.length })
} else if (item.type === Type.COMMENT) {
checkFlowCommentSpace(doc.errors, item)
comments.push({
afterKey: !!key,
before: items.length,
comment: item.comment
})
} else if (key === undefined) {
if (next === ',')
doc.errors.push(
new YAMLSemanticError(item, 'Separator , missing in flow map')
)
key = resolveNode(doc, item)
} else {
if (next !== ',')
doc.errors.push(
new YAMLSemanticError(item, 'Indicator : missing in flow map entry')
)
items.push(new Pair(key, resolveNode(doc, item)))
key = undefined
explicitKey = false
}
}
checkFlowCollectionEnd(doc.errors, cst)
if (key !== undefined) items.push(new Pair(key))
return { comments, items }
}
yaml-1.10.2/src/resolve/resolveNode.js000066400000000000000000000104341402322402300176200ustar00rootroot00000000000000import { Alias } from '../ast/Alias.js'
import { Char, Type } from '../constants.js'
import {
YAMLReferenceError,
YAMLSemanticError,
YAMLSyntaxError
} from '../errors.js'
import { resolveScalar } from './resolveScalar.js'
import { resolveString } from './resolveString.js'
import { resolveTagName } from './resolveTagName.js'
import { resolveTag } from './resolveTag.js'
const isCollectionItem = node => {
if (!node) return false
const { type } = node
return (
type === Type.MAP_KEY || type === Type.MAP_VALUE || type === Type.SEQ_ITEM
)
}
function resolveNodeProps(errors, node) {
const comments = { before: [], after: [] }
let hasAnchor = false
let hasTag = false
const props = isCollectionItem(node.context.parent)
? node.context.parent.props.concat(node.props)
: node.props
for (const { start, end } of props) {
switch (node.context.src[start]) {
case Char.COMMENT: {
if (!node.commentHasRequiredWhitespace(start)) {
const msg =
'Comments must be separated from other tokens by white space characters'
errors.push(new YAMLSemanticError(node, msg))
}
const { header, valueRange } = node
const cc =
valueRange &&
(start > valueRange.start || (header && start > header.start))
? comments.after
: comments.before
cc.push(node.context.src.slice(start + 1, end))
break
}
// Actual anchor & tag resolution is handled by schema, here we just complain
case Char.ANCHOR:
if (hasAnchor) {
const msg = 'A node can have at most one anchor'
errors.push(new YAMLSemanticError(node, msg))
}
hasAnchor = true
break
case Char.TAG:
if (hasTag) {
const msg = 'A node can have at most one tag'
errors.push(new YAMLSemanticError(node, msg))
}
hasTag = true
break
}
}
return { comments, hasAnchor, hasTag }
}
function resolveNodeValue(doc, node) {
const { anchors, errors, schema } = doc
if (node.type === Type.ALIAS) {
const name = node.rawValue
const src = anchors.getNode(name)
if (!src) {
const msg = `Aliased anchor not found: ${name}`
errors.push(new YAMLReferenceError(node, msg))
return null
}
// Lazy resolution for circular references
const res = new Alias(src)
anchors._cstAliases.push(res)
return res
}
const tagName = resolveTagName(doc, node)
if (tagName) return resolveTag(doc, node, tagName)
if (node.type !== Type.PLAIN) {
const msg = `Failed to resolve ${node.type} node here`
errors.push(new YAMLSyntaxError(node, msg))
return null
}
try {
const str = resolveString(doc, node)
return resolveScalar(str, schema.tags, schema.tags.scalarFallback)
} catch (error) {
if (!error.source) error.source = node
errors.push(error)
return null
}
}
// sets node.resolved on success
export function resolveNode(doc, node) {
if (!node) return null
if (node.error) doc.errors.push(node.error)
const { comments, hasAnchor, hasTag } = resolveNodeProps(doc.errors, node)
if (hasAnchor) {
const { anchors } = doc
const name = node.anchor
const prev = anchors.getNode(name)
// At this point, aliases for any preceding node with the same anchor
// name have already been resolved, so it may safely be renamed.
if (prev) anchors.map[anchors.newName(name)] = prev
// During parsing, we need to store the CST node in anchors.map as
// anchors need to be available during resolution to allow for
// circular references.
anchors.map[name] = node
}
if (node.type === Type.ALIAS && (hasAnchor || hasTag)) {
const msg = 'An alias node must not specify any properties'
doc.errors.push(new YAMLSemanticError(node, msg))
}
const res = resolveNodeValue(doc, node)
if (res) {
res.range = [node.range.start, node.range.end]
if (doc.options.keepCstNodes) res.cstNode = node
if (doc.options.keepNodeTypes) res.type = node.type
const cb = comments.before.join('\n')
if (cb) {
res.commentBefore = res.commentBefore ? `${res.commentBefore}\n${cb}` : cb
}
const ca = comments.after.join('\n')
if (ca) res.comment = res.comment ? `${res.comment}\n${ca}` : ca
}
return (node.resolved = res)
}
yaml-1.10.2/src/resolve/resolveScalar.js000066400000000000000000000010041402322402300201310ustar00rootroot00000000000000import { Scalar } from '../ast/Scalar.js'
// falls back to string on no match
export function resolveScalar(str, tags, scalarFallback) {
for (const { format, test, resolve } of tags) {
if (test) {
const match = str.match(test)
if (match) {
let res = resolve.apply(null, match)
if (!(res instanceof Scalar)) res = new Scalar(res)
if (format) res.format = format
return res
}
}
}
if (scalarFallback) str = scalarFallback(str)
return new Scalar(str)
}
yaml-1.10.2/src/resolve/resolveSeq.js000066400000000000000000000117001402322402300174600ustar00rootroot00000000000000import { Collection } from '../ast/Collection.js'
import { Pair } from '../ast/Pair.js'
import { YAMLSeq } from '../ast/YAMLSeq.js'
import { Type } from '../constants.js'
import { YAMLSemanticError, YAMLSyntaxError, YAMLWarning } from '../errors.js'
import {
checkFlowCollectionEnd,
checkFlowCommentSpace,
getLongKeyError,
resolveComments
} from './collection-utils.js'
import { resolveNode } from './resolveNode.js'
export function resolveSeq(doc, cst) {
if (cst.type !== Type.SEQ && cst.type !== Type.FLOW_SEQ) {
const msg = `A ${cst.type} node cannot be resolved as a sequence`
doc.errors.push(new YAMLSyntaxError(cst, msg))
return null
}
const { comments, items } =
cst.type === Type.FLOW_SEQ
? resolveFlowSeqItems(doc, cst)
: resolveBlockSeqItems(doc, cst)
const seq = new YAMLSeq()
seq.items = items
resolveComments(seq, comments)
if (
!doc.options.mapAsMap &&
items.some(it => it instanceof Pair && it.key instanceof Collection)
) {
const warn =
'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'
doc.warnings.push(new YAMLWarning(cst, warn))
}
cst.resolved = seq
return seq
}
function resolveBlockSeqItems(doc, cst) {
const comments = []
const items = []
for (let i = 0; i < cst.items.length; ++i) {
const item = cst.items[i]
switch (item.type) {
case Type.BLANK_LINE:
comments.push({ before: items.length })
break
case Type.COMMENT:
comments.push({ comment: item.comment, before: items.length })
break
case Type.SEQ_ITEM:
if (item.error) doc.errors.push(item.error)
items.push(resolveNode(doc, item.node))
if (item.hasProps) {
const msg =
'Sequence items cannot have tags or anchors before the - indicator'
doc.errors.push(new YAMLSemanticError(item, msg))
}
break
default:
if (item.error) doc.errors.push(item.error)
doc.errors.push(
new YAMLSyntaxError(item, `Unexpected ${item.type} node in sequence`)
)
}
}
return { comments, items }
}
function resolveFlowSeqItems(doc, cst) {
const comments = []
const items = []
let explicitKey = false
let key = undefined
let keyStart = null
let next = '['
let prevItem = null
for (let i = 0; i < cst.items.length; ++i) {
const item = cst.items[i]
if (typeof item.char === 'string') {
const { char, offset } = item
if (char !== ':' && (explicitKey || key !== undefined)) {
if (explicitKey && key === undefined) key = next ? items.pop() : null
items.push(new Pair(key))
explicitKey = false
key = undefined
keyStart = null
}
if (char === next) {
next = null
} else if (!next && char === '?') {
explicitKey = true
} else if (next !== '[' && char === ':' && key === undefined) {
if (next === ',') {
key = items.pop()
if (key instanceof Pair) {
const msg = 'Chaining flow sequence pairs is invalid'
const err = new YAMLSemanticError(cst, msg)
err.offset = offset
doc.errors.push(err)
}
if (!explicitKey && typeof keyStart === 'number') {
const keyEnd = item.range ? item.range.start : item.offset
if (keyEnd > keyStart + 1024)
doc.errors.push(getLongKeyError(cst, key))
const { src } = prevItem.context
for (let i = keyStart; i < keyEnd; ++i)
if (src[i] === '\n') {
const msg =
'Implicit keys of flow sequence pairs need to be on a single line'
doc.errors.push(new YAMLSemanticError(prevItem, msg))
break
}
}
} else {
key = null
}
keyStart = null
explicitKey = false
next = null
} else if (next === '[' || char !== ']' || i < cst.items.length - 1) {
const msg = `Flow sequence contains an unexpected ${char}`
const err = new YAMLSyntaxError(cst, msg)
err.offset = offset
doc.errors.push(err)
}
} else if (item.type === Type.BLANK_LINE) {
comments.push({ before: items.length })
} else if (item.type === Type.COMMENT) {
checkFlowCommentSpace(doc.errors, item)
comments.push({ comment: item.comment, before: items.length })
} else {
if (next) {
const msg = `Expected a ${next} in flow sequence`
doc.errors.push(new YAMLSemanticError(item, msg))
}
const value = resolveNode(doc, item)
if (key === undefined) {
items.push(value)
prevItem = item
} else {
items.push(new Pair(key, value))
key = undefined
}
keyStart = item.range.start
next = ','
}
}
checkFlowCollectionEnd(doc.errors, cst)
if (key !== undefined) items.push(new Pair(key))
return { comments, items }
}
yaml-1.10.2/src/resolve/resolveString.js000066400000000000000000000004771402322402300202070ustar00rootroot00000000000000// on error, will return { str: string, errors: Error[] }
export function resolveString(doc, node) {
const res = node.strValue
if (!res) return ''
if (typeof res === 'string') return res
res.errors.forEach(error => {
if (!error.source) error.source = node
doc.errors.push(error)
})
return res.str
}
yaml-1.10.2/src/resolve/resolveTag.js000066400000000000000000000036321402322402300174500ustar00rootroot00000000000000import { Collection } from '../ast/Collection.js'
import { Scalar } from '../ast/Scalar.js'
import { Type, defaultTags } from '../constants.js'
import { YAMLReferenceError, YAMLWarning } from '../errors.js'
import { resolveScalar } from './resolveScalar.js'
import { resolveString } from './resolveString.js'
function resolveByTagName(doc, node, tagName) {
const { tags } = doc.schema
const matchWithTest = []
for (const tag of tags) {
if (tag.tag === tagName) {
if (tag.test) matchWithTest.push(tag)
else {
const res = tag.resolve(doc, node)
return res instanceof Collection ? res : new Scalar(res)
}
}
}
const str = resolveString(doc, node)
if (typeof str === 'string' && matchWithTest.length > 0)
return resolveScalar(str, matchWithTest, tags.scalarFallback)
return null
}
function getFallbackTagName({ type }) {
switch (type) {
case Type.FLOW_MAP:
case Type.MAP:
return defaultTags.MAP
case Type.FLOW_SEQ:
case Type.SEQ:
return defaultTags.SEQ
default:
return defaultTags.STR
}
}
export function resolveTag(doc, node, tagName) {
try {
const res = resolveByTagName(doc, node, tagName)
if (res) {
if (tagName && node.tag) res.tag = tagName
return res
}
} catch (error) {
/* istanbul ignore if */
if (!error.source) error.source = node
doc.errors.push(error)
return null
}
try {
const fallback = getFallbackTagName(node)
if (!fallback) throw new Error(`The tag ${tagName} is unavailable`)
const msg = `The tag ${tagName} is unavailable, falling back to ${fallback}`
doc.warnings.push(new YAMLWarning(node, msg))
const res = resolveByTagName(doc, node, fallback)
res.tag = tagName
return res
} catch (error) {
const refError = new YAMLReferenceError(node, error.message)
refError.stack = error.stack
doc.errors.push(refError)
return null
}
}
yaml-1.10.2/src/resolve/resolveTagName.js000066400000000000000000000041471402322402300202530ustar00rootroot00000000000000import { Type, defaultTags } from '../constants.js'
import { YAMLSemanticError, YAMLWarning } from '../errors.js'
function resolveTagHandle(doc, node) {
const { handle, suffix } = node.tag
let prefix = doc.tagPrefixes.find(p => p.handle === handle)
if (!prefix) {
const dtp = doc.getDefaults().tagPrefixes
if (dtp) prefix = dtp.find(p => p.handle === handle)
if (!prefix)
throw new YAMLSemanticError(
node,
`The ${handle} tag handle is non-default and was not declared.`
)
}
if (!suffix)
throw new YAMLSemanticError(node, `The ${handle} tag has no suffix.`)
if (handle === '!' && (doc.version || doc.options.version) === '1.0') {
if (suffix[0] === '^') {
doc.warnings.push(
new YAMLWarning(node, 'YAML 1.0 ^ tag expansion is not supported')
)
return suffix
}
if (/[:/]/.test(suffix)) {
// word/foo -> tag:word.yaml.org,2002:foo
const vocab = suffix.match(/^([a-z0-9-]+)\/(.*)/i)
return vocab
? `tag:${vocab[1]}.yaml.org,2002:${vocab[2]}`
: `tag:${suffix}`
}
}
return prefix.prefix + decodeURIComponent(suffix)
}
export function resolveTagName(doc, node) {
const { tag, type } = node
let nonSpecific = false
if (tag) {
const { handle, suffix, verbatim } = tag
if (verbatim) {
if (verbatim !== '!' && verbatim !== '!!') return verbatim
const msg = `Verbatim tags aren't resolved, so ${verbatim} is invalid.`
doc.errors.push(new YAMLSemanticError(node, msg))
} else if (handle === '!' && !suffix) {
nonSpecific = true
} else {
try {
return resolveTagHandle(doc, node)
} catch (error) {
doc.errors.push(error)
}
}
}
switch (type) {
case Type.BLOCK_FOLDED:
case Type.BLOCK_LITERAL:
case Type.QUOTE_DOUBLE:
case Type.QUOTE_SINGLE:
return defaultTags.STR
case Type.FLOW_MAP:
case Type.MAP:
return defaultTags.MAP
case Type.FLOW_SEQ:
case Type.SEQ:
return defaultTags.SEQ
case Type.PLAIN:
return nonSpecific ? defaultTags.STR : null
default:
return null
}
}
yaml-1.10.2/src/stringify/000077500000000000000000000000001402322402300153325ustar00rootroot00000000000000yaml-1.10.2/src/stringify/addComment.js000066400000000000000000000006011402322402300177400ustar00rootroot00000000000000export function addCommentBefore(str, indent, comment) {
if (!comment) return str
const cc = comment.replace(/[\s\S]^/gm, `$&${indent}#`)
return `#${cc}\n${indent}${str}`
}
export function addComment(str, indent, comment) {
return !comment
? str
: comment.indexOf('\n') === -1
? `${str} #${comment}`
: `${str}\n` + comment.replace(/^/gm, `${indent || ''}#`)
}
yaml-1.10.2/src/stringify/foldFlowLines.js000066400000000000000000000103321402322402300204360ustar00rootroot00000000000000export const FOLD_FLOW = 'flow'
export const FOLD_BLOCK = 'block'
export const FOLD_QUOTED = 'quoted'
// presumes i+1 is at the start of a line
// returns index of last newline in more-indented block
const consumeMoreIndentedLines = (text, i) => {
let ch = text[i + 1]
while (ch === ' ' || ch === '\t') {
do {
ch = text[(i += 1)]
} while (ch && ch !== '\n')
ch = text[i + 1]
}
return i
}
/**
* Tries to keep input at up to `lineWidth` characters, splitting only on spaces
* not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are
* terminated with `\n` and started with `indent`.
*
* @param {string} text
* @param {string} indent
* @param {string} [mode='flow'] `'block'` prevents more-indented lines
* from being folded; `'quoted'` allows for `\` escapes, including escaped
* newlines
* @param {Object} options
* @param {number} [options.indentAtStart] Accounts for leading contents on
* the first line, defaulting to `indent.length`
* @param {number} [options.lineWidth=80]
* @param {number} [options.minContentWidth=20] Allow highly indented lines to
* stretch the line width or indent content from the start
* @param {function} options.onFold Called once if the text is folded
* @param {function} options.onFold Called once if any line of text exceeds
* lineWidth characters
*/
export function foldFlowLines(
text,
indent,
mode,
{ indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow }
) {
if (!lineWidth || lineWidth < 0) return text
const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length)
if (text.length <= endStep) return text
const folds = []
const escapedFolds = {}
let end = lineWidth - indent.length
if (typeof indentAtStart === 'number') {
if (indentAtStart > lineWidth - Math.max(2, minContentWidth)) folds.push(0)
else end = lineWidth - indentAtStart
}
let split = undefined
let prev = undefined
let overflow = false
let i = -1
let escStart = -1
let escEnd = -1
if (mode === FOLD_BLOCK) {
i = consumeMoreIndentedLines(text, i)
if (i !== -1) end = i + endStep
}
for (let ch; (ch = text[(i += 1)]); ) {
if (mode === FOLD_QUOTED && ch === '\\') {
escStart = i
switch (text[i + 1]) {
case 'x':
i += 3
break
case 'u':
i += 5
break
case 'U':
i += 9
break
default:
i += 1
}
escEnd = i
}
if (ch === '\n') {
if (mode === FOLD_BLOCK) i = consumeMoreIndentedLines(text, i)
end = i + endStep
split = undefined
} else {
if (
ch === ' ' &&
prev &&
prev !== ' ' &&
prev !== '\n' &&
prev !== '\t'
) {
// space surrounded by non-space can be replaced with newline + indent
const next = text[i + 1]
if (next && next !== ' ' && next !== '\n' && next !== '\t') split = i
}
if (i >= end) {
if (split) {
folds.push(split)
end = split + endStep
split = undefined
} else if (mode === FOLD_QUOTED) {
// white-space collected at end may stretch past lineWidth
while (prev === ' ' || prev === '\t') {
prev = ch
ch = text[(i += 1)]
overflow = true
}
// Account for newline escape, but don't break preceding escape
const j = i > escEnd + 1 ? i - 2 : escStart - 1
// Bail out if lineWidth & minContentWidth are shorter than an escape string
if (escapedFolds[j]) return text
folds.push(j)
escapedFolds[j] = true
end = j + endStep
split = undefined
} else {
overflow = true
}
}
}
prev = ch
}
if (overflow && onOverflow) onOverflow()
if (folds.length === 0) return text
if (onFold) onFold()
let res = text.slice(0, folds[0])
for (let i = 0; i < folds.length; ++i) {
const fold = folds[i]
const end = folds[i + 1] || text.length
if (fold === 0) res = `\n${indent}${text.slice(0, end)}`
else {
if (mode === FOLD_QUOTED && escapedFolds[fold]) res += `${text[fold]}\\`
res += `\n${indent}${text.slice(fold + 1, end)}`
}
}
return res
}
yaml-1.10.2/src/stringify/stringify.js000066400000000000000000000054151402322402300177130ustar00rootroot00000000000000import { Alias } from '../ast/Alias.js'
import { Node } from '../ast/Node.js'
import { Pair } from '../ast/Pair.js'
import { Scalar } from '../ast/Scalar.js'
import { stringifyString } from './stringifyString.js'
import { stringifyTag } from './stringifyTag.js'
function getTagObject(tags, item) {
if (item instanceof Alias) return Alias
if (item.tag) {
const match = tags.filter(t => t.tag === item.tag)
if (match.length > 0)
return match.find(t => t.format === item.format) || match[0]
}
let tagObj, obj
if (item instanceof Scalar) {
obj = item.value
// TODO: deprecate/remove class check
const match = tags.filter(
t =>
(t.identify && t.identify(obj)) || (t.class && obj instanceof t.class)
)
tagObj =
match.find(t => t.format === item.format) || match.find(t => !t.format)
} else {
obj = item
tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass)
}
if (!tagObj) {
const name = obj && obj.constructor ? obj.constructor.name : typeof obj
throw new Error(`Tag not resolved for ${name} value`)
}
return tagObj
}
// needs to be called before value stringifier to allow for circular anchor refs
function stringifyProps(node, tagObj, { anchors, doc }) {
const props = []
const anchor = doc.anchors.getName(node)
if (anchor) {
anchors[anchor] = node
props.push(`&${anchor}`)
}
if (node.tag) {
props.push(stringifyTag(doc, node.tag))
} else if (!tagObj.default) {
props.push(stringifyTag(doc, tagObj.tag))
}
return props.join(' ')
}
export function stringify(item, ctx, onComment, onChompKeep) {
const { anchors, schema } = ctx.doc
let tagObj
if (!(item instanceof Node)) {
const createCtx = {
aliasNodes: [],
onTagObj: o => (tagObj = o),
prevObjects: new Map()
}
item = schema.createNode(item, true, null, createCtx)
for (const alias of createCtx.aliasNodes) {
alias.source = alias.source.node
let name = anchors.getName(alias.source)
if (!name) {
name = anchors.newName()
anchors.map[name] = alias.source
}
}
}
if (item instanceof Pair) return item.toString(ctx, onComment, onChompKeep)
if (!tagObj) tagObj = getTagObject(schema.tags, item)
const props = stringifyProps(item, tagObj, ctx)
if (props.length > 0)
ctx.indentAtStart = (ctx.indentAtStart || 0) + props.length + 1
const str =
typeof tagObj.stringify === 'function'
? tagObj.stringify(item, ctx, onComment, onChompKeep)
: item instanceof Scalar
? stringifyString(item, ctx, onComment, onChompKeep)
: item.toString(ctx, onComment, onChompKeep)
if (!props) return str
return item instanceof Scalar || str[0] === '{' || str[0] === '['
? `${props} ${str}`
: `${props}\n${ctx.indent}${str}`
}
yaml-1.10.2/src/stringify/stringifyNumber.js000066400000000000000000000010521402322402300210550ustar00rootroot00000000000000export function stringifyNumber({ format, minFractionDigits, tag, value }) {
if (typeof value === 'bigint') return String(value)
if (!isFinite(value))
return isNaN(value) ? '.nan' : value < 0 ? '-.inf' : '.inf'
let n = JSON.stringify(value)
if (
!format &&
minFractionDigits &&
(!tag || tag === 'tag:yaml.org,2002:float') &&
/^\d/.test(n)
) {
let i = n.indexOf('.')
if (i < 0) {
i = n.length
n += '.'
}
let d = minFractionDigits - (n.length - i - 1)
while (d-- > 0) n += '0'
}
return n
}
yaml-1.10.2/src/stringify/stringifyString.js000066400000000000000000000232371402322402300211040ustar00rootroot00000000000000import { addCommentBefore } from './addComment.js'
import { Type } from '../constants.js'
import { resolveScalar } from '../resolve/resolveScalar.js'
import {
foldFlowLines,
FOLD_BLOCK,
FOLD_FLOW,
FOLD_QUOTED
} from './foldFlowLines.js'
import { strOptions } from '../tags/options.js'
const getFoldOptions = ({ indentAtStart }) =>
indentAtStart
? Object.assign({ indentAtStart }, strOptions.fold)
: strOptions.fold
// Also checks for lines starting with %, as parsing the output as YAML 1.1 will
// presume that's starting a new document.
const containsDocumentMarker = str => /^(%|---|\.\.\.)/m.test(str)
function lineLengthOverLimit(str, lineWidth, indentLength) {
if (!lineWidth || lineWidth < 0) return false
const limit = lineWidth - indentLength
const strLen = str.length
if (strLen <= limit) return false
for (let i = 0, start = 0; i < strLen; ++i) {
if (str[i] === '\n') {
if (i - start > limit) return true
start = i + 1
if (strLen - start <= limit) return false
}
}
return true
}
function doubleQuotedString(value, ctx) {
const { implicitKey } = ctx
const { jsonEncoding, minMultiLineLength } = strOptions.doubleQuoted
const json = JSON.stringify(value)
if (jsonEncoding) return json
const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '')
let str = ''
let start = 0
for (let i = 0, ch = json[i]; ch; ch = json[++i]) {
if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') {
// space before newline needs to be escaped to not be folded
str += json.slice(start, i) + '\\ '
i += 1
start = i
ch = '\\'
}
if (ch === '\\')
switch (json[i + 1]) {
case 'u':
{
str += json.slice(start, i)
const code = json.substr(i + 2, 4)
switch (code) {
case '0000':
str += '\\0'
break
case '0007':
str += '\\a'
break
case '000b':
str += '\\v'
break
case '001b':
str += '\\e'
break
case '0085':
str += '\\N'
break
case '00a0':
str += '\\_'
break
case '2028':
str += '\\L'
break
case '2029':
str += '\\P'
break
default:
if (code.substr(0, 2) === '00') str += '\\x' + code.substr(2)
else str += json.substr(i, 6)
}
i += 5
start = i + 1
}
break
case 'n':
if (
implicitKey ||
json[i + 2] === '"' ||
json.length < minMultiLineLength
) {
i += 1
} else {
// folding will eat first newline
str += json.slice(start, i) + '\n\n'
while (
json[i + 2] === '\\' &&
json[i + 3] === 'n' &&
json[i + 4] !== '"'
) {
str += '\n'
i += 2
}
str += indent
// space after newline needs to be escaped to not be folded
if (json[i + 2] === ' ') str += '\\'
i += 1
start = i + 1
}
break
default:
i += 1
}
}
str = start ? str + json.slice(start) : json
return implicitKey
? str
: foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx))
}
function singleQuotedString(value, ctx) {
if (ctx.implicitKey) {
if (/\n/.test(value)) return doubleQuotedString(value, ctx)
} else {
// single quoted string can't have leading or trailing whitespace around newline
if (/[ \t]\n|\n[ \t]/.test(value)) return doubleQuotedString(value, ctx)
}
const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '')
const res =
"'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'"
return ctx.implicitKey
? res
: foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx))
}
function blockString({ comment, type, value }, ctx, onComment, onChompKeep) {
// 1. Block can't end in whitespace unless the last line is non-empty.
// 2. Strings consisting of only whitespace are best rendered explicitly.
if (/\n[\t ]+$/.test(value) || /^\s*$/.test(value)) {
return doubleQuotedString(value, ctx)
}
const indent =
ctx.indent ||
(ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '')
const indentSize = indent ? '2' : '1' // root is at -1
const literal =
type === Type.BLOCK_FOLDED
? false
: type === Type.BLOCK_LITERAL
? true
: !lineLengthOverLimit(value, strOptions.fold.lineWidth, indent.length)
let header = literal ? '|' : '>'
if (!value) return header + '\n'
let wsStart = ''
let wsEnd = ''
value = value
.replace(/[\n\t ]*$/, ws => {
const n = ws.indexOf('\n')
if (n === -1) {
header += '-' // strip
} else if (value === ws || n !== ws.length - 1) {
header += '+' // keep
if (onChompKeep) onChompKeep()
}
wsEnd = ws.replace(/\n$/, '')
return ''
})
.replace(/^[\n ]*/, ws => {
if (ws.indexOf(' ') !== -1) header += indentSize
const m = ws.match(/ +$/)
if (m) {
wsStart = ws.slice(0, -m[0].length)
return m[0]
} else {
wsStart = ws
return ''
}
})
if (wsEnd) wsEnd = wsEnd.replace(/\n+(?!\n|$)/g, `$&${indent}`)
if (wsStart) wsStart = wsStart.replace(/\n+/g, `$&${indent}`)
if (comment) {
header += ' #' + comment.replace(/ ?[\r\n]+/g, ' ')
if (onComment) onComment()
}
if (!value) return `${header}${indentSize}\n${indent}${wsEnd}`
if (literal) {
value = value.replace(/\n+/g, `$&${indent}`)
return `${header}\n${indent}${wsStart}${value}${wsEnd}`
}
value = value
.replace(/\n+/g, '\n$&')
.replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded
// ^ ind.line ^ empty ^ capture next empty lines only at end of indent
.replace(/\n+/g, `$&${indent}`)
const body = foldFlowLines(
`${wsStart}${value}${wsEnd}`,
indent,
FOLD_BLOCK,
strOptions.fold
)
return `${header}\n${indent}${body}`
}
function plainString(item, ctx, onComment, onChompKeep) {
const { comment, type, value } = item
const { actualString, implicitKey, indent, inFlow } = ctx
if (
(implicitKey && /[\n[\]{},]/.test(value)) ||
(inFlow && /[[\]{},]/.test(value))
) {
return doubleQuotedString(value, ctx)
}
if (
!value ||
/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(
value
)
) {
// not allowed:
// - empty string, '-' or '?'
// - start with an indicator character (except [?:-]) or /[?-] /
// - '\n ', ': ' or ' \n' anywhere
// - '#' not preceded by a non-space char
// - end with ' ' or ':'
return implicitKey || inFlow || value.indexOf('\n') === -1
? value.indexOf('"') !== -1 && value.indexOf("'") === -1
? singleQuotedString(value, ctx)
: doubleQuotedString(value, ctx)
: blockString(item, ctx, onComment, onChompKeep)
}
if (
!implicitKey &&
!inFlow &&
type !== Type.PLAIN &&
value.indexOf('\n') !== -1
) {
// Where allowed & type not set explicitly, prefer block style for multiline strings
return blockString(item, ctx, onComment, onChompKeep)
}
if (indent === '' && containsDocumentMarker(value)) {
ctx.forceBlockIndent = true
return blockString(item, ctx, onComment, onChompKeep)
}
const str = value.replace(/\n+/g, `$&\n${indent}`)
// Verify that output will be parsed as a string, as e.g. plain numbers and
// booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),
// and others in v1.1.
if (actualString) {
const { tags } = ctx.doc.schema
const resolved = resolveScalar(str, tags, tags.scalarFallback).value
if (typeof resolved !== 'string') return doubleQuotedString(value, ctx)
}
const body = implicitKey
? str
: foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx))
if (
comment &&
!inFlow &&
(body.indexOf('\n') !== -1 || comment.indexOf('\n') !== -1)
) {
if (onComment) onComment()
return addCommentBefore(body, indent, comment)
}
return body
}
export function stringifyString(item, ctx, onComment, onChompKeep) {
const { defaultType } = strOptions
const { implicitKey, inFlow } = ctx
let { type, value } = item
if (typeof value !== 'string') {
value = String(value)
item = Object.assign({}, item, { value })
}
const _stringify = _type => {
switch (_type) {
case Type.BLOCK_FOLDED:
case Type.BLOCK_LITERAL:
return blockString(item, ctx, onComment, onChompKeep)
case Type.QUOTE_DOUBLE:
return doubleQuotedString(value, ctx)
case Type.QUOTE_SINGLE:
return singleQuotedString(value, ctx)
case Type.PLAIN:
return plainString(item, ctx, onComment, onChompKeep)
default:
return null
}
}
if (
type !== Type.QUOTE_DOUBLE &&
/[\x00-\x08\x0b-\x1f\x7f-\x9f]/.test(value)
) {
// force double quotes on control characters
type = Type.QUOTE_DOUBLE
} else if (
(implicitKey || inFlow) &&
(type === Type.BLOCK_FOLDED || type === Type.BLOCK_LITERAL)
) {
// should not happen; blocks are not valid inside flow containers
type = Type.QUOTE_DOUBLE
}
let res = _stringify(type)
if (res === null) {
res = _stringify(defaultType)
if (res === null)
throw new Error(`Unsupported default string type ${defaultType}`)
}
return res
}
yaml-1.10.2/src/stringify/stringifyTag.js000066400000000000000000000015231402322402300203430ustar00rootroot00000000000000export function stringifyTag(doc, tag) {
if ((doc.version || doc.options.version) === '1.0') {
const priv = tag.match(/^tag:private\.yaml\.org,2002:([^:/]+)$/)
if (priv) return '!' + priv[1]
const vocab = tag.match(/^tag:([a-zA-Z0-9-]+)\.yaml\.org,2002:(.*)/)
return vocab ? `!${vocab[1]}/${vocab[2]}` : `!${tag.replace(/^tag:/, '')}`
}
let p = doc.tagPrefixes.find(p => tag.indexOf(p.prefix) === 0)
if (!p) {
const dtp = doc.getDefaults().tagPrefixes
p = dtp && dtp.find(p => tag.indexOf(p.prefix) === 0)
}
if (!p) return tag[0] === '!' ? tag : `!<${tag}>`
const suffix = tag.substr(p.prefix.length).replace(
/[!,[\]{}]/g,
ch =>
({
'!': '%21',
',': '%2C',
'[': '%5B',
']': '%5D',
'{': '%7B',
'}': '%7D'
}[ch])
)
return p.handle + suffix
}
yaml-1.10.2/src/tags/000077500000000000000000000000001402322402300142525ustar00rootroot00000000000000yaml-1.10.2/src/tags/core.js000066400000000000000000000062721402322402300155470ustar00rootroot00000000000000/* global BigInt */
import { Scalar } from '../ast/Scalar.js'
import { stringifyNumber } from '../stringify/stringifyNumber.js'
import { failsafe } from './failsafe/index.js'
import { boolOptions, intOptions, nullOptions } from './options.js'
const intIdentify = value =>
typeof value === 'bigint' || Number.isInteger(value)
const intResolve = (src, part, radix) =>
intOptions.asBigInt ? BigInt(src) : parseInt(part, radix)
function intStringify(node, radix, prefix) {
const { value } = node
if (intIdentify(value) && value >= 0) return prefix + value.toString(radix)
return stringifyNumber(node)
}
export const nullObj = {
identify: value => value == null,
createNode: (schema, value, ctx) =>
ctx.wrapScalars ? new Scalar(null) : null,
default: true,
tag: 'tag:yaml.org,2002:null',
test: /^(?:~|[Nn]ull|NULL)?$/,
resolve: () => null,
options: nullOptions,
stringify: () => nullOptions.nullStr
}
export const boolObj = {
identify: value => typeof value === 'boolean',
default: true,
tag: 'tag:yaml.org,2002:bool',
test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,
resolve: str => str[0] === 't' || str[0] === 'T',
options: boolOptions,
stringify: ({ value }) => (value ? boolOptions.trueStr : boolOptions.falseStr)
}
export const octObj = {
identify: value => intIdentify(value) && value >= 0,
default: true,
tag: 'tag:yaml.org,2002:int',
format: 'OCT',
test: /^0o([0-7]+)$/,
resolve: (str, oct) => intResolve(str, oct, 8),
options: intOptions,
stringify: node => intStringify(node, 8, '0o')
}
export const intObj = {
identify: intIdentify,
default: true,
tag: 'tag:yaml.org,2002:int',
test: /^[-+]?[0-9]+$/,
resolve: str => intResolve(str, str, 10),
options: intOptions,
stringify: stringifyNumber
}
export const hexObj = {
identify: value => intIdentify(value) && value >= 0,
default: true,
tag: 'tag:yaml.org,2002:int',
format: 'HEX',
test: /^0x([0-9a-fA-F]+)$/,
resolve: (str, hex) => intResolve(str, hex, 16),
options: intOptions,
stringify: node => intStringify(node, 16, '0x')
}
export const nanObj = {
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:float',
test: /^(?:[-+]?\.inf|(\.nan))$/i,
resolve: (str, nan) =>
nan
? NaN
: str[0] === '-'
? Number.NEGATIVE_INFINITY
: Number.POSITIVE_INFINITY,
stringify: stringifyNumber
}
export const expObj = {
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:float',
format: 'EXP',
test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,
resolve: str => parseFloat(str),
stringify: ({ value }) => Number(value).toExponential()
}
export const floatObj = {
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:float',
test: /^[-+]?(?:\.([0-9]+)|[0-9]+\.([0-9]*))$/,
resolve(str, frac1, frac2) {
const frac = frac1 || frac2
const node = new Scalar(parseFloat(str))
if (frac && frac[frac.length - 1] === '0')
node.minFractionDigits = frac.length
return node
},
stringify: stringifyNumber
}
export const core = failsafe.concat([
nullObj,
boolObj,
octObj,
intObj,
hexObj,
nanObj,
expObj,
floatObj
])
yaml-1.10.2/src/tags/failsafe/000077500000000000000000000000001402322402300160245ustar00rootroot00000000000000yaml-1.10.2/src/tags/failsafe/index.js000066400000000000000000000002171402322402300174710ustar00rootroot00000000000000import { map } from './map.js'
import { seq } from './seq.js'
import { string } from './string.js'
export const failsafe = [map, seq, string]
yaml-1.10.2/src/tags/failsafe/map.js000066400000000000000000000013021402322402300171330ustar00rootroot00000000000000import { YAMLMap } from '../../ast/YAMLMap.js'
import { resolveMap } from '../../resolve/resolveMap.js'
function createMap(schema, obj, ctx) {
const map = new YAMLMap(schema)
if (obj instanceof Map) {
for (const [key, value] of obj)
map.items.push(schema.createPair(key, value, ctx))
} else if (obj && typeof obj === 'object') {
for (const key of Object.keys(obj))
map.items.push(schema.createPair(key, obj[key], ctx))
}
if (typeof schema.sortMapEntries === 'function') {
map.items.sort(schema.sortMapEntries)
}
return map
}
export const map = {
createNode: createMap,
default: true,
nodeClass: YAMLMap,
tag: 'tag:yaml.org,2002:map',
resolve: resolveMap
}
yaml-1.10.2/src/tags/failsafe/seq.js000066400000000000000000000007641402322402300171610ustar00rootroot00000000000000import { YAMLSeq } from '../../ast/YAMLSeq.js'
import { resolveSeq } from '../../resolve/resolveSeq.js'
function createSeq(schema, obj, ctx) {
const seq = new YAMLSeq(schema)
if (obj && obj[Symbol.iterator]) {
for (const it of obj) {
const v = schema.createNode(it, ctx.wrapScalars, null, ctx)
seq.items.push(v)
}
}
return seq
}
export const seq = {
createNode: createSeq,
default: true,
nodeClass: YAMLSeq,
tag: 'tag:yaml.org,2002:seq',
resolve: resolveSeq
}
yaml-1.10.2/src/tags/failsafe/string.js000066400000000000000000000010041402322402300176630ustar00rootroot00000000000000import { resolveString } from '../../resolve/resolveString.js'
import { stringifyString } from '../../stringify/stringifyString.js'
import { strOptions } from '../options.js'
export const string = {
identify: value => typeof value === 'string',
default: true,
tag: 'tag:yaml.org,2002:str',
resolve: resolveString,
stringify(item, ctx, onComment, onChompKeep) {
ctx = Object.assign({ actualString: true }, ctx)
return stringifyString(item, ctx, onComment, onChompKeep)
},
options: strOptions
}
yaml-1.10.2/src/tags/index.js000066400000000000000000000015561402322402300157260ustar00rootroot00000000000000import {
core,
nullObj,
boolObj,
octObj,
intObj,
hexObj,
nanObj,
expObj,
floatObj
} from './core.js'
import { failsafe } from './failsafe/index.js'
import { json } from './json.js'
import { yaml11 } from './yaml-1.1/index.js'
import { map } from './failsafe/map.js'
import { seq } from './failsafe/seq.js'
import { binary } from './yaml-1.1/binary.js'
import { omap } from './yaml-1.1/omap.js'
import { pairs } from './yaml-1.1/pairs.js'
import { set } from './yaml-1.1/set.js'
import { floatTime, intTime, timestamp } from './yaml-1.1/timestamp.js'
export const schemas = { core, failsafe, json, yaml11 }
export const tags = {
binary,
bool: boolObj,
float: floatObj,
floatExp: expObj,
floatNaN: nanObj,
floatTime,
int: intObj,
intHex: hexObj,
intOct: octObj,
intTime,
map,
null: nullObj,
omap,
pairs,
seq,
set,
timestamp
}
yaml-1.10.2/src/tags/json.js000066400000000000000000000032711402322402300155640ustar00rootroot00000000000000/* global BigInt */
import { Scalar } from '../ast/Scalar.js'
import { resolveString } from '../resolve/resolveString.js'
import { map } from './failsafe/map.js'
import { seq } from './failsafe/seq.js'
import { intOptions } from './options.js'
const intIdentify = value =>
typeof value === 'bigint' || Number.isInteger(value)
const stringifyJSON = ({ value }) => JSON.stringify(value)
export const json = [
map,
seq,
{
identify: value => typeof value === 'string',
default: true,
tag: 'tag:yaml.org,2002:str',
resolve: resolveString,
stringify: stringifyJSON
},
{
identify: value => value == null,
createNode: (schema, value, ctx) =>
ctx.wrapScalars ? new Scalar(null) : null,
default: true,
tag: 'tag:yaml.org,2002:null',
test: /^null$/,
resolve: () => null,
stringify: stringifyJSON
},
{
identify: value => typeof value === 'boolean',
default: true,
tag: 'tag:yaml.org,2002:bool',
test: /^true|false$/,
resolve: str => str === 'true',
stringify: stringifyJSON
},
{
identify: intIdentify,
default: true,
tag: 'tag:yaml.org,2002:int',
test: /^-?(?:0|[1-9][0-9]*)$/,
resolve: str => (intOptions.asBigInt ? BigInt(str) : parseInt(str, 10)),
stringify: ({ value }) =>
intIdentify(value) ? value.toString() : JSON.stringify(value)
},
{
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:float',
test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,
resolve: str => parseFloat(str),
stringify: stringifyJSON
}
]
json.scalarFallback = str => {
throw new SyntaxError(`Unresolved plain scalar ${JSON.stringify(str)}`)
}
yaml-1.10.2/src/tags/options.js000066400000000000000000000007341402322402300163070ustar00rootroot00000000000000import { Type } from '../constants.js'
export const binaryOptions = {
defaultType: Type.BLOCK_LITERAL,
lineWidth: 76
}
export const boolOptions = { trueStr: 'true', falseStr: 'false' }
export const intOptions = { asBigInt: false }
export const nullOptions = { nullStr: 'null' }
export const strOptions = {
defaultType: Type.PLAIN,
doubleQuoted: {
jsonEncoding: false,
minMultiLineLength: 40
},
fold: {
lineWidth: 80,
minContentWidth: 20
}
}
yaml-1.10.2/src/tags/yaml-1.1/000077500000000000000000000000001402322402300155115ustar00rootroot00000000000000yaml-1.10.2/src/tags/yaml-1.1/binary.js000066400000000000000000000047611402322402300173430ustar00rootroot00000000000000/* global atob, btoa, Buffer */
import { Type } from '../../constants.js'
import { YAMLReferenceError } from '../../errors.js'
import { resolveString } from '../../resolve/resolveString.js'
import { stringifyString } from '../../stringify/stringifyString.js'
import { binaryOptions as options } from '../options.js'
export const binary = {
identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array
default: false,
tag: 'tag:yaml.org,2002:binary',
/**
* Returns a Buffer in node and an Uint8Array in browsers
*
* To use the resulting buffer as an image, you'll want to do something like:
*
* const blob = new Blob([buffer], { type: 'image/jpeg' })
* document.querySelector('#photo').src = URL.createObjectURL(blob)
*/
resolve: (doc, node) => {
const src = resolveString(doc, node)
if (typeof Buffer === 'function') {
return Buffer.from(src, 'base64')
} else if (typeof atob === 'function') {
// On IE 11, atob() can't handle newlines
const str = atob(src.replace(/[\n\r]/g, ''))
const buffer = new Uint8Array(str.length)
for (let i = 0; i < str.length; ++i) buffer[i] = str.charCodeAt(i)
return buffer
} else {
const msg =
'This environment does not support reading binary tags; either Buffer or atob is required'
doc.errors.push(new YAMLReferenceError(node, msg))
return null
}
},
options,
stringify: ({ comment, type, value }, ctx, onComment, onChompKeep) => {
let src
if (typeof Buffer === 'function') {
src =
value instanceof Buffer
? value.toString('base64')
: Buffer.from(value.buffer).toString('base64')
} else if (typeof btoa === 'function') {
let s = ''
for (let i = 0; i < value.length; ++i) s += String.fromCharCode(value[i])
src = btoa(s)
} else {
throw new Error(
'This environment does not support writing binary tags; either Buffer or btoa is required'
)
}
if (!type) type = options.defaultType
if (type === Type.QUOTE_DOUBLE) {
value = src
} else {
const { lineWidth } = options
const n = Math.ceil(src.length / lineWidth)
const lines = new Array(n)
for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {
lines[i] = src.substr(o, lineWidth)
}
value = lines.join(type === Type.BLOCK_LITERAL ? '\n' : ' ')
}
return stringifyString(
{ comment, type, value },
ctx,
onComment,
onChompKeep
)
}
}
yaml-1.10.2/src/tags/yaml-1.1/index.js000066400000000000000000000106431402322402300171620ustar00rootroot00000000000000/* global BigInt */
import { Scalar } from '../../ast/Scalar.js'
import { stringifyNumber } from '../../stringify/stringifyNumber.js'
import { failsafe } from '../failsafe/index.js'
import { boolOptions, intOptions, nullOptions } from '../options.js'
import { binary } from './binary.js'
import { omap } from './omap.js'
import { pairs } from './pairs.js'
import { set } from './set.js'
import { intTime, floatTime, timestamp } from './timestamp.js'
const boolStringify = ({ value }) =>
value ? boolOptions.trueStr : boolOptions.falseStr
const intIdentify = value =>
typeof value === 'bigint' || Number.isInteger(value)
function intResolve(sign, src, radix) {
let str = src.replace(/_/g, '')
if (intOptions.asBigInt) {
switch (radix) {
case 2:
str = `0b${str}`
break
case 8:
str = `0o${str}`
break
case 16:
str = `0x${str}`
break
}
const n = BigInt(str)
return sign === '-' ? BigInt(-1) * n : n
}
const n = parseInt(str, radix)
return sign === '-' ? -1 * n : n
}
function intStringify(node, radix, prefix) {
const { value } = node
if (intIdentify(value)) {
const str = value.toString(radix)
return value < 0 ? '-' + prefix + str.substr(1) : prefix + str
}
return stringifyNumber(node)
}
export const yaml11 = failsafe.concat(
[
{
identify: value => value == null,
createNode: (schema, value, ctx) =>
ctx.wrapScalars ? new Scalar(null) : null,
default: true,
tag: 'tag:yaml.org,2002:null',
test: /^(?:~|[Nn]ull|NULL)?$/,
resolve: () => null,
options: nullOptions,
stringify: () => nullOptions.nullStr
},
{
identify: value => typeof value === 'boolean',
default: true,
tag: 'tag:yaml.org,2002:bool',
test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,
resolve: () => true,
options: boolOptions,
stringify: boolStringify
},
{
identify: value => typeof value === 'boolean',
default: true,
tag: 'tag:yaml.org,2002:bool',
test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i,
resolve: () => false,
options: boolOptions,
stringify: boolStringify
},
{
identify: intIdentify,
default: true,
tag: 'tag:yaml.org,2002:int',
format: 'BIN',
test: /^([-+]?)0b([0-1_]+)$/,
resolve: (str, sign, bin) => intResolve(sign, bin, 2),
stringify: node => intStringify(node, 2, '0b')
},
{
identify: intIdentify,
default: true,
tag: 'tag:yaml.org,2002:int',
format: 'OCT',
test: /^([-+]?)0([0-7_]+)$/,
resolve: (str, sign, oct) => intResolve(sign, oct, 8),
stringify: node => intStringify(node, 8, '0')
},
{
identify: intIdentify,
default: true,
tag: 'tag:yaml.org,2002:int',
test: /^([-+]?)([0-9][0-9_]*)$/,
resolve: (str, sign, abs) => intResolve(sign, abs, 10),
stringify: stringifyNumber
},
{
identify: intIdentify,
default: true,
tag: 'tag:yaml.org,2002:int',
format: 'HEX',
test: /^([-+]?)0x([0-9a-fA-F_]+)$/,
resolve: (str, sign, hex) => intResolve(sign, hex, 16),
stringify: node => intStringify(node, 16, '0x')
},
{
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:float',
test: /^(?:[-+]?\.inf|(\.nan))$/i,
resolve: (str, nan) =>
nan
? NaN
: str[0] === '-'
? Number.NEGATIVE_INFINITY
: Number.POSITIVE_INFINITY,
stringify: stringifyNumber
},
{
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:float',
format: 'EXP',
test: /^[-+]?([0-9][0-9_]*)?(\.[0-9_]*)?[eE][-+]?[0-9]+$/,
resolve: str => parseFloat(str.replace(/_/g, '')),
stringify: ({ value }) => Number(value).toExponential()
},
{
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:float',
test: /^[-+]?(?:[0-9][0-9_]*)?\.([0-9_]*)$/,
resolve(str, frac) {
const node = new Scalar(parseFloat(str.replace(/_/g, '')))
if (frac) {
const f = frac.replace(/_/g, '')
if (f[f.length - 1] === '0') node.minFractionDigits = f.length
}
return node
},
stringify: stringifyNumber
}
],
binary,
omap,
pairs,
set,
intTime,
floatTime,
timestamp
)
yaml-1.10.2/src/tags/yaml-1.1/omap.js000066400000000000000000000036431402322402300170110ustar00rootroot00000000000000import { YAMLSemanticError } from '../../errors.js'
import { Pair } from '../../ast/Pair.js'
import { Scalar } from '../../ast/Scalar.js'
import { YAMLMap } from '../../ast/YAMLMap.js'
import { YAMLSeq } from '../../ast/YAMLSeq.js'
import { toJSON } from '../../ast/toJSON.js'
import { createPairs, parsePairs } from './pairs.js'
export class YAMLOMap extends YAMLSeq {
static tag = 'tag:yaml.org,2002:omap'
constructor() {
super()
this.tag = YAMLOMap.tag
}
add = YAMLMap.prototype.add.bind(this)
delete = YAMLMap.prototype.delete.bind(this)
get = YAMLMap.prototype.get.bind(this)
has = YAMLMap.prototype.has.bind(this)
set = YAMLMap.prototype.set.bind(this)
toJSON(_, ctx) {
const map = new Map()
if (ctx && ctx.onCreate) ctx.onCreate(map)
for (const pair of this.items) {
let key, value
if (pair instanceof Pair) {
key = toJSON(pair.key, '', ctx)
value = toJSON(pair.value, key, ctx)
} else {
key = toJSON(pair, '', ctx)
}
if (map.has(key))
throw new Error('Ordered maps must not include duplicate keys')
map.set(key, value)
}
return map
}
}
function parseOMap(doc, cst) {
const pairs = parsePairs(doc, cst)
const seenKeys = []
for (const { key } of pairs.items) {
if (key instanceof Scalar) {
if (seenKeys.includes(key.value)) {
const msg = 'Ordered maps must not include duplicate keys'
throw new YAMLSemanticError(cst, msg)
} else {
seenKeys.push(key.value)
}
}
}
return Object.assign(new YAMLOMap(), pairs)
}
function createOMap(schema, iterable, ctx) {
const pairs = createPairs(schema, iterable, ctx)
const omap = new YAMLOMap()
omap.items = pairs.items
return omap
}
export const omap = {
identify: value => value instanceof Map,
nodeClass: YAMLOMap,
default: false,
tag: 'tag:yaml.org,2002:omap',
resolve: parseOMap,
createNode: createOMap
}
yaml-1.10.2/src/tags/yaml-1.1/pairs.js000066400000000000000000000036071402322402300171730ustar00rootroot00000000000000import { YAMLSemanticError } from '../../errors.js'
import { Pair } from '../../ast/Pair.js'
import { YAMLMap } from '../../ast/YAMLMap.js'
import { YAMLSeq } from '../../ast/YAMLSeq.js'
import { resolveSeq } from '../../resolve/resolveSeq.js'
export function parsePairs(doc, cst) {
const seq = resolveSeq(doc, cst)
for (let i = 0; i < seq.items.length; ++i) {
let item = seq.items[i]
if (item instanceof Pair) continue
else if (item instanceof YAMLMap) {
if (item.items.length > 1) {
const msg = 'Each pair must have its own sequence indicator'
throw new YAMLSemanticError(cst, msg)
}
const pair = item.items[0] || new Pair()
if (item.commentBefore)
pair.commentBefore = pair.commentBefore
? `${item.commentBefore}\n${pair.commentBefore}`
: item.commentBefore
if (item.comment)
pair.comment = pair.comment
? `${item.comment}\n${pair.comment}`
: item.comment
item = pair
}
seq.items[i] = item instanceof Pair ? item : new Pair(item)
}
return seq
}
export function createPairs(schema, iterable, ctx) {
const pairs = new YAMLSeq(schema)
pairs.tag = 'tag:yaml.org,2002:pairs'
for (const it of iterable) {
let key, value
if (Array.isArray(it)) {
if (it.length === 2) {
key = it[0]
value = it[1]
} else throw new TypeError(`Expected [key, value] tuple: ${it}`)
} else if (it && it instanceof Object) {
const keys = Object.keys(it)
if (keys.length === 1) {
key = keys[0]
value = it[key]
} else throw new TypeError(`Expected { key: value } tuple: ${it}`)
} else {
key = it
}
const pair = schema.createPair(key, value, ctx)
pairs.items.push(pair)
}
return pairs
}
export const pairs = {
default: false,
tag: 'tag:yaml.org,2002:pairs',
resolve: parsePairs,
createNode: createPairs
}
yaml-1.10.2/src/tags/yaml-1.1/set.js000066400000000000000000000037511402322402300166500ustar00rootroot00000000000000import { YAMLSemanticError } from '../../errors.js'
import { Pair } from '../../ast/Pair.js'
import { Scalar } from '../../ast/Scalar.js'
import { YAMLMap, findPair } from '../../ast/YAMLMap.js'
import { resolveMap } from '../../resolve/resolveMap.js'
export class YAMLSet extends YAMLMap {
static tag = 'tag:yaml.org,2002:set'
constructor() {
super()
this.tag = YAMLSet.tag
}
add(key) {
const pair = key instanceof Pair ? key : new Pair(key)
const prev = findPair(this.items, pair.key)
if (!prev) this.items.push(pair)
}
get(key, keepPair) {
const pair = findPair(this.items, key)
return !keepPair && pair instanceof Pair
? pair.key instanceof Scalar
? pair.key.value
: pair.key
: pair
}
set(key, value) {
if (typeof value !== 'boolean')
throw new Error(
`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`
)
const prev = findPair(this.items, key)
if (prev && !value) {
this.items.splice(this.items.indexOf(prev), 1)
} else if (!prev && value) {
this.items.push(new Pair(key))
}
}
toJSON(_, ctx) {
return super.toJSON(_, ctx, Set)
}
toString(ctx, onComment, onChompKeep) {
if (!ctx) return JSON.stringify(this)
if (this.hasAllNullValues())
return super.toString(ctx, onComment, onChompKeep)
else throw new Error('Set items must all have null values')
}
}
function parseSet(doc, cst) {
const map = resolveMap(doc, cst)
if (!map.hasAllNullValues())
throw new YAMLSemanticError(cst, 'Set items must all have null values')
return Object.assign(new YAMLSet(), map)
}
function createSet(schema, iterable, ctx) {
const set = new YAMLSet()
for (const value of iterable)
set.items.push(schema.createPair(value, null, ctx))
return set
}
export const set = {
identify: value => value instanceof Set,
nodeClass: YAMLSet,
default: false,
tag: 'tag:yaml.org,2002:set',
resolve: parseSet,
createNode: createSet
}
yaml-1.10.2/src/tags/yaml-1.1/timestamp.js000066400000000000000000000054211402322402300200540ustar00rootroot00000000000000import { stringifyNumber } from '../../stringify/stringifyNumber.js'
const parseSexagesimal = (sign, parts) => {
const n = parts.split(':').reduce((n, p) => n * 60 + Number(p), 0)
return sign === '-' ? -n : n
}
// hhhh:mm:ss.sss
const stringifySexagesimal = ({ value }) => {
if (isNaN(value) || !isFinite(value)) return stringifyNumber(value)
let sign = ''
if (value < 0) {
sign = '-'
value = Math.abs(value)
}
const parts = [value % 60] // seconds, including ms
if (value < 60) {
parts.unshift(0) // at least one : is required
} else {
value = Math.round((value - parts[0]) / 60)
parts.unshift(value % 60) // minutes
if (value >= 60) {
value = Math.round((value - parts[0]) / 60)
parts.unshift(value) // hours
}
}
return (
sign +
parts
.map(n => (n < 10 ? '0' + String(n) : String(n)))
.join(':')
.replace(/000000\d*$/, '') // % 60 may introduce error
)
}
export const intTime = {
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:int',
format: 'TIME',
test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+)$/,
resolve: (str, sign, parts) =>
parseSexagesimal(sign, parts.replace(/_/g, '')),
stringify: stringifySexagesimal
}
export const floatTime = {
identify: value => typeof value === 'number',
default: true,
tag: 'tag:yaml.org,2002:float',
format: 'TIME',
test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*)$/,
resolve: (str, sign, parts) =>
parseSexagesimal(sign, parts.replace(/_/g, '')),
stringify: stringifySexagesimal
}
export const timestamp = {
identify: value => value instanceof Date,
default: true,
tag: 'tag:yaml.org,2002:timestamp',
// If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
// may be omitted altogether, resulting in a date format. In such a case, the time part is
// assumed to be 00:00:00Z (start of day, UTC).
test: RegExp(
'^(?:' +
'([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd
'(?:(?:t|T|[ \\t]+)' + // t | T | whitespace
'([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?
'(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30
')?' +
')$'
),
resolve: (str, year, month, day, hour, minute, second, millisec, tz) => {
if (millisec) millisec = (millisec + '00').substr(1, 3)
let date = Date.UTC(
year,
month - 1,
day,
hour || 0,
minute || 0,
second || 0,
millisec || 0
)
if (tz && tz !== 'Z') {
let d = parseSexagesimal(tz[0], tz.slice(1))
if (Math.abs(d) < 30) d *= 60
date -= 60000 * d
}
return new Date(date)
},
stringify: ({ value }) =>
value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '')
}
yaml-1.10.2/src/test-events.js000066400000000000000000000072731402322402300161440ustar00rootroot00000000000000import { parse } from './cst/parse.js'
import { Document } from './doc/Document.js'
// test harness for yaml-test-suite event tests
export function testEvents(src, options) {
const opt = Object.assign(
{ keepCstNodes: true, keepNodeTypes: true, version: '1.2' },
options
)
const docs = parse(src).map(cstDoc => new Document(opt).parse(cstDoc))
const errDoc = docs.find(doc => doc.errors.length > 0)
const error = errDoc ? errDoc.errors[0].message : null
const events = ['+STR']
try {
for (let i = 0; i < docs.length; ++i) {
const doc = docs[i]
let root = doc.contents
if (Array.isArray(root)) root = root[0]
const [rootStart, rootEnd] = doc.range || [0, 0]
let e = doc.errors[0] && doc.errors[0].source
if (e && e.type === 'SEQ_ITEM') e = e.node
if (e && (e.type === 'DOCUMENT' || e.range.start < rootStart))
throw new Error()
let docStart = '+DOC'
const pre = src.slice(0, rootStart)
const explicitDoc = /---\s*$/.test(pre)
if (explicitDoc) docStart += ' ---'
else if (!doc.contents) continue
events.push(docStart)
addEvents(events, doc, e, root)
if (doc.contents && doc.contents.length > 1) throw new Error()
let docEnd = '-DOC'
if (rootEnd) {
const post = src.slice(rootEnd)
if (/^\.\.\./.test(post)) docEnd += ' ...'
}
events.push(docEnd)
}
} catch (e) {
return { events, error: error || e }
}
events.push('-STR')
return { events, error }
}
function addEvents(events, doc, e, node) {
if (!node) {
events.push('=VAL :')
return
}
if (e && node.cstNode === e) throw new Error()
let props = ''
let anchor = doc.anchors.getName(node)
if (anchor) {
if (/\d$/.test(anchor)) {
const alt = anchor.replace(/\d$/, '')
if (doc.anchors.getNode(alt)) anchor = alt
}
props = ` &${anchor}`
}
if (node.cstNode && node.cstNode.tag) {
const { handle, suffix } = node.cstNode.tag
props += handle === '!' && !suffix ? ' ' : ` <${node.tag}>`
}
let scalar = null
switch (node.type) {
case 'ALIAS':
{
let alias = doc.anchors.getName(node.source)
if (/\d$/.test(alias)) {
const alt = alias.replace(/\d$/, '')
if (doc.anchors.getNode(alt)) alias = alt
}
events.push(`=ALI${props} *${alias}`)
}
break
case 'BLOCK_FOLDED':
scalar = '>'
break
case 'BLOCK_LITERAL':
scalar = '|'
break
case 'PLAIN':
scalar = ':'
break
case 'QUOTE_DOUBLE':
scalar = '"'
break
case 'QUOTE_SINGLE':
scalar = "'"
break
case 'PAIR':
events.push(`+MAP${props}`)
addEvents(events, doc, e, node.key)
addEvents(events, doc, e, node.value)
events.push('-MAP')
break
case 'FLOW_SEQ':
case 'SEQ':
events.push(`+SEQ${props}`)
node.items.forEach(item => {
addEvents(events, doc, e, item)
})
events.push('-SEQ')
break
case 'FLOW_MAP':
case 'MAP':
events.push(`+MAP${props}`)
node.items.forEach(({ key, value }) => {
addEvents(events, doc, e, key)
addEvents(events, doc, e, value)
})
events.push('-MAP')
break
default:
throw new Error(`Unexpected node type ${node.type}`)
}
if (scalar) {
const value = node.cstNode.strValue
.replace(/\\/g, '\\\\')
.replace(/\0/g, '\\0')
.replace(/\x07/g, '\\a')
.replace(/\x08/g, '\\b')
.replace(/\t/g, '\\t')
.replace(/\n/g, '\\n')
.replace(/\v/g, '\\v')
.replace(/\f/g, '\\f')
.replace(/\r/g, '\\r')
.replace(/\x1b/g, '\\e')
events.push(`=VAL${props} ${scalar}${value}`)
}
}
yaml-1.10.2/src/types.js000066400000000000000000000004101402322402300150110ustar00rootroot00000000000000export {
binaryOptions,
boolOptions,
intOptions,
nullOptions,
strOptions
} from './tags/options.js'
export { Schema } from './doc/Schema.js'
export {
Alias,
Collection,
Merge,
Node,
Pair,
Scalar,
YAMLMap,
YAMLSeq
} from './ast/index.js'
yaml-1.10.2/src/util.js000066400000000000000000000007251402322402300146330ustar00rootroot00000000000000export { findPair, toJSON } from './ast/index.js'
export { resolveMap as parseMap } from './resolve/resolveMap.js'
export { resolveSeq as parseSeq } from './resolve/resolveSeq.js'
export { stringifyNumber } from './stringify/stringifyNumber.js'
export { stringifyString } from './stringify/stringifyString.js'
export { Type } from './constants.js'
export {
YAMLError,
YAMLReferenceError,
YAMLSemanticError,
YAMLSyntaxError,
YAMLWarning
} from './errors.js'
yaml-1.10.2/src/warnings.js000066400000000000000000000030401402322402300154770ustar00rootroot00000000000000/* global console, process, YAML_SILENCE_DEPRECATION_WARNINGS, YAML_SILENCE_WARNINGS */
function shouldWarn(deprecation) {
const env = (typeof process !== 'undefined' && process.env) || {}
if (deprecation) {
if (typeof YAML_SILENCE_DEPRECATION_WARNINGS !== 'undefined')
return !YAML_SILENCE_DEPRECATION_WARNINGS
return !env.YAML_SILENCE_DEPRECATION_WARNINGS
}
if (typeof YAML_SILENCE_WARNINGS !== 'undefined')
return !YAML_SILENCE_WARNINGS
return !env.YAML_SILENCE_WARNINGS
}
export function warn(warning, type) {
if (shouldWarn(false)) {
const emit = typeof process !== 'undefined' && process.emitWarning
// This will throw in Jest if `warning` is an Error instance due to
// https://github.com/facebook/jest/issues/2549
if (emit) emit(warning, type)
else {
// eslint-disable-next-line no-console
console.warn(type ? `${type}: ${warning}` : warning)
}
}
}
export function warnFileDeprecation(filename) {
if (shouldWarn(true)) {
const path = filename
.replace(/.*yaml[/\\]/i, '')
.replace(/\.js$/, '')
.replace(/\\/g, '/')
warn(
`The endpoint 'yaml/${path}' will be removed in a future release.`,
'DeprecationWarning'
)
}
}
const warned = {}
export function warnOptionDeprecation(name, alternative) {
if (!warned[name] && shouldWarn(true)) {
warned[name] = true
let msg = `The option '${name}' will be removed in a future release`
msg += alternative ? `, use '${alternative}' instead.` : '.'
warn(msg, 'DeprecationWarning')
}
}
yaml-1.10.2/tests/000077500000000000000000000000001402322402300136675ustar00rootroot00000000000000yaml-1.10.2/tests/artifacts/000077500000000000000000000000001402322402300156475ustar00rootroot00000000000000yaml-1.10.2/tests/artifacts/pr104/000077500000000000000000000000001402322402300165155ustar00rootroot00000000000000yaml-1.10.2/tests/artifacts/pr104/billion-laughs.yml000066400000000000000000000006141402322402300221520ustar00rootroot00000000000000a: &a [lol, lol, lol, lol, lol, lol, lol, lol, lol]
b: &b [*a, *a, *a, *a, *a, *a, *a, *a, *a]
c: &c [*b, *b, *b, *b, *b, *b, *b, *b, *b]
d: &d [*c, *c, *c, *c, *c, *c, *c, *c, *c]
e: &e [*d, *d, *d, *d, *d, *d, *d, *d, *d]
f: &f [*e, *e, *e, *e, *e, *e, *e, *e, *e]
g: &g [*f, *f, *f, *f, *f, *f, *f, *f, *f]
h: &h [*g, *g, *g, *g, *g, *g, *g, *g, *g]
i: &i [*h, *h, *h, *h, *h, *h, *h, *h, *h]
yaml-1.10.2/tests/artifacts/pr104/case1.yml000066400000000000000000000114311402322402300202340ustar00rootroot00000000000000# From https://github.com/nodeca/js-yaml/blob/a567ef3c6e61eb319f0bfc2671d91061afb01235/test/issues/0475-case1.yml
? - - &id057
- &id055
- &id053
- &id051
- &id049
- &id047
- &id045
- &id043
- &id041
- &id039
- &id037
- &id035
- &id033
- &id031
- &id029
- &id027
- &id025
- &id023
- &id021
- &id019
- &id017
- &id015
- &id013
- &id011
- &id009
- &id007
- &id005
- &id003
- &id001 [lol]
- &id002 [lol]
- &id004
- *id001
- *id002
- &id006
- *id003
- *id004
- &id008
- *id005
- *id006
- &id010
- *id007
- *id008
- &id012
- *id009
- *id010
- &id014
- *id011
- *id012
- &id016
- *id013
- *id014
- &id018
- *id015
- *id016
- &id020
- *id017
- *id018
- &id022
- *id019
- *id020
- &id024
- *id021
- *id022
- &id026
- *id023
- *id024
- &id028
- *id025
- *id026
- &id030
- *id027
- *id028
- &id032
- *id029
- *id030
- &id034
- *id031
- *id032
- &id036
- *id033
- *id034
- &id038
- *id035
- *id036
- &id040
- *id037
- *id038
- &id042
- *id039
- *id040
- &id044
- *id041
- *id042
- &id046
- *id043
- *id044
- &id048
- *id045
- *id046
- &id050
- *id047
- *id048
- &id052
- *id049
- *id050
- &id054
- *id051
- *id052
- &id056
- *id053
- *id054
- &id058
- *id055
- *id056
- - *id057
- *id058
: key
yaml-1.10.2/tests/artifacts/pr104/case2.yml000066400000000000000000000104371402322402300202420ustar00rootroot00000000000000# From https://github.com/nodeca/js-yaml/blob/a567ef3c6e61eb319f0bfc2671d91061afb01235/test/issues/0475-case2.yml
- &id057
- &id055
- &id053
- &id051
- &id049
- &id047
- &id045
- &id043
- &id041
- &id039
- &id037
- &id035
- &id033
- &id031
- &id029
- &id027
- &id025
- &id023
- &id021
- &id019
- &id017
- &id015
- &id013
- &id011
- &id009
- &id007
- &id005
- &id003
- &id001 [lol]
- &id002 [lol]
- &id004
- *id001
- *id002
- &id006
- *id003
- *id004
- &id008
- *id005
- *id006
- &id010
- *id007
- *id008
- &id012
- *id009
- *id010
- &id014
- *id011
- *id012
- &id016
- *id013
- *id014
- &id018
- *id015
- *id016
- &id020
- *id017
- *id018
- &id022
- *id019
- *id020
- &id024
- *id021
- *id022
- &id026
- *id023
- *id024
- &id028
- *id025
- *id026
- &id030
- *id027
- *id028
- &id032
- *id029
- *id030
- &id034
- *id031
- *id032
- &id036
- *id033
- *id034
- &id038
- *id035
- *id036
- &id040
- *id037
- *id038
- &id042
- *id039
- *id040
- &id044
- *id041
- *id042
- &id046
- *id043
- *id044
- &id048
- *id045
- *id046
- &id050
- *id047
- *id048
- &id052
- *id049
- *id050
- &id054
- *id051
- *id052
- &id056
- *id053
- *id054
- *id057 : 1
yaml-1.10.2/tests/artifacts/pr104/quadratic.yml000066400000000000000000000007541402322402300212230ustar00rootroot00000000000000a: &a [lol, lol, lol, lol, lol, lol, lol, lol, lol]
b: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
c: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
d: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
e: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
f: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
g: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
h: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
i: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
j: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
k: [*a, *a, *a, *a, *a, *a, *a, *a, *a, *a]
yaml-1.10.2/tests/artifacts/prettier-circleci-config.yml000066400000000000000000000035671402322402300232610ustar00rootroot00000000000000aliases:
# Cache management
- &restore_yarn_cache
restore_cache:
keys:
- v1-yarn-cache
- &save_yarn_cache
save_cache:
paths:
- ~/.cache/yarn
key: v1-yarn-cache
- &restore_deps_cache
restore_cache:
keys:
- v1-deps-cache-{{ checksum "yarn.lock" }}
- &save_deps_cache
save_cache:
paths:
- node_modules
key: v1-yarn-deps-{{ checksum "yarn.lock" }}
# Default
- &defaults
working_directory: ~/prettier
docker:
- image: circleci/node:9
version: 2
jobs:
# Install dependencies and cache everything
checkout_code:
<<: *defaults
steps:
- checkout
- *restore_yarn_cache
- *restore_deps_cache
- run: yarn install
- run: yarn check-deps
- *save_deps_cache
- *save_yarn_cache
- persist_to_workspace:
root: .
paths:
- .
# Create the production bundle and cache
build_prod:
<<: *defaults
environment:
NODE_ENV: production
steps:
- attach_workspace:
at: ~/prettier
- run: yarn build
- persist_to_workspace:
root: .
paths:
- dist
- store_artifacts:
path: ~/prettier/dist
# Run tests on the production bundle
test_prod_node4:
<<: *defaults
docker:
- image: circleci/node:4
steps:
- attach_workspace:
at: ~/prettier
- run: yarn test:dist
# Run tests on the production bundle
test_prod_node9:
<<: *defaults
steps:
- attach_workspace:
at: ~/prettier
- run: yarn test:dist
workflows:
version: 2
prod:
jobs:
- checkout_code
- build_prod:
requires:
- checkout_code
- test_prod_node4:
requires:
- build_prod
- test_prod_node9:
requires:
- build_prod
yaml-1.10.2/tests/cst/000077500000000000000000000000001402322402300144605ustar00rootroot00000000000000yaml-1.10.2/tests/cst/Node.js000066400000000000000000000020251402322402300157020ustar00rootroot00000000000000import { Type } from '../../src/constants.js'
import { Node } from '../../src/cst/Node.js'
import { Range } from '../../src/cst/Range.js'
describe('internals', () => {
test('constructor', () => {
const src = '&anchor !tag src'
const props = [new Range(0, 7), new Range(8, 12)]
const node = new Node(Type.PLAIN, props, { src })
expect(node.context.src).toBe(src)
expect(node.anchor).toBe('anchor')
expect(node.tag).toMatchObject({ handle: '!', suffix: 'tag' })
expect(node.type).toBe(Type.PLAIN)
})
test('.endOfIndent', () => {
const src = ' - value\n- other\n'
const in1 = Node.endOfIndent(src, 0)
expect(in1).toBe(2)
const offset = src.indexOf('\n') + 1
const in2 = Node.endOfIndent(src, offset)
expect(in2).toBe(offset)
})
test('#parseComment', () => {
const src = '#comment here\nnext'
const node = new Node(Type.COMMENT, null, { src })
const end = node.parseComment(0)
expect(node.comment).toBe('comment here')
expect(end).toBe(src.indexOf('\n'))
})
})
yaml-1.10.2/tests/cst/YAML-1.2.spec.js000066400000000000000000002534731402322402300170250ustar00rootroot00000000000000import { Type } from '../../src/constants.js'
import { parse } from '../../src/cst/parse.js'
import { pretty, testSpec } from './common.js'
const spec = {
'2.1. Collections': {
'Example 2.1. Sequence of Scalars': {
src: `- Mark McGwire\r
- Sammy Sosa\r
- Ken Griffey\r`,
tgt: [
{
contents: [
{
type: Type.SEQ,
items: [
{ type: Type.SEQ_ITEM, node: 'Mark McGwire' },
{ type: Type.SEQ_ITEM, node: 'Sammy Sosa' },
{ type: Type.SEQ_ITEM, node: 'Ken Griffey' }
]
}
]
}
]
},
'Example 2.2. Mapping Scalars to Scalars': {
src: `hr: 65 # Home runs\r
avg: 0.278 # Batting average\r
rbi: 147 # Runs Batted In`,
tgt: [
{
contents: [
{
type: Type.MAP,
items: [
'hr',
{
type: Type.MAP_VALUE,
node: { comment: ' Home runs', strValue: '65' }
},
'avg',
{
type: Type.MAP_VALUE,
node: { comment: ' Batting average', strValue: '0.278' }
},
'rbi',
{
type: Type.MAP_VALUE,
node: { comment: ' Runs Batted In', strValue: '147' }
}
]
}
]
}
]
},
'Example 2.3. Mapping Scalars to Sequences': {
src: `american:\r
- Boston Red Sox\r
- Detroit Tigers\r
- New York Yankees\r
national:\r
- New York Mets\r
- Chicago Cubs\r
- Atlanta Braves`,
tgt: [
{
contents: [
{
items: [
'american',
{
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'Boston Red Sox' },
{ type: Type.SEQ_ITEM, node: 'Detroit Tigers' },
{ type: Type.SEQ_ITEM, node: 'New York Yankees' }
]
}
},
'national',
{
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'New York Mets' },
{ type: Type.SEQ_ITEM, node: 'Chicago Cubs' },
{ type: Type.SEQ_ITEM, node: 'Atlanta Braves' }
]
}
}
]
}
]
}
]
},
'Example 2.4. Sequence of Mappings': {
src: `-
name: Mark McGwire
hr: 65
avg: 0.278
-
name: Sammy Sosa
hr: 63
avg: 0.288`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: {
items: [
'name',
{ type: Type.MAP_VALUE, node: 'Mark McGwire' },
'hr',
{ type: Type.MAP_VALUE, node: '65' },
'avg',
{ type: Type.MAP_VALUE, node: '0.278' }
]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
'name',
{ type: Type.MAP_VALUE, node: 'Sammy Sosa' },
'hr',
{ type: Type.MAP_VALUE, node: '63' },
'avg',
{ type: Type.MAP_VALUE, node: '0.288' }
]
}
}
]
}
]
}
]
},
'Example 2.5. Sequence of Sequences': {
src: `- [name , hr, avg ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa , 63, 0.288]`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: { items: ['[', 'name', ',', 'hr', ',', 'avg', ']'] }
},
{
type: Type.SEQ_ITEM,
node: {
items: ['[', 'Mark McGwire', ',', '65', ',', '0.278', ']']
}
},
{
type: Type.SEQ_ITEM,
node: {
items: ['[', 'Sammy Sosa', ',', '63', ',', '0.288', ']']
}
}
]
}
]
}
]
},
'Example 2.6. Mapping of Mappings': {
src: `Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}`,
tgt: [
{
contents: [
{
items: [
'Mark McGwire',
{
type: Type.MAP_VALUE,
node: {
items: ['{', 'hr', ':', '65', ',', 'avg', ':', '0.278', '}']
}
},
'Sammy Sosa',
{
type: Type.MAP_VALUE,
node: {
items: ['{', 'hr', ':', '63', ',', 'avg', ':', '0.288', '}']
}
}
]
}
]
}
]
}
},
'2.2. Structures': {
'Example 2.7. Two Documents in a Stream': {
src: `# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Team ranking
---
- Chicago Cubs
- St Louis Cardinals`,
tgt: [
{
directives: [{ comment: ' Ranking of 1998 home runs' }],
contents: [
{
items: [
{ type: Type.SEQ_ITEM, node: 'Mark McGwire' },
{ type: Type.SEQ_ITEM, node: 'Sammy Sosa' },
{ type: Type.SEQ_ITEM, node: 'Ken Griffey' }
]
},
{ type: Type.BLANK_LINE },
{ comment: ' Team ranking' }
]
},
{
contents: [
{
items: [
{ type: Type.SEQ_ITEM, node: 'Chicago Cubs' },
{ type: Type.SEQ_ITEM, node: 'St Louis Cardinals' }
]
}
]
}
]
},
'Example 2.8. Play by Play Feed': {
src: `---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...`,
tgt: [
{
contents: [
{
items: [
'time',
{ type: Type.MAP_VALUE, node: '20:03:20' },
'player',
{ type: Type.MAP_VALUE, node: 'Sammy Sosa' },
'action',
{ type: Type.MAP_VALUE, node: 'strike (miss)' }
]
}
]
},
{
contents: [
{
items: [
'time',
{ type: Type.MAP_VALUE, node: '20:03:47' },
'player',
{ type: Type.MAP_VALUE, node: 'Sammy Sosa' },
'action',
{ type: Type.MAP_VALUE, node: 'grand slam' }
]
}
]
}
]
},
'Example 2.9. Single Document with Two Comments': {
src: `---
hr: # 1998 hr ranking
- Mark McGwire
- Sammy Sosa
rbi:
# 1998 rbi ranking
- Sammy Sosa
- Ken Griffey`,
tgt: [
{
contents: [
{
items: [
'hr',
{
comment: ' 1998 hr ranking',
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'Mark McGwire' },
{ type: Type.SEQ_ITEM, node: 'Sammy Sosa' }
]
}
},
'rbi',
{
comment: ' 1998 rbi ranking',
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'Sammy Sosa' },
{ type: Type.SEQ_ITEM, node: 'Ken Griffey' }
]
}
}
]
}
]
}
]
},
'Example 2.10. Node for “Sammy Sosa” appears twice in this document': {
src: `---
hr:
- Mark McGwire
# Following node labeled SS
- &SS Sammy Sosa
rbi:
- *SS # Subsequent occurrence
- Ken Griffey`,
tgt: [
{
contents: [
{
items: [
'hr',
{
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'Mark McGwire' },
{ comment: ' Following node labeled SS' },
{
type: Type.SEQ_ITEM,
node: { anchor: 'SS', strValue: 'Sammy Sosa' }
}
]
}
},
'rbi',
{
type: Type.MAP_VALUE,
node: {
items: [
{
type: Type.SEQ_ITEM,
node: {
comment: ' Subsequent occurrence',
type: Type.ALIAS,
rawValue: 'SS'
}
},
{ type: Type.SEQ_ITEM, node: 'Ken Griffey' }
]
}
}
]
}
]
}
]
},
'Example 2.11. Mapping between Sequences': {
src: `? - Detroit Tigers
- Chicago cubs
:
- 2001-07-23
? [ New York Yankees,
Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
2001-08-14 ]`,
tgt: [
{
contents: [
{
items: [
{
type: Type.MAP_KEY,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'Detroit Tigers' },
{ type: Type.SEQ_ITEM, node: 'Chicago cubs' }
]
}
},
{
type: Type.MAP_VALUE,
node: {
items: [{ type: Type.SEQ_ITEM, node: '2001-07-23' }]
}
},
{ type: Type.BLANK_LINE },
{
type: Type.MAP_KEY,
node: {
items: ['[', 'New York Yankees', ',', 'Atlanta Braves', ']']
}
},
{
type: Type.MAP_VALUE,
node: {
items: [
'[',
'2001-07-02',
',',
'2001-08-12',
',',
'2001-08-14',
']'
]
}
}
]
}
]
}
]
},
'Example 2.12. Compact Nested Mapping': {
src: `---
# Products purchased
- item : Super Hoop
quantity: 1
- item : Basketball
quantity: 4
- item : Big Shoes
quantity: 1`,
tgt: [
{
contents: [
{ comment: ' Products purchased' },
{
items: [
{
type: Type.SEQ_ITEM,
node: {
items: [
'item',
{ type: Type.MAP_VALUE, node: 'Super Hoop' },
'quantity',
{ type: Type.MAP_VALUE, node: '1' }
]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
'item',
{ type: Type.MAP_VALUE, node: 'Basketball' },
'quantity',
{ type: Type.MAP_VALUE, node: '4' }
]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
'item',
{ type: Type.MAP_VALUE, node: 'Big Shoes' },
'quantity',
{ type: Type.MAP_VALUE, node: '1' }
]
}
}
]
}
]
}
]
}
},
'2.3. Scalars': {
'Example 2.13. In literals, newlines are preserved': {
src: `# ASCII Art
--- |
\\//||\\/||
// || ||__`,
tgt: [
{
directives: [{ comment: ' ASCII Art' }],
contents: ['\\//||\\/||\n// || ||__\n']
}
]
},
'Example 2.14. In the folded scalars, newlines become spaces': {
src: `--- >
Mark McGwire's
year was crippled
by a knee injury.`,
tgt: [
{ contents: ["Mark McGwire's year was crippled by a knee injury.\n"] }
]
},
'Example 2.15. Folded newlines are preserved for "more indented" and blank lines': {
src: `>
Sammy Sosa completed another
fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!`,
tgt: [
{
contents: [
`Sammy Sosa completed another fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!\n`
]
}
]
},
'Example 2.16. Indentation determines scope': {
src: `name: Mark McGwire
accomplishment: >
Mark set a major league
home run record in 1998.
stats: |
65 Home Runs
0.278 Batting Average`,
tgt: [
{
contents: [
{
items: [
'name',
{ type: Type.MAP_VALUE, node: 'Mark McGwire' },
'accomplishment',
{
type: Type.MAP_VALUE,
node: 'Mark set a major league home run record in 1998.\n'
},
'stats',
{
type: Type.MAP_VALUE,
node: '65 Home Runs\n0.278 Batting Average\n'
}
]
}
]
}
]
},
'Example 2.17. Quoted Scalars': {
src: `unicode: "Sosa did fine.\\u263A"
control: "\\b1998\\t1999\\t2000\\n"
hex esc: "\\x0d\\x0a is \\r\\n"
single: '"Howdy!" he cried.'
quoted: ' # Not a ''comment''.'
tie-fighter: '|\\-*-/|'`,
tgt: [
{
contents: [
{
items: [
'unicode',
{ type: Type.MAP_VALUE, node: 'Sosa did fine.☺' },
'control',
{ type: Type.MAP_VALUE, node: '\b1998\t1999\t2000\n' },
'hex esc',
{ type: Type.MAP_VALUE, node: '\r\n is \r\n' },
{ type: Type.BLANK_LINE },
'single',
{ type: Type.MAP_VALUE, node: '"Howdy!" he cried.' },
'quoted',
{ type: Type.MAP_VALUE, node: " # Not a 'comment'." },
'tie-fighter',
{ type: Type.MAP_VALUE, node: '|\\-*-/|' }
]
}
]
}
]
},
'Example 2.18. Multi-line Flow Scalars': {
src: `plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\\n"`,
tgt: [
{
contents: [
{
items: [
'plain',
{
type: Type.MAP_VALUE,
node: 'This unquoted scalar spans many lines.'
},
{ type: Type.BLANK_LINE },
'quoted',
{ type: Type.MAP_VALUE, node: 'So does this quoted scalar.\n' }
]
}
]
}
]
}
},
'2.4. Tags': {
'Example 2.19. Integers': {
src: `canonical: 12345
decimal: +12345
octal: 0o14
hexadecimal: 0xC`,
tgt: [
{
contents: [
{
items: [
'canonical',
{ type: Type.MAP_VALUE, node: '12345' },
'decimal',
{ type: Type.MAP_VALUE, node: '+12345' },
'octal',
{ type: Type.MAP_VALUE, node: '0o14' },
'hexadecimal',
{ type: Type.MAP_VALUE, node: '0xC' }
]
}
]
}
]
},
'Example 2.20. Floating Point': {
src: `canonical: 1.23015e+3
exponential: 12.3015e+02
fixed: 1230.15
negative infinity: -.inf
not a number: .NaN`,
tgt: [
{
contents: [
{
items: [
'canonical',
{ type: Type.MAP_VALUE, node: '1.23015e+3' },
'exponential',
{ type: Type.MAP_VALUE, node: '12.3015e+02' },
'fixed',
{ type: Type.MAP_VALUE, node: '1230.15' },
'negative infinity',
{ type: Type.MAP_VALUE, node: '-.inf' },
'not a number',
{ type: Type.MAP_VALUE, node: '.NaN' }
]
}
]
}
]
},
'Example 2.21. Miscellaneous': {
src: `null:
booleans: [ true, false ]
string: '012345'`,
tgt: [
{
contents: [
{
items: [
'null',
{ type: Type.MAP_VALUE, node: null },
'booleans',
{
type: Type.MAP_VALUE,
node: { items: ['[', 'true', ',', 'false', ']'] }
},
'string',
{ type: Type.MAP_VALUE, node: '012345' }
]
}
]
}
]
},
'Example 2.22. Timestamps': {
src: `canonical: 2001-12-15T02:59:43.1Z
iso8601: 2001-12-14t21:59:43.10-05:00
spaced: 2001-12-14 21:59:43.10 -5
date: 2002-12-14`,
tgt: [
{
contents: [
{
items: [
'canonical',
{ type: Type.MAP_VALUE, node: '2001-12-15T02:59:43.1Z' },
'iso8601',
{ type: Type.MAP_VALUE, node: '2001-12-14t21:59:43.10-05:00' },
'spaced',
{ type: Type.MAP_VALUE, node: '2001-12-14 21:59:43.10 -5' },
'date',
{ type: Type.MAP_VALUE, node: '2002-12-14' }
]
}
]
}
]
},
'Example 2.23. Various Explicit Tags': {
src: `---
not-date: !!str 2002-04-28
picture: !!binary |
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=
application specific tag: !something |
The semantics of the tag
above may be different for
different documents.`,
tgt: [
{
contents: [
{
items: [
'not-date',
{
type: Type.MAP_VALUE,
node: {
tag: { handle: '!!', suffix: 'str' },
strValue: '2002-04-28'
}
},
{ type: Type.BLANK_LINE },
'picture',
{
type: Type.MAP_VALUE,
node: {
tag: { handle: '!!', suffix: 'binary' },
strValue:
'R0lGODlhDAAMAIQAAP//9/X\n17unp5WZmZgAAAOfn515eXv\nPz7Y6OjuDg4J+fn5OTk6enp\n56enmleECcgggoBADs=\n'
}
},
{ type: Type.BLANK_LINE },
'application specific tag',
{
type: Type.MAP_VALUE,
node: {
tag: { handle: '!', suffix: 'something' },
strValue:
'The semantics of the tag\nabove may be different for\ndifferent documents.\n'
}
}
]
}
]
}
]
},
'Example 2.24. Global Tags': {
src: `%TAG ! tag:clarkevans.com,2002:
--- !shape
# Use the ! handle for presenting
# tag:clarkevans.com,2002:circle
- !circle
center: &ORIGIN {x: 73, y: 129}
radius: 7
- !line
start: *ORIGIN
finish: { x: 89, y: 102 }
- !label
start: *ORIGIN
color: 0xFFEEBB
text: Pretty vector drawing.`,
tgt: [
{
directives: [
{ name: 'TAG', parameters: ['!', 'tag:clarkevans.com,2002:'] }
],
contents: [
{
tag: { handle: '!', suffix: 'shape' },
comment:
' Use the ! handle for presenting\n tag:clarkevans.com,2002:circle',
items: [
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!', suffix: 'circle' },
items: [
'center',
{
type: Type.MAP_VALUE,
node: {
anchor: 'ORIGIN',
items: [
'{',
'x',
':',
'73',
',',
'y',
':',
'129',
'}'
]
}
},
'radius',
{ type: Type.MAP_VALUE, node: '7' }
]
}
},
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!', suffix: 'line' },
items: [
'start',
{
type: Type.MAP_VALUE,
node: { type: Type.ALIAS, rawValue: 'ORIGIN' }
},
'finish',
{
type: Type.MAP_VALUE,
node: {
items: [
'{',
'x',
':',
'89',
',',
'y',
':',
'102',
'}'
]
}
}
]
}
},
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!', suffix: 'label' },
items: [
'start',
{
type: Type.MAP_VALUE,
node: { type: Type.ALIAS, rawValue: 'ORIGIN' }
},
'color',
{ type: Type.MAP_VALUE, node: '0xFFEEBB' },
'text',
{ type: Type.MAP_VALUE, node: 'Pretty vector drawing.' }
]
}
}
]
}
]
}
]
},
'Example 2.25. Unordered Sets': {
src: `# Sets are represented as a
# Mapping where each key is
# associated with a null value
--- !!set
? Mark McGwire
? Sammy Sosa
? Ken Griff`,
tgt: [
{
directives: [
{ comment: ' Sets are represented as a' },
{ comment: ' Mapping where each key is' },
{ comment: ' associated with a null value' }
],
contents: [
{
tag: { handle: '!!', suffix: 'set' },
items: [
{ type: Type.MAP_KEY, node: 'Mark McGwire' },
{ type: Type.MAP_KEY, node: 'Sammy Sosa' },
{ type: Type.MAP_KEY, node: 'Ken Griff' }
]
}
]
}
]
},
'Example 2.26. Ordered Mappings': {
src: `# Ordered maps are represented as
# A sequence of mappings, with
# each mapping having one key
--- !!omap
- Mark McGwire: 65
- Sammy Sosa: 63
- Ken Griffy: 58\n\n`,
tgt: [
{
directives: [
{ comment: ' Ordered maps are represented as' },
{ comment: ' A sequence of mappings, with' },
{ comment: ' each mapping having one key' }
],
contents: [
{
tag: { handle: '!!', suffix: 'omap' },
items: [
{
type: Type.SEQ_ITEM,
node: {
items: [
'Mark McGwire',
{ type: Type.MAP_VALUE, node: '65' }
]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: ['Sammy Sosa', { type: Type.MAP_VALUE, node: '63' }]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: ['Ken Griffy', { type: Type.MAP_VALUE, node: '58' }]
}
}
]
}
]
}
]
}
},
'2.5. Full Length Example': {
'Example 2.27. Invoice': {
src: `--- !
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments:
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.`,
tgt: [
{
contents: [
{
tag: { verbatim: 'tag:clarkevans.com,2002:invoice' },
items: [
'invoice',
{ type: Type.MAP_VALUE, node: '34843' },
'date',
{ type: Type.MAP_VALUE, node: '2001-01-23' },
'bill-to',
{
type: Type.MAP_VALUE,
node: {
anchor: 'id001',
items: [
'given',
{ type: Type.MAP_VALUE, node: 'Chris' },
'family',
{ type: Type.MAP_VALUE, node: 'Dumars' },
'address',
{
type: Type.MAP_VALUE,
node: {
items: [
'lines',
{
type: Type.MAP_VALUE,
node: '458 Walkman Dr.\nSuite #292\n'
},
'city',
{ type: Type.MAP_VALUE, node: 'Royal Oak' },
'state',
{ type: Type.MAP_VALUE, node: 'MI' },
'postal',
{ type: Type.MAP_VALUE, node: '48046' }
]
}
}
]
}
},
'ship-to',
{
type: Type.MAP_VALUE,
node: { type: Type.ALIAS, rawValue: 'id001' }
},
'product',
{
type: Type.MAP_VALUE,
node: {
items: [
{
type: Type.SEQ_ITEM,
node: {
items: [
'sku',
{ type: Type.MAP_VALUE, node: 'BL394D' },
'quantity',
{ type: Type.MAP_VALUE, node: '4' },
'description',
{ type: Type.MAP_VALUE, node: 'Basketball' },
'price',
{ type: Type.MAP_VALUE, node: '450.00' }
]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
'sku',
{ type: Type.MAP_VALUE, node: 'BL4438H' },
'quantity',
{ type: Type.MAP_VALUE, node: '1' },
'description',
{ type: Type.MAP_VALUE, node: 'Super Hoop' },
'price',
{ type: Type.MAP_VALUE, node: '2392.00' }
]
}
}
]
}
},
'tax',
{ type: Type.MAP_VALUE, node: '251.42' },
'total',
{ type: Type.MAP_VALUE, node: '4443.52' },
'comments',
{
type: Type.MAP_VALUE,
node:
'Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.'
}
]
}
]
}
]
},
'Example 2.28. Log File': {
src: `---
Time: 2001-11-23 15:01:42 -5
User: ed
Warning:
This is an error message
for the log file
---
Time: 2001-11-23 15:02:31 -5
User: ed
Warning:
A slightly different error
message.
---
Date: 2001-11-23 15:03:17 -5
User: ed
Fatal:
Unknown variable "bar"
Stack:
- file: TopClass.py
line: 23
code: |
x = MoreObject("345\\n")
- file: MoreClass.py
line: 58
code: |-
foo = bar\n`,
tgt: [
{
contents: [
{
items: [
'Time',
{ type: Type.MAP_VALUE, node: '2001-11-23 15:01:42 -5' },
'User',
{ type: Type.MAP_VALUE, node: 'ed' },
'Warning',
{
type: Type.MAP_VALUE,
node: 'This is an error message for the log file'
}
]
}
]
},
{
contents: [
{
items: [
'Time',
{ type: Type.MAP_VALUE, node: '2001-11-23 15:02:31 -5' },
'User',
{ type: Type.MAP_VALUE, node: 'ed' },
'Warning',
{
type: Type.MAP_VALUE,
node: 'A slightly different error message.'
}
]
}
]
},
{
contents: [
{
items: [
'Date',
{ type: Type.MAP_VALUE, node: '2001-11-23 15:03:17 -5' },
'User',
{ type: Type.MAP_VALUE, node: 'ed' },
'Fatal',
{ type: Type.MAP_VALUE, node: 'Unknown variable "bar"' },
'Stack',
{
type: Type.MAP_VALUE,
node: {
items: [
{
type: Type.SEQ_ITEM,
node: {
items: [
'file',
{ type: Type.MAP_VALUE, node: 'TopClass.py' },
'line',
{ type: Type.MAP_VALUE, node: '23' },
'code',
{
type: Type.MAP_VALUE,
node: 'x = MoreObject("345\\n")\n'
}
]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
'file',
{ type: Type.MAP_VALUE, node: 'MoreClass.py' },
'line',
{ type: Type.MAP_VALUE, node: '58' },
'code',
{ type: Type.MAP_VALUE, node: 'foo = bar' }
]
}
}
]
}
}
]
}
]
}
]
}
},
'5.3. Indicator Characters': {
'Example 5.3. Block Structure Indicators': {
src: `sequence:
- one
- two
mapping:
? sky
: blue
sea : green`,
tgt: [
{
contents: [
{
items: [
'sequence',
{
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'one' },
{ type: Type.SEQ_ITEM, node: 'two' }
]
}
},
'mapping',
{
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.MAP_KEY, node: 'sky' },
{ type: Type.MAP_VALUE, node: 'blue' },
'sea',
{ type: Type.MAP_VALUE, node: 'green' }
]
}
}
]
}
]
}
]
},
'Example 5.4. Flow Collection Indicators': {
src: `sequence: [ one, two, ]
mapping: { sky: blue, sea: green }`,
tgt: [
{
contents: [
{
items: [
'sequence',
{
type: Type.MAP_VALUE,
node: {
items: ['[', 'one', ',', 'two', ',', ']']
}
},
'mapping',
{
type: Type.MAP_VALUE,
node: {
items: [
'{',
'sky',
':',
'blue',
',',
'sea',
':',
'green',
'}'
]
}
}
]
}
]
}
]
},
'Example 5.5. Comment Indicator': {
src: `# Comment only.`,
tgt: [{ contents: [{ comment: ' Comment only.' }] }]
},
'Example 5.6. Node Property Indicators': {
src: `anchored: !local &anchor value
alias: *anchor`,
tgt: [
{
contents: [
{
items: [
'anchored',
{
type: Type.MAP_VALUE,
node: {
tag: { handle: '!', suffix: 'local' },
anchor: 'anchor',
strValue: 'value'
}
},
'alias',
{
type: Type.MAP_VALUE,
node: { type: Type.ALIAS, rawValue: 'anchor' }
}
]
}
]
}
]
},
'Example 5.7. Block Scalar Indicators': {
src: `literal: |
some
text
folded: >
some
text
`,
tgt: [
{
contents: [
{
items: [
'literal',
{ type: Type.MAP_VALUE, node: 'some\ntext\n' },
'folded',
{ type: Type.MAP_VALUE, node: 'some text\n' }
]
}
]
}
]
},
'Example 5.8. Quoted Scalar Indicators': {
src: `single: 'text'
double: "text"`,
tgt: [
{
contents: [
{
items: [
'single',
{ type: Type.MAP_VALUE, node: 'text' },
'double',
{ type: Type.MAP_VALUE, node: 'text' }
]
}
]
}
]
},
'Example 5.9. Directive Indicator': {
src: `%YAML 1.2
--- text`,
tgt: [
{
directives: [{ name: 'YAML', parameters: ['1.2'] }],
contents: ['text']
}
]
},
'Example 5.10. Invalid use of Reserved Indicators': {
src: `commercial-at: @text
grave-accent: \`text`,
tgt: [
{
contents: [
{
items: [
'commercial-at',
{ type: Type.MAP_VALUE, node: { strValue: { str: '@text' } } },
'grave-accent',
{ type: Type.MAP_VALUE, node: { strValue: { str: '`text' } } }
]
}
]
}
]
// ERROR: Reserved indicators can't start a plain scalar.
}
},
'5.5. White Space Characters': {
'Example 5.12. Tabs and Spaces': {
src: `# Tabs and spaces
quoted: "Quoted \t"
block:\t|
void main() {
\tprintf("Hello, world!\\n");
}`,
tgt: [
{
contents: [
{ comment: ' Tabs and spaces' },
{
items: [
'quoted',
{ type: Type.MAP_VALUE, node: 'Quoted \t' },
'block',
{
type: Type.MAP_VALUE,
node: 'void main() {\n\tprintf("Hello, world!\\n");\n}\n'
}
]
}
]
}
]
}
},
'5.7. Escaped Characters': {
'Example 5.13. Escaped Characters': {
src: `"Fun with \\\\
\\" \\a \\b \\e \\f \\
\\n \\r \\t \\v \\0 \\
\\ \\_ \\N \\L \\P \\
\\x41 \\u0041 \\U00000041"`,
tgt: [
{
contents: [
'Fun with \x5C \x22 \x07 \x08 \x1B \x0C \x0A \x0D \x09 \x0B \x00 \x20 \xA0 \x85 \u2028 \u2029 A A A'
]
}
]
},
'Example 5.14. Invalid Escaped Characters': {
src: `Bad escapes:
"\\c
\\xq-"`,
tgt: [
{
contents: [
{
items: [
'Bad escapes',
{ type: Type.MAP_VALUE, node: { rawValue: '"\\c\n \\xq-"' } }
]
}
]
}
]
// ERROR: c is an invalid escaped character.
// ERROR: q and - are invalid hex digits.
}
},
'6.1. Indentation Spaces': {
'Example 6.1. Indentation Spaces': {
src: ` # Leading comment line spaces are
# neither content nor indentation.
Not indented:
By one space: |
By four
spaces
Flow style: [ # Leading spaces
By two, # in flow style
Also by two, # are neither
\tStill by two # content nor
] # indentation.`,
tgt: [
{
contents: [
{ comment: ' Leading comment line spaces are' },
{ comment: ' neither content nor indentation.' },
{ type: Type.BLANK_LINE },
{
items: [
'Not indented',
{
type: Type.MAP_VALUE,
node: {
items: [
'By one space',
{ type: Type.MAP_VALUE, node: 'By four\n spaces\n' },
'Flow style',
{
type: Type.MAP_VALUE,
node: {
items: [
'[',
{ comment: ' Leading spaces' },
'By two',
',',
{ comment: ' in flow style' },
'Also by two',
',',
{ comment: ' are neither' },
{
strValue: 'Still by two',
comment: ' content nor'
},
']'
],
comment: ' indentation.'
}
}
]
}
}
]
}
]
}
]
},
'Example 6.2. Indentation Indicators': {
src: `? a
: -\tb
- -\tc
- d`,
tgt: [
{
contents: [
{
items: [
{ type: Type.MAP_KEY, node: 'a' },
{
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'b' },
{
type: Type.SEQ_ITEM,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'c' },
{ type: Type.SEQ_ITEM, node: 'd' }
]
}
}
]
}
}
]
}
]
}
]
}
},
'6.2. Separation Spaces': {
'Example 6.3. Separation Spaces': {
src: `- foo:\t bar
- - baz
-\tbaz`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: {
items: ['foo', { type: Type.MAP_VALUE, node: 'bar' }]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'baz' },
{ type: Type.SEQ_ITEM, node: 'baz' }
]
}
}
]
}
]
}
]
}
},
'6.3. Line Prefixes': {
'Example 6.4. Line Prefixes': {
src: `plain: text
lines
quoted: "text
\tlines"
block: |
text
\tlines`,
tgt: [
{
contents: [
{
items: [
'plain',
{ type: Type.MAP_VALUE, node: 'text lines' },
'quoted',
{ type: Type.MAP_VALUE, node: 'text lines' },
'block',
{ type: Type.MAP_VALUE, node: 'text\n \tlines\n' }
]
}
]
}
]
}
},
'6.4. Empty Lines': {
'Example 6.5. Empty Lines': {
src: `Folding:
"Empty line
\t
as a line feed"
Chomping: |
Clipped empty lines
`,
tgt: [
{
contents: [
{
items: [
'Folding',
{ type: Type.MAP_VALUE, node: 'Empty line\nas a line feed' },
'Chomping',
{ type: Type.MAP_VALUE, node: 'Clipped empty lines\n' }
]
}
]
}
]
}
},
'6.5. Line Folding': {
'Example 6.6. Line Folding': {
src: `>-
trimmed
··
·
··as
··space`.replace(/·/g, ' '),
tgt: [{ contents: ['trimmed\n\n\nas space'] }]
},
'Example 6.7. Block Folding': {
src: `>
··foo·
·
··\t·bar
··baz\n`.replace(/·/g, ' '),
tgt: [{ contents: ['foo \n\n\t bar\n\nbaz\n'] }]
},
'Example 6.8. Flow Folding': {
src: `"
foo\t
\t
\t bar
baz
"`,
tgt: [{ contents: [' foo\nbar\nbaz '] }]
}
},
'6.6. Comments': {
'Example 6.9. Separated Comment': {
src: `key: # Comment
value`,
tgt: [
{
contents: [
{
items: [
'key',
{ type: Type.MAP_VALUE, comment: ' Comment', node: 'value' }
]
}
]
}
]
},
'Example 6.10. Comment Lines': {
src: ` # Comment
\n\n`,
tgt: [{ contents: [{ comment: ' Comment' }] }]
},
'Example 6.11. Multi-Line Comments': {
src: `key: # Comment
# lines
value\n`,
tgt: [
{
contents: [
{
items: [
'key',
{
type: Type.MAP_VALUE,
comment: ' Comment\n lines',
node: 'value'
}
]
}
]
}
]
}
},
'6.7. Separation Lines': {
'Example 6.12. Separation Spaces': {
src: `{ first: Sammy, last: Sosa }:
# Statistics:
hr: # Home runs
65
avg: # Average
0.278`,
tgt: [
{
contents: [
{
items: [
{
items: [
'{',
'first',
':',
'Sammy',
',',
'last',
':',
'Sosa',
'}'
]
},
{
type: Type.MAP_VALUE,
comment: ' Statistics:',
node: {
items: [
'hr',
{
type: Type.MAP_VALUE,
comment: ' Home runs',
node: '65'
},
'avg',
{
type: Type.MAP_VALUE,
comment: ' Average',
node: '0.278'
}
]
}
}
]
}
]
}
]
}
},
'6.8. Directives': {
'Example 6.13. Reserved Directives': {
src: `%FOO bar baz # Should be ignored
# with a warning.
--- "foo"`,
tgt: [
{
directives: [
{
name: 'FOO',
parameters: ['bar', 'baz'],
comment: ' Should be ignored'
},
{ comment: ' with a warning.' }
],
contents: ['foo']
}
]
}
},
'6.8.1. “YAML” Directives': {
'Example 6.14. “YAML” directive': {
src: `%YAML 1.3 # Attempt parsing
# with a warning
---
"foo"`,
tgt: [
{
directives: [
{ name: 'YAML', parameters: ['1.3'], comment: ' Attempt parsing' },
{ comment: ' with a warning' }
],
contents: ['foo']
}
]
},
'Example 6.15. Invalid Repeated YAML directive': {
src: `%YAML 1.2
%YAML 1.1
foo`,
tgt: [
{
directives: [
{ name: 'YAML', parameters: ['1.2'] },
{ name: 'YAML', parameters: ['1.1'] }
],
contents: ['foo']
}
]
// ERROR: The YAML directive must only be given at most once per document.
}
},
'6.8.2. “TAG” Directives': {
'Example 6.16. “TAG” directive': {
src: `%TAG !yaml! tag:yaml.org,2002:
---
!yaml!str "foo"`,
tgt: [
{
directives: [
{ name: 'TAG', parameters: ['!yaml!', 'tag:yaml.org,2002:'] }
],
contents: [
{ tag: { handle: '!yaml!', suffix: 'str' }, strValue: 'foo' }
]
}
]
},
'Example 6.17. Invalid Repeated TAG directive': {
src: `%TAG ! !foo
%TAG ! !foo
bar`,
tgt: [
{
directives: [
{ name: 'TAG', parameters: ['!', '!foo'] },
{ name: 'TAG', parameters: ['!', '!foo'] }
],
contents: ['bar']
}
]
// ERROR: The TAG directive must only be given at most once per handle in the same document.
},
'Example 6.18. Primary Tag Handle': {
src: `# Private
!foo "bar"
...
# Global
%TAG ! tag:example.com,2000:app/
---
!foo "bar"`,
tgt: [
{
contents: [
{ comment: ' Private' },
{ tag: { handle: '!', suffix: 'foo' }, strValue: 'bar' }
]
},
{
directives: [
{ comment: ' Global' },
{ name: 'TAG', parameters: ['!', 'tag:example.com,2000:app/'] }
],
contents: [{ tag: { handle: '!', suffix: 'foo' }, strValue: 'bar' }]
}
]
},
'Example 6.19. Secondary Tag Handle': {
src: `%TAG !! tag:example.com,2000:app/
---
!!int 1 - 3 # Interval, not integer`,
tgt: [
{
directives: [
{ name: 'TAG', parameters: ['!!', 'tag:example.com,2000:app/'] }
],
contents: [
{
tag: { handle: '!!', suffix: 'int' },
strValue: '1 - 3',
comment: ' Interval, not integer'
}
]
}
]
},
'Example 6.20. Tag Handles': {
src: `%TAG !e! tag:example.com,2000:app/
---
!e!foo "bar"`,
tgt: [
{
directives: [
{ name: 'TAG', parameters: ['!e!', 'tag:example.com,2000:app/'] }
],
contents: [{ tag: { handle: '!e!', suffix: 'foo' }, strValue: 'bar' }]
}
]
},
'Example 6.21. Local Tag Prefix': {
src: `%TAG !m! !my-
--- # Bulb here
!m!light fluorescent
...
%TAG !m! !my-
--- # Color here
!m!light green`,
tgt: [
{
directives: [{ name: 'TAG', parameters: ['!m!', '!my-'] }],
contents: [
{ comment: ' Bulb here' },
{
tag: { handle: '!m!', suffix: 'light' },
strValue: 'fluorescent'
}
]
},
{
directives: [{ name: 'TAG', parameters: ['!m!', '!my-'] }],
contents: [
{ comment: ' Color here' },
{ tag: { handle: '!m!', suffix: 'light' }, strValue: 'green' }
]
}
]
},
'Example 6.22. Global Tag Prefix': {
src: `%TAG !e! tag:example.com,2000:app/
---
- !e!foo "bar"`,
tgt: [
{
directives: [
{ name: 'TAG', parameters: ['!e!', 'tag:example.com,2000:app/'] }
],
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!e!', suffix: 'foo' },
strValue: 'bar'
}
}
]
}
]
}
]
}
},
'6.9. Node Properties': {
'Example 6.23. Node Properties': {
src: `!!str &a1 "foo":
!!str bar
&a2 baz : *a1`,
tgt: [
{
contents: [
{
items: [
{
tag: { handle: '!!', suffix: 'str' },
anchor: 'a1',
strValue: 'foo'
},
{
type: Type.MAP_VALUE,
node: {
tag: { handle: '!!', suffix: 'str' },
strValue: 'bar'
}
},
{ anchor: 'a2', strValue: 'baz' },
{
type: Type.MAP_VALUE,
node: { type: Type.ALIAS, rawValue: 'a1' }
}
]
}
]
}
]
},
'Example 6.24. Verbatim Tags': {
src: `! foo :
! baz`,
tgt: [
{
contents: [
{
items: [
{ tag: { verbatim: 'tag:yaml.org,2002:str' }, strValue: 'foo' },
{
type: Type.MAP_VALUE,
node: { tag: { verbatim: '!bar' }, strValue: 'baz' }
}
]
}
]
}
]
},
'Example 6.25. Invalid Verbatim Tags': {
src: `- ! foo
- !<$:?> bar`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: { tag: { verbatim: '!' }, strValue: 'foo' }
},
{
type: Type.SEQ_ITEM,
node: { tag: { verbatim: '$:?' }, strValue: 'bar' }
}
]
}
]
}
]
// ERROR: Verbatim tags aren't resolved, so ! is invalid.
// ERROR: The $:? tag is neither a global URI tag nor a local tag starting with “!”.
},
'Example 6.26. Tag Shorthands': {
src: `%TAG !e! tag:example.com,2000:app/
---
- !local foo
- !!str bar
- !e!tag%21 baz`,
tgt: [
{
directives: [
{ name: 'TAG', parameters: ['!e!', 'tag:example.com,2000:app/'] }
],
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!', suffix: 'local' },
strValue: 'foo'
}
},
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!!', suffix: 'str' },
strValue: 'bar'
}
},
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!e!', suffix: 'tag%21' },
strValue: 'baz'
}
}
]
}
]
}
]
},
'Example 6.27. Invalid Tag Shorthands': {
src: `%TAG !e! tag:example,2000:app/
---
- !e! foo
- !h!bar baz`,
tgt: [
{
directives: [
{ name: 'TAG', parameters: ['!e!', 'tag:example,2000:app/'] }
],
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: { tag: { handle: '!e!', suffix: '' }, strValue: 'foo' }
},
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!h!', suffix: 'bar' },
strValue: 'baz'
}
}
]
}
]
}
]
// ERROR: The !e! handle has no suffix.
// ERROR: The !h! handle wasn't declared.
},
'Example 6.28. Non-Specific Tags': {
src: `# Assuming conventional resolution:
- "12"
- 12
- ! 12`,
tgt: [
{
contents: [
{ comment: ' Assuming conventional resolution:' },
{
items: [
{ type: Type.SEQ_ITEM, node: '12' },
{ type: Type.SEQ_ITEM, node: '12' },
{
type: Type.SEQ_ITEM,
node: { tag: { handle: '!', suffix: '' }, strValue: '12' }
}
]
}
]
}
]
},
'Example 6.29. Node Anchors': {
src: `First occurrence: &anchor Value
Second occurrence: *anchor`,
tgt: [
{
contents: [
{
items: [
'First occurrence',
{
type: Type.MAP_VALUE,
node: { anchor: 'anchor', strValue: 'Value' }
},
'Second occurrence',
{
type: Type.MAP_VALUE,
node: { type: Type.ALIAS, rawValue: 'anchor' }
}
]
}
]
}
]
}
},
'7.1. Alias Nodes': {
'Example 7.1. Alias Nodes': {
src: `First occurrence: &anchor Foo
Second occurrence: *anchor
Override anchor: &anchor Bar
Reuse anchor: *anchor`,
tgt: [
{
contents: [
{
items: [
'First occurrence',
{
type: Type.MAP_VALUE,
node: { anchor: 'anchor', strValue: 'Foo' }
},
'Second occurrence',
{
type: Type.MAP_VALUE,
node: { type: Type.ALIAS, rawValue: 'anchor' }
},
'Override anchor',
{
type: Type.MAP_VALUE,
node: { anchor: 'anchor', strValue: 'Bar' }
},
'Reuse anchor',
{
type: Type.MAP_VALUE,
node: { type: Type.ALIAS, rawValue: 'anchor' }
}
]
}
]
}
]
}
},
'7.2. Empty Nodes': {
'Example 7.2. Empty Content': {
src: `{
foo : !!str,
!!str : bar,
}`,
tgt: [
{
contents: [
{
items: [
'{',
'foo',
':',
{ tag: { handle: '!!', suffix: 'str' } },
',',
{ tag: { handle: '!!', suffix: 'str' } },
':',
'bar',
',',
'}'
]
}
]
}
]
},
'Example 7.3. Completely Empty Flow Nodes': {
src: `{
? foo :,
: bar,
}`,
tgt: [
{
contents: [
{ items: ['{', '?', 'foo', ':', ',', ':', 'bar', ',', '}'] }
]
}
]
}
},
'7.3.1. Double-Quoted Style': {
'Example 7.4. Double Quoted Implicit Keys': {
src: `"implicit block key" : [
"implicit flow key" : value,
]`,
tgt: [
{
contents: [
{
items: [
'implicit block key',
{
type: Type.MAP_VALUE,
node: {
items: ['[', 'implicit flow key', ':', 'value', ',', ']']
}
}
]
}
]
}
]
},
'Example 7.5. Double Quoted Line Breaks': {
src: `"folded
to a space,\t
to a line feed, or \t\\
\\ \tnon-content"`,
tgt: [
{
contents: ['folded to a space,\nto a line feed, or \t \tnon-content']
}
]
},
'Example 7.6. Double Quoted Lines': {
src: `" 1st non-empty
2nd non-empty
\t3rd non-empty "`,
tgt: [{ contents: [' 1st non-empty\n2nd non-empty 3rd non-empty '] }]
}
},
'7.3.2. Single-Quoted Style': {
'Example 7.7. Single Quoted Characters': {
src: ` 'here''s to "quotes"'`,
tgt: [{ contents: ['here\'s to "quotes"'] }]
},
'Example 7.8. Single Quoted Implicit Keys': {
src: `'implicit block key' : [
'implicit flow key' : value,
]`,
tgt: [
{
contents: [
{
items: [
'implicit block key',
{
type: Type.MAP_VALUE,
node: {
items: ['[', 'implicit flow key', ':', 'value', ',', ']']
}
}
]
}
]
}
]
},
'Example 7.9. Single Quoted Lines': {
src: `' 1st non-empty
2nd non-empty\t
\t3rd non-empty '`,
tgt: [{ contents: [' 1st non-empty\n2nd non-empty 3rd non-empty '] }]
}
},
'7.3.3. Plain Style': {
'Example 7.10. Plain Characters': {
src: `# Outside flow collection:
- ::vector
- ": - ()"
- Up, up, and away!
- -123
- http://example.com/foo#bar
# Inside flow collection:
- [ ::vector,
": - ()",
"Up, up and away!",
-123,
http://example.com/foo#bar ]`,
tgt: [
{
contents: [
{ comment: ' Outside flow collection:' },
{
items: [
{ type: Type.SEQ_ITEM, node: '::vector' },
{ type: Type.SEQ_ITEM, node: ': - ()' },
{ type: Type.SEQ_ITEM, node: 'Up, up, and away!' },
{ type: Type.SEQ_ITEM, node: '-123' },
{ type: Type.SEQ_ITEM, node: 'http://example.com/foo#bar' },
{ comment: ' Inside flow collection:' },
{
type: Type.SEQ_ITEM,
node: {
items: [
'[',
'::vector',
',',
': - ()',
',',
'Up, up and away!',
',',
'-123',
',',
'http://example.com/foo#bar',
']'
]
}
}
]
}
]
}
]
},
'Example 7.11. Plain Implicit Keys': {
src: `implicit block key : [
implicit flow key : value,
]`,
tgt: [
{
contents: [
{
items: [
'implicit block key',
{
type: Type.MAP_VALUE,
node: {
items: ['[', 'implicit flow key', ':', 'value', ',', ']']
}
}
]
}
]
}
]
},
'Example 7.12. Plain Lines': {
src: `1st non-empty
2nd non-empty
\t3rd non-empty`,
tgt: [{ contents: ['1st non-empty\n2nd non-empty 3rd non-empty'] }]
}
},
'7.4.1. Flow Sequences': {
'Example 7.13. Flow Sequence': {
src: `- [ one, two, ]
- [three ,four]`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: { items: ['[', 'one', ',', 'two', ',', ']'] }
},
{
type: Type.SEQ_ITEM,
node: { items: ['[', 'three', ',', 'four', ']'] }
}
]
}
]
}
]
},
'Example 7.14. Flow Sequence Entries': {
src: `[
"double
quoted", 'single
quoted',
plain
text, [ nested ],
single: pair,
]`,
tgt: [
{
contents: [
{
items: [
'[',
'double quoted',
',',
'single quoted',
',',
'plain text',
',',
{ items: ['[', 'nested', ']'] },
',',
'single',
':',
'pair',
',',
']'
]
}
]
}
]
}
},
'7.4.2. Flow Mappings': {
'Example 7.15. Flow Mappings': {
src: `- { one : two , three: four , }
- {five: six,seven : eight}`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: {
items: [
'{',
'one',
':',
'two',
',',
'three',
':',
'four',
',',
'}'
]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
'{',
'five',
':',
'six',
',',
'seven',
':',
'eight',
'}'
]
}
}
]
}
]
}
]
},
'Example 7.16. Flow Mapping Entries': {
src: `{
? explicit: entry,
implicit: entry,
?
}`,
tgt: [
{
contents: [
{
items: [
'{',
'?',
'explicit',
':',
'entry',
',',
'implicit',
':',
'entry',
',',
'?',
'}'
]
}
]
}
]
},
'Example 7.17. Flow Mapping Separate Values': {
src: `{
unquoted : "separate",
http://foo.com,
omitted value:,
: omitted key,
}`,
tgt: [
{
contents: [
{
items: [
'{',
'unquoted',
':',
'separate',
',',
'http://foo.com',
',',
'omitted value',
':',
',',
':',
'omitted key',
',',
'}'
]
}
]
}
]
},
'Example 7.18. Flow Mapping Adjacent Values': {
src: `{
"adjacent":value,
"readable": value,
"empty":
}`,
tgt: [
{
contents: [
{
items: [
'{',
'adjacent',
':',
'value',
',',
'readable',
':',
'value',
',',
'empty',
':',
'}'
]
}
]
}
]
},
'Example 7.19. Single Pair Flow Mappings': {
src: `[
foo: bar
]`,
tgt: [{ contents: [{ items: ['[', 'foo', ':', 'bar', ']'] }] }]
},
'Example 7.20. Single Pair Explicit Entry': {
src: `[
? foo
bar : baz
]`,
tgt: [{ contents: [{ items: ['[', '?', 'foo bar', ':', 'baz', ']'] }] }]
},
'Example 7.21. Single Pair Implicit Entries': {
src: `- [ YAML : separate ]
- [ : empty key entry ]
- [ {JSON: like}:adjacent ]`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: { items: ['[', 'YAML', ':', 'separate', ']'] }
},
{
type: Type.SEQ_ITEM,
node: { items: ['[', ':', 'empty key entry', ']'] }
},
{
type: Type.SEQ_ITEM,
node: {
items: [
'[',
{ items: ['{', 'JSON', ':', 'like', '}'] },
':',
'adjacent',
']'
]
}
}
]
}
]
}
]
},
'Example 7.22. Invalid Implicit Keys': {
src: `[ foo
bar: invalid,
"foo...>1K characters...bar": invalid ]`,
tgt: [
{
contents: [
{
items: [
'[',
'foo bar',
':',
'invalid',
',',
'foo...>1K characters...bar',
':',
'invalid',
']'
]
}
]
}
]
// ERROR: The foo bar key spans multiple lines
// ERROR: The foo...bar key is too long
}
},
'7.5. Flow Nodes': {
'Example 7.23. Flow Content': {
src: `- [ a, b ]
- { a: b }
- "a"
- 'b'
- c`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: { items: ['[', 'a', ',', 'b', ']'] }
},
{
type: Type.SEQ_ITEM,
node: { items: ['{', 'a', ':', 'b', '}'] }
},
{ type: Type.SEQ_ITEM, node: 'a' },
{ type: Type.SEQ_ITEM, node: 'b' },
{ type: Type.SEQ_ITEM, node: 'c' }
]
}
]
}
]
},
'Example 7.24. Flow Nodes': {
src: `- !!str "a"
- 'b'
- &anchor "c"
- *anchor
- !!str`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: { tag: { handle: '!!', suffix: 'str' }, strValue: 'a' }
},
{ type: Type.SEQ_ITEM, node: 'b' },
{
type: Type.SEQ_ITEM,
node: { anchor: 'anchor', strValue: 'c' }
},
{
type: Type.SEQ_ITEM,
node: { type: Type.ALIAS, rawValue: 'anchor' }
},
{
type: Type.SEQ_ITEM,
node: { tag: { handle: '!!', suffix: 'str' } }
}
]
}
]
}
]
}
},
'8.1.1. Block Scalar Headers': {
'Example 8.1. Block Scalar Header': {
src: `- | # Empty header
literal
- >1 # Indentation indicator
folded
- |+ # Chomping indicator
keep
- >1- # Both indicators
strip`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: { comment: ' Empty header', strValue: 'literal\n' }
},
{
type: Type.SEQ_ITEM,
node: {
comment: ' Indentation indicator',
strValue: ' folded\n'
}
},
{
type: Type.SEQ_ITEM,
node: {
comment: ' Chomping indicator',
strValue: 'keep\n\n'
}
},
{
type: Type.SEQ_ITEM,
node: { comment: ' Both indicators', strValue: ' strip' }
}
]
}
]
}
]
},
'Example 8.2. Block Indentation Indicator': {
src: `- |
·detected
- >
·
··
··# detected
- |1
··explicit
- >
·\t
·detected`.replace(/·/g, ' '),
tgt: [
{
contents: [
{
items: [
{ type: Type.SEQ_ITEM, node: 'detected\n' },
{ type: Type.SEQ_ITEM, node: '\n\n# detected\n' },
{ type: Type.SEQ_ITEM, node: ' explicit\n' },
{ type: Type.SEQ_ITEM, node: '\t\ndetected\n' }
]
}
]
}
]
},
'Example 8.3. Invalid Block Scalar Indentation Indicators': {
src: `- |
··
·text
---
- >
··text
·text
---
- |2
·text`.replace(/·/g, ' '),
tgt: [
{
contents: [{ items: [{ node: ' \ntext\n' }] }]
},
{
contents: [{ items: [{ node: 'text text\n' }] }]
},
{
contents: [{ items: [{ node: 'text\n' }] }]
}
]
// ERROR: A leading all-space line must not have too many spaces.
// ERROR: A following text line must not be less indented.
// ERROR: The text is less indented than the indicated level.
},
'Example 8.4. Chomping Final Line Break': {
src: `strip: |-
text
clip: |
text
keep: |+
text\n`,
tgt: [
{
contents: [
{
items: [
'strip',
{ type: Type.MAP_VALUE, node: 'text' },
'clip',
{ type: Type.MAP_VALUE, node: 'text\n' },
'keep',
{ type: Type.MAP_VALUE, node: 'text\n' }
]
}
]
}
]
},
'Example 8.5. Chomping Trailing Lines': {
src: `
# Strip
# Comments:
strip: |-
# text
# Clip
# comments:
clip: |
# text
# Keep
# comments:
keep: |+
# text
# Trail
# comments.`,
tgt: [
{
contents: [
{ type: Type.BLANK_LINE },
{ comment: ' Strip' },
{ comment: ' Comments:' },
{
items: [
'strip',
{ type: Type.MAP_VALUE, node: '# text' },
{ type: Type.BLANK_LINE },
{ comment: ' Clip' },
{ comment: ' comments:' },
{ type: Type.BLANK_LINE },
'clip',
{ type: Type.MAP_VALUE, node: '# text\n' },
{ type: Type.BLANK_LINE },
{ comment: ' Keep' },
{ comment: ' comments:' },
{ type: Type.BLANK_LINE },
'keep',
{ type: Type.MAP_VALUE, node: '# text\n\n' }
]
},
{ comment: ' Trail' },
{ comment: ' comments.' }
]
}
]
},
'Example 8.6. Empty Scalar Chomping': {
src: `strip: >-
clip: >
keep: |+\n\n`,
tgt: [
{
contents: [
{
items: [
'strip',
{ type: Type.MAP_VALUE, node: '' },
{ type: Type.BLANK_LINE },
'clip',
{ type: Type.MAP_VALUE, node: '' },
{ type: Type.BLANK_LINE },
'keep',
{ type: Type.MAP_VALUE, node: '\n' }
]
}
]
}
]
}
},
'8.1.2. Literal Style': {
'Example 8.7. Literal Scalar': {
src: `|
literal
\ttext\n\n`,
tgt: [{ contents: ['literal\n\ttext\n'] }]
},
'Example 8.8. Literal Content': {
src: `|
·
··
··literal
···
··
··text
·# Comment`.replace(/·/g, ' '),
tgt: [
{
contents: ['\n\nliteral\n \n\ntext\n', { comment: ' Comment' }]
}
]
}
},
'8.1.3. Folded Style': {
'Example 8.9. Folded Scalar': {
src: `>
folded
text\n\n`,
tgt: [{ contents: ['folded text\n'] }]
},
'Example 8.10. Folded Lines': {
src: `>
folded
line
next
line
* bullet
* list
* lines
last
line
# Comment`,
tgt: [
{
contents: [
'\nfolded line\nnext line\n * bullet\n\n * list\n * lines\n\nlast line\n',
{ comment: ' Comment' }
]
}
]
}
},
'8.2.1. Block Sequences': {
'Example 8.14. Block Sequence': {
src: `block sequence:
- one
- two : three\n`,
tgt: [
{
contents: [
{
items: [
'block sequence',
{
type: Type.MAP_VALUE,
node: {
items: [
{ type: Type.SEQ_ITEM, node: 'one' },
{
type: Type.SEQ_ITEM,
node: {
items: [
'two',
{ type: Type.MAP_VALUE, node: 'three' }
]
}
}
]
}
}
]
}
]
}
]
},
'Example 8.15. Block Sequence Entry Types': {
src: `- # Empty
- |
block node
- - one # Compact
- two # sequence
- one: two # Compact mapping`,
tgt: [
{
contents: [
{
items: [
{ type: Type.SEQ_ITEM, node: null, comment: ' Empty' },
{ type: Type.SEQ_ITEM, node: 'block node\n' },
{
type: Type.SEQ_ITEM,
node: {
items: [
{
type: Type.SEQ_ITEM,
node: { comment: ' Compact', strValue: 'one' }
},
{
type: Type.SEQ_ITEM,
node: { comment: ' sequence', strValue: 'two' }
}
]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
'one',
{
type: Type.MAP_VALUE,
node: { comment: ' Compact mapping', strValue: 'two' }
}
]
}
}
]
}
]
}
]
}
},
'8.2.2. Block Mappings': {
'Example 8.16. Block Mappings': {
src: `block mapping:
key: value\n`,
tgt: [
{
contents: [
{
items: [
'block mapping',
{
type: Type.MAP_VALUE,
node: {
items: ['key', { type: Type.MAP_VALUE, node: 'value' }]
}
}
]
}
]
}
]
},
'Example 8.17. Explicit Block Mapping Entries': {
src: `? explicit key # Empty value
? |
block key
: - one # Explicit compact
- two # block value\n`,
tgt: [
{
contents: [
{
items: [
{
type: Type.MAP_KEY,
node: { comment: ' Empty value', strValue: 'explicit key' }
},
{ type: Type.MAP_KEY, node: 'block key\n' },
{
type: Type.MAP_VALUE,
node: {
items: [
{
type: Type.SEQ_ITEM,
node: { comment: ' Explicit compact', strValue: 'one' }
},
{
type: Type.SEQ_ITEM,
node: { comment: ' block value', strValue: 'two' }
}
]
}
}
]
}
]
}
]
},
'Example 8.18. Implicit Block Mapping Entries': {
src: `plain key: in-line value
: # Both empty
"quoted key":
- entry`,
tgt: [
{
contents: [
{
items: [
'plain key',
{ type: Type.MAP_VALUE, node: 'in-line value' },
{ type: Type.MAP_VALUE, node: null, comment: ' Both empty' },
'quoted key',
{
type: Type.MAP_VALUE,
node: {
items: [{ type: Type.SEQ_ITEM, node: 'entry' }]
}
}
]
}
]
}
]
},
'Example 8.19. Compact Block Mappings': {
src: `- sun: yellow
- ? earth: blue
: moon: white\n`,
tgt: [
{
contents: [
{
items: [
{
type: Type.SEQ_ITEM,
node: {
items: ['sun', { type: Type.MAP_VALUE, node: 'yellow' }]
}
},
{
type: Type.SEQ_ITEM,
node: {
items: [
{
type: Type.MAP_KEY,
node: {
items: [
'earth',
{ type: Type.MAP_VALUE, node: 'blue' }
]
}
},
{
type: Type.MAP_VALUE,
node: {
items: [
'moon',
{ type: Type.MAP_VALUE, node: 'white' }
]
}
}
]
}
}
]
}
]
}
]
}
},
'8.2.3. Block Nodes': {
'Example 8.20. Block Types': {
src: `-
"flow in block"
- >
Block scalar
- !!map # Block collection
foo : bar\n`,
tgt: [
{
contents: [
{
items: [
{ type: Type.SEQ_ITEM, node: 'flow in block' },
{ type: Type.SEQ_ITEM, node: 'Block scalar\n' },
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!!', suffix: 'map' },
comment: ' Block collection',
items: ['foo', { type: Type.MAP_VALUE, node: 'bar' }]
}
}
]
}
]
}
]
},
'Example 8.21. Block Scalar Nodes': {
src: `literal: |2
value
folded:
!foo
>1
value`,
tgt: [
{
contents: [
{
items: [
'literal',
{ type: Type.MAP_VALUE, node: 'value\n' },
'folded',
{
type: Type.MAP_VALUE,
node: {
tag: { handle: '!', suffix: 'foo' },
strValue: 'value\n'
}
} // trailing \n against spec
]
}
]
}
]
},
'Example 8.22. Block Collection Nodes': {
src: `sequence: !!seq
- entry
- !!seq
- nested
mapping: !!map
foo: bar`,
tgt: [
{
contents: [
{
items: [
'sequence',
{
type: Type.MAP_VALUE,
node: {
tag: { handle: '!!', suffix: 'seq' },
items: [
{ type: Type.SEQ_ITEM, node: 'entry' },
{
type: Type.SEQ_ITEM,
node: {
tag: { handle: '!!', suffix: 'seq' },
items: [{ type: Type.SEQ_ITEM, node: 'nested' }]
}
}
]
}
},
'mapping',
{
type: Type.MAP_VALUE,
node: {
tag: { handle: '!!', suffix: 'map' },
items: ['foo', { type: Type.MAP_VALUE, node: 'bar' }]
}
}
]
}
]
}
]
}
},
'9.1. Documents': {
'Example 9.1. Document Prefix': {
src: `\u{FEFF}# Comment
# lines
Document`,
tgt: [
{
contents: [{ comment: ' Comment' }, { comment: ' lines' }, 'Document']
}
]
},
'Example 9.2. Document Markers': {
src: `%YAML 1.2
---
Document
... # Suffix`,
tgt: [
{
directives: [{ name: 'YAML', parameters: ['1.2'] }],
contents: ['Document', { comment: ' Suffix' }]
}
]
},
'Example 9.3. Bare Documents': {
src: `Bare
document
...
# No document
...
|
%!PS-Adobe-2.0 # Not the first line`,
tgt: [
{
contents: ['Bare document']
},
{
contents: [{ comment: ' No document' }]
},
{
contents: ['%!PS-Adobe-2.0 # Not the first line\n']
}
]
},
'Example 9.4. Explicit Documents': {
src: `---
{ matches
% : 20 }
...
---
# Empty
...`,
tgt: [
{
contents: [{ items: ['{', 'matches %', ':', '20', '}'] }]
},
{
contents: [{ comment: ' Empty' }]
}
]
},
'Example 9.5. Directives Documents': {
src: `%YAML 1.2
--- |
%!PS-Adobe-2.0
...
%YAML 1.2
---
# Empty
...`,
tgt: [
{
directives: [{ name: 'YAML', parameters: ['1.2'] }],
contents: ['%!PS-Adobe-2.0\n']
},
{
directives: [{ name: 'YAML', parameters: ['1.2'] }],
contents: [{ comment: ' Empty' }]
}
]
}
},
'9.2. Streams': {
'Example 9.6. Stream': {
src: `Document
---
# Empty
...
%YAML 1.2
---
matches %: 20`,
tgt: [
{
contents: ['Document']
},
{
contents: [{ comment: ' Empty' }]
},
{
directives: [{ name: 'YAML', parameters: ['1.2'] }],
contents: [
{ items: ['matches %', { type: Type.MAP_VALUE, node: '20' }] }
]
}
]
}
},
'yaml-test-suite': {
'2EBW: Allowed characters in keys': {
src: `a!"#$%&'()*+,-./09:;<=>?@AZ[\\]^_\`az{|}~: safe
?foo: safe question mark
:foo: safe colon
-foo: safe dash
this is#not: a comment`,
tgt: [
{
contents: [
{
items: [
'a!"#$%&\'()*+,-./09:;<=>?@AZ[\\]^_`az{|}~',
{ node: 'safe' },
'?foo',
{ node: 'safe question mark' },
':foo',
{ node: 'safe colon' },
'-foo',
{ node: 'safe dash' },
'this is#not',
{ node: 'a comment' }
]
}
]
}
]
},
'PW8X: Anchors on Empty Scalars': {
src: `- &a
- a
-
&a : a
b: &b
&c : &a
-
? &d
? &e
: &a`,
tgt: [
{
contents: [
{
items: [
{ node: { anchor: 'a' } },
{ node: 'a' },
{
node: {
items: [
{ anchor: 'a' },
{ type: Type.MAP_VALUE, node: 'a' },
'b',
{ type: Type.MAP_VALUE, node: { anchor: 'b' } },
{ anchor: 'c' },
{ type: Type.MAP_VALUE, node: { anchor: 'a' } }
]
}
},
{
node: {
items: [
{ type: Type.MAP_KEY, node: { anchor: 'd' } },
{ type: Type.MAP_KEY, node: { anchor: 'e' } },
{ type: Type.MAP_VALUE, node: { anchor: 'a' } }
]
}
}
]
}
]
}
]
}
}
}
for (const section in spec) {
describe(section, () => {
for (const name in spec[section]) {
test(name, () => {
const { src, tgt } = spec[section][name]
const documents = parse(src)
trace: 'PARSED', JSON.stringify(pretty(documents), null, ' ')
testSpec(documents, tgt)
const reSrc = String(documents)
trace: 'RE-STRUNG', '\n' + reSrc
// expect(reSrc).toBe(src)
const reDoc = parse(reSrc)
trace: 'RE-PARSED', JSON.stringify(pretty(reDoc), null, ' ')
testSpec(reDoc, tgt)
})
}
})
}
yaml-1.10.2/tests/cst/common.js000066400000000000000000000031051402322402300163050ustar00rootroot00000000000000import { Node } from '../../src/cst/Node.js'
export const pretty = node => {
if (!node || typeof node !== 'object') return node
if (Array.isArray(node)) return node.map(pretty)
const res = {}
if (node.anchor) res.anchor = node.anchor
if (typeof node.tag === 'string') res.tag = node.tag
if (node.comment) res.comment = node.comment
if (node.contents) {
if (node.directives.length > 0) res.directives = node.directives.map(pretty)
if (node.contents.length > 0) res.contents = node.contents.map(pretty)
} else if (node.items) {
res.type = node.type
res.items = node.items.map(pretty)
} else if (typeof node.node !== 'undefined') {
res.type = node.type
res.node = pretty(node.node)
} else if (node.strValue) {
res.strValue = node.strValue
} else if (node.rawValue) {
res.type = node.type
res.rawValue = node.rawValue
}
if (Object.keys(res).every(key => key === 'rawValue')) return res.rawValue
return res
}
export const testSpec = (res, exp) => {
if (typeof exp === 'string') {
const value =
res instanceof Node
? 'strValue' in res
? res.strValue
: res.rawValue
: typeof res === 'string'
? res
: res && res.char
expect(value).toBe(exp)
} else if (Array.isArray(exp)) {
expect(res).toBeInstanceOf(Array)
trace: 'test-array', exp
exp.forEach((e, i) => testSpec(res[i], e))
} else if (exp) {
expect(res).toBeInstanceOf(Object)
trace: 'test-object', exp
for (const key in exp) testSpec(res[key], exp[key])
} else {
expect(res).toBeNull()
}
}
yaml-1.10.2/tests/cst/corner-cases.js000066400000000000000000000366651402322402300174220ustar00rootroot00000000000000import { source } from 'common-tags'
import parse from '../../parse-cst.js'
describe('folded block with chomp: keep', () => {
test('nl + nl', () => {
const src = `>+\nblock\n\n`
const doc = parse(src)[0]
expect(doc.contents[0].strValue).toBe('block\n\n')
})
test('nl + nl + sp + nl', () => {
const src = '>+\nab\n\n \n'
const doc = parse(src)[0]
expect(doc.contents[0].strValue).toBe('ab\n\n \n')
})
})
describe('folded block with indent indicator + leading empty lines + leading whitespace', () => {
test('one blank line', () => {
const src = '>1\n\n line\n'
const doc = parse(src)[0]
expect(doc.contents[0].strValue).toBe('\n line\n')
})
test('two blank lines', () => {
const src = '>1\n\n\n line\n'
const doc = parse(src)[0]
expect(doc.contents[0].strValue).toBe('\n\n line\n')
})
})
describe('multiple linebreaks in scalars', () => {
test('plain', () => {
const src = `trimmed\n\n\n\nlines\n`
const doc = parse(src)[0]
expect(doc.contents[0].strValue).toBe('trimmed\n\n\nlines')
})
test('single-quoted', () => {
const src = `'trimmed\n\n\n\nlines'\n`
const doc = parse(src)[0]
expect(doc.contents[0].strValue).toBe('trimmed\n\n\nlines')
})
})
test('no null document for document-end marker', () => {
const src = '---\nx\n...\n'
const docs = parse(src)
expect(docs).toHaveLength(1)
})
test('explicit key after empty value', () => {
const src = 'one:\n? two\n'
const doc = parse(src)[0]
const raw = doc.contents[0].items.map(it => it.rawValue)
expect(raw).toMatchObject(['one', ':', '? two'])
})
test('seq with anchor as explicit key', () => {
const src = '? &key\n- a\n'
const doc = parse(src)[0]
expect(doc.contents).toHaveLength(1)
expect(doc.contents[0].items[0].node.rawValue).toBe('- a')
})
test('unindented single-quoted string', () => {
const src = `key: 'two\nlines'\n`
const doc = parse(src)[0]
const { node } = doc.contents[0].items[1]
expect(node.error).toBeNull()
expect(node.strValue).toMatchObject({
str: 'two lines',
errors: [
new SyntaxError(
'Multi-line single-quoted string needs to be sufficiently indented'
)
]
})
})
describe('seq unindent to non-empty indent', () => {
test('after map', () => {
// const src = `
// - a:| - b| - c|`
const src = `
- a:
- b
- c\n`
const doc = parse(src)[0]
expect(doc.contents).toHaveLength(2)
expect(doc.contents[1].items).toHaveLength(2)
expect(doc.contents[1].items[1].error).toBeNull()
})
test('after seq', () => {
const src = `
-
- a
- b\n`
const doc = parse(src)[0]
expect(doc.contents).toHaveLength(2)
expect(doc.contents[1].items).toHaveLength(2)
expect(doc.contents[1].items[1].error).toBeNull()
})
})
test('eemeli/yaml#10', () => {
const src = `
a:
- b
c: d
`
const doc = parse(src)[0]
expect(doc.contents).toHaveLength(2)
expect(doc.contents[1].items).toHaveLength(4)
expect(doc.contents[1].items[1].error).toBeNull()
})
test('eemeli/yaml#19', () => {
const src = 'a:\n # 123'
const doc = parse(src)[0]
expect(doc.contents).toMatchObject([
{
type: 'MAP',
items: [
{ type: 'PLAIN', range: { start: 0, end: 1 } },
{ type: 'MAP_VALUE', range: { start: 1, end: 2 } }
]
},
{ type: 'COMMENT', range: { start: 5, end: 10 } }
])
})
test('eemeli/yaml#20', () => {
const src = 'a:\r\n 123\r\nb:\r\n 456\r\n'
const docStream = parse(src)
const a = docStream[0].contents[0].items[1].node
expect(a.strValue).toBe('123')
expect(docStream.setOrigRanges()).toBe(true)
const { origStart: a0, origEnd: a1 } = a.valueRange
expect(src.slice(a0, a1)).toBe('123')
const b = docStream[0].contents[0].items[3].node
expect(b.strValue).toBe('456')
const { origStart: b0, origEnd: b1 } = b.valueRange
expect(src.slice(b0, b1)).toBe('456')
})
test('eemeli/yaml#38', () => {
const src = `
-
- - a
-
`
const doc = parse(src)[0]
const { items } = doc.contents[1]
expect(items).toHaveLength(3)
items.forEach(item => {
expect(item.error).toBe(null)
})
})
test('eemeli/yaml#56', () => {
const src = ':,\n'
const doc = parse(src)[0]
expect(doc.contents).toHaveLength(1)
expect(doc.contents[0]).toMatchObject({
error: null,
strValue: ':,',
type: 'PLAIN'
})
})
describe('collection indicator as last char', () => {
test('seq item', () => {
const src = '-'
const doc = parse(src)[0]
expect(doc.contents[0]).toMatchObject({
type: 'SEQ',
items: [{ type: 'SEQ_ITEM', node: null }]
})
})
test('explicit map key', () => {
const src = '?'
const doc = parse(src)[0]
expect(doc.contents[0]).toMatchObject({
type: 'MAP',
items: [{ type: 'MAP_KEY', node: null }]
})
})
test('empty map value', () => {
const src = ':'
const doc = parse(src)[0]
expect(doc.contents[0]).toMatchObject({
type: 'MAP',
items: [{ type: 'MAP_VALUE', node: null }]
})
})
test('indented seq-in-seq', () => {
const src = ` -\n - - a\n -`
const doc = parse(src)[0]
expect(doc.contents[0]).toMatchObject({
items: [
{ error: null },
{ node: { items: [{ node: { type: 'PLAIN', strValue: 'a' } }] } },
{ error: null }
]
})
})
test('implicit map value separator', () => {
const src = 'a:'
const doc = parse(src)[0]
expect(doc.contents[0]).toMatchObject({
type: 'MAP',
items: [
{ type: 'PLAIN', strValue: 'a' },
{ type: 'MAP_VALUE', node: null }
]
})
})
})
test('parse an empty string as an empty document', () => {
const doc = parse('')[0]
expect(doc).toMatchObject({
error: null,
contents: []
})
})
test('re-stringify flow seq with comments', () => {
const src = '[ #c\n1, #d\n2 ]\n'
const doc = parse(src)
expect(String(doc)).toBe(src)
})
test('blank line after less-indented comment (eemeli/yaml#91)', () => {
const src = `
foo1: bar
# comment
foo2: baz`
const doc = parse(src)
expect(doc).toHaveLength(1)
expect(doc[0].contents).toMatchObject([
{ type: 'BLANK_LINE' },
{ type: 'MAP' }
])
})
describe('flow collection as same-line mapping key value', () => {
test('eemeli/yaml#113', () => {
const src = source`
---
foo:
bar:
enum: [
"abc",
"cde"
]
`
const doc = parse(src)
const barValue = doc[0].contents[0].items[1].node.items[1].node
expect(barValue.items[1].node).toMatchObject({
error: null,
items: [
{ char: '[' },
{ type: 'QUOTE_DOUBLE' },
{ char: ',' },
{ type: 'QUOTE_DOUBLE' },
{ char: ']' }
],
type: 'FLOW_SEQ'
})
})
test('eemeli/yaml#114', () => {
const src = source`
foo: {
bar: boom
}
`
const doc = parse(src)
const flowCollection = doc[0].contents[0].items[1].node
expect(flowCollection).toMatchObject({
error: null,
items: [
{ char: '{' },
{ type: 'PLAIN' },
{ char: ':' },
{ type: 'PLAIN' },
{ char: '}' }
],
type: 'FLOW_MAP'
})
})
test('Fails on insufficient indent', () => {
const src = source`
foo: {
bar: boom
}
`
const doc = parse(' ' + src)
const flowCollection = doc[0].contents[0].items[1].node
expect(flowCollection).toMatchObject({
error: {
message: 'Insufficient indentation in flow collection',
name: 'YAMLSemanticError'
},
items: [
{ char: '{' },
{ type: 'PLAIN' },
{ char: ':' },
{ type: 'PLAIN' },
{ char: '}' }
],
type: 'FLOW_MAP'
})
})
})
describe('blank lines before empty collection item value', () => {
test('empty value followed by blank line at document end', () => {
const src = 'a:\n\n'
const doc = parse(src)[0]
expect(doc.contents).toMatchObject([
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
]
}
])
})
test('empty value with blank line before comment at document end', () => {
const src = 'a:\n\n#c\n'
const doc = parse(src)[0]
expect(doc.contents).toMatchObject([
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
]
},
{ type: 'BLANK_LINE', range: { start: 3, end: 4 } },
{ type: 'COMMENT', range: { start: 4, end: 6 } }
])
})
test('empty value with blank line after inline comment at document end', () => {
const src = 'a: #c\n\n'
const doc = parse(src)[0]
expect(doc.contents).toMatchObject([
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [{ start: 3, end: 5 }] }
]
}
])
})
test('empty value with blank line after separate-line comment at document end', () => {
const src = 'a:\n#c\n\n'
const doc = parse(src)[0]
expect(doc.contents).toMatchObject([
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
]
},
{ type: 'COMMENT', range: { start: 3, end: 5 } }
])
})
test('empty value with blank line before & after comment at document end', () => {
const src = 'a:\n\n#c\n\n'
const doc = parse(src)[0]
expect(doc.contents).toMatchObject([
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
]
},
{ type: 'BLANK_LINE', range: { start: 3, end: 4 } },
{ type: 'COMMENT', range: { start: 4, end: 6 } }
])
})
test('empty value with blank lines before & after two comments at document end', () => {
const src = 'a:\n\n#c\n\n#d\n\n'
const doc = parse(src)[0]
expect(doc.contents).toMatchObject([
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
]
},
{ type: 'BLANK_LINE', range: { start: 3, end: 4 } },
{ type: 'COMMENT', range: { start: 4, end: 6 } },
{ type: 'BLANK_LINE', range: { start: 7, end: 8 } },
{ type: 'COMMENT', range: { start: 8, end: 10 } }
])
})
test('empty value followed by blank line not at end', () => {
const src = 'a:\n\nb:\n'
const doc = parse(src)[0]
expect(doc.contents[0].items).toMatchObject([
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] },
{ type: 'BLANK_LINE', range: { start: 3, end: 4 } },
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
])
})
test('empty value with blank line before comment not at end', () => {
const src = 'a:\n\n#c\nb:\n'
const doc = parse(src)[0]
expect(doc.contents[0].items).toMatchObject([
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] },
{ type: 'BLANK_LINE', range: { start: 3, end: 4 } },
{ type: 'COMMENT', range: { start: 4, end: 6 } },
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
])
})
test('empty value with blank line after comment not at end', () => {
const src = 'a: #c\n\nb:\n'
const doc = parse(src)[0]
expect(doc.contents[0].items).toMatchObject([
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [{ start: 3, end: 5 }] },
{ type: 'BLANK_LINE', range: { start: 6, end: 7 } },
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
])
})
test('empty value with blank line before & after comment not at end', () => {
const src = 'a:\n\n#c\n\nb:\n'
const doc = parse(src)[0]
expect(doc.contents[0].items).toMatchObject([
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] },
{ type: 'BLANK_LINE', range: { start: 3, end: 4 } },
{ type: 'COMMENT', range: { start: 4, end: 6 } },
{ type: 'BLANK_LINE', range: { start: 7, end: 8 } },
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
])
})
test('empty value with blank line before comment with CR-LF line ends', () => {
const src = '\r\na:\r\n\r\n#c\r\n'
const cst = parse(src)
cst.setOrigRanges()
expect(cst[0].contents).toMatchObject([
{
type: 'BLANK_LINE',
range: { start: 0, end: 1, origStart: 1, origEnd: 2 }
},
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
]
},
{
type: 'BLANK_LINE',
range: { start: 4, end: 5, origStart: 7, origEnd: 8 }
},
{
type: 'COMMENT',
range: { start: 5, end: 7, origStart: 8, origEnd: 10 }
}
])
})
test('empty value with blank line after comment with CR-LF line ends', () => {
const src = '\r\na: #c\r\n\r\n'
const cst = parse(src)
cst.setOrigRanges()
expect(cst[0].contents[1].items).toMatchObject([
{ type: 'PLAIN', props: [] },
{
type: 'MAP_VALUE',
node: null,
props: [{ start: 4, end: 6, origStart: 5, origEnd: 7 }]
}
])
})
test('empty value with blank line before & after comment with CR-LF line ends', () => {
const src = '\r\na:\r\n\r\n#c\r\n\r\nb:\r\n'
const cst = parse(src)
cst.setOrigRanges()
expect(cst[0].contents).toMatchObject([
{
type: 'BLANK_LINE',
range: { start: 0, end: 1, origStart: 1, origEnd: 2 }
},
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] },
{
type: 'BLANK_LINE',
range: { start: 4, end: 5, origStart: 7, origEnd: 8 }
},
{
type: 'COMMENT',
range: { start: 5, end: 7, origStart: 8, origEnd: 10 }
},
{
type: 'BLANK_LINE',
range: { start: 8, end: 9, origStart: 13, origEnd: 14 }
},
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
]
}
])
})
test('empty value with blank lines before & after two comments with CR-LF line ends', () => {
const src = '\r\na:\r\n\r\n#c\r\n\r\n#d\r\n\r\nb:\r\n'
const cst = parse(src)
cst.setOrigRanges()
expect(cst[0].contents).toMatchObject([
{
type: 'BLANK_LINE',
range: { start: 0, end: 1, origStart: 1, origEnd: 2 }
},
{
type: 'MAP',
items: [
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] },
{
type: 'BLANK_LINE',
range: { start: 4, end: 5, origStart: 7, origEnd: 8 }
},
{
type: 'COMMENT',
range: { start: 5, end: 7, origStart: 8, origEnd: 10 }
},
{
type: 'BLANK_LINE',
range: { start: 8, end: 9, origStart: 13, origEnd: 14 }
},
{
type: 'COMMENT',
range: { start: 9, end: 11, origStart: 14, origEnd: 16 }
},
{
type: 'BLANK_LINE',
range: { start: 12, end: 13, origStart: 19, origEnd: 20 }
},
{ type: 'PLAIN', props: [] },
{ type: 'MAP_VALUE', node: null, props: [] }
]
}
])
})
})
yaml-1.10.2/tests/cst/parse.js000066400000000000000000000213471402322402300161370ustar00rootroot00000000000000import parse from '../../parse-cst.js'
test('return value', () => {
const src = '---\n- foo\n- bar\n'
const cst = parse(src)
expect(cst).toHaveLength(1)
expect(cst[0]).toMatchObject({
contents: [
{
error: null,
items: [
{
error: null,
node: {
error: null,
props: [],
range: { end: 9, start: 6 },
type: 'PLAIN',
value: null,
valueRange: { end: 9, start: 6 }
},
props: [],
range: { end: 9, start: 4 },
type: 'SEQ_ITEM',
value: null,
valueRange: { end: 9, start: 4 }
},
{
error: null,
node: {
error: null,
props: [],
range: { end: 15, start: 12 },
type: 'PLAIN',
value: null,
valueRange: { end: 15, start: 12 }
},
props: [],
range: { end: 15, start: 10 },
type: 'SEQ_ITEM',
value: null,
valueRange: { end: 15, start: 10 }
}
],
props: [],
range: { end: 16, start: 4 },
type: 'SEQ',
value: null,
valueRange: { end: 15, start: 4 }
}
],
directives: [],
directivesEndMarker: { start: 0, end: 3 },
documentEndMarker: null,
error: null,
props: [],
range: null,
type: 'DOCUMENT',
value: null,
valueRange: { start: 3, end: 16 }
})
})
describe('toString()', () => {
test('plain document', () => {
const src = '- foo\n- bar\n'
const cst = parse(src)
expect(String(cst)).toBe(src)
})
test('stream of two documents', () => {
const src = 'foo\n...\nbar\n'
const cst = parse(src)
expect(cst).toHaveLength(2)
expect(String(cst)).toBe(src)
})
test('document with CRLF line separators', () => {
const src = '- foo\r\n- bar\r\n'
const cst = parse(src)
expect(cst.toString()).toBe('- foo\n- bar\n')
})
})
describe('setOrigRanges()', () => {
test('return false for no CRLF', () => {
const src = '- foo\n- bar\n'
const cst = parse(src)
expect(cst.setOrigRanges()).toBe(false)
expect(cst[0].valueRange).toMatchObject({ start: 0, end: 12 })
expect(cst[0].valueRange.origStart).toBeUndefined()
expect(cst[0].valueRange.origEnd).toBeUndefined()
})
test('no error on comments', () => {
const src = '\r\n# hello'
expect(() => parse(src).setOrigRanges()).not.toThrowError()
})
test('directives', () => {
const src = '\r\n%YAML 1.2\r\n---\r\nfoo\r\n'
const cst = parse(src)
expect(cst.setOrigRanges()).toBe(true)
expect(cst[0]).toMatchObject({
directives: [
{ type: 'BLANK_LINE' },
{
name: 'YAML',
range: { end: 10, origEnd: 11, origStart: 2, start: 1 }
}
],
contents: [
{
type: 'PLAIN',
range: { end: 18, origEnd: 21, origStart: 18, start: 15 }
}
]
})
})
test('block scalar', () => {
const src = '|\r\n foo\r\n bar\r\n'
const cst = parse(src)
expect(cst.setOrigRanges()).toBe(true)
const node = cst[0].contents[0]
expect(node).toMatchObject({
type: 'BLOCK_LITERAL',
range: { end: 14, origEnd: 17, origStart: 0, start: 0 }
})
expect(node.strValue).toBe('foo\nbar\n')
})
test('single document', () => {
const src = '- foo\r\n- bar\r\n'
const cst = parse(src)
expect(cst.setOrigRanges()).toBe(true)
expect(cst).toHaveLength(1)
const { range, valueRange } = cst[0].contents[0].items[1].node
expect(src.slice(range.origStart, range.origEnd)).toBe('bar')
expect(src.slice(valueRange.origStart, valueRange.origEnd)).toBe('bar')
expect(cst[0]).toMatchObject({
contents: [
{
error: null,
items: [
{
error: null,
node: {
error: null,
props: [],
range: { end: 5, origEnd: 5, origStart: 2, start: 2 },
type: 'PLAIN',
value: null,
valueRange: { end: 5, origEnd: 5, origStart: 2, start: 2 }
},
props: [],
range: { end: 5, origEnd: 5, origStart: 0, start: 0 },
type: 'SEQ_ITEM',
value: null,
valueRange: { end: 5, origEnd: 5, origStart: 0, start: 0 }
},
{
error: null,
node: {
error: null,
props: [],
range: { end: 11, origEnd: 12, origStart: 9, start: 8 },
type: 'PLAIN',
value: null,
valueRange: { end: 11, origEnd: 12, origStart: 9, start: 8 }
},
props: [],
range: { end: 11, origEnd: 12, origStart: 7, start: 6 },
type: 'SEQ_ITEM',
value: null,
valueRange: { end: 11, origEnd: 12, origStart: 7, start: 6 }
}
],
props: [],
range: { end: 12, origEnd: 14, origStart: 0, start: 0 },
type: 'SEQ',
value: null,
valueRange: { end: 11, origEnd: 12, origStart: 0, start: 0 }
}
],
directives: [],
directivesEndMarker: null,
documentEndMarker: null,
error: null,
props: [],
range: null,
type: 'DOCUMENT',
value: null,
valueRange: { end: 12, origEnd: 14, origStart: 0, start: 0 }
})
expect(cst[0].context.root).toBe(cst[0])
expect(cst[0].contents[0].items[1].node.context.root).toBe(cst[0])
})
test('stream of two documents', () => {
const src = 'foo\r\n...\r\nbar\r\n'
const cst = parse(src)
expect(cst.setOrigRanges()).toBe(true)
expect(cst).toHaveLength(2)
const { range, valueRange } = cst[1].contents[0]
expect(src.slice(range.origStart, range.origEnd)).toBe('bar')
expect(src.slice(valueRange.origStart, valueRange.origEnd)).toBe('bar')
expect(cst[0]).toMatchObject({
contents: [
{
error: null,
props: [],
range: { end: 3, origEnd: 3, origStart: 0, start: 0 },
type: 'PLAIN',
value: null,
valueRange: { end: 3, origEnd: 3, origStart: 0, start: 0 }
}
],
directives: [],
directivesEndMarker: null,
documentEndMarker: { start: 4, end: 7, origStart: 5, origEnd: 8 },
error: null,
props: [],
range: null,
type: 'DOCUMENT',
value: null,
valueRange: { end: 4, origEnd: 5, origStart: 0, start: 0 }
})
expect(cst[1]).toMatchObject({
contents: [
{
error: null,
props: [],
range: { end: 11, origEnd: 13, origStart: 10, start: 8 },
type: 'PLAIN',
value: null,
valueRange: { end: 11, origEnd: 13, origStart: 10, start: 8 }
}
],
directives: [],
directivesEndMarker: null,
documentEndMarker: null,
error: null,
props: [],
range: null,
type: 'DOCUMENT',
value: null,
valueRange: { end: 12, origEnd: 15, origStart: 10, start: 8 }
})
expect(cst[0].context.root).toBe(cst[0])
expect(cst[1].context.root).toBe(cst[1])
})
test('flow collections', () => {
const src = '\r\n{ : }\r\n'
const cst = parse(src)
expect(() => cst.setOrigRanges()).not.toThrowError()
expect(cst[0]).toMatchObject({
contents: [
{
error: null,
props: [],
range: { end: 1, origEnd: 2, origStart: 1, start: 0 },
type: 'BLANK_LINE',
value: null,
valueRange: null
},
{
error: null,
items: [
{ char: '{', offset: 1, origOffset: 2 },
{ char: ':', offset: 3, origOffset: 4 },
{ char: '}', offset: 5, origOffset: 6 }
],
props: [],
range: { end: 6, origEnd: 7, origStart: 2, start: 1 },
type: 'FLOW_MAP',
value: null,
valueRange: { end: 6, origEnd: 7, origStart: 2, start: 1 }
}
],
directives: [],
directivesEndMarker: null,
documentEndMarker: null,
error: null,
props: [],
range: null,
type: 'DOCUMENT',
value: null,
valueRange: { end: 7, origEnd: 9, origStart: 2, start: 1 }
})
expect(cst[0].context.root).toBe(cst[0])
expect(cst[0].contents[1].context.root).toBe(cst[0])
})
})
test('blank lines', () => {
const src = '#cc\n\n\n\n##dd'
const cst = parse(src)
expect(cst[0].contents).toMatchObject([
{ type: 'COMMENT', error: null },
{ type: 'BLANK_LINE', error: null },
{ type: 'BLANK_LINE', error: null },
{ type: 'BLANK_LINE', error: null },
{ type: 'COMMENT', error: null }
])
})
yaml-1.10.2/tests/cst/set-value.js000066400000000000000000000026111402322402300167230ustar00rootroot00000000000000import { Type } from '../../src/constants.js'
import { parse } from '../../src/cst/parse.js'
import { CollectionItem } from '../../src/cst/CollectionItem.js'
test('set value in collection', () => {
const src = `- Mark McGwire
- Sammy Sosa
- Ken Griffey
` // spec 2.1
const cst = parse(src)
cst[0].contents[0].items[1].node.value = 'TEST\n'
expect(String(cst)).toBe(src.replace(/Sammy Sosa/, 'TEST'))
})
test('replace entire contents', () => {
const src = `- Mark McGwire
- Sammy Sosa
- Ken Griffey
` // spec 2.1
const cst = parse(src)
cst[0].contents[0].value = 'TEST: true\n'
expect(String(cst)).toBe('TEST: true\n')
})
test('remove map key/value pair', () => {
const src = `hr: 65 # Home runs
avg: 0.278 # Batting average
rbi: 147 # Runs Batted In
` // spec 2.2
const cst = parse(src)
cst[0].contents[0].items[2].value = ''
cst[0].contents[0].items[3].value = ''
expect(String(cst)).toBe(src.replace(/avg.*\n/, ''))
})
test('add entry to seq', () => {
const src = `american:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
` // spec 2.3
const cst = parse(src)
const seq = cst[0].contents[0].items[3].node
const item = new CollectionItem(Type.SEQ_ITEM)
item.context = seq.items[2].context
item.value = '- "TEST"\n'
seq.items.push(item)
expect(String(cst)).toBe(`${src} ${item.value}`)
})
yaml-1.10.2/tests/cst/source-utils.js000066400000000000000000000033511402322402300174560ustar00rootroot00000000000000import { getLinePos } from '../../src/cst/source-utils.js'
import { parse } from '../../src/cst/parse.js'
test('lineStarts for empty document', () => {
const src = ''
const cst = parse(src)
expect(() => getLinePos(0, cst)).not.toThrow()
expect(cst[0].lineStarts).toMatchObject([0])
})
test('lineStarts for multiple documents', () => {
const src = 'foo\n...\nbar\n'
const cst = parse(src)
expect(() => getLinePos(0, cst)).not.toThrow()
expect(cst[0].lineStarts).toMatchObject([0, 4, 8, 12])
})
test('lineStarts for malformed document', () => {
const src = '- foo\n\t- bar\n'
const cst = parse(src)
expect(() => getLinePos(0, cst)).not.toThrow()
expect(cst[0].lineStarts).toMatchObject([0, 6, 13])
})
test('getLinePos()', () => {
const src = '- foo\n- bar\n'
const cst = parse(src)
expect(cst[0].lineStarts).toBeUndefined()
expect(getLinePos(0, cst)).toMatchObject({ line: 1, col: 1 })
expect(getLinePos(1, cst)).toMatchObject({ line: 1, col: 2 })
expect(getLinePos(2, cst)).toMatchObject({ line: 1, col: 3 })
expect(getLinePos(5, cst)).toMatchObject({ line: 1, col: 6 })
expect(getLinePos(6, cst)).toMatchObject({ line: 2, col: 1 })
expect(getLinePos(7, cst)).toMatchObject({ line: 2, col: 2 })
expect(getLinePos(11, cst)).toMatchObject({ line: 2, col: 6 })
expect(getLinePos(12, cst)).toMatchObject({ line: 3, col: 1 })
expect(cst[0].lineStarts).toMatchObject([0, 6, 12])
})
test('invalid args for getLinePos()', () => {
const src = '- foo\n- bar\n'
const cst = parse(src)
expect(getLinePos()).toBeNull()
expect(getLinePos(0)).toBeNull()
expect(getLinePos(1)).toBeNull()
expect(getLinePos(-1, cst)).toBeNull()
expect(getLinePos(13, cst)).toBeNull()
expect(getLinePos(Math.MAXINT, cst)).toBeNull()
})
yaml-1.10.2/tests/doc/000077500000000000000000000000001402322402300144345ustar00rootroot00000000000000yaml-1.10.2/tests/doc/YAML-1.1.spec.js000066400000000000000000000030761402322402300167700ustar00rootroot00000000000000import { source } from 'common-tags'
import YAML from '../../index.js'
const orig = {}
beforeAll(() => {
orig.prettyErrors = YAML.defaultOptions.prettyErrors
orig.version = YAML.defaultOptions.version
YAML.defaultOptions.prettyErrors = true
YAML.defaultOptions.version = '1.1'
})
afterAll(() => {
YAML.defaultOptions.prettyErrors = orig.prettyErrors
YAML.defaultOptions.version = orig.version
})
test('Use preceding directives if none defined', () => {
const src = source`
!bar "First document"
...
%TAG ! !foo
---
!bar "With directives"
---
!bar "Using previous TAG directive"
...
%YAML 1.1
---
!bar "Reset settings"
---
!bar "Using previous YAML directive"
`
const docs = YAML.parseAllDocuments(src, { prettyErrors: false })
expect(docs).toHaveLength(5)
expect(docs.map(doc => doc.errors)).toMatchObject([[], [], [], [], []])
const warn = tag => ({
message: `The tag ${tag} is unavailable, falling back to tag:yaml.org,2002:str`
})
expect(docs.map(doc => doc.warnings)).toMatchObject([
[warn('!bar')],
[warn('!foobar')],
[warn('!foobar')],
[warn('!bar')],
[warn('!bar')]
])
expect(docs.map(doc => doc.version)).toMatchObject([
null,
null,
null,
'1.1',
'1.1'
])
expect(docs.map(String)).toMatchObject([
'!bar "First document"\n',
'%TAG ! !foo\n---\n!bar "With directives"\n',
'%TAG ! !foo\n---\n!bar "Using previous TAG directive"\n',
'%YAML 1.1\n---\n!bar "Reset settings"\n',
'%YAML 1.1\n---\n!bar "Using previous YAML directive"\n'
])
})
yaml-1.10.2/tests/doc/YAML-1.2.spec.js000066400000000000000000001242451402322402300167730ustar00rootroot00000000000000import YAML from '../../index.js'
import { YAMLError } from '../../util.js'
const collectionKeyWarning =
'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'
const spec = {
'2.1. Collections': {
'Example 2.1. Sequence of Scalars': {
src: `- Mark McGwire\r
- Sammy Sosa\r
- Ken Griffey\r`,
tgt: [['Mark McGwire', 'Sammy Sosa', 'Ken Griffey']]
},
'Example 2.2. Mapping Scalars to Scalars': {
src: `hr: 65 # Home runs\r
avg: 0.278 # Batting average\r
rbi: 147 # Runs Batted In`,
tgt: [
{
hr: 65, // ' Home runs'
avg: 0.278, // ' Batting average'
rbi: 147 // ' Runs Batted In'
}
]
},
'Example 2.3. Mapping Scalars to Sequences': {
src: `american:\r
- Boston Red Sox\r
- Detroit Tigers\r
- New York Yankees\r
national:\r
- New York Mets\r
- Chicago Cubs\r
- Atlanta Braves`,
tgt: [
{
american: ['Boston Red Sox', 'Detroit Tigers', 'New York Yankees'],
national: ['New York Mets', 'Chicago Cubs', 'Atlanta Braves']
}
]
},
'Example 2.4. Sequence of Mappings': {
src: `-
name: Mark McGwire
hr: 65
avg: 0.278
-
name: Sammy Sosa
hr: 63
avg: 0.288`,
tgt: [
[
{
name: 'Mark McGwire',
hr: 65,
avg: 0.278
},
{
name: 'Sammy Sosa',
hr: 63,
avg: 0.288
}
]
]
},
'Example 2.5. Sequence of Sequences': {
src: `- [name , hr, avg ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa , 63, 0.288]`,
tgt: [
[
['name', 'hr', 'avg'],
['Mark McGwire', 65, 0.278],
['Sammy Sosa', 63, 0.288]
]
]
},
'Example 2.6. Mapping of Mappings': {
src: `Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}`,
tgt: [
{
'Mark McGwire': { hr: 65, avg: 0.278 },
'Sammy Sosa': { hr: 63, avg: 0.288 }
}
]
}
},
'2.2. Structures': {
'Example 2.7. Two Documents in a Stream': {
src: `# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Team ranking
---
- Chicago Cubs
- St Louis Cardinals`,
tgt: [
// ' Ranking of 1998 home runs'
['Mark McGwire', 'Sammy Sosa', 'Ken Griffey'],
// ' Team ranking'
['Chicago Cubs', 'St Louis Cardinals']
]
},
'Example 2.8. Play by Play Feed': {
src: `---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...`,
tgt: [
{
time: '20:03:20',
player: 'Sammy Sosa',
action: 'strike (miss)'
},
{
time: '20:03:47',
player: 'Sammy Sosa',
action: 'grand slam'
}
]
},
'Example 2.9. Single Document with Two Comments': {
src: `---
hr: # 1998 hr ranking
- Mark McGwire
- Sammy Sosa
rbi:
# 1998 rbi ranking
- Sammy Sosa
- Ken Griffey`,
tgt: [
{
hr: [
// ' 1998 hr ranking'
'Mark McGwire',
'Sammy Sosa'
],
rbi: [
// ' 1998 rbi ranking'
'Sammy Sosa',
'Ken Griffey'
]
}
]
},
'Example 2.10. Node for “Sammy Sosa” appears twice in this document': {
src: `---
hr:
- Mark McGwire
# Following node labeled SS
- &SS Sammy Sosa
rbi:
- *SS # Subsequent occurrence
- Ken Griffey`,
tgt: [
{
hr: ['Mark McGwire', /* Following node labeled SS */ 'Sammy Sosa'],
rbi: ['Sammy Sosa' /* Subsequent occurrence */, 'Ken Griffey']
}
]
},
'Example 2.11. Mapping between Sequences': {
src: `? - Detroit Tigers
- Chicago cubs
:
- 2001-07-23
? [ New York Yankees,
Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
2001-08-14 ]`,
tgt: [
{
'[ Detroit Tigers, Chicago cubs ]': ['2001-07-23'],
'[ New York Yankees, Atlanta Braves ]': [
'2001-07-02',
'2001-08-12',
'2001-08-14'
]
}
],
warnings: [[collectionKeyWarning]]
},
'Example 2.12. Compact Nested Mapping': {
src: `---
# Products purchased
- item : Super Hoop
quantity: 1
- item : Basketball
quantity: 4
- item : Big Shoes
quantity: 1`,
tgt: [
[
// Products purchased
{ item: 'Super Hoop', quantity: 1 },
{ item: 'Basketball', quantity: 4 },
{ item: 'Big Shoes', quantity: 1 }
]
]
}
},
'2.3. Scalars': {
'Example 2.13. In literals, newlines are preserved': {
src: `# ASCII Art
--- |
\\//||\\/||
// || ||__`,
tgt: ['\\//||\\/||\n' + '// || ||__\n']
},
'Example 2.14. In the folded scalars, newlines become spaces': {
src: `--- >
Mark McGwire's
year was crippled
by a knee injury.`,
tgt: ["Mark McGwire's year was crippled by a knee injury.\n"]
},
'Example 2.15. Folded newlines are preserved for "more indented" and blank lines': {
src: `>
Sammy Sosa completed another
fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!`,
tgt: [
`Sammy Sosa completed another fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!\n`
]
},
'Example 2.16. Indentation determines scope': {
src: `name: Mark McGwire
accomplishment: >
Mark set a major league
home run record in 1998.
stats: |
65 Home Runs
0.278 Batting Average`,
tgt: [
{
name: 'Mark McGwire',
accomplishment: 'Mark set a major league home run record in 1998.\n',
stats: '65 Home Runs\n0.278 Batting Average\n'
}
]
},
'Example 2.17. Quoted Scalars': {
src: `unicode: "Sosa did fine.\\u263A"
control: "\\b1998\\t1999\\t2000\\n"
hex esc: "\\x0d\\x0a is \\r\\n"
single: '"Howdy!" he cried.'
quoted: ' # Not a ''comment''.'
tie-fighter: '|\\-*-/|'`,
tgt: [
{
unicode: 'Sosa did fine.☺',
control: '\b1998\t1999\t2000\n',
'hex esc': '\r\n is \r\n',
single: '"Howdy!" he cried.',
quoted: " # Not a 'comment'.",
'tie-fighter': '|\\-*-/|'
}
]
},
'Example 2.18. Multi-line Flow Scalars': {
src: `plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\\n"`,
tgt: [
{
plain: 'This unquoted scalar spans many lines.',
quoted: 'So does this quoted scalar.\n'
}
]
}
},
'2.4. Tags': {
'Example 2.19. Integers': {
src: `canonical: 12345
decimal: +12345
octal: 0o14
hexadecimal: 0xC`,
tgt: [
{
canonical: 12345,
decimal: 12345,
octal: 12,
hexadecimal: 12
}
]
},
'Example 2.20. Floating Point': {
src: `canonical: 1.23015e+3
exponential: 12.3015e+02
fixed: 1230.15
negative infinity: -.inf
not a number: .NaN`,
tgt: [
{
canonical: 1230.15,
exponential: 1230.15,
fixed: 1230.15,
'negative infinity': -Infinity,
'not a number': NaN
}
]
},
'Example 2.21. Miscellaneous': {
src: `null:
booleans: [ true, false ]
string: '012345'`,
tgt: [
{
'': null,
booleans: [true, false],
string: '012345'
}
]
},
'Example 2.22. Timestamps': {
src: `canonical: 2001-12-15T02:59:43.1Z
iso8601: 2001-12-14t21:59:43.10-05:00
spaced: 2001-12-14 21:59:43.10 -5
date: 2001-12-14`,
tgt: [
{
canonical: '2001-12-15T02:59:43.1Z',
iso8601: '2001-12-14t21:59:43.10-05:00',
spaced: '2001-12-14 21:59:43.10 -5',
date: '2001-12-14'
}
],
special: src => {
const obj = YAML.parse(src, { schema: 'yaml-1.1' })
expect(Object.keys(obj)).toHaveLength(4)
;[('canonical', 'iso8601', 'spaced', 'date')].forEach(key => {
const date = obj[key]
expect(date).toBeInstanceOf(Date)
expect(date.getFullYear()).toBe(2001)
expect(date.getMonth()).toBe(11)
})
}
},
'Example 2.23. Various Explicit Tags': {
src: `---
not-date: !!str 2002-04-28
picture: !!binary |
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=
application specific tag: !something |
The semantics of the tag
above may be different for
different documents.`,
tgt: [
{
'not-date': '2002-04-28',
picture:
'R0lGODlhDAAMAIQAAP//9/X\n17unp5WZmZgAAAOfn515eXv\nPz7Y6OjuDg4J+fn5OTk6enp\n56enmleECcgggoBADs=\n',
'application specific tag':
'The semantics of the tag\nabove may be different for\ndifferent documents.\n'
}
],
warnings: [
[
'The tag tag:yaml.org,2002:binary is unavailable, falling back to tag:yaml.org,2002:str',
'The tag !something is unavailable, falling back to tag:yaml.org,2002:str'
]
],
special: src => {
const doc = YAML.parseDocument(src, { schema: 'yaml-1.1' })
const data = doc.contents.items[1].value.value
expect(data).toBeInstanceOf(Uint8Array)
expect(data.byteLength).toBe(65)
}
},
'Example 2.24. Global Tags': {
src: `%TAG ! tag:clarkevans.com,2002:
--- !shape
# Use the ! handle for presenting
# tag:clarkevans.com,2002:circle
- !circle
center: &ORIGIN {x: 73, y: 129}
radius: 7
- !line
start: *ORIGIN
finish: { x: 89, y: 102 }
- !label
start: *ORIGIN
color: 0xFFEEBB
text: Pretty vector drawing.`,
tgt: [
[
{ center: { x: 73, y: 129 }, radius: 7 },
{ start: { x: 73, y: 129 }, finish: { x: 89, y: 102 } },
{
start: { x: 73, y: 129 },
color: 16772795,
text: 'Pretty vector drawing.'
}
]
],
warnings: [
[
'The tag tag:clarkevans.com,2002:shape is unavailable, falling back to tag:yaml.org,2002:seq',
'The tag tag:clarkevans.com,2002:circle is unavailable, falling back to tag:yaml.org,2002:map',
'The tag tag:clarkevans.com,2002:line is unavailable, falling back to tag:yaml.org,2002:map',
'The tag tag:clarkevans.com,2002:label is unavailable, falling back to tag:yaml.org,2002:map'
]
]
},
'Example 2.25. Unordered Sets': {
src: `# Sets are represented as a
# Mapping where each key is
# associated with a null value
--- !!set
? Mark McGwire
? Sammy Sosa
? Ken Griff`,
tgt: [
{
'Mark McGwire': null,
'Sammy Sosa': null,
'Ken Griff': null
}
],
warnings: [
[
'The tag tag:yaml.org,2002:set is unavailable, falling back to tag:yaml.org,2002:map'
]
]
},
'Example 2.26. Ordered Mappings': {
src: `# Ordered maps are represented as
# A sequence of mappings, with
# each mapping having one key
--- !!omap
- Mark McGwire: 65
- Sammy Sosa: 63
- Ken Griffy: 58\n\n`,
tgt: [
[{ 'Mark McGwire': 65 }, { 'Sammy Sosa': 63 }, { 'Ken Griffy': 58 }]
],
warnings: [
[
'The tag tag:yaml.org,2002:omap is unavailable, falling back to tag:yaml.org,2002:seq'
]
]
}
},
'2.5. Full Length Example': {
'Example 2.27. Invoice': {
src: `--- !
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments:
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.`,
tgt: [
{
invoice: 34843,
date: '2001-01-23',
'bill-to': {
given: 'Chris',
family: 'Dumars',
address: {
lines: '458 Walkman Dr.\nSuite #292\n',
city: 'Royal Oak',
state: 'MI',
postal: 48046
}
},
'ship-to': {
given: 'Chris',
family: 'Dumars',
address: {
lines: '458 Walkman Dr.\nSuite #292\n',
city: 'Royal Oak',
state: 'MI',
postal: 48046
}
},
product: [
{
sku: 'BL394D',
quantity: 4,
description: 'Basketball',
price: 450
},
{
sku: 'BL4438H',
quantity: 1,
description: 'Super Hoop',
price: 2392
}
],
tax: 251.42,
total: 4443.52,
comments:
'Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.'
}
],
warnings: [
[
'The tag tag:clarkevans.com,2002:invoice is unavailable, falling back to tag:yaml.org,2002:map'
]
]
},
'Example 2.28. Log File': {
src: `---
Time: 2001-11-23 15:01:42 -5
User: ed
Warning:
This is an error message
for the log file
---
Time: 2001-11-23 15:02:31 -5
User: ed
Warning:
A slightly different error
message.
---
Date: 2001-11-23 15:03:17 -5
User: ed
Fatal:
Unknown variable "bar"
Stack:
- file: TopClass.py
line: 23
code: |
x = MoreObject("345\\n")
- file: MoreClass.py
line: 58
code: |-
foo = bar\n`,
tgt: [
{
Time: '2001-11-23 15:01:42 -5',
User: 'ed',
Warning: 'This is an error message for the log file'
},
{
Time: '2001-11-23 15:02:31 -5',
User: 'ed',
Warning: 'A slightly different error message.'
},
{
Date: '2001-11-23 15:03:17 -5',
User: 'ed',
Fatal: 'Unknown variable "bar"',
Stack: [
{
file: 'TopClass.py',
line: 23,
code: 'x = MoreObject("345\\n")\n'
},
{ file: 'MoreClass.py', line: 58, code: 'foo = bar' }
]
}
]
}
},
'5.3. Indicator Characters': {
'Example 5.3. Block Structure Indicators': {
src: `sequence:
- one
- two
mapping:
? sky
: blue
sea : green`,
tgt: [
{
sequence: ['one', 'two'],
mapping: { sky: 'blue', sea: 'green' }
}
]
},
'Example 5.4. Flow Collection Indicators': {
src: `sequence: [ one, two, ]
mapping: { sky: blue, sea: green }`,
tgt: [
{
sequence: ['one', 'two'],
mapping: { sky: 'blue', sea: 'green' }
}
]
},
'Example 5.5. Comment Indicator': {
src: `# Comment only.`,
tgt: [null]
},
'Example 5.6. Node Property Indicators': {
src: `anchored: !local &anchor value
alias: *anchor`,
tgt: [{ anchored: 'value', alias: 'value' }],
warnings: [
['The tag !local is unavailable, falling back to tag:yaml.org,2002:str']
],
special: src => {
const tag = {
tag: '!local',
resolve: (doc, node) => 'local:' + node.strValue
}
const res = YAML.parse(src, { customTags: [tag] })
expect(res).toMatchObject({
anchored: 'local:value',
alias: 'local:value'
})
}
},
'Example 5.7. Block Scalar Indicators': {
src: `literal: |
some
text
folded: >
some
text
`,
tgt: [
{
literal: 'some\ntext\n',
folded: 'some text\n'
}
]
},
'Example 5.8. Quoted Scalar Indicators': {
src: `single: 'text'
double: "text"`,
tgt: [{ single: 'text', double: 'text' }]
},
'Example 5.9. Directive Indicator': {
src: `%YAML 1.2
--- text`,
tgt: ['text'],
special: src => {
const doc = YAML.parseDocument(src)
expect(doc.version).toBe('1.2')
}
},
'Example 5.10. Invalid use of Reserved Indicators': {
src: `commercial-at: @text
grave-accent: \`text`,
tgt: [{ 'commercial-at': '@text', 'grave-accent': '`text' }],
errors: [
[
'Plain value cannot start with reserved character @',
'Plain value cannot start with reserved character `'
]
]
}
},
'5.5. White Space Characters': {
'Example 5.12. Tabs and Spaces': {
src: `# Tabs and spaces
quoted: "Quoted \t"
block:\t|
void main() {
\tprintf("Hello, world!\\n");
}`,
tgt: [
{
quoted: 'Quoted \t',
block: 'void main() {\n\tprintf("Hello, world!\\n");\n}\n'
}
]
}
},
'5.7. Escaped Characters': {
'Example 5.13. Escaped Characters': {
src: `"Fun with \\\\
\\" \\a \\b \\e \\f \\
\\n \\r \\t \\v \\0 \\
\\ \\_ \\N \\L \\P \\
\\x41 \\u0041 \\U00000041"`,
tgt: [
'Fun with \x5C \x22 \x07 \x08 \x1B \x0C \x0A \x0D \x09 \x0B \x00 \x20 \xA0 \x85 \u2028 \u2029 A A A'
]
},
'Example 5.14. Invalid Escaped Characters': {
src: `Bad escapes:
"\\c
\\xq-"`,
tgt: [{ 'Bad escapes': '\\c \\xq-' }],
errors: [['Invalid escape sequence \\c', 'Invalid escape sequence \\xq-']]
}
},
'6.1. Indentation Spaces': {
'Example 6.1. Indentation Spaces': {
src: ` # Leading comment line spaces are
# neither content nor indentation.
Not indented:
By one space: |
By four
spaces
Flow style: [ # Leading spaces
By two, # in flow style
Also by two, # are neither
\tStill by two # content nor
] # indentation.`,
tgt: [
{
'Not indented': {
'By one space': 'By four\n spaces\n',
'Flow style': ['By two', 'Also by two', 'Still by two']
}
}
]
},
'Example 6.2. Indentation Indicators': {
src: `? a
: -\tb
- -\tc
- d`,
tgt: [{ a: ['b', ['c', 'd']] }]
}
},
'6.2. Separation Spaces': {
'Example 6.3. Separation Spaces': {
src: `- foo:\t bar
- - baz
-\tbaz`,
tgt: [[{ foo: 'bar' }, ['baz', 'baz']]]
}
},
'6.3. Line Prefixes': {
'Example 6.4. Line Prefixes': {
src: `plain: text
lines
quoted: "text
\tlines"
block: |
text
\tlines`,
tgt: [
{
plain: 'text lines',
quoted: 'text lines',
block: 'text\n \tlines\n'
}
]
}
},
'6.4. Empty Lines': {
'Example 6.5. Empty Lines': {
src: `Folding:
"Empty line
\t
as a line feed"
Chomping: |
Clipped empty lines
`,
tgt: [
{
Folding: 'Empty line\nas a line feed',
Chomping: 'Clipped empty lines\n'
}
]
}
},
'6.5. Line Folding': {
'Example 6.6. Line Folding': {
src: `>-
trimmed
··
·
··as
··space`.replace(/·/g, ' '),
tgt: ['trimmed\n\n\nas space']
},
'Example 6.7. Block Folding': {
src: `>
··foo·
·
··\t·bar
··baz\n`.replace(/·/g, ' '),
tgt: ['foo \n\n\t bar\n\nbaz\n']
},
'Example 6.8. Flow Folding': {
src: `"
foo\t
\t
\t bar
baz
"`,
tgt: [' foo\nbar\nbaz ']
}
},
'6.6. Comments': {
'Example 6.9. Separated Comment': {
src: `key: # Comment
value`,
tgt: [{ key: 'value' }]
},
'Example 6.10. Comment Lines': {
src: ` # Comment
\n\n`,
tgt: [null]
},
'Example 6.11. Multi-Line Comments': {
src: `key: # Comment
# lines
value\n`,
tgt: [{ key: 'value' }]
}
},
'6.7. Separation Lines': {
'Example 6.12. Separation Spaces': {
src: `{ first: Sammy, last: Sosa }:
# Statistics:
hr: # Home runs
65
avg: # Average
0.278`,
tgt: [{ '{ first: Sammy, last: Sosa }': { hr: 65, avg: 0.278 } }],
warnings: [[collectionKeyWarning]]
}
},
'6.8. Directives': {
'Example 6.13. Reserved Directives': {
src: `%FOO bar baz # Should be ignored
# with a warning.
--- "foo"`,
tgt: ['foo'],
warnings: [['YAML only supports %TAG and %YAML directives, and not %FOO']]
}
},
'6.8.1. “YAML” Directives': {
'Example 6.14. “YAML” directive': {
src: `%YAML 1.3 # Attempt parsing
# with a warning
---
"foo"`,
tgt: ['foo'],
warnings: [['Document will be parsed as YAML 1.2 rather than YAML 1.3']],
special: src => {
const doc = YAML.parseDocument(src)
expect(doc.version).toBe('1.3')
}
},
'Example 6.15. Invalid Repeated YAML directive': {
src: `%YAML 1.2
%YAML 1.1
---
foo`,
tgt: ['foo'],
errors: [
['The %YAML directive must only be given at most once per document.']
],
special: src => {
const doc = YAML.parseDocument(src)
expect(doc.version).toBe('1.1')
}
}
},
'6.8.2. “TAG” Directives': {
'Example 6.16. “TAG” directive': {
src: `%TAG !yaml! tag:yaml.org,2002:
---
!yaml!str "foo"`,
tgt: ['foo']
},
'Example 6.17. Invalid Repeated TAG directive': {
src: `%TAG ! !foo
%TAG ! !foo
---
bar`,
tgt: ['bar'],
errors: [
[
'The %TAG directive must only be given at most once per handle in the same document.'
]
],
special: src => {
const doc = YAML.parseDocument(src)
expect(doc.tagPrefixes).toMatchObject([{ handle: '!', prefix: '!foo' }])
}
},
'Example 6.18. Primary Tag Handle': {
src: `# Private
!foo "bar"
...
# Global
%TAG ! tag:example.com,2000:app/
---
!foo "bar"`,
tgt: ['bar', 'bar'],
warnings: [
['The tag !foo is unavailable, falling back to tag:yaml.org,2002:str'],
[
'The tag tag:example.com,2000:app/foo is unavailable, falling back to tag:yaml.org,2002:str'
]
],
special: src => {
const customTags = [
{
tag: '!foo',
resolve: () => 'private'
},
{
tag: 'tag:example.com,2000:app/foo',
resolve: () => 'global'
}
]
const docs = YAML.parseAllDocuments(src, { customTags })
expect(docs.map(d => d.toJSON())).toMatchObject(['private', 'global'])
}
},
'Example 6.19. Secondary Tag Handle': {
src: `%TAG !! tag:example.com,2000:app/
---
!!int 1 - 3 # Interval, not integer`,
tgt: ['1 - 3'],
warnings: [
[
'The tag tag:example.com,2000:app/int is unavailable, falling back to tag:yaml.org,2002:str'
]
],
special: src => {
const tag = {
tag: 'tag:example.com,2000:app/int',
resolve: () => 'interval'
}
const res = YAML.parse(src, { customTags: [tag] })
expect(res).toBe('interval')
}
},
'Example 6.20. Tag Handles': {
src: `%TAG !e! tag:example.com,2000:app/
---
!e!foo "bar"`,
tgt: ['bar'],
warnings: [
[
'The tag tag:example.com,2000:app/foo is unavailable, falling back to tag:yaml.org,2002:str'
]
],
special: src => {
const tag = {
tag: 'tag:example.com,2000:app/foo',
resolve: (doc, node) => 'foo' + node.strValue
}
const res = YAML.parse(src, { customTags: [tag] })
expect(res).toBe('foobar')
}
},
'Example 6.21. Local Tag Prefix': {
src: `%TAG !m! !my-
--- # Bulb here
!m!light fluorescent
...
%TAG !m! !my-
--- # Color here
!m!light green`,
tgt: ['fluorescent', 'green'],
warnings: [
[
'The tag !my-light is unavailable, falling back to tag:yaml.org,2002:str'
],
[
'The tag !my-light is unavailable, falling back to tag:yaml.org,2002:str'
]
],
special: src => {
const tag = {
tag: '!my-light',
resolve: (doc, node) => 'light:' + node.strValue
}
const docs = YAML.parseAllDocuments(src, { customTags: [tag] })
expect(docs.map(d => d.toJSON())).toMatchObject([
'light:fluorescent',
'light:green'
])
}
},
'Example 6.22. Global Tag Prefix': {
src: `%TAG !e! tag:example.com,2000:app/
---
- !e!foo "bar"`,
tgt: [['bar']],
warnings: [
[
'The tag tag:example.com,2000:app/foo is unavailable, falling back to tag:yaml.org,2002:str'
]
],
special: src => {
const tag = {
tag: 'tag:example.com,2000:app/foo',
resolve: (doc, node) => 'foo' + node.strValue
}
const res = YAML.parse(src, { customTags: [tag] })
expect(res).toMatchObject(['foobar'])
}
}
},
'6.9. Node Properties': {
'Example 6.23. Node Properties': {
src: `!!str &a1 "foo":
!!str bar
&a2 baz : *a1`,
tgt: [{ foo: 'bar', baz: 'foo' }]
},
'Example 6.24. Verbatim Tags': {
src: `! foo :
! baz`,
tgt: [{ foo: 'baz' }],
warnings: [
['The tag !bar is unavailable, falling back to tag:yaml.org,2002:str']
],
special: src => {
const tag = {
tag: '!bar',
resolve: (doc, node) => 'bar' + node.strValue
}
const res = YAML.parse(src, { customTags: [tag] })
expect(res).toMatchObject({ foo: 'barbaz' })
}
},
'Example 6.25. Invalid Verbatim Tags': {
src: `- ! foo
- !<$:?> bar`,
tgt: [['foo', 'bar']],
errors: [["Verbatim tags aren't resolved, so ! is invalid."]],
warnings: [
['The tag $:? is unavailable, falling back to tag:yaml.org,2002:str']
]
},
'Example 6.26. Tag Shorthands': {
src: `%TAG !e! tag:example.com,2000:app/
---
- !local foo
- !!str bar
- !e!tag%21 baz`,
tgt: [['foo', 'bar', 'baz']],
warnings: [
[
'The tag !local is unavailable, falling back to tag:yaml.org,2002:str',
'The tag tag:example.com,2000:app/tag! is unavailable, falling back to tag:yaml.org,2002:str'
]
],
special: src => {
const customTags = [
{
tag: '!local',
resolve: (doc, node) => 'local:' + node.strValue
},
{
tag: 'tag:example.com,2000:app/tag!',
resolve: (doc, node) => 'tag!' + node.strValue
}
]
const res = YAML.parse(src, { customTags })
expect(res).toMatchObject(['local:foo', 'bar', 'tag!baz'])
}
},
'Example 6.27. Invalid Tag Shorthands': {
src: `%TAG !e! tag:example,2000:app/
---
- !e! foo
- !h!bar baz`,
tgt: [['foo', 'baz']],
errors: [
[
'The !e! tag has no suffix.',
'The !h! tag handle is non-default and was not declared.'
]
]
},
'Example 6.28. Non-Specific Tags': {
src: `# Assuming conventional resolution:
- "12"
- 12
- ! 12`,
tgt: [['12', 12, '12']]
},
'Example 6.29. Node Anchors': {
src: `First occurrence: &anchor Value
Second occurrence: *anchor`,
tgt: [
{
'First occurrence': 'Value',
'Second occurrence': 'Value'
}
]
}
},
'7.1. Alias Nodes': {
'Example 7.1. Alias Nodes': {
src: `First occurrence: &anchor Foo
Second occurrence: *anchor
Override anchor: &anchor Bar
Reuse anchor: *anchor`,
tgt: [
{
'First occurrence': 'Foo',
'Second occurrence': 'Foo',
'Override anchor': 'Bar',
'Reuse anchor': 'Bar'
}
]
}
},
'7.2. Empty Nodes': {
'Example 7.2. Empty Content': {
src: `{
foo : !!str,
!!str : bar,
}`,
tgt: [{ foo: '', '': 'bar' }]
},
'Example 7.3. Completely Empty Flow Nodes': {
src: `{
? foo :,
: bar,
}`,
tgt: [{ foo: null, '': 'bar' }]
}
},
'7.3.1. Double-Quoted Style': {
'Example 7.4. Double Quoted Implicit Keys': {
src: `"implicit block key" : [
"implicit flow key" : value,
]`,
tgt: [{ 'implicit block key': [{ 'implicit flow key': 'value' }] }]
},
'Example 7.5. Double Quoted Line Breaks': {
src: `"folded
to a space,\t
to a line feed, or \t\\
\\ \tnon-content"`,
tgt: ['folded to a space,\nto a line feed, or \t \tnon-content']
},
'Example 7.6. Double Quoted Lines': {
src: `" 1st non-empty
2nd non-empty
\t3rd non-empty "`,
tgt: [' 1st non-empty\n2nd non-empty 3rd non-empty ']
}
},
'7.3.2. Single-Quoted Style': {
'Example 7.7. Single Quoted Characters': {
src: ` 'here''s to "quotes"'`,
tgt: ['here\'s to "quotes"']
},
'Example 7.8. Single Quoted Implicit Keys': {
src: `'implicit block key' : [
'implicit flow key' : value,
]`,
tgt: [{ 'implicit block key': [{ 'implicit flow key': 'value' }] }]
},
'Example 7.9. Single Quoted Lines': {
src: `' 1st non-empty
2nd non-empty\t
\t3rd non-empty '`,
tgt: [' 1st non-empty\n2nd non-empty 3rd non-empty ']
}
},
'7.3.3. Plain Style': {
'Example 7.10. Plain Characters': {
src: `# Outside flow collection:
- ::vector
- ": - ()"
- Up, up, and away!
- -123
- http://example.com/foo#bar
# Inside flow collection:
- [ ::vector,
": - ()",
"Up, up and away!",
-123,
http://example.com/foo#bar ]`,
tgt: [
[
'::vector',
': - ()',
'Up, up, and away!',
-123,
'http://example.com/foo#bar',
[
'::vector',
': - ()',
'Up, up and away!',
-123,
'http://example.com/foo#bar'
]
]
]
},
'Example 7.11. Plain Implicit Keys': {
src: `implicit block key : [
implicit flow key : value,
]`,
tgt: [{ 'implicit block key': [{ 'implicit flow key': 'value' }] }]
},
'Example 7.12. Plain Lines': {
src: `1st non-empty
2nd non-empty
\t3rd non-empty`,
tgt: ['1st non-empty\n2nd non-empty 3rd non-empty']
}
},
'7.4.1. Flow Sequences': {
'Example 7.13. Flow Sequence': {
src: `- [ one, two, ]
- [three ,four]`,
tgt: [
[
['one', 'two'],
['three', 'four']
]
]
},
'Example 7.14. Flow Sequence Entries': {
src: `[
"double
quoted", 'single
quoted',
plain
text, [ nested ],
single: pair,
]`,
tgt: [
[
'double quoted',
'single quoted',
'plain text',
['nested'],
{ single: 'pair' }
]
]
}
},
'7.4.2. Flow Mappings': {
'Example 7.15. Flow Mappings': {
src: `- { one : two , three: four , }
- {five: six,seven : eight}`,
tgt: [
[
{ one: 'two', three: 'four' },
{ five: 'six', seven: 'eight' }
]
]
},
'Example 7.16. Flow Mapping Entries': {
src: `{
? explicit: entry,
implicit: entry,
?
}`,
tgt: [{ explicit: 'entry', implicit: 'entry', '': null }]
},
'Example 7.17. Flow Mapping Separate Values': {
src: `{
unquoted : "separate",
http://foo.com,
omitted value:,
: omitted key,
}`,
tgt: [
{
unquoted: 'separate',
'http://foo.com': null,
'omitted value': null,
'': 'omitted key'
}
]
},
'Example 7.18. Flow Mapping Adjacent Values': {
src: `{
"adjacent":value,
"readable": value,
"empty":
}`,
tgt: [{ adjacent: 'value', readable: 'value', empty: null }]
},
'Example 7.19. Single Pair Flow Mappings': {
src: `[
foo: bar
]`,
tgt: [[{ foo: 'bar' }]]
},
'Example 7.20. Single Pair Explicit Entry': {
src: `[
? foo
bar : baz
]`,
tgt: [[{ 'foo bar': 'baz' }]]
},
'Example 7.21. Single Pair Implicit Entries': {
src: `- [ YAML : separate ]
- [ : empty key entry ]
- [ {JSON: like}:adjacent ]`,
tgt: [
[
[{ YAML: 'separate' }],
[{ '': 'empty key entry' }],
[{ '{ JSON: like }': 'adjacent' }]
]
],
warnings: [[collectionKeyWarning]]
},
'Example 7.22. Invalid Implicit Keys': {
src: `[ foo
bar: invalid,
"foo ${'x'.repeat(1024)} bar": invalid ]`,
tgt: [
[
{ 'foo bar': 'invalid' },
{
'foo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx bar':
'invalid'
}
]
],
errors: [
[
'Implicit keys of flow sequence pairs need to be on a single line',
'The "foo xxxx...xxxx bar" key is too long'
]
]
}
},
'7.5. Flow Nodes': {
'Example 7.23. Flow Content': {
src: `- [ a, b ]
- { a: b }
- "a"
- 'b'
- c`,
tgt: [[['a', 'b'], { a: 'b' }, 'a', 'b', 'c']]
},
'Example 7.24. Flow Nodes': {
src: `- !!str "a"
- 'b'
- &anchor "c"
- *anchor
- !!str`,
tgt: [['a', 'b', 'c', 'c', '']]
}
},
'8.1.1. Block Scalar Headers': {
'Example 8.1. Block Scalar Header': {
src: `- | # Empty header
literal
- >1 # Indentation indicator
folded
- |+ # Chomping indicator
keep
- >1- # Both indicators
strip`,
tgt: [['literal\n', ' folded\n', 'keep\n\n', ' strip']]
},
'Example 8.2. Block Indentation Indicator': {
src: `- |
·detected
- >
·
··
··# detected
- |1
··explicit
- >
·\t
·detected`.replace(/·/g, ' '),
tgt: [['detected\n', '\n\n# detected\n', ' explicit\n', '\t\ndetected\n']]
},
'Example 8.3. Invalid Block Scalar Indentation Indicators': {
src: `- |
··
·text
---
- >
··text
·text
---
- |2
·text`.replace(/·/g, ' '),
tgt: [[' \ntext\n'], ['text text\n'], ['text\n']],
errors: [
[
'Block scalars with more-indented leading empty lines must use an explicit indentation indicator'
],
['Block scalars must not be less indented than their first line'],
[
'Block scalars must not be less indented than their explicit indentation indicator'
]
]
},
'Example 8.4. Chomping Final Line Break': {
src: `strip: |-
text
clip: |
text
keep: |+
text\n`,
tgt: [{ strip: 'text', clip: 'text\n', keep: 'text\n' }]
},
'Example 8.5. Chomping Trailing Lines': {
src: `
# Strip
# Comments:
strip: |-
# text
# Clip
# comments:
clip: |
# text
# Keep
# comments:
keep: |+
# text
# Trail
# comments.`,
tgt: [{ strip: '# text', clip: '# text\n', keep: '# text\n\n' }]
},
'Example 8.6. Empty Scalar Chomping': {
src: `strip: >-
clip: >
keep: |+\n\n`,
tgt: [{ strip: '', clip: '', keep: '\n' }]
}
},
'8.1.2. Literal Style': {
'Example 8.7. Literal Scalar': {
src: `|
literal
\ttext\n\n`,
tgt: ['literal\n\ttext\n']
},
'Example 8.8. Literal Content': {
src: `|
·
··
··literal
···
··
··text
·# Comment`.replace(/·/g, ' '),
tgt: ['\n\nliteral\n \n\ntext\n']
}
},
'8.1.3. Folded Style': {
'Example 8.9. Folded Scalar': {
src: `>
folded
text\n\n`,
tgt: ['folded text\n']
},
'Example 8.10. Folded Lines': {
src: `>
folded
line
next
line
* bullet
* list
* lines
last
line
# Comment`,
tgt: [
`
folded line
next line
* bullet
* list
* lines
last line
`
]
}
},
'8.2.1. Block Sequences': {
'Example 8.14. Block Sequence': {
src: `block sequence:
- one
- two : three\n`,
tgt: [{ 'block sequence': ['one', { two: 'three' }] }]
},
'Example 8.15. Block Sequence Entry Types': {
src: `- # Empty
- |
block node
- - one # Compact
- two # sequence
- one: two # Compact mapping`,
tgt: [[null, 'block node\n', ['one', 'two'], { one: 'two' }]]
}
},
'8.2.2. Block Mappings': {
'Example 8.16. Block Mappings': {
src: `block mapping:
key: value\n`,
tgt: [{ 'block mapping': { key: 'value' } }]
},
'Example 8.17. Explicit Block Mapping Entries': {
src: `? explicit key # Empty value
? |
block key
: - one # Explicit compact
- two # block value\n`,
tgt: [
{
'explicit key': null,
'block key\n': ['one', 'two']
}
]
},
'Example 8.18. Implicit Block Mapping Entries': {
src: `plain key: in-line value
: # Both empty
"quoted key":
- entry`,
tgt: [
{
'plain key': 'in-line value',
'': null,
'quoted key': ['entry']
}
]
},
'Example 8.19. Compact Block Mappings': {
src: `- sun: yellow
- ? earth: blue
: moon: white\n`,
tgt: [[{ sun: 'yellow' }, { '{ earth: blue }': { moon: 'white' } }]],
warnings: [[collectionKeyWarning]]
}
},
'8.2.3. Block Nodes': {
'Example 8.20. Block Types': {
src: `-
"flow in block"
- >
Block scalar
- !!map # Block collection
foo : bar\n`,
tgt: [['flow in block', 'Block scalar\n', { foo: 'bar' }]]
},
'Example 8.21. Block Scalar Nodes': {
src: `literal: |2
value
folded:
!foo
>1
value`,
tgt: [{ literal: 'value\n', folded: 'value\n' }],
warnings: [
['The tag !foo is unavailable, falling back to tag:yaml.org,2002:str']
],
special: src => {
const tag = {
tag: '!foo',
resolve: (doc, node) => 'foo' + node.strValue
}
const res = YAML.parse(src, { customTags: [tag] })
expect(res).toMatchObject({ literal: 'value\n', folded: 'foovalue\n' })
}
},
'Example 8.22. Block Collection Nodes': {
src: `sequence: !!seq
- entry
- !!seq
- nested
mapping: !!map
foo: bar`,
tgt: [
{
sequence: ['entry', ['nested']],
mapping: { foo: 'bar' }
}
],
special: src => {
const doc = YAML.parseDocument(src)
expect(doc.contents.tag).toBeUndefined()
expect(doc.contents.items[0].value.tag).toBe('tag:yaml.org,2002:seq')
expect(doc.contents.items[0].value.items[1].tag).toBe(
'tag:yaml.org,2002:seq'
)
expect(doc.contents.items[1].value.tag).toBe('tag:yaml.org,2002:map')
}
}
},
'9.1. Documents': {
'Example 9.1. Document Prefix': {
src: `\u{FEFF}# Comment
# lines
Document`,
tgt: ['Document']
},
'Example 9.2. Document Markers': {
src: `%YAML 1.2
---
Document
... # Suffix`,
tgt: ['Document'],
special: src => expect(YAML.parseDocument(src).version).toBe('1.2')
},
'Example 9.3. Bare Documents': {
src: `Bare
document
...
# No document
...
|
%!PS-Adobe-2.0 # Not the first line`,
tgt: ['Bare document', null, '%!PS-Adobe-2.0 # Not the first line\n']
},
'Example 9.4. Explicit Documents': {
src: `---
{ matches
% : 20 }
...
---
# Empty
...`,
tgt: [{ 'matches %': 20 }, null]
},
'Example 9.5. Directives Documents': {
src: `%YAML 1.2
--- |
%!PS-Adobe-2.0
...
%YAML 1.2
---
# Empty
...`,
tgt: ['%!PS-Adobe-2.0\n', null],
special: src =>
YAML.parseAllDocuments(src).forEach(doc =>
expect(doc.version).toBe('1.2')
)
}
},
'9.2. Streams': {
'Example 9.6. Stream': {
src: `Document
---
# Empty
...
%YAML 1.2
---
matches %: 20`,
tgt: ['Document', null, { 'matches %': 20 }],
special: src => {
const versions = YAML.parseAllDocuments(src).map(doc => doc.version)
expect(versions).toMatchObject([null, null, '1.2'])
}
}
}
}
let origFoldOptions
beforeAll(() => {
origFoldOptions = YAML.scalarOptions.str.fold
YAML.scalarOptions.str.fold = {
lineWidth: 20,
minContentWidth: 0
}
})
afterAll(() => {
YAML.scalarOptions.str.fold = origFoldOptions
})
for (const section in spec) {
describe(section, () => {
for (const name in spec[section]) {
test(name, () => {
const { src, tgt, errors, special, warnings } = spec[section][name]
const documents = YAML.parseAllDocuments(src)
const json = documents.map(doc => doc.toJSON())
const docErrors = documents.map(doc =>
doc.errors.map(err => err.message)
)
trace: name,
'\n' + JSON.stringify(json, null, ' '),
{ errors: docErrors }
expect(json).toMatchObject(tgt)
documents.forEach((doc, i) => {
if (!errors || !errors[i]) expect(doc.errors).toHaveLength(0)
else
errors[i].forEach((err, j) => {
expect(doc.errors[j]).toBeInstanceOf(YAMLError)
expect(doc.errors[j].message).toBe(err)
})
if (!warnings || !warnings[i]) expect(doc.warnings).toHaveLength(0)
else
warnings[i].forEach((err, j) =>
expect(doc.warnings[j].message).toBe(err)
)
})
if (special) special(src)
if (!errors) {
const src2 = documents.map(doc => String(doc)).join('\n...\n')
const documents2 = YAML.parseAllDocuments(src2)
const json2 = documents2.map(doc => doc.toJSON())
trace: name,
'\nIN\n' + src,
'\nJSON\n' + JSON.stringify(json, null, ' '),
'\n\nOUT\n' + src2,
'\nOUT-JSON\n' + JSON.stringify(src2),
'\nRE-JSON\n' + JSON.stringify(json2, null, ' ')
expect(json2).toMatchObject(tgt)
}
})
}
})
}
yaml-1.10.2/tests/doc/anchors.js000066400000000000000000000223631402322402300164350ustar00rootroot00000000000000import YAML from '../../index.js'
import { Merge, YAMLMap } from '../../types.js'
test('basic', () => {
const src = `- &a 1\n- *a\n`
const doc = YAML.parseDocument(src)
expect(doc.errors).toHaveLength(0)
const { items } = doc.contents
expect(items).toMatchObject([{ value: 1 }, { source: { value: 1 } }])
expect(items[1].source).toBe(items[0])
expect(String(doc)).toBe(src)
})
test('re-defined anchor', () => {
const src = '- &a 1\n- &a 2\n- *a\n'
const doc = YAML.parseDocument(src)
expect(doc.errors).toHaveLength(0)
const { items } = doc.contents
expect(items).toMatchObject([
{ value: 1 },
{ value: 2 },
{ source: { value: 2 } }
])
expect(items[2].source).toBe(items[1])
expect(String(doc)).toBe('- &a1 1\n- &a 2\n- *a\n')
})
test('circular reference', () => {
const src = '&a [ 1, *a ]\n'
const doc = YAML.parseDocument(src)
expect(doc.errors).toHaveLength(0)
expect(doc.warnings).toHaveLength(0)
const { items } = doc.contents
expect(items).toHaveLength(2)
expect(items[1].source).toBe(doc.contents)
const res = doc.toJSON()
expect(res[1]).toBe(res)
expect(String(doc)).toBe(src)
})
describe('create', () => {
test('doc.anchors.setAnchor', () => {
const doc = YAML.parseDocument('[{ a: A }, { b: B }]')
const [a, b] = doc.contents.items
expect(doc.anchors.setAnchor(null, null)).toBe(null)
expect(doc.anchors.setAnchor(a, 'XX')).toBe('XX')
expect(doc.anchors.setAnchor(a, 'AA')).toBe('AA')
expect(doc.anchors.setAnchor(a, 'AA')).toBe('AA')
expect(doc.anchors.setAnchor(a)).toBe('AA')
expect(doc.anchors.setAnchor(a.items[0].value)).toBe('a1')
expect(doc.anchors.setAnchor(b.items[0].value)).toBe('a2')
expect(doc.anchors.setAnchor(null, 'a1')).toBe('a1')
expect(doc.anchors.getName(a)).toBe('AA')
expect(doc.anchors.getNode('a2').value).toBe('B')
expect(String(doc)).toBe('[ &AA { a: A }, { b: &a2 B } ]\n')
expect(() => doc.anchors.setAnchor(a.items[0])).toThrow(
'Anchors may only be set for Scalar, Seq and Map nodes'
)
expect(() => doc.anchors.setAnchor(a, 'A A')).toThrow(
'Anchor names must not contain whitespace or control characters'
)
expect(doc.anchors.getNames()).toMatchObject(['AA', 'a1', 'a2'])
})
test('doc.anchors.createAlias', () => {
const doc = YAML.parseDocument('[{ a: A }, { b: B }]')
const alias = doc.anchors.createAlias(doc.contents.items[0], 'AA')
doc.contents.items.push(alias)
expect(doc.toJSON()).toMatchObject([{ a: 'A' }, { b: 'B' }, { a: 'A' }])
expect(String(doc)).toMatch('[ &AA { a: A }, { b: B }, *AA ]\n')
})
test('errors', () => {
const doc = YAML.parseDocument('[{ a: A }, { b: B }]')
const node = doc.contents.items[0]
const alias = doc.anchors.createAlias(node, 'AA')
doc.contents.items.unshift(alias)
expect(() => String(doc)).toThrow('Alias node must be after source node')
expect(() => {
alias.tag = 'tag:yaml.org,2002:alias'
}).toThrow('Alias nodes cannot have tags')
})
})
describe('__proto__ as anchor name', () => {
test('parse', () => {
const src = `- &__proto__ 1\n- *__proto__\n`
const doc = YAML.parseDocument(src)
expect(doc.errors).toHaveLength(0)
const { items } = doc.contents
expect(items).toMatchObject([{ value: 1 }, { source: { value: 1 } }])
expect(items[1].source).toBe(items[0])
expect(String(doc)).toBe(src)
})
test('create/stringify', () => {
const doc = YAML.parseDocument('[{ a: A }, { b: B }]')
const alias = doc.anchors.createAlias(doc.contents.items[0], '__proto__')
doc.contents.items.push(alias)
expect(doc.toJSON()).toMatchObject([{ a: 'A' }, { b: 'B' }, { a: 'A' }])
expect(String(doc)).toMatch(
'[ &__proto__ { a: A }, { b: B }, *__proto__ ]\n'
)
})
})
describe('merge <<', () => {
const src = `---
- &CENTER { x: 1, y: 2 }
- &LEFT { x: 0, y: 2 }
- &BIG { r: 10 }
- &SMALL { r: 1 }
# All the following maps are equal:
- # Explicit keys
x: 1
y: 2
r: 10
label: center/big
- # Merge one map
<< : *CENTER
r: 10
label: center/big
- # Merge multiple maps
<< : [ *CENTER, *BIG ]
label: center/big
- # Override
<< : [ *BIG, *LEFT, *SMALL ]
x: 1
label: center/big`
test('YAML.parse', () => {
const res = YAML.parse(src, { merge: true })
expect(res).toHaveLength(8)
for (let i = 4; i < res.length; ++i) {
expect(res[i]).toMatchObject({ x: 1, y: 2, r: 10, label: 'center/big' })
}
})
test('YAML.parse with merge:false', () => {
const res = YAML.parse(src)
expect(res).toHaveLength(8)
for (let i = 5; i < res.length; ++i) {
expect(res[i]).toHaveProperty('<<')
}
})
test('YAML.parseAllDocuments', () => {
const doc = YAML.parseDocument(src, { merge: true })
expect(doc.contents.items).toHaveLength(8)
expect(Object.keys(doc.anchors.map)).toMatchObject([
'CENTER',
'LEFT',
'BIG',
'SMALL'
])
doc.contents.items.slice(5).forEach(({ items }) => {
const merge = items[0]
expect(merge).toBeInstanceOf(Merge)
merge.value.items.forEach(({ source }) => {
expect(source).toBeInstanceOf(YAMLMap)
})
})
})
describe('doc.anchors.createMergePair', () => {
test('simple case', () => {
const doc = YAML.parseDocument('[{ a: A }, { b: B }]')
const [a, b] = doc.contents.items
const merge = doc.anchors.createMergePair(a)
b.items.push(merge)
expect(doc.toJSON()).toMatchObject([{ a: 'A' }, { a: 'A', b: 'B' }])
expect(String(doc)).toBe('[ &a1 { a: A }, { b: B, <<: *a1 } ]\n')
})
test('merge pair of an alias', () => {
const doc = YAML.parseDocument('[{ a: A }, { b: B }]')
const [a, b] = doc.contents.items
const alias = doc.anchors.createAlias(a, 'AA')
const merge = doc.anchors.createMergePair(alias)
b.items.push(merge)
expect(doc.toJSON()).toMatchObject([{ a: 'A' }, { a: 'A', b: 'B' }])
expect(String(doc)).toBe('[ &AA { a: A }, { b: B, <<: *AA } ]\n')
})
test('require map node', () => {
const exp = 'Merge sources must be Map nodes or their Aliases'
const doc = YAML.parseDocument('[{ a: A }, { b: B }]')
const [a] = doc.contents.items
const merge = doc.anchors.createMergePair(a)
expect(() => doc.anchors.createMergePair(merge)).toThrow(exp)
const alias = doc.anchors.createAlias(a.items[0].value)
expect(() => doc.anchors.createMergePair(alias)).toThrow(exp)
})
})
describe('merge multiple times', () => {
const srcKeys = `
x:
- &a
k0: v1
k1: v1
- &b
k1: v2
k2: v2
y:
k0: v0
<<: *a
<<: *b`
const srcSeq = `
x:
- &a
k0: v1
k1: v1
- &b
k1: v2
k2: v2
y:
k0: v0
<<: [ *a, *b ]`
const expObj = {
x: [
{ k0: 'v1', k1: 'v1' },
{ k1: 'v2', k2: 'v2' }
],
y: { k0: 'v0', k1: 'v1', k2: 'v2' }
}
const expMap = new Map([
[
'x',
[
new Map([
['k0', 'v1'],
['k1', 'v1']
]),
new Map([
['k1', 'v2'],
['k2', 'v2']
])
]
],
[
'y',
new Map([
['k0', 'v0'],
['k1', 'v1'],
['k2', 'v2']
])
]
])
test('multiple merge keys, masAsMap: false', () => {
const res = YAML.parse(srcKeys, { merge: true })
expect(res).toEqual(expObj)
})
test('multiple merge keys, masAsMap: true', () => {
const res = YAML.parse(srcKeys, { merge: true, mapAsMap: true })
expect(res).toEqual(expMap)
})
test('sequence of anchors, masAsMap: false', () => {
const res = YAML.parse(srcSeq, { merge: true })
expect(res).toEqual(expObj)
})
test('sequence of anchors, masAsMap: true', () => {
const res = YAML.parse(srcSeq, { merge: true, mapAsMap: true })
expect(res).toEqual(expMap)
})
})
test('do not throw error when key is null', () => {
const src = ': 123'
expect(() => YAML.parse(src, { merge: true })).not.toThrow()
})
describe('parse errors', () => {
test('non-alias merge value', () => {
const src = '{ <<: A, B: b }'
expect(() => YAML.parse(src, { merge: true })).toThrow(
'Merge nodes can only have Alias nodes as values'
)
})
test('non-map alias', () => {
const src = '- &A a\n- { <<: *A, B: b }'
expect(() => YAML.parse(src, { merge: true })).toThrow(
'Merge nodes aliases can only point to maps'
)
})
test('circular reference', () => {
const src = '&A { <<: *A, B: b }\n'
const doc = YAML.parseDocument(src, { merge: true })
expect(doc.errors).toHaveLength(0)
expect(doc.warnings).toHaveLength(0)
expect(() => doc.toJSON()).toThrow('Maximum call stack size exceeded')
expect(String(doc)).toBe(src)
})
})
describe('stringify', () => {
test('example', () => {
const doc = YAML.parseDocument(src, { merge: true })
expect(YAML.parse(String(doc), { merge: true })).toMatchObject([
{ x: 1, y: 2 },
{ x: 0, y: 2 },
{ r: 10 },
{ r: 1 },
{ label: 'center/big', r: 10, x: 1, y: 2 },
{ label: 'center/big', r: 10, x: 1, y: 2 },
{ label: 'center/big', r: 10, x: 1, y: 2 },
{ label: 'center/big', r: 10, x: 1, y: 2 }
])
})
})
})
yaml-1.10.2/tests/doc/collection-access.js000066400000000000000000000343611402322402300203730ustar00rootroot00000000000000import YAML from '../../index.js'
import { Pair } from '../../types.js'
describe('Map', () => {
let map
beforeEach(() => {
map = YAML.createNode({ a: 1, b: { c: 3, d: 4 } })
expect(map.items).toMatchObject([
{ key: { value: 'a' }, value: { value: 1 } },
{
key: { value: 'b' },
value: {
items: [
{ key: { value: 'c' }, value: { value: 3 } },
{ key: { value: 'd' }, value: { value: 4 } }
]
}
}
])
})
test('add', () => {
map.add({ key: 'c', value: 'x' })
expect(map.get('c')).toBe('x')
expect(() => map.add('a')).toThrow(/already set/)
expect(() => map.add(new Pair('c', 'y'))).toThrow(/already set/)
expect(map.items).toHaveLength(3)
})
test('delete', () => {
expect(map.delete('a')).toBe(true)
expect(map.get('a')).toBeUndefined()
expect(map.delete('c')).toBe(false)
expect(map.get('b')).toMatchObject({ items: [{}, {}] })
expect(map.items).toHaveLength(1)
})
test('get with value', () => {
expect(map.get('a')).toBe(1)
expect(map.get('a', true)).toMatchObject({ value: 1 })
expect(map.get('b').toJSON()).toMatchObject({ c: 3, d: 4 })
expect(map.get('c')).toBeUndefined()
})
test('get with node', () => {
expect(map.get(YAML.createNode('a'))).toBe(1)
expect(map.get(YAML.createNode('a'), true)).toMatchObject({ value: 1 })
expect(map.get(YAML.createNode('b')).toJSON()).toMatchObject({ c: 3, d: 4 })
expect(map.get(YAML.createNode('c'))).toBeUndefined()
})
test('has with value', () => {
expect(map.has('a')).toBe(true)
expect(map.has('b')).toBe(true)
expect(map.has('c')).toBe(false)
expect(map.has('')).toBe(false)
expect(map.has()).toBe(false)
})
test('has with node', () => {
expect(map.has(YAML.createNode('a'))).toBe(true)
expect(map.has(YAML.createNode('b'))).toBe(true)
expect(map.has(YAML.createNode('c'))).toBe(false)
expect(map.has(YAML.createNode())).toBe(false)
})
test('set with value', () => {
map.set('a', 2)
expect(map.get('a')).toBe(2)
expect(map.get('a', true)).toBe(2)
map.set('b', 5)
expect(map.get('b')).toBe(5)
map.set('c', 6)
expect(map.get('c')).toBe(6)
expect(map.items).toHaveLength(3)
})
test('set with node', () => {
map.set(YAML.createNode('a'), 2)
expect(map.get('a')).toBe(2)
expect(map.get('a', true)).toBe(2)
map.set(YAML.createNode('b'), 5)
expect(map.get('b')).toBe(5)
map.set(YAML.createNode('c'), 6)
expect(map.get('c')).toBe(6)
expect(map.items).toHaveLength(3)
})
})
describe('Seq', () => {
let seq
beforeEach(() => {
seq = YAML.createNode([1, [2, 3]])
expect(seq.items).toMatchObject([
{ value: 1 },
{ items: [{ value: 2 }, { value: 3 }] }
])
})
test('add', () => {
seq.add('x')
expect(seq.get(2)).toBe('x')
seq.add(1)
expect(seq.items).toHaveLength(4)
})
test('delete', () => {
expect(seq.delete(0)).toBe(true)
expect(seq.delete(2)).toBe(false)
expect(seq.delete('a')).toBe(false)
expect(seq.get(0)).toMatchObject({ items: [{ value: 2 }, { value: 3 }] })
expect(seq.items).toHaveLength(1)
})
test('get with value', () => {
expect(seq.get(0)).toBe(1)
expect(seq.get('0')).toBe(1)
expect(seq.get(0, true)).toMatchObject({ value: 1 })
expect(seq.get(1).toJSON()).toMatchObject([2, 3])
expect(seq.get(2)).toBeUndefined()
})
test('get with node', () => {
expect(seq.get(YAML.createNode(0))).toBe(1)
expect(seq.get(YAML.createNode('0'))).toBe(1)
expect(seq.get(YAML.createNode(0), true)).toMatchObject({ value: 1 })
expect(seq.get(YAML.createNode(1)).toJSON()).toMatchObject([2, 3])
expect(seq.get(YAML.createNode(2))).toBeUndefined()
})
test('has with value', () => {
expect(seq.has(0)).toBe(true)
expect(seq.has(1)).toBe(true)
expect(seq.has(2)).toBe(false)
expect(seq.has('0')).toBe(true)
expect(seq.has('')).toBe(false)
expect(seq.has()).toBe(false)
})
test('has with node', () => {
expect(seq.has(YAML.createNode(0))).toBe(true)
expect(seq.has(YAML.createNode('0'))).toBe(true)
expect(seq.has(YAML.createNode(2))).toBe(false)
expect(seq.has(YAML.createNode(''))).toBe(false)
expect(seq.has(YAML.createNode())).toBe(false)
})
test('set with value', () => {
seq.set(0, 2)
expect(seq.get(0)).toBe(2)
expect(seq.get(0, true)).toBe(2)
seq.set('1', 5)
expect(seq.get(1)).toBe(5)
seq.set(2, 6)
expect(seq.get(2)).toBe(6)
expect(seq.items).toHaveLength(3)
})
test('set with node', () => {
seq.set(YAML.createNode(0), 2)
expect(seq.get(0)).toBe(2)
expect(seq.get(0, true)).toBe(2)
seq.set(YAML.createNode('1'), 5)
expect(seq.get(1)).toBe(5)
seq.set(YAML.createNode(2), 6)
expect(seq.get(2)).toBe(6)
expect(seq.items).toHaveLength(3)
})
})
describe('Set', () => {
let doc
beforeAll(() => {
doc = new YAML.Document({ version: '1.1' })
doc.setSchema()
})
let set
beforeEach(() => {
set = doc.schema.createNode([1, 2, 3], true, '!!set')
expect(set.items).toMatchObject([
{ key: { value: 1 }, value: { value: null } },
{ key: { value: 2 }, value: { value: null } },
{ key: { value: 3 }, value: { value: null } }
])
})
test('add', () => {
set.add('x')
expect(set.get('x')).toBe('x')
set.add('x')
const y0 = new Pair('y')
set.add(y0)
set.add(new Pair('y'))
expect(set.get('y', true)).toBe(y0)
expect(set.items).toHaveLength(5)
})
test('get', () => {
expect(set.get(1)).toBe(1)
expect(set.get(1, true)).toMatchObject({
key: { value: 1 },
value: { value: null }
})
expect(set.get(0)).toBeUndefined()
expect(set.get('1')).toBeUndefined()
})
test('set', () => {
set.set(1, true)
expect(set.get(1)).toBe(1)
set.set(1, false)
expect(set.get(1)).toBeUndefined()
set.set(4, false)
expect(set.get(4)).toBeUndefined()
set.set(4, true)
expect(set.get(4)).toBe(4)
expect(set.get(4, true)).toMatchObject({ key: 4, value: null })
expect(set.items).toHaveLength(3)
})
})
describe('OMap', () => {
let doc
beforeAll(() => {
doc = new YAML.Document({ version: '1.1' })
doc.setSchema()
})
let omap
beforeEach(() => {
omap = doc.schema.createNode(
[{ a: 1 }, { b: { c: 3, d: 4 } }],
true,
'!!omap'
)
expect(omap.items).toMatchObject([
{ key: { value: 'a' }, value: { value: 1 } },
{
key: { value: 'b' },
value: {
items: [
{ key: { value: 'c' }, value: { value: 3 } },
{ key: { value: 'd' }, value: { value: 4 } }
]
}
}
])
})
test('add', () => {
omap.add({ key: 'c', value: 'x' })
expect(omap.get('c')).toBe('x')
expect(() => omap.add('a')).toThrow(/already set/)
expect(() => omap.add(new Pair('c', 'y'))).toThrow(/already set/)
expect(omap.items).toHaveLength(3)
})
test('delete', () => {
expect(omap.delete('a')).toBe(true)
expect(omap.get('a')).toBeUndefined()
expect(omap.delete('c')).toBe(false)
expect(omap.get('b')).toMatchObject({ items: [{}, {}] })
expect(omap.items).toHaveLength(1)
})
test('get', () => {
expect(omap.get('a')).toBe(1)
expect(omap.get('a', true)).toMatchObject({ value: 1 })
expect(omap.get('b').toJSON()).toMatchObject({ c: 3, d: 4 })
expect(omap.get('c')).toBeUndefined()
})
test('has', () => {
expect(omap.has('a')).toBe(true)
expect(omap.has('b')).toBe(true)
expect(omap.has('c')).toBe(false)
expect(omap.has('')).toBe(false)
expect(omap.has()).toBe(false)
})
test('set', () => {
omap.set('a', 2)
expect(omap.get('a')).toBe(2)
expect(omap.get('a', true)).toBe(2)
omap.set('b', 5)
expect(omap.get('b')).toBe(5)
omap.set('c', 6)
expect(omap.get('c')).toBe(6)
expect(omap.items).toHaveLength(3)
})
})
describe('Collection', () => {
let map
beforeEach(() => {
map = YAML.createNode({ a: 1, b: [2, 3] })
})
test('addIn', () => {
map.addIn(['b'], 4)
expect(map.getIn(['b', 2])).toBe(4)
map.addIn([], new Pair('c', 5))
expect(map.get('c')).toBe(5)
expect(() => map.addIn(['a'])).toThrow(/Expected YAML collection/)
map.addIn(['b', 3], 6)
expect(map.items).toHaveLength(3)
expect(map.get('b').items).toHaveLength(4)
})
test('deleteIn', () => {
expect(map.deleteIn(['a'])).toBe(true)
expect(map.get('a')).toBeUndefined()
expect(map.deleteIn(['b', 1])).toBe(true)
expect(map.getIn(['b', 1])).toBeUndefined()
expect(map.deleteIn([1])).toBe(false)
expect(map.deleteIn(['b', 2])).toBe(false)
expect(() => map.deleteIn(['a', 'e'])).toThrow(/Expected YAML collection/)
expect(map.items).toHaveLength(1)
expect(map.get('b').items).toHaveLength(1)
})
test('getIn', () => {
expect(map.getIn(['a'])).toBe(1)
expect(map.getIn(['a'], true)).toMatchObject({ value: 1 })
expect(map.getIn(['b', 1])).toBe(3)
expect(map.getIn(['b', '1'])).toBe(3)
expect(map.getIn(['b', 1], true)).toMatchObject({ value: 3 })
expect(map.getIn(['b', 2])).toBeUndefined()
expect(map.getIn(['c', 'e'])).toBeUndefined()
expect(map.getIn(['a', 'e'])).toBeUndefined()
})
test('hasIn', () => {
expect(map.hasIn(['a'])).toBe(true)
expect(map.hasIn(['b', 1])).toBe(true)
expect(map.hasIn(['b', '1'])).toBe(true)
expect(map.hasIn(['b', 2])).toBe(false)
expect(map.hasIn(['c', 'e'])).toBe(false)
expect(map.hasIn(['a', 'e'])).toBe(false)
})
test('setIn', () => {
map.setIn(['a'], 2)
expect(map.get('a')).toBe(2)
expect(map.get('a', true)).toBe(2)
map.setIn(['b', 1], 5)
expect(map.getIn(['b', 1])).toBe(5)
map.setIn([1], 6)
expect(map.get(1)).toBe(6)
map.setIn(['b', 2], 6)
expect(map.getIn(['b', 2])).toBe(6)
map.setIn(['e', 'e'], 7)
expect(map.getIn(['e', 'e'])).toBe(7)
expect(() => map.setIn(['a', 'e'], 8)).toThrow(/Expected YAML collection/)
expect(map.items).toHaveLength(4)
expect(map.get('b').items).toHaveLength(3)
})
})
describe('Document', () => {
let doc
beforeEach(() => {
doc = new YAML.Document()
doc.contents = YAML.createNode({ a: 1, b: [2, 3] })
expect(doc.contents.items).toMatchObject([
{ key: { value: 'a' }, value: { value: 1 } },
{
key: { value: 'b' },
value: { items: [{ value: 2 }, { value: 3 }] }
}
])
})
test('add', () => {
doc.add({ key: 'c', value: 'x' })
expect(doc.get('c')).toBe('x')
expect(() => doc.add('a')).toThrow(/already set/)
expect(() => doc.add(new Pair('c', 'y'))).toThrow(/already set/)
expect(doc.contents.items).toHaveLength(3)
})
test('addIn', () => {
doc.addIn(['b'], 4)
expect(doc.getIn(['b', 2])).toBe(4)
doc.addIn([], new Pair('c', 5))
expect(doc.get('c')).toBe(5)
expect(() => doc.addIn(['a'])).toThrow(/Expected YAML collection/)
doc.addIn(['b', 3], 6)
expect(doc.contents.items).toHaveLength(3)
expect(doc.get('b').items).toHaveLength(4)
})
test('delete', () => {
expect(doc.delete('a')).toBe(true)
expect(doc.delete('a')).toBe(false)
expect(doc.get('a')).toBeUndefined()
expect(doc.contents.items).toHaveLength(1)
doc.contents = YAML.createNode('s')
expect(() => doc.set('a', 1)).toThrow(/document contents/)
})
test('deleteIn', () => {
expect(doc.deleteIn(['a'])).toBe(true)
expect(doc.get('a')).toBeUndefined()
expect(doc.deleteIn(['b', 1])).toBe(true)
expect(doc.getIn(['b', 1])).toBeUndefined()
expect(doc.deleteIn([1])).toBe(false)
expect(doc.deleteIn(['b', 2])).toBe(false)
expect(() => doc.deleteIn(['a', 'e'])).toThrow(/Expected/)
expect(doc.contents.items).toHaveLength(1)
expect(doc.get('b').items).toHaveLength(1)
expect(doc.deleteIn(null)).toBe(true)
expect(doc.deleteIn(null)).toBe(false)
})
test('get', () => {
expect(doc.get('a')).toBe(1)
expect(doc.get('a', true)).toMatchObject({ value: 1 })
expect(doc.get('c')).toBeUndefined()
doc.contents = YAML.createNode('s')
expect(doc.get('a')).toBeUndefined()
})
test('getIn collection', () => {
expect(doc.getIn(['a'])).toBe(1)
expect(doc.getIn(['a'], true)).toMatchObject({ value: 1 })
expect(doc.getIn(['b', 1])).toBe(3)
expect(doc.getIn(['b', 1], true)).toMatchObject({ value: 3 })
expect(doc.getIn(['b', 'e'])).toBeUndefined()
expect(doc.getIn(['c', 'e'])).toBeUndefined()
expect(doc.getIn(['a', 'e'])).toBeUndefined()
})
test('getIn scalar', () => {
doc.contents = YAML.createNode('s')
expect(doc.getIn([])).toBe('s')
expect(doc.getIn(null, true)).toMatchObject({ value: 's' })
expect(doc.getIn([0])).toBeUndefined()
})
test('has', () => {
expect(doc.has('a')).toBe(true)
expect(doc.has('c')).toBe(false)
doc.contents = YAML.createNode('s')
expect(doc.has('a')).toBe(false)
})
test('hasIn', () => {
expect(doc.hasIn(['a'])).toBe(true)
expect(doc.hasIn(['b', 1])).toBe(true)
expect(doc.hasIn(['b', 'e'])).toBe(false)
expect(doc.hasIn(['c', 'e'])).toBe(false)
expect(doc.hasIn(['a', 'e'])).toBe(false)
})
test('set', () => {
doc.set('a', 2)
expect(doc.get('a')).toBe(2)
expect(doc.get('a', true)).toBe(2)
doc.set('c', 6)
expect(doc.get('c')).toBe(6)
expect(doc.contents.items).toHaveLength(3)
doc.contents = YAML.createNode('s')
expect(() => doc.set('a', 1)).toThrow(/document contents/)
})
test('setIn', () => {
doc.setIn(['a'], 2)
expect(doc.getIn(['a'])).toBe(2)
expect(doc.getIn(['a'], true)).toBe(2)
doc.setIn(['b', 1], 5)
expect(doc.getIn(['b', 1])).toBe(5)
doc.setIn(['c'], 6)
expect(doc.getIn(['c'])).toBe(6)
doc.setIn(['e', 1, 'e'], 7)
expect(doc.getIn(['e', 1, 'e'])).toBe(7)
expect(() => doc.setIn(['a', 'e'], 8)).toThrow(/Expected YAML collection/)
expect(doc.contents.items).toHaveLength(4)
expect(doc.get('b').items).toHaveLength(2)
expect(String(doc)).toBe(
'a: 2\nb:\n - 2\n - 5\nc: 6\ne:\n - null\n - e: 7\n'
)
doc.contents = YAML.createNode('s')
expect(() => doc.setIn(['a'], 1)).toThrow(/document contents/)
})
test('setIn with __proto__ as key', () => {
doc.setIn(['c', '__proto__'], 9)
expect(String(doc)).toBe('a: 1\nb:\n - 2\n - 3\nc:\n __proto__: 9\n')
})
})
yaml-1.10.2/tests/doc/comments.js000066400000000000000000000500501402322402300166170ustar00rootroot00000000000000import { source } from 'common-tags'
import YAML from '../../index.js'
import { Pair } from '../../types.js'
describe('parse comments', () => {
describe('body', () => {
test('directives', () => {
const src = '#comment\n%YAML 1.2 #comment\n---\nstring\n'
const doc = YAML.parseDocument(src)
expect(doc.commentBefore).toBe('comment\ncomment')
expect(String(doc)).toBe('#comment\n#comment\n\n%YAML 1.2\n---\nstring\n')
})
test('body start comments', () => {
const src = source`
---
#comment
#comment
string
`
const doc = YAML.parseDocument(src)
expect(doc.contents.commentBefore).toBe('comment\ncomment')
expect(String(doc)).toBe(src + '\n')
})
test('body start comments with empty comment line', () => {
const src = source`
---
#comment
#
#comment
string
`
const doc = YAML.parseDocument(src)
expect(doc.contents.commentBefore).toBe('comment\n\ncomment')
expect(String(doc)).toBe(src + '\n')
})
test('body end comments', () => {
const src = '\nstring\n#comment\n#comment\n'
const doc = YAML.parseDocument(src)
expect(doc.comment).toBe('comment\ncomment')
expect(String(doc)).toBe('string\n\n#comment\n#comment\n')
})
})
describe('top-level scalar comments', () => {
test('plain', () => {
const src = '#c0\nvalue #c1\n#c2'
const doc = YAML.parseDocument(src)
expect(doc.contents.commentBefore).toBe('c0')
expect(doc.contents.comment).toBe('c1')
expect(doc.comment).toBe('c2')
expect(doc.contents.value).toBe('value')
expect(doc.contents.range).toMatchObject([4, 13])
})
test('"quoted"', () => {
const src = '#c0\n"value" #c1\n#c2'
const doc = YAML.parseDocument(src)
expect(doc.contents.commentBefore).toBe('c0')
expect(doc.contents.comment).toBe('c1')
expect(doc.comment).toBe('c2')
expect(doc.contents.value).toBe('value')
expect(doc.contents.range).toMatchObject([4, 15])
})
test('block', () => {
const src = '#c0\n>- #c1\n value\n#c2\n'
const doc = YAML.parseDocument(src)
expect(doc.contents.commentBefore).toBe('c0')
expect(doc.contents.comment).toBe('c1')
expect(doc.comment).toBe('c2')
expect(doc.contents.value).toBe('value')
expect(doc.contents.range).toMatchObject([4, 18])
})
})
describe('seq entry comments', () => {
test('plain', () => {
const src = `#c0
- value 1
#c1
- value 2
#c2`
const doc = YAML.parseDocument(src)
expect(doc).toMatchObject({
contents: {
items: [
{ commentBefore: 'c0', range: [6, 13] },
{ commentBefore: 'c1' }
],
range: [4, 29]
},
comment: 'c2'
})
})
test('multiline', () => {
const src = `
- value 1
#c0
#c1
#c2
- value 2
#c3
#c4`
const doc = YAML.parseDocument(src)
expect(doc).toMatchObject({
contents: {
items: [{}, { commentBefore: 'c0\nc1\nc2' }]
},
comment: 'c3\nc4'
})
})
})
describe('map entry comments', () => {
test('plain', () => {
const src = `#c0
key1: value 1
#c1
key2: value 2
#c2`
const doc = YAML.parseDocument(src)
expect(doc).toMatchObject({
contents: {
items: [{ commentBefore: 'c0' }, { commentBefore: 'c1' }]
},
comment: 'c2'
})
})
test('multiline', () => {
const src = `key1: value 1
#c0
#c1
#c2
key2: value 2
#c3
#c4`
const doc = YAML.parseDocument(src)
expect(doc).toMatchObject({
contents: {
items: [{}, { commentBefore: 'c0\nc1\nc2' }]
},
comment: 'c3\nc4'
})
})
})
describe('map-in-seq comments', () => {
test('plain', () => {
const src = `#c0
- #c1
k1: v1
#c2
k2: v2 #c3
#c4
k3: v3
#c5\n`
const doc = YAML.parseDocument(src)
expect(doc.contents.items).toMatchObject([
{
commentBefore: 'c0\nc1',
items: [
{},
{ commentBefore: 'c2', value: { comment: 'c3' } },
{ commentBefore: 'c4' }
]
}
])
expect(doc.comment).toBe('c5')
expect(String(doc)).toBe(`#c0
#c1
- k1: v1
#c2
k2: v2 #c3
#c4
k3: v3
#c5\n`)
})
})
describe('seq-in-map comments', () => {
test('plain', () => {
const src = `#c0
k1: #c1
- v1
#c2
- v2
#c3
k2:
- v3 #c4
#c5\n`
const doc = YAML.parseDocument(src)
expect(doc.contents.items).toMatchObject([
{
comment: 'c1',
key: { commentBefore: 'c0', value: 'k1' },
value: {
items: [{ value: 'v1' }, { commentBefore: 'c2', value: 'v2' }],
comment: 'c3'
}
},
{
key: { value: 'k2' },
value: { items: [{ value: 'v3', comment: 'c4' }] }
}
])
expect(doc.comment).toBe('c5')
expect(String(doc)).toBe(`#c0
k1: #c1
- v1
#c2
- v2
#c3
k2:
- v3 #c4
#c5\n`)
})
})
})
describe('stringify comments', () => {
describe('single-line comments', () => {
test('plain', () => {
const src = 'string'
const doc = YAML.parseDocument(src)
doc.contents.comment = 'comment'
expect(String(doc)).toBe('string #comment\n')
})
test('"quoted"', () => {
const src = '"string\\u0000"'
const doc = YAML.parseDocument(src)
doc.contents.comment = 'comment'
expect(String(doc)).toBe('"string\\0" #comment\n')
})
test('block', () => {
const src = '>\nstring\n'
const doc = YAML.parseDocument(src)
doc.contents.comment = 'comment'
expect(String(doc)).toBe('> #comment\nstring\n')
})
})
describe('multi-line comments', () => {
test('plain', () => {
const src = 'string'
const doc = YAML.parseDocument(src)
doc.contents.comment = 'comment\nlines'
expect(String(doc)).toBe('#comment\n#lines\nstring\n')
})
test('"quoted"', () => {
const src = '"string\\u0000"'
const doc = YAML.parseDocument(src)
doc.contents.comment = 'comment\nlines'
expect(String(doc)).toBe('"string\\0"\n#comment\n#lines\n')
})
test('block', () => {
const src = '>\nstring\n'
const doc = YAML.parseDocument(src)
doc.contents.comment = 'comment\nlines'
expect(String(doc)).toBe('> #comment lines\nstring\n')
})
})
describe('document comments', () => {
test('directive', () => {
const src = source`
#c0
---
string
`
const doc = YAML.parseDocument(src)
expect(doc.commentBefore).toBe('c0')
doc.commentBefore += '\nc1'
expect(String(doc)).toBe(
source`
#c0
#c1
---
string
` + '\n'
)
})
})
describe('seq comments', () => {
test('plain', () => {
const src = '- value 1\n- value 2\n'
const doc = YAML.parseDocument(src)
doc.contents.commentBefore = 'c0'
doc.contents.items[0].commentBefore = 'c1'
doc.contents.items[1].commentBefore = 'c2'
doc.contents.comment = 'c3'
expect(String(doc)).toBe(
`#c0
#c1
- value 1
#c2
- value 2
#c3
`
)
})
test('multiline', () => {
const src = '- value 1\n- value 2\n'
const doc = YAML.parseDocument(src)
doc.contents.items[0].commentBefore = 'c0\nc1'
doc.contents.items[1].commentBefore = '\nc2\n\nc3'
doc.contents.comment = 'c4\nc5'
expect(String(doc)).toBe(
`#c0
#c1
- value 1
#
#c2
#
#c3
- value 2
#c4
#c5
`
)
})
test('seq-in-map', () => {
const src = 'map:\n - value 1\n - value 2\n'
const doc = YAML.parseDocument(src)
doc.contents.items[0].key.commentBefore = 'c0'
doc.contents.items[0].key.comment = 'c1'
doc.contents.items[0].comment = 'c2'
const seq = doc.contents.items[0].value
seq.items[0].commentBefore = 'c3'
seq.items[1].commentBefore = 'c4'
seq.comment = 'c5'
expect(String(doc)).toBe(
`#c0
? map #c1
: #c2
#c3
- value 1
#c4
- value 2
#c5\n`
)
})
})
describe('map entry comments', () => {
test('plain', () => {
const src = 'key1: value 1\nkey2: value 2\n'
const doc = YAML.parseDocument(src)
doc.contents.items[0].commentBefore = 'c0'
doc.contents.items[1].commentBefore = 'c1'
doc.contents.items[1].comment = 'c2'
doc.contents.items[1].value.spaceBefore = true
doc.contents.comment = 'c3'
expect(String(doc)).toBe(`#c0
key1: value 1
#c1
key2: #c2
value 2
#c3\n`)
})
test('multiline', () => {
const src = 'key1: value 1\nkey2: value 2\n'
const doc = YAML.parseDocument(src)
doc.contents.items[0].commentBefore = 'c0\nc1'
doc.contents.items[1].commentBefore = '\nc2\n\nc3'
doc.contents.items[1].comment = 'c4\nc5'
doc.contents.items[1].value.spaceBefore = true
doc.contents.items[1].value.commentBefore = 'c6'
doc.contents.comment = 'c7\nc8'
expect(String(doc)).toBe(
`#c0
#c1
key1: value 1
#
#c2
#
#c3
key2:
#c4
#c5
#c6
value 2
#c7
#c8
`
)
})
})
})
describe('blank lines', () => {
describe('drop leading blank lines', () => {
test('content', () => {
const src = '\n\nstr\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('str\n')
})
test('content comment', () => {
const src = '\n\n#cc\n\nstr\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('#cc\n\nstr\n')
})
test('directive', () => {
const src = '\n\n%YAML 1.2\n---\nstr\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('%YAML 1.2\n---\nstr\n')
})
test('directive comment', () => {
const src = '\n\n#cc\n%YAML 1.2\n---\nstr\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('#cc\n\n%YAML 1.2\n---\nstr\n')
})
})
describe('drop trailing blank lines', () => {
test('empty contents', () => {
const src = '\n\n\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('null\n')
})
test('scalar contents', () => {
const src = 'str\n\n\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('str\n')
})
test('seq contents', () => {
const src = '- a\n- b\n\n\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('- a\n- b\n')
})
test('empty/comment contents', () => {
const src = '#cc\n\n\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('#cc\n\nnull\n')
})
})
test('between directive comment & directive', () => {
const src = '#cc\n\n\n%YAML 1.2\n---\nstr\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('#cc\n\n%YAML 1.2\n---\nstr\n')
})
test('after leading comment', () => {
const src = '#cc\n\n\nstr\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('#cc\n\nstr\n')
})
test('before first node in document with directives', () => {
const doc = YAML.parseDocument('str\n')
doc.directivesEndMarker = true
doc.contents.spaceBefore = true
expect(String(doc)).toBe('---\n\nstr\n')
})
test('between seq items', () => {
const src = '- a\n\n- b\n\n\n- c\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('- a\n\n- b\n\n- c\n')
})
test('between seq items with leading comments', () => {
const src = '#A\n- a\n\n#B\n- b\n\n\n#C\n\n- c\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('#A\n- a\n\n#B\n- b\n\n#C\n- c\n')
})
describe('not after block scalar with keep chomping', () => {
const cases = [
{ name: 'in seq', src: '- |+\n a\n\n- b\n' },
{ name: 'in map', src: 'a: |+\n A\n\nb: B\n' },
{ name: 'in seq in map', src: 'a:\n - |+\n A\n\nb: B\n' }
]
for (const { name, src } of cases) {
test(name, () => {
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(src)
expect(doc.contents.items[1]).not.toHaveProperty('spaceBefore', true)
doc.contents.items[1].spaceBefore = true
expect(String(doc)).toBe(src)
})
}
test('as contents', () => {
const src = '|+\n a\n\n#c\n'
const doc = YAML.parseDocument(src)
expect(doc).toMatchObject({
comment: 'c',
contents: { value: 'a\n\n' }
})
expect(String(doc)).toBe(src)
})
})
test('before block map values', () => {
const src = 'a:\n\n 1\nb:\n\n #c\n 2\n'
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{
key: { value: 'a' },
value: { value: 1, spaceBefore: true }
},
{
key: { value: 'b' },
value: { value: 2, commentBefore: 'c', spaceBefore: true }
}
]
})
expect(String(doc)).toBe(src)
})
describe('after block value', () => {
test('in seq', () => {
const src = '- |\n a\n\n- >-\n b\n\n- |+\n c\n\n- d\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('- |\n a\n\n- >-\n b\n\n- |+\n c\n\n- d\n')
})
test('in map', () => {
const src = 'A: |\n a\n\nB: >-\n b\n\nC: |+\n c\n\nD: d\n'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(
'A: |\n a\n\nB: >-\n b\n\nC: |+\n c\n\nD: d\n'
)
})
})
describe('flow collections', () => {
test('flow seq', () => {
const src = '[1,\n\n2,\n3,\n\n4\n\n]'
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{ value: 1 },
{ value: 2, spaceBefore: true },
{ value: 3 },
{ value: 4, spaceBefore: true }
]
})
expect(String(doc)).toBe('[\n 1,\n\n 2,\n 3,\n\n 4\n]\n')
})
test('flow map', () => {
const src = '{\n\na: 1,\n\nb: 2 }'
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{ key: { value: 'a' }, value: { value: 1 }, spaceBefore: true },
{ key: { value: 'b' }, value: { value: 2 }, spaceBefore: true }
]
})
})
test('flow map value comments & spaces', () => {
const src = '{\n a:\n #c\n 1,\n b:\n\n #d\n 2\n}\n'
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{
key: { value: 'a' },
value: { value: 1, commentBefore: 'c' }
},
{
key: { value: 'b' },
value: { value: 2, commentBefore: 'd', spaceBefore: true }
}
]
})
expect(String(doc)).toBe(src)
})
})
test('blank line after less-indented comment (eemeli/yaml#91)', () => {
const src = `
map:
foo0:
key2: value2
# foo1:
# key0: value0
# key1: value1
foo2:
key3: value3`
const doc = YAML.parseDocument(src)
expect(doc.errors).toHaveLength(0)
expect(doc.toJSON()).toMatchObject({
map: { foo0: { key2: 'value2' }, foo2: { key3: 'value3' } }
})
})
})
describe('eemeli/yaml#18', () => {
test('reported', () => {
const src = `test1:
foo: #123
bar: 1\n`
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(src)
})
test('minimal', () => {
const src = `foo: #123\n bar: baz\n`
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(src)
})
})
describe('eemeli/yaml#28', () => {
test('reported', () => {
const src = `# This comment is ok
entryA:
- foo
entryB:
- bar # bar comment
# Ending comment
# Ending comment 2\n`
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(`# This comment is ok
entryA:
- foo
entryB:
- bar # bar comment
# Ending comment
# Ending comment 2\n`)
})
test('collection end comment', () => {
const src = `a: b #c\n#d\n`
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(`a: b #c\n\n#d\n`)
})
test('comment association by indentation', () => {
const src = `
a:
- b #c
#d\n`
const cst = YAML.parseCST(src)
const collection = cst[0].contents[1]
expect(collection.items).toHaveLength(2)
const comment = cst[0].contents[2]
expect(comment.type).toBe('COMMENT')
expect(comment.comment).toBe('d')
})
test('blank line after seq in map', () => {
const src = `a:
- aa
b:
- bb
c: cc\n`
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(src)
})
test('blank line after map in seq', () => {
const src = `- a: aa
- b: bb
c: cc
- d: dd\n`
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(src)
})
})
describe('collection end comments', () => {
test('seq in seq', () => {
const src = `#0
- - a
- b
#1
#2
- d\n`
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{ items: [{ value: 'a' }, { value: 'b' }], comment: '1' },
{ spaceBefore: true, commentBefore: '2', value: 'd' }
]
})
expect(String(doc)).toBe(src)
})
test('map in seq', () => {
const src = `#0
- a: 1
b: 2
#1
#2
- d\n`
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{
items: [
{ key: { value: 'a' }, value: { value: 1 } },
{ key: { value: 'b' }, value: { value: 2 } }
],
comment: '1'
},
{ spaceBefore: true, commentBefore: '2', value: 'd' }
]
})
expect(String(doc)).toBe(src)
})
test('seq in map', () => {
const src = `#0
a:
- b
- c
#1
#2
d: 1\n`
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{
key: { value: 'a' },
value: { items: [{ value: 'b' }, { value: 'c' }], comment: '1' }
},
{
spaceBefore: true,
commentBefore: '2',
key: { value: 'd' },
value: { value: 1 }
}
]
})
expect(String(doc)).toBe(src)
})
test('map in map', () => {
const src = `#0
a:
b: 1
c: 2
#1
#2
d: 1\n`
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{
key: { value: 'a' },
value: {
items: [
{ key: { value: 'b' }, value: { value: 1 } },
{ key: { value: 'c' }, value: { value: 2 } }
],
comment: '1'
}
},
{
spaceBefore: true,
commentBefore: '2',
key: { value: 'd' },
value: { value: 1 }
}
]
})
expect(String(doc)).toBe(src)
})
test('indented seq in map in seq', () => {
const src = `#0
a:
#1
- b:
- c
#2
- e\n`
const doc = YAML.parseDocument(src)
expect(doc.contents).toMatchObject({
items: [
{
key: { value: 'a' },
value: {
commentBefore: '1',
items: [
{
items: [
{
key: { value: 'b' },
value: { items: [{ value: 'c' }] }
}
]
},
{ spaceBefore: true, commentBefore: '2', value: 'e' }
]
}
}
]
})
expect(String(doc)).toBe(src)
})
})
describe('Pair.commentBefore', () => {
test('Should get key comment', () => {
const key = YAML.createNode('foo', true)
const pair = new Pair(key, 42)
key.commentBefore = 'cc'
expect(pair.commentBefore).toBe('cc')
})
test('Should set key comment', () => {
const key = YAML.createNode('foo', true)
const pair = new Pair(key, 42)
pair.commentBefore = 'cc'
expect(key.commentBefore).toBe('cc')
})
test('Should create a key from a null value', () => {
const pair = new Pair(null, 42)
expect(pair.key).toBeNull()
pair.commentBefore = 'cc'
expect(pair.key).not.toBeNull()
expect(pair.key.commentBefore).toBe('cc')
})
test('Should throw for non-Node key', () => {
const pair = new Pair({ foo: 'bar' }, 42)
expect(() => {
pair.commentBefore = 'cc'
}).toThrow(/commentBefore is an alias/)
})
})
yaml-1.10.2/tests/doc/createNode.js000066400000000000000000000240341402322402300170460ustar00rootroot00000000000000import { YAML } from '../../src/index.js'
import { Pair, Scalar, YAMLMap, YAMLSeq } from '../../src/ast/index.js'
import { YAMLSet } from '../../src/tags/yaml-1.1/set.js'
describe('scalars', () => {
describe('createNode(value, false)', () => {
test('boolean', () => {
const s = YAML.createNode(false, false)
expect(s).toBe(false)
})
test('null', () => {
const s = YAML.createNode(null, false)
expect(s).toBeNull()
})
test('undefined', () => {
const s = YAML.createNode(undefined, false)
expect(s).toBeNull()
})
test('number', () => {
const s = YAML.createNode(3, false)
expect(s).toBe(3)
})
test('string', () => {
const s = YAML.createNode('test', false)
expect(s).toBe('test')
})
})
})
describe('createNode(value, true)', () => {
test('boolean', () => {
const s = YAML.createNode(false, true)
expect(s).toBeInstanceOf(Scalar)
expect(s.value).toBe(false)
})
test('null', () => {
const s = YAML.createNode(null, true)
expect(s).toBeInstanceOf(Scalar)
expect(s.value).toBe(null)
})
test('undefined', () => {
const s = YAML.createNode(undefined, true)
expect(s).toBeInstanceOf(Scalar)
expect(s.value).toBe(null)
})
test('number', () => {
const s = YAML.createNode(3, true)
expect(s).toBeInstanceOf(Scalar)
expect(s.value).toBe(3)
})
test('string', () => {
const s = YAML.createNode('test', true)
expect(s).toBeInstanceOf(Scalar)
expect(s.value).toBe('test')
})
})
describe('explicit tags', () => {
test('wrapScalars: false', () => {
const s = YAML.createNode(3, false, 'tag:yaml.org,2002:str')
expect(s).toBe(3)
})
test('wrapScalars: true', () => {
const s = YAML.createNode(3, true, '!!str')
expect(s).toBeInstanceOf(Scalar)
expect(s).toMatchObject({ value: 3, tag: 'tag:yaml.org,2002:str' })
})
test('unknown tag', () => {
expect(() => YAML.createNode('3', true, '!foo')).toThrow(
'Tag !foo not found'
)
})
})
describe('arrays', () => {
test('createNode([])', () => {
const s = YAML.createNode([])
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toHaveLength(0)
})
test('createNode([true], false)', () => {
const s = YAML.createNode([true], false)
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toMatchObject([true])
})
describe('[3, ["four", 5]]', () => {
const array = [3, ['four', 5]]
test('createNode(value, false)', () => {
const s = YAML.createNode(array, false)
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toHaveLength(2)
expect(s.items[0]).toBe(3)
expect(s.items[1]).toBeInstanceOf(YAMLSeq)
expect(s.items[1].items).toMatchObject(['four', 5])
})
test('createNode(value, true)', () => {
const s = YAML.createNode(array, true)
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toHaveLength(2)
expect(s.items[0].value).toBe(3)
expect(s.items[1]).toBeInstanceOf(YAMLSeq)
expect(s.items[1].items).toHaveLength(2)
expect(s.items[1].items[0].value).toBe('four')
expect(s.items[1].items[1].value).toBe(5)
})
test('set doc contents', () => {
const res = '- 3\n- - four\n - 5\n'
const doc = new YAML.Document()
doc.contents = array
expect(String(doc)).toBe(res)
doc.contents = YAML.createNode(array, false)
expect(String(doc)).toBe(res)
doc.contents = YAML.createNode(array, true)
expect(String(doc)).toBe(res)
})
})
})
describe('objects', () => {
test('createNode({})', () => {
const s = YAML.createNode({})
expect(s).toBeInstanceOf(YAMLMap)
expect(s.items).toHaveLength(0)
})
test('createNode({ x: true }, false)', () => {
const s = YAML.createNode({ x: true }, false)
expect(s).toBeInstanceOf(YAMLMap)
expect(s.items).toHaveLength(1)
expect(s.items[0]).toBeInstanceOf(Pair)
expect(s.items[0]).toMatchObject({ key: 'x', value: true })
})
describe('{ x: 3, y: [4], z: { w: "five", v: 6 } }', () => {
const object = { x: 3, y: [4], z: { w: 'five', v: 6 } }
test('createNode(value, false)', () => {
const s = YAML.createNode(object, false)
expect(s).toBeInstanceOf(YAMLMap)
expect(s.items).toHaveLength(3)
expect(s.items).toMatchObject([
{ key: 'x', value: 3 },
{ key: 'y', value: { items: [4] } },
{
key: 'z',
value: {
items: [
{ key: 'w', value: 'five' },
{ key: 'v', value: 6 }
]
}
}
])
})
test('createNode(value, true)', () => {
const s = YAML.createNode(object, true)
expect(s).toBeInstanceOf(YAMLMap)
expect(s.items).toHaveLength(3)
expect(s.items).toMatchObject([
{ key: { value: 'x' }, value: { value: 3 } },
{ key: { value: 'y' }, value: { items: [{ value: 4 }] } },
{
key: { value: 'z' },
value: {
items: [
{ key: { value: 'w' }, value: { value: 'five' } },
{ key: { value: 'v' }, value: { value: 6 } }
]
}
}
])
})
test('set doc contents', () => {
const res = `x: 3
y:
- 4
z:
w: five
v: 6\n`
const doc = new YAML.Document()
doc.contents = object
expect(String(doc)).toBe(res)
doc.contents = YAML.createNode(object, false)
expect(String(doc)).toBe(res)
doc.contents = YAML.createNode(object, true)
expect(String(doc)).toBe(res)
})
})
})
describe('Set', () => {
test('createNode(new Set)', () => {
const s = YAML.createNode(new Set())
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toHaveLength(0)
})
test('createNode(new Set([true]), false)', () => {
const s = YAML.createNode(new Set([true]), false)
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toMatchObject([true])
})
describe("Set { 3, Set { 'four', 5 } }", () => {
const set = new Set([3, new Set(['four', 5])])
test('createNode(set, false)', () => {
const s = YAML.createNode(set, false)
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toHaveLength(2)
expect(s.items[0]).toBe(3)
expect(s.items[1]).toBeInstanceOf(YAMLSeq)
expect(s.items[1].items).toMatchObject(['four', 5])
})
test('createNode(set, true)', () => {
const s = YAML.createNode(set, true)
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toHaveLength(2)
expect(s.items[0].value).toBe(3)
expect(s.items[1]).toBeInstanceOf(YAMLSeq)
expect(s.items[1].items).toHaveLength(2)
expect(s.items[1].items[0].value).toBe('four')
expect(s.items[1].items[1].value).toBe(5)
})
test('set doc contents', () => {
const res = '- 3\n- - four\n - 5\n'
const doc = new YAML.Document()
doc.contents = set
expect(String(doc)).toBe(res)
doc.contents = YAML.createNode(set, false)
expect(String(doc)).toBe(res)
doc.contents = YAML.createNode(set, true)
expect(String(doc)).toBe(res)
})
test('Schema#createNode() - YAML 1.2', () => {
const doc = new YAML.Document()
doc.setSchema()
const s = doc.schema.createNode(set, true)
expect(s).toBeInstanceOf(YAMLSeq)
expect(s.items).toMatchObject([
{ value: 3 },
{ items: [{ value: 'four' }, { value: 5 }] }
])
})
test('Schema#createNode() - YAML 1.1', () => {
const doc = new YAML.Document({ version: '1.1' })
doc.setSchema()
const s = doc.schema.createNode(set, true)
expect(s).toBeInstanceOf(YAMLSet)
expect(s.items).toMatchObject([
{ key: { value: 3 } },
{ key: { items: [{ key: { value: 'four' } }, { key: { value: 5 } }] } }
])
})
})
})
describe('Map', () => {
test('createNode(new Map)', () => {
const s = YAML.createNode(new Map())
expect(s).toBeInstanceOf(YAMLMap)
expect(s.items).toHaveLength(0)
})
test('createNode(new Map([["x", true]]), false)', () => {
const s = YAML.createNode(new Map([['x', true]]), false)
expect(s).toBeInstanceOf(YAMLMap)
expect(s.items).toHaveLength(1)
expect(s.items[0]).toBeInstanceOf(Pair)
expect(s.items[0]).toMatchObject({ key: 'x', value: true })
})
describe("Map { 'x' => 3, 'y' => Set { 4 }, Map { 'w' => 'five', 'v' => 6 } => 'z' }", () => {
const map = new Map([
['x', 3],
['y', new Set([4])],
[
new Map([
['w', 'five'],
['v', 6]
]),
'z'
]
])
test('createNode(map, false)', () => {
const s = YAML.createNode(map, false)
expect(s).toBeInstanceOf(YAMLMap)
expect(s.items).toHaveLength(3)
expect(s.items).toMatchObject([
{ key: 'x', value: 3 },
{ key: 'y', value: { items: [4] } },
{
key: {
items: [
{ key: 'w', value: 'five' },
{ key: 'v', value: 6 }
]
},
value: 'z'
}
])
})
test('createNode(map, true)', () => {
const s = YAML.createNode(map, true)
expect(s).toBeInstanceOf(YAMLMap)
expect(s.items).toHaveLength(3)
expect(s.items).toMatchObject([
{ key: { value: 'x' }, value: { value: 3 } },
{ key: { value: 'y' }, value: { items: [{ value: 4 }] } },
{
key: {
items: [
{ key: { value: 'w' }, value: { value: 'five' } },
{ key: { value: 'v' }, value: { value: 6 } }
]
},
value: { value: 'z' }
}
])
})
test('set doc contents', () => {
const res = `x: 3
y:
- 4
? w: five
v: 6
: z\n`
const doc = new YAML.Document()
doc.contents = map
expect(String(doc)).toBe(res)
doc.contents = YAML.createNode(map, false)
expect(String(doc)).toBe(res)
doc.contents = YAML.createNode(map, true)
expect(String(doc)).toBe(res)
})
})
})
describe('toJSON()', () => {
test('Date', () => {
const date = new Date('2018-12-22T08:02:52Z')
const node = YAML.createNode(date)
expect(node.value).toBe(date.toJSON())
})
})
yaml-1.10.2/tests/doc/errors.js000066400000000000000000000261161402322402300163140ustar00rootroot00000000000000import fs from 'fs'
import path from 'path'
import { Node } from '../../src/cst/Node.js'
import { YAMLError } from '../../src/errors.js'
import {
warnFileDeprecation,
warnOptionDeprecation
} from '../../src/warnings.js'
import { YAML } from '../../src/index.js'
test('require a message and source for all errors', () => {
const exp = /Invalid arguments/
expect(() => new YAMLError()).toThrow(exp)
expect(() => new YAMLError('Foo')).toThrow(exp)
expect(() => new YAMLError('Foo', {})).toThrow(exp)
expect(() => new YAMLError('Foo', new Node())).toThrow(exp)
expect(() => new YAMLError('Foo', null, 'foo')).toThrow(exp)
expect(() => new YAMLError('Foo', new Node(), 'foo')).not.toThrow()
})
test('fail on map value indented with tab', () => {
const src = 'a:\n\t1\nb:\n\t2\n'
const doc = YAML.parseDocument(src)
expect(doc.errors).toMatchObject([
{ name: 'YAMLSemanticError' },
{ name: 'YAMLSemanticError' },
{ name: 'YAMLSemanticError' },
{ name: 'YAMLSemanticError' }
])
expect(() => String(doc)).toThrow(
'Document with errors cannot be stringified'
)
})
test('eemeli/yaml#6', () => {
const src = 'abc: 123\ndef'
const doc = YAML.parseDocument(src)
expect(doc.errors).toMatchObject([{ name: 'YAMLSemanticError' }])
const node = doc.errors[0].source
expect(node).toBeInstanceOf(Node)
expect(node.rangeAsLinePos).toMatchObject({
start: { line: 2, col: 1 },
end: { line: 2, col: 4 }
})
})
describe('eemeli/yaml#7', () => {
test('map', () => {
const src = '{ , }\n---\n{ 123,,, }\n'
const docs = YAML.parseAllDocuments(src)
expect(docs[0].errors).toMatchObject([{ name: 'YAMLSyntaxError' }])
expect(docs[1].errors).toMatchObject([
{ name: 'YAMLSyntaxError' },
{ name: 'YAMLSyntaxError' }
])
const node = docs[0].errors[0].source
expect(node).toBeInstanceOf(Node)
expect(node.rangeAsLinePos).toMatchObject({
start: { line: 1, col: 1 },
end: { line: 1, col: 6 }
})
})
test('seq', () => {
const src = '[ , ]\n---\n[ 123,,, ]\n'
const docs = YAML.parseAllDocuments(src)
expect(docs[0].errors).toMatchObject([{ name: 'YAMLSyntaxError' }])
expect(docs[1].errors).toMatchObject([
{ name: 'YAMLSyntaxError' },
{ name: 'YAMLSyntaxError' }
])
const node = docs[1].errors[0].source
expect(node).toBeInstanceOf(Node)
expect(node.rangeAsLinePos).toMatchObject({
start: { line: 3, col: 1 },
end: { line: 3, col: 11 }
})
})
})
describe('block collections', () => {
test('mapping with bad indentation', () => {
const src = 'foo: "1"\n bar: 2\n'
const doc = YAML.parseDocument(src)
expect(doc.errors).toMatchObject([
{ message: 'All collection items must start at the same column' }
])
expect(doc.contents).toMatchObject({
type: 'MAP',
items: [
{ key: { value: 'foo' }, value: { value: '1' } },
{ key: { value: 'bar' }, value: { value: 2 } }
]
})
})
test('sequence with bad indentation', () => {
const src = '- "foo"\n - bar\n'
const doc = YAML.parseDocument(src)
expect(doc.errors).toMatchObject([
{ message: 'All collection items must start at the same column' }
])
expect(doc.contents).toMatchObject({
type: 'SEQ',
items: [{ value: 'foo' }, { value: 'bar' }]
})
})
test('seq item in mapping', () => {
const src = 'foo: "1"\n- bar\n'
const doc = YAML.parseDocument(src)
expect(doc.errors).toMatchObject([
{ message: 'A collection cannot be both a mapping and a sequence' },
{ message: 'Failed to resolve SEQ_ITEM node here' },
{ message: 'Implicit map keys need to be followed by map values' }
])
expect(doc.contents).toMatchObject({
type: 'MAP',
items: [
{ key: { value: 'foo' }, value: { value: '1' } },
{ key: null, value: null }
]
})
})
})
describe('missing flow collection terminator', () => {
test('start only of flow map (eemeli/yaml#8)', () => {
const doc = YAML.parseDocument('{', { prettyErrors: true })
expect(doc.errors).toMatchObject([
{
name: 'YAMLSemanticError',
message:
'Expected flow map to end with } at line 1, column 2:\n\n{\n ^\n',
nodeType: 'FLOW_MAP',
range: { start: 1, end: 2 },
linePos: { start: { line: 1, col: 2 }, end: { line: 1, col: 3 } }
}
])
})
test('start only of flow sequence (eemeli/yaml#8)', () => {
const doc = YAML.parseDocument('[', { prettyErrors: true })
expect(doc.errors).toMatchObject([
{
name: 'YAMLSemanticError',
message:
'Expected flow sequence to end with ] at line 1, column 2:\n\n[\n ^\n',
nodeType: 'FLOW_SEQ',
range: { start: 1, end: 2 },
linePos: { start: { line: 1, col: 2 }, end: { line: 1, col: 3 } }
}
])
})
test('flow sequence without end', () => {
const doc = YAML.parseDocument('[ foo, bar,', { prettyErrors: true })
expect(doc.errors).toMatchObject([
{
name: 'YAMLSemanticError',
message:
'Expected flow sequence to end with ] at line 1, column 12:\n\n[ foo, bar,\n ^\n',
nodeType: 'FLOW_SEQ',
range: { start: 11, end: 12 },
linePos: { start: { line: 1, col: 12 }, end: { line: 1, col: 13 } }
}
])
})
})
describe('pretty errors', () => {
test('eemeli/yaml#6', () => {
const src = 'abc: 123\ndef'
const doc = YAML.parseDocument(src, { prettyErrors: true })
expect(doc.errors).toMatchObject([
{
name: 'YAMLSemanticError',
message:
'Implicit map keys need to be followed by map values at line 2, column 1:\n\ndef\n^^^\n',
nodeType: 'PLAIN',
range: { start: 9, end: 12 },
linePos: { start: { line: 2, col: 1 }, end: { line: 2, col: 4 } }
}
])
expect(doc.errors[0]).not.toHaveProperty('source')
})
test('eemeli/yaml#7 maps', () => {
const src = '{ , }\n---\n{ 123,,, }\n'
const docs = YAML.parseAllDocuments(src, { prettyErrors: true })
expect(docs[0].errors).toMatchObject([
{
name: 'YAMLSyntaxError',
message:
'Flow map contains an unexpected , at line 1, column 3:\n\n{ , }\n ^\n',
nodeType: 'FLOW_MAP',
range: { start: 2, end: 3 },
linePos: { start: { line: 1, col: 3 }, end: { line: 1, col: 4 } }
}
])
expect(docs[0].errors[0]).not.toHaveProperty('source')
expect(docs[1].errors).toMatchObject([
{
name: 'YAMLSyntaxError',
message:
'Flow map contains an unexpected , at line 3, column 7:\n\n{ 123,,, }\n ^\n',
nodeType: 'FLOW_MAP',
range: { start: 16, end: 17 },
linePos: { start: { line: 3, col: 7 }, end: { line: 3, col: 8 } }
},
{
name: 'YAMLSyntaxError',
message:
'Flow map contains an unexpected , at line 3, column 8:\n\n{ 123,,, }\n ^\n',
nodeType: 'FLOW_MAP',
range: { start: 17, end: 18 },
linePos: { start: { line: 3, col: 8 }, end: { line: 3, col: 9 } }
}
])
expect(docs[1].errors[0]).not.toHaveProperty('source')
expect(docs[1].errors[1]).not.toHaveProperty('source')
})
test('pretty warnings', () => {
const src = '%FOO\n---bar\n'
const doc = YAML.parseDocument(src, { prettyErrors: true })
expect(doc.warnings).toMatchObject([
{ name: 'YAMLWarning', nodeType: 'DIRECTIVE' }
])
})
})
describe('invalid options', () => {
test('unknown schema', () => {
const doc = new YAML.Document({ schema: 'foo' })
expect(() => doc.setSchema()).toThrow(/Unknown schema/)
})
test('unknown custom tag', () => {
const doc = new YAML.Document({ customTags: ['foo'] })
expect(() => doc.setSchema()).toThrow(/Unknown custom tag/)
})
})
test('broken document with comment before first node', () => {
const doc = YAML.parseDocument('#c\n*x\nfoo\n')
expect(doc.contents).toBeNull()
expect(doc.errors).toMatchObject([
{ name: 'YAMLReferenceError', message: 'Aliased anchor not found: x' },
{
name: 'YAMLSyntaxError',
message:
'Document contains trailing content not separated by a ... or --- line'
}
])
})
describe('broken directives', () => {
for (const tag of ['%TAG', '%YAML'])
test(`incomplete ${tag} directive`, () => {
const doc = YAML.parseDocument(`${tag}\n---\n`)
expect(doc.errors).toMatchObject([
{ name: 'YAMLSemanticError', source: { type: 'DIRECTIVE' } }
])
})
test('missing separator', () => {
const doc = YAML.parseDocument(`%YAML 1.2\n`)
expect(doc.errors).toMatchObject([
{ name: 'YAMLSemanticError', source: { type: 'DOCUMENT' } }
])
})
})
test('multiple tags on one node', () => {
const doc = YAML.parseDocument('!foo !bar baz\n')
expect(doc.contents).toMatchObject({ value: 'baz', type: 'PLAIN' })
expect(doc.errors).toMatchObject([{ name: 'YAMLSemanticError' }])
expect(doc.warnings).toMatchObject([{}])
})
describe('deprecations', () => {
let mock
beforeEach(() => {
mock = jest.spyOn(global.process, 'emitWarning').mockImplementation()
})
afterEach(() => mock.mockRestore())
describe('env vars', () => {
let prevAll, prevDeprecations
beforeEach(() => {
prevAll = global.YAML_SILENCE_WARNINGS
prevDeprecations = global.YAML_SILENCE_DEPRECATION_WARNINGS
})
afterEach(() => {
global.YAML_SILENCE_WARNINGS = prevAll
global.YAML_SILENCE_DEPRECATION_WARNINGS = prevDeprecations
})
test('YAML_SILENCE_WARNINGS', () => {
global.YAML_SILENCE_WARNINGS = true
warnFileDeprecation('foo')
warnOptionDeprecation('bar1', 'baz')
expect(mock).toHaveBeenCalledTimes(0)
})
test('YAML_SILENCE_DEPRECATION_WARNINGS', () => {
global.YAML_SILENCE_DEPRECATION_WARNINGS = true
warnFileDeprecation('foo')
warnOptionDeprecation('bar2', 'baz')
expect(mock).toHaveBeenCalledTimes(0)
})
})
test('only warn once', () => {
warnOptionDeprecation('bar3')
warnOptionDeprecation('bar3')
expect(mock).toHaveBeenCalledTimes(1)
})
test('without process.emitWarning', () => {
global.process.emitWarning = null
const cMock = jest.spyOn(console, 'warn').mockImplementation()
try {
warnFileDeprecation('foo')
warnOptionDeprecation('bar4', 'baz')
expect(cMock).toHaveBeenCalledTimes(2)
} finally {
cMock.mockRestore()
}
})
test('tags option', () => {
const doc = new YAML.Document({ tags: [] })
doc.setSchema()
expect(mock).toHaveBeenCalledTimes(1)
})
const files = [
'map',
'pair',
'scalar',
'schema',
'seq',
'types/binary',
'types/omap',
'types/pairs',
'types/set',
'types/timestamp'
]
const root = path.resolve(__dirname, '../..')
const fileTest = fs.existsSync(path.resolve(root, 'dist')) ? test : test.skip
for (const file of files)
fileTest(`file: ${file}`, () => {
const fp = path.resolve(root, file)
// await import() may fail with ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING due
// to https://github.com/facebook/jest/issues/9430
require(fp)
expect(mock).toHaveBeenCalledTimes(1)
})
})
yaml-1.10.2/tests/doc/foldFlowLines.js000066400000000000000000000311151402322402300175420ustar00rootroot00000000000000import {
foldFlowLines as fold,
FOLD_FLOW,
FOLD_QUOTED
} from '../../src/stringify/foldFlowLines.js'
import { YAML } from '../../src/index.js'
describe('plain', () => {
const src = 'abc def ghi jkl mno pqr stu vwx yz\n'
let onFold
let options
beforeEach(() => {
onFold = jest.fn()
options = { indentAtStart: 0, lineWidth: 10, minContentWidth: 0, onFold }
})
test('pass-through', () => {
options.lineWidth = 40
expect(fold(src, '', FOLD_FLOW, options)).toBe(src)
expect(onFold).not.toHaveBeenCalled()
})
test('simple', () => {
options.lineWidth = 20
expect(fold(src, '', FOLD_FLOW, options)).toBe(
'abc def ghi jkl mno\npqr stu vwx yz\n'
)
expect(onFold).toHaveBeenCalled()
})
test('multiple folds', () => {
expect(fold(src, '', FOLD_FLOW, options)).toBe(
'abc def\nghi jkl\nmno pqr\nstu vwx yz\n'
)
expect(onFold).toHaveBeenCalledTimes(1)
})
test('indent', () => {
expect(fold(src, ' ', FOLD_FLOW, options)).toBe(
'abc def\n ghi jkl\n mno pqr\n stu vwx\n yz\n'
)
})
test('indent > lineWidth', () => {
const indent = ' '
options.lineWidth = 7
const i = '\n' + indent
expect(fold(src, indent, FOLD_FLOW, options)).toBe(
`abc def${i}ghi${i}jkl${i}mno${i}pqr${i}stu${i}vwx${i}yz\n`
)
})
test('indent > lineWidth, with minContentWidth', () => {
const indent = ' '
options.lineWidth = 7
options.minContentWidth = 7
const i = '\n' + indent
expect(fold(src, indent, FOLD_FLOW, options)).toBe(
`abc def${i}ghi jkl${i}mno pqr${i}stu vwx${i}yz\n`
)
})
test('positive indentAtStart', () => {
options.indentAtStart = 8
expect(fold(src, '', FOLD_FLOW, options)).toBe(
'abc\ndef ghi\njkl mno\npqr stu\nvwx yz\n'
)
})
test('negative indentAtStart', () => {
options.indentAtStart = -8
expect(fold(src, '', FOLD_FLOW, options)).toBe(
'abc def ghi jkl\nmno pqr\nstu vwx yz\n'
)
})
test('doubled spaces', () => {
const src2 = 'abc def ghi jkl mno pqr stu vwx yz\n'
expect(fold(src2, '', FOLD_FLOW, options)).toBe(src2)
expect(onFold).not.toHaveBeenCalled()
})
})
describe('double-quoted', () => {
const src = '"abc def ghi jkl mnopqrstuvwxyz\n"'
let onFold
let options
beforeEach(() => {
onFold = jest.fn()
options = {
indent: '',
indentAtStart: 0,
lineWidth: 10,
minContentWidth: 0,
mode: FOLD_QUOTED,
onFold
}
})
test('pass-through', () => {
options.lineWidth = 40
expect(fold(src, '', FOLD_QUOTED, options)).toBe(src)
expect(onFold).not.toHaveBeenCalled()
})
test('simple', () => {
options.lineWidth = 20
expect(fold(src, '', FOLD_QUOTED, options)).toBe(
'"abc def ghi jkl\nmnopqrstuvwxyz\n"'
)
expect(onFold).toHaveBeenCalled()
})
test('multiple folds', () => {
expect(fold(src, '', FOLD_QUOTED, options)).toBe(
'"abc def\nghi jkl\nmnopqrstu\\\nvwxyz\n"'
)
expect(onFold).toHaveBeenCalledTimes(1)
})
test('short lineWidth', () => {
options.lineWidth = 3
expect(fold(src, '', FOLD_QUOTED, options)).toBe(
'"a\\\nbc\ndef\nghi\njkl\nmn\\\nop\\\nqr\\\nst\\\nuv\\\nwx\\\nyz\n"'
)
})
test('doubled spaces', () => {
const src2 = '"abc def ghi jkl mno pqr stu vwx yz\n"'
options.lineWidth = 9
expect(fold(src2, '', FOLD_QUOTED, options)).toBe(
'"abc de\\\nf ghi \\\njkl mno \\\npqr stu \\\nvwx yz\n"'
)
})
test('terminal whitespace', () => {
const src2 = '" \t \t \t \t \tnext \t"'
expect(fold(src2, '', FOLD_QUOTED, options)).toBe(
'" \t \t \t \t \t\\\nnext \t"'
)
})
test('escape longer than lineWidth', () => {
const src2 = `"foo\\U01234567"`
expect(fold(src2, '', FOLD_QUOTED, options)).toBe(src2)
})
describe('Folding double-quoted strings', () => {
describe('eemeli/yaml#48: Split \\" escape in double-quoted string', () => {
test('minimal', () => {
const src2 = '"01234567\\""'
expect(fold(src2, '', FOLD_QUOTED, options)).toBe('"01234567\\\n\\""')
const src3 = '"012345678\\""'
expect(fold(src3, '', FOLD_QUOTED, options)).toBe('"012345678\\\n\\""')
})
test('reported', () => {
const x =
'{"module":"database","props":{"databaseType":"postgresql"},"extra":{},"foo":"bar\'"}'
const str = YAML.stringify({ x })
const doc = YAML.parseDocument(str)
expect(doc.errors).toHaveLength(0)
expect(doc.contents.items[0].value.value).toBe(x)
})
})
describe('eemeli/yaml#57', () => {
test('minimal', () => {
const str = `"0123\\"\\\\ '"`
expect(fold(str, '', FOLD_QUOTED, options)).toBe(`"0123\\"\\\\\n'"`)
})
test('reported', () => {
const key2 = `!""""""""""""""""""""""""""""""""""#"\\ '`
const str = YAML.stringify([{ key2 }])
const res = YAML.parse(str)
expect(res[0].key2).toBe(key2)
})
})
describe('eemeli/yaml#59', () => {
test('minimal', () => {
const str = `"######\\\\P#"`
expect(fold(str, '', FOLD_QUOTED, options)).toBe(`"######\\\\\\\nP#"`)
})
test('reported', () => {
const value =
'>####################################"##########################\'####\\P#'
const str = YAML.stringify({ key: [[value]] })
const doc = YAML.parseDocument(str)
expect(doc.errors).toHaveLength(0)
expect(doc.contents.items[0].value.items[0].items[0].value).toBe(value)
})
})
describe('awslabs/cdk8s#494', () => {
test('slash', () => {
const str = `"1234567\\\\ab"`
expect(fold(str, '', FOLD_QUOTED, options)).toBe(`"1234567\\\n\\\\ab"`)
})
test('null', () => {
const str = `"1234567\\\0ab"`
expect(fold(str, '', FOLD_QUOTED, options)).toBe(`"1234567\\\n\\\0ab"`)
})
test('space', () => {
const str = `"1234567\\ ab"`
expect(fold(str, '', FOLD_QUOTED, options)).toBe(`"1234567\\\n\\ ab"`)
})
})
})
describe('Folding input with excessive start indentation - eemeli/yaml#196', () => {
test('quoted', () => {
options.indentAtStart = 6
options.minContentWidth = 6
expect(fold('"ab cd ef gh"', ' ', FOLD_QUOTED, options)).toBe(
'\n "ab cd ef\n gh"'
)
})
test('plain', () => {
options.indentAtStart = 6
options.minContentWidth = 6
expect(fold('ab cd ef gh', ' ', FOLD_FLOW, options)).toBe(
'\n ab cd ef\n gh'
)
})
test('reported', () => {
const input = {
testgljrisgjsrligjsrligsjrglisrjgrligjsligrjglisjgrlijgsrilgsejrfiwlahflirgjaelfjafil:
'&cLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed nibh ac metus elementum venenatis eu vitae diam. Etiam tristique suscipit mauris. Donec pulvinar sed nunc a gravida. Morbi nulla lacus, gravida eu elementum id, ultricies nec ipsum. Cras bibendum tellus ut mollis malesuada. Maecenas eleifend felis at fermentum hendrerit. Nulla porta vitae erat eget faucibus. Sed egestas viverra magna ac vulputate. Suspendisse vel posuere mauris, accumsan dapibus libero. Curabitur bibendum tellus in ex ultricies, quis tempus magna luctus. Maecenas maximus orci est, id fringilla lorem gravida sit amet. Pellentesque a rutrum lorem. Vestibulum ante ipsum primis in faucibus orci.'
}
expect(YAML.stringify(input)).toBe(
`testgljrisgjsrligjsrligsjrglisrjgrligjsligrjglisjgrlijgsrilgsejrfiwlahflirgjaelfjafil:
"&cLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed nibh ac
metus elementum venenatis eu vitae diam. Etiam tristique suscipit mauris.
Donec pulvinar sed nunc a gravida. Morbi nulla lacus, gravida eu elementum id,
ultricies nec ipsum. Cras bibendum tellus ut mollis malesuada. Maecenas
eleifend felis at fermentum hendrerit. Nulla porta vitae erat eget faucibus.
Sed egestas viverra magna ac vulputate. Suspendisse vel posuere mauris,
accumsan dapibus libero. Curabitur bibendum tellus in ex ultricies, quis
tempus magna luctus. Maecenas maximus orci est, id fringilla lorem gravida sit
amet. Pellentesque a rutrum lorem. Vestibulum ante ipsum primis in faucibus
orci."\n`
)
})
})
})
describe('end-to-end', () => {
let origFoldOptions
beforeAll(() => {
origFoldOptions = YAML.scalarOptions.str.fold
YAML.scalarOptions.str.fold = {
lineWidth: 20,
minContentWidth: 0
}
})
afterAll(() => {
YAML.scalarOptions.str.fold = origFoldOptions
})
test('more-indented folded block', () => {
const src = `> # comment with an excessive length that won't get folded
Text on a line that
should get folded
with a line width of
20 characters.
Indented text
that appears to be
folded but is not.
Text that is prevented from folding due to being more-indented.
Unfolded paragraph.\n`
const doc = YAML.parseDocument(src)
expect(doc.contents.value).toBe(
`Text on a line that should get folded with a line width of 20 characters.
Indented text
that appears to be
folded but is not.
Text that is prevented from folding due to being more-indented.
Unfolded paragraph.\n`
)
expect(String(doc)).toBe(src)
})
test('eemeli/yaml#55', () => {
const str = ' first more-indented line\nnext line\n'
const ys = YAML.stringify(str)
expect(ys).toBe('>1\n first more-indented line\nnext line\n')
})
test('plain string', () => {
const src = `- plain value with
enough length to
fold twice
- plain with comment # that won't get folded\n`
const doc = YAML.parseDocument(src)
expect(doc.contents.items[0].value).toBe(
'plain value with enough length to fold twice'
)
expect(doc.contents.items[1].value).toBe('plain with comment')
expect(String(doc)).toBe(src)
})
test('long line width', () => {
const src = {
lorem:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In laoreet massa eros, dignissim aliquam nunc elementum sit amet. Mauris pulvinar nunc eget ante sodales viverra. Vivamus quis convallis sapien, ut auctor magna. Cras volutpat erat eu lacus luctus facilisis. Aenean sapien leo, auctor sed tincidunt at, scelerisque a urna. Nunc ullamcorper, libero non mollis aliquet, nulla diam lobortis neque, ac rutrum dui nibh iaculis lectus. Aenean lobortis interdum arcu eget sollicitudin.\n\nDuis quam enim, ultricies a enim non, tincidunt lobortis ipsum. Mauris condimentum ultrices eros rutrum euismod. Fusce et mi eget quam dapibus blandit. Maecenas sodales tempor euismod. Phasellus vulputate purus felis, eleifend ullamcorper tortor semper sit amet. Sed nunc quam, iaculis et neque sit amet, consequat egestas lectus. Aenean dapibus lorem sed accumsan porttitor. Curabitur eu magna congue, mattis urna ac, lacinia eros. In in iaculis justo, nec faucibus enim. Fusce id viverra purus, nec ultricies mi. Aliquam eu risus risus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. \n'
}
YAML.scalarOptions.str.fold.lineWidth = 1000
const ysWithLineWidthGreater = YAML.stringify(src)
YAML.scalarOptions.str.fold.lineWidth = 0
const ysWithUnlimitedLength = YAML.stringify(src)
YAML.scalarOptions.str.fold.lineWidth = -1
const ysWithUnlimitedLength2 = YAML.stringify(src)
expect(ysWithLineWidthGreater).toBe(
'lorem: |\n' +
' Lorem ipsum dolor sit amet, consectetur adipiscing elit. In laoreet massa eros, dignissim aliquam nunc elementum sit amet. Mauris pulvinar nunc eget ante sodales viverra. Vivamus quis convallis sapien, ut auctor magna. Cras volutpat erat eu lacus luctus facilisis. Aenean sapien leo, auctor sed tincidunt at, scelerisque a urna. Nunc ullamcorper, libero non mollis aliquet, nulla diam lobortis neque, ac rutrum dui nibh iaculis lectus. Aenean lobortis interdum arcu eget sollicitudin.\n' +
'\n' +
' Duis quam enim, ultricies a enim non, tincidunt lobortis ipsum. Mauris condimentum ultrices eros rutrum euismod. Fusce et mi eget quam dapibus blandit. Maecenas sodales tempor euismod. Phasellus vulputate purus felis, eleifend ullamcorper tortor semper sit amet. Sed nunc quam, iaculis et neque sit amet, consequat egestas lectus. Aenean dapibus lorem sed accumsan porttitor. Curabitur eu magna congue, mattis urna ac, lacinia eros. In in iaculis justo, nec faucibus enim. Fusce id viverra purus, nec ultricies mi. Aliquam eu risus risus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. \n'
)
expect(ysWithUnlimitedLength).toBe(ysWithLineWidthGreater)
expect(ysWithUnlimitedLength2).toBe(ysWithLineWidthGreater)
})
})
yaml-1.10.2/tests/doc/parse.js000066400000000000000000000467171402322402300161230ustar00rootroot00000000000000import fs from 'fs'
import path from 'path'
import YAML from '../../index.js'
describe('tags', () => {
describe('implicit tags', () => {
test('plain string', () => {
const doc = YAML.parseDocument('foo')
expect(doc.contents.tag).toBeUndefined()
expect(doc.contents.value).toBe('foo')
})
test('quoted string', () => {
const doc = YAML.parseDocument('"foo"')
expect(doc.contents.tag).toBeUndefined()
expect(doc.contents.value).toBe('foo')
})
test('flow map', () => {
const doc = YAML.parseDocument('{ foo }')
expect(doc.contents.tag).toBeUndefined()
expect(doc.contents.toJSON()).toMatchObject({ foo: null })
})
test('flow seq', () => {
const doc = YAML.parseDocument('[ foo ]')
expect(doc.contents.tag).toBeUndefined()
expect(doc.contents.toJSON()).toMatchObject(['foo'])
})
test('block map', () => {
const doc = YAML.parseDocument('foo:\n')
expect(doc.contents.tag).toBeUndefined()
expect(doc.contents.toJSON()).toMatchObject({ foo: null })
})
test('block seq', () => {
const doc = YAML.parseDocument('- foo')
expect(doc.contents.tag).toBeUndefined()
expect(doc.contents.toJSON()).toMatchObject(['foo'])
})
})
describe('explicit tags', () => {
test('plain string', () => {
const doc = YAML.parseDocument('!!str foo')
expect(doc.contents.tag).toBe('tag:yaml.org,2002:str')
expect(doc.contents.value).toBe('foo')
})
test('quoted string', () => {
const doc = YAML.parseDocument('!!str "foo"')
expect(doc.contents.tag).toBe('tag:yaml.org,2002:str')
expect(doc.contents.value).toBe('foo')
})
test('flow map', () => {
const doc = YAML.parseDocument('!!map { foo }')
expect(doc.contents.tag).toBe('tag:yaml.org,2002:map')
expect(doc.contents.toJSON()).toMatchObject({ foo: null })
})
test('flow seq', () => {
const doc = YAML.parseDocument('!!seq [ foo ]')
expect(doc.contents.tag).toBe('tag:yaml.org,2002:seq')
expect(doc.contents.toJSON()).toMatchObject(['foo'])
})
test('block map', () => {
const doc = YAML.parseDocument('!!map\nfoo:\n')
expect(doc.contents.tag).toBe('tag:yaml.org,2002:map')
expect(doc.contents.toJSON()).toMatchObject({ foo: null })
})
test('block seq', () => {
const doc = YAML.parseDocument('!!seq\n- foo')
expect(doc.contents.tag).toBe('tag:yaml.org,2002:seq')
expect(doc.contents.toJSON()).toMatchObject(['foo'])
})
})
test('eemeli/yaml#97', () => {
const doc = YAML.parseDocument('foo: !!float 3.0')
expect(String(doc)).toBe('foo: !!float 3.0\n')
})
})
describe('number types', () => {
describe('asBigInt: false', () => {
test('Version 1.1', () => {
const src = `
- 0b10_10
- 0123
- -00
- 123_456
- 3.1e+2
- 5.1_2_3E-1
- 4.02
- 4.20
- .42
- 00.4`
const doc = YAML.parseDocument(src, { version: '1.1' })
expect(doc.contents.items).toMatchObject([
{ value: 10, format: 'BIN' },
{ value: 83, format: 'OCT' },
{ value: -0, format: 'OCT' },
{ value: 123456 },
{ value: 310, format: 'EXP' },
{ value: 0.5123, format: 'EXP' },
{ value: 4.02 },
{ value: 4.2, minFractionDigits: 2 },
{ value: 0.42 },
{ value: 0.4 }
])
expect(doc.contents.items[3]).not.toHaveProperty('format')
expect(doc.contents.items[6]).not.toHaveProperty('format')
expect(doc.contents.items[6]).not.toHaveProperty('minFractionDigits')
expect(doc.contents.items[7]).not.toHaveProperty('format')
})
test('Version 1.2', () => {
const src = `
- 0o123
- 0o0
- 123456
- 3.1e+2
- 5.123E-1
- 4.02
- 4.20
- .42
- 00.4`
const doc = YAML.parseDocument(src, { version: '1.2' })
expect(doc.contents.items).toMatchObject([
{ value: 83, format: 'OCT' },
{ value: 0, format: 'OCT' },
{ value: 123456 },
{ value: 310, format: 'EXP' },
{ value: 0.5123, format: 'EXP' },
{ value: 4.02 },
{ value: 4.2, minFractionDigits: 2 },
{ value: 0.42 },
{ value: 0.4 }
])
expect(doc.contents.items[2]).not.toHaveProperty('format')
expect(doc.contents.items[5]).not.toHaveProperty('format')
expect(doc.contents.items[5]).not.toHaveProperty('minFractionDigits')
expect(doc.contents.items[6]).not.toHaveProperty('format')
})
})
describe('asBigInt: true', () => {
let prevAsBigInt
beforeAll(() => {
prevAsBigInt = YAML.scalarOptions.int.asBigInt
YAML.scalarOptions.int.asBigInt = true
})
afterAll(() => {
YAML.scalarOptions.int.asBigInt = prevAsBigInt
})
test('Version 1.1', () => {
const src = `
- 0b10_10
- 0123
- -00
- 123_456
- 3.1e+2
- 5.1_2_3E-1
- 4.02`
const doc = YAML.parseDocument(src, { version: '1.1' })
expect(doc.contents.items).toMatchObject([
{ value: 10n, format: 'BIN' },
{ value: 83n, format: 'OCT' },
{ value: 0n, format: 'OCT' },
{ value: 123456n },
{ value: 310, format: 'EXP' },
{ value: 0.5123, format: 'EXP' },
{ value: 4.02 }
])
expect(doc.contents.items[3]).not.toHaveProperty('format')
expect(doc.contents.items[6]).not.toHaveProperty('format')
expect(doc.contents.items[6]).not.toHaveProperty('minFractionDigits')
})
test('Version 1.2', () => {
const src = `
- 0o123
- 0o0
- 123456
- 3.1e+2
- 5.123E-1
- 4.02`
const doc = YAML.parseDocument(src, { version: '1.2' })
expect(doc.contents.items).toMatchObject([
{ value: 83n, format: 'OCT' },
{ value: 0n, format: 'OCT' },
{ value: 123456n },
{ value: 310, format: 'EXP' },
{ value: 0.5123, format: 'EXP' },
{ value: 4.02 }
])
expect(doc.contents.items[2]).not.toHaveProperty('format')
expect(doc.contents.items[5]).not.toHaveProperty('format')
expect(doc.contents.items[5]).not.toHaveProperty('minFractionDigits')
})
})
})
test('eemeli/yaml#2', () => {
const src = `
aliases:
- docker:
- image: circleci/node:8.11.2
- key: repository-{{ .Revision }}\n`
expect(YAML.parse(src)).toMatchObject({
aliases: [
{ docker: [{ image: 'circleci/node:8.11.2' }] },
{ key: 'repository-{{ .Revision }}' }
]
})
})
test('eemeli/yaml#3', () => {
const src = '{ ? : 123 }'
const doc = YAML.parseDocument(src)
expect(doc.errors).toHaveLength(0)
expect(doc.contents.items[0].key).toBeNull()
expect(doc.contents.items[0].value.value).toBe(123)
})
describe('eemeli/yaml#10', () => {
test('reported', () => {
const src = `
aliases:
- restore_cache:
- v1-yarn-cache
- save_cache:
paths:
- ~/.cache/yarn
- &restore_deps_cache
keys:
- v1-deps-cache-{{ checksum "yarn.lock" }}\n`
const docs = YAML.parseAllDocuments(src)
expect(docs).toHaveLength(1)
expect(docs[0].errors).toHaveLength(0)
})
test('complete file', () => {
const src = fs.readFileSync(
path.resolve(__dirname, '../artifacts/prettier-circleci-config.yml'),
'utf8'
)
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
aliases: [
{ restore_cache: { keys: ['v1-yarn-cache'] } },
{ save_cache: { key: 'v1-yarn-cache', paths: ['~/.cache/yarn'] } },
{
restore_cache: { keys: ['v1-deps-cache-{{ checksum "yarn.lock" }}'] }
},
{
save_cache: {
key: 'v1-yarn-deps-{{ checksum "yarn.lock" }}',
paths: ['node_modules']
}
},
{
docker: [{ image: 'circleci/node:9' }],
working_directory: '~/prettier'
}
],
jobs: {
build_prod: {
'<<': {
docker: [{ image: 'circleci/node:9' }],
working_directory: '~/prettier'
},
environment: { NODE_ENV: 'production' },
steps: [
{ attach_workspace: { at: '~/prettier' } },
{ run: 'yarn build' },
{ persist_to_workspace: { paths: ['dist'], root: '.' } },
{ store_artifacts: { path: '~/prettier/dist' } }
]
},
checkout_code: {
'<<': {
docker: [{ image: 'circleci/node:9' }],
working_directory: '~/prettier'
},
steps: [
'checkout',
{ restore_cache: { keys: ['v1-yarn-cache'] } },
{
restore_cache: {
keys: ['v1-deps-cache-{{ checksum "yarn.lock" }}']
}
},
{ run: 'yarn install' },
{ run: 'yarn check-deps' },
{
save_cache: {
key: 'v1-yarn-deps-{{ checksum "yarn.lock" }}',
paths: ['node_modules']
}
},
{ save_cache: { key: 'v1-yarn-cache', paths: ['~/.cache/yarn'] } },
{ persist_to_workspace: { paths: ['.'], root: '.' } }
]
},
test_prod_node4: {
'<<': {
docker: [{ image: 'circleci/node:9' }],
working_directory: '~/prettier'
},
docker: [{ image: 'circleci/node:4' }],
steps: [
{ attach_workspace: { at: '~/prettier' } },
{ run: 'yarn test:dist' }
]
},
test_prod_node9: {
'<<': {
docker: [{ image: 'circleci/node:9' }],
working_directory: '~/prettier'
},
steps: [
{ attach_workspace: { at: '~/prettier' } },
{ run: 'yarn test:dist' }
]
}
},
version: 2,
workflows: {
prod: {
jobs: [
'checkout_code',
{ build_prod: { requires: ['checkout_code'] } },
{ test_prod_node4: { requires: ['build_prod'] } },
{ test_prod_node9: { requires: ['build_prod'] } }
]
},
version: 2
}
})
expect(String(doc)).toBe(src)
})
test('minimal', () => {
const src = `
- a
- b:
- c
- d`
const docs = YAML.parseAllDocuments(src)
expect(docs[0].errors).toHaveLength(0)
expect(docs[0].toJSON()).toMatchObject(['a', { b: ['c'] }, 'd'])
})
})
describe('eemeli/yaml#l19', () => {
test('map', () => {
const src = 'a:\n # 123'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('? a\n\n# 123\n')
})
test('seq', () => {
const src = '- a: # 123'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('- ? a # 123\n')
})
})
test('eemeli/yaml#32', () => {
expect(YAML.parse('[ ? ]')).toEqual([{ '': null }])
expect(YAML.parse('[? 123]')).toEqual([{ 123: null }])
expect(YAML.parse('[ 123, ? ]')).toEqual([123, { '': null }])
expect(YAML.parse('[ 123, ? 456 ]')).toEqual([123, { 456: null }])
})
test('eemeli/yaml#34', () => {
expect(YAML.parse('|')).toEqual('')
})
test('eemeli/yaml#36', () => {
expect(() => YAML.parse(`{ x: ${'x'.repeat(1024)} }`)).not.toThrowError()
})
test('eemeli/yaml#38', () => {
const src = `
content:
arrayOfArray:
-
- first: John
last: Black
- first: Brian
last: Green
-
- first: Mark
last: Orange
-
- first: Adam
last: Grey
`
expect(YAML.parse(src)).toEqual({
content: {
arrayOfArray: [
[
{ first: 'John', last: 'Black' },
{ first: 'Brian', last: 'Green' }
],
[{ first: 'Mark', last: 'Orange' }],
[{ first: 'Adam', last: 'Grey' }]
]
}
})
})
test('eemeli/yaml#120', () => {
const src = `test:
- test1: test1
test2:`
expect(YAML.parse(src)).toEqual({
test: [{ test1: 'test1', test2: null }]
})
})
test('comment between key & : in flow collection (eemeli/yaml#149)', () => {
const src1 = '{"a"\n#c\n:1}'
expect(YAML.parse(src1)).toEqual({ a: 1 })
const src2 = '{a\n#c\n:1}'
expect(() => YAML.parse(src2)).toThrow(
'Indicator : missing in flow map entry'
)
})
test('empty node should respect setOrigRanges()', () => {
const cst = YAML.parseCST('\r\na: # 123\r\n')
expect(cst).toHaveLength(1)
expect(cst.setOrigRanges()).toBe(true)
const doc = new YAML.Document({ keepCstNodes: true }).parse(cst[0])
const empty = doc.contents.items[0].value.cstNode
expect(empty.range).toEqual({ start: 3, end: 3, origStart: 4, origEnd: 4 })
})
test('parse an empty string as null', () => {
const value = YAML.parse('')
expect(value).toBeNull()
})
test('comment on single-line value in flow map', () => {
const src = '{a: 1 #c\n}'
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe('{\n a: 1 #c\n}\n')
})
describe('maps with no values', () => {
test('block map', () => {
const src = `a: null\n? b #c`
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(`? a\n? b #c\n`)
doc.contents.items[1].value = 'x'
expect(String(doc)).toBe(`a: null\n? b #c\n: x\n`)
})
test('flow map', () => {
const src = `{\na: null,\n? b\n}`
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(`{ a, b }\n`)
doc.contents.items[1].comment = 'c'
expect(String(doc)).toBe(`{\n a,\n b #c\n}\n`)
doc.contents.items[1].value = 'x'
expect(String(doc)).toBe(`{\n a: null,\n b: #c\n x\n}\n`)
})
})
describe('collection item with anchor followed by empty line (#242)', () => {
test('reported 1', () => {
const src = `
key1: &default
subkey1: value1
key2:
<<: *default\n`
expect(YAML.parse(src, { merge: true })).toMatchObject({
key1: { subkey1: 'value1' },
key2: { subkey1: 'value1' }
})
})
test('reported 2', () => {
const src = `
key1: &default
# This key ...
subkey1: value1
key2:
<<: *default\n`
expect(YAML.parse(src, { merge: true })).toMatchObject({
key1: { subkey1: 'value1' },
key2: { subkey1: 'value1' }
})
})
test('reported 3', () => {
const src = `
key1: &default
# This key ...
subkey1: value1
key2:
<<: *default\n`
expect(YAML.parse(src, { merge: true })).toMatchObject({
key1: { subkey1: 'value1' },
key2: { subkey1: 'value1' }
})
})
test('minimal with anchor', () => {
const src = '- &a\n\n foo'
expect(YAML.parse(src)).toMatchObject(['foo'])
})
test('minimal with tag', () => {
const src = '- !!str\n\n foo'
expect(YAML.parse(src)).toMatchObject(['foo'])
})
})
describe('Excessive entity expansion attacks', () => {
const root = path.resolve(__dirname, '../artifacts/pr104')
const src1 = fs.readFileSync(path.resolve(root, 'case1.yml'), 'utf8')
const src2 = fs.readFileSync(path.resolve(root, 'case2.yml'), 'utf8')
const srcB = fs.readFileSync(path.resolve(root, 'billion-laughs.yml'), 'utf8')
const srcQ = fs.readFileSync(path.resolve(root, 'quadratic.yml'), 'utf8')
let origEmitWarning
beforeAll(() => {
origEmitWarning = process.emitWarning
})
afterAll(() => {
process.emitWarning = origEmitWarning
})
describe('Limit count by default', () => {
for (const [name, src] of [
['js-yaml case 1', src1],
['js-yaml case 2', src2],
['billion laughs', srcB],
['quadratic expansion', srcQ]
]) {
test(name, () => {
process.emitWarning = jest.fn()
expect(() => YAML.parse(src)).toThrow(/Excessive alias count/)
})
}
})
describe('Work sensibly even with disabled limits', () => {
test('js-yaml case 1', () => {
process.emitWarning = jest.fn()
const obj = YAML.parse(src1, { maxAliasCount: -1 })
expect(obj).toMatchObject({})
const key = Object.keys(obj)[0]
expect(key.length).toBeGreaterThan(2000)
expect(key.length).toBeLessThan(8000)
expect(process.emitWarning).toHaveBeenCalled()
})
test('js-yaml case 2', () => {
const arr = YAML.parse(src2, { maxAliasCount: -1 })
expect(arr).toHaveLength(2)
const key = Object.keys(arr[1])[0]
expect(key).toBe('*id057')
})
test('billion laughs', () => {
const obj = YAML.parse(srcB, { maxAliasCount: -1 })
expect(Object.keys(obj)).toHaveLength(9)
})
test('quadratic expansion', () => {
const obj = YAML.parse(srcQ, { maxAliasCount: -1 })
expect(Object.keys(obj)).toHaveLength(11)
})
})
describe('maxAliasCount limits', () => {
const rows = [
'a: &a [lol, lol, lol, lol, lol, lol, lol, lol, lol]',
'b: &b [*a, *a, *a, *a, *a, *a, *a, *a, *a]',
'c: &c [*b, *b, *b, *b]',
'd: &d [*c, *c]',
'e: [*d]'
]
test(`depth 0: maxAliasCount 1 passes`, () => {
expect(() => YAML.parse(rows[0], { maxAliasCount: 1 })).not.toThrow()
})
test(`depth 1: maxAliasCount 1 fails on first alias`, () => {
const src = `${rows[0]}\nb: *a`
expect(() => YAML.parse(src, { maxAliasCount: 1 })).toThrow()
})
const limits = [10, 50, 150, 300]
for (let i = 0; i < 4; ++i) {
const src = rows.slice(0, i + 2).join('\n')
test(`depth ${i + 1}: maxAliasCount ${limits[i] - 1} fails`, () => {
expect(() =>
YAML.parse(src, { maxAliasCount: limits[i] - 1 })
).toThrow()
})
test(`depth ${i + 1}: maxAliasCount ${limits[i]} passes`, () => {
expect(() =>
YAML.parse(src, { maxAliasCount: limits[i] })
).not.toThrow()
})
}
})
})
test('Anchor for empty node (6KGN)', () => {
const src = `a: &anchor\nb: *anchor`
expect(YAML.parse(src)).toMatchObject({ a: null, b: null })
})
describe('handling complex keys', () => {
let origEmitWarning
beforeAll(() => {
origEmitWarning = process.emitWarning
})
afterAll(() => {
process.emitWarning = origEmitWarning
})
test('add warning to doc when casting key in collection to string', () => {
const doc = YAML.parseDocument('[foo]: bar')
const message =
'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'
expect(doc.warnings).toMatchObject([{ message }])
})
test('do not add warning when using mapIsMap: true', () => {
const doc = YAML.parseDocument('[foo]: bar', { mapAsMap: true })
expect(doc.warnings).toMatchObject([])
})
test('warn when casting key in collection to string', () => {
process.emitWarning = jest.fn()
const obj = YAML.parse('[foo]: bar')
expect(Object.keys(obj)).toMatchObject(['[ foo ]'])
expect(process.emitWarning).toHaveBeenCalled()
})
test('warn when casting key in sequence to string', () => {
process.emitWarning = jest.fn()
const obj = YAML.parse('[ [foo]: bar ]')
expect(obj).toMatchObject([{ '[ foo ]': 'bar' }])
expect(process.emitWarning).toHaveBeenCalled()
})
})
test('Document.toJSON(null, onAnchor)', () => {
const src = 'foo: &a [&v foo]\nbar: *a\nbaz: *a\n'
const doc = YAML.parseDocument(src)
const onAnchor = jest.fn()
const res = doc.toJSON(null, onAnchor)
expect(onAnchor.mock.calls).toMatchObject([
[res.foo, 3],
['foo', 1]
])
})
describe('__proto__ as mapping key', () => {
test('plain object', () => {
const src = '{ __proto__: [42] }'
const obj = YAML.parse(src)
expect(Array.isArray(obj)).toBe(false)
expect(obj.hasOwnProperty('__proto__')).toBe(true)
expect(obj).not.toHaveProperty('length')
expect(JSON.stringify(obj)).toBe('{"__proto__":[42]}')
})
test('with merge key', () => {
const src = '- &A { __proto__: [42] }\n- { <<: *A }\n'
const obj = YAML.parse(src, { merge: true })
expect(obj[0].hasOwnProperty('__proto__')).toBe(true)
expect(obj[1].hasOwnProperty('__proto__')).toBe(true)
expect(JSON.stringify(obj)).toBe('[{"__proto__":[42]},{"__proto__":[42]}]')
})
})
yaml-1.10.2/tests/doc/stringify.js000066400000000000000000000451411402322402300170150ustar00rootroot00000000000000/* global BigInt */
import { source } from 'common-tags'
import YAML from '../../index.js'
import { Pair } from '../../types.js'
import { Type, stringifyString } from '../../util.js'
for (const [name, version] of [
['YAML 1.1', '1.1'],
['YAML 1.2', '1.2']
]) {
describe(name, () => {
let origVersion
beforeAll(() => {
origVersion = YAML.defaultOptions.version
YAML.defaultOptions.version = version
})
afterAll(() => {
YAML.defaultOptions.version = origVersion
})
test('undefined', () => {
expect(YAML.stringify()).toBe('\n')
})
test('null', () => {
expect(YAML.stringify(null)).toBe('null\n')
})
describe('boolean', () => {
test('true', () => {
expect(YAML.stringify(true)).toBe('true\n')
})
test('false', () => {
expect(YAML.stringify(false)).toBe('false\n')
})
})
describe('number', () => {
test('integer', () => {
expect(YAML.stringify(3)).toBe('3\n')
})
test('float', () => {
expect(YAML.stringify(3.141)).toBe('3.141\n')
})
test('zero', () => {
expect(YAML.stringify(0)).toBe('0\n')
})
test('NaN', () => {
expect(YAML.stringify(NaN)).toBe('.nan\n')
})
test('float with trailing zeros', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode(3, true)
doc.contents.minFractionDigits = 2
expect(String(doc)).toBe('3.00\n')
})
test('scientific float ignores minFractionDigits', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode(3, true)
doc.contents.format = 'EXP'
doc.contents.minFractionDigits = 2
expect(String(doc)).toBe('3e+0\n')
})
test('integer with HEX format', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode(42, true)
doc.contents.format = 'HEX'
expect(String(doc)).toBe('0x2a\n')
})
test('float with HEX format', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode(4.2, true)
doc.contents.format = 'HEX'
expect(String(doc)).toBe('4.2\n')
})
test('negative integer with HEX format', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode(-42, true)
doc.contents.format = 'HEX'
const exp = version === '1.2' ? '-42\n' : '-0x2a\n'
expect(String(doc)).toBe(exp)
})
test('BigInt', () => {
expect(YAML.stringify(BigInt('-42'))).toBe('-42\n')
})
test('BigInt with HEX format', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode(BigInt('42'), true)
doc.contents.format = 'HEX'
expect(String(doc)).toBe('0x2a\n')
})
test('BigInt with OCT format', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode(BigInt('42'), true)
doc.contents.format = 'OCT'
const exp = version === '1.2' ? '0o52\n' : '052\n'
expect(String(doc)).toBe(exp)
})
test('negative BigInt with OCT format', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode(BigInt('-42'), true)
doc.contents.format = 'OCT'
const exp = version === '1.2' ? '-42\n' : '-052\n'
expect(String(doc)).toBe(exp)
})
})
describe('string', () => {
let origFoldOptions
beforeAll(() => {
origFoldOptions = YAML.scalarOptions.str.fold
YAML.scalarOptions.str.fold = {
lineWidth: 20,
minContentWidth: 0
}
})
afterAll(() => {
YAML.scalarOptions.str.fold = origFoldOptions
})
test('plain', () => {
expect(YAML.stringify('STR')).toBe('STR\n')
})
test('double-quoted', () => {
expect(YAML.stringify('"x"')).toBe('\'"x"\'\n')
})
test('single-quoted', () => {
expect(YAML.stringify("'x'")).toBe('"\'x\'"\n')
})
test('escaped', () => {
expect(YAML.stringify('null: \u0000')).toBe('"null: \\0"\n')
})
test('short multiline', () => {
expect(YAML.stringify('blah\nblah\nblah')).toBe(
'|-\nblah\nblah\nblah\n'
)
})
test('long multiline', () => {
expect(
YAML.stringify(
'blah blah\nblah blah blah blah blah blah blah blah blah blah\n'
)
).toBe(`>
blah blah
blah blah blah blah
blah blah blah blah
blah blah\n`)
})
test('long line in map', () => {
const foo = 'fuzz'.repeat(16)
const doc = new YAML.Document()
doc.contents = YAML.createNode({ foo })
for (const node of doc.contents.items)
node.value.type = Type.QUOTE_DOUBLE
expect(
String(doc)
.split('\n')
.map(line => line.length)
).toMatchObject([20, 20, 20, 20, 0])
})
test('long line in sequence', () => {
const foo = 'fuzz'.repeat(16)
const doc = new YAML.Document()
doc.contents = YAML.createNode([foo])
for (const node of doc.contents.items) node.type = Type.QUOTE_DOUBLE
expect(
String(doc)
.split('\n')
.map(line => line.length)
).toMatchObject([20, 20, 20, 17, 0])
})
test('long line in sequence in map', () => {
const foo = 'fuzz'.repeat(16)
const doc = new YAML.Document()
doc.contents = YAML.createNode({ foo: [foo] })
const seq = doc.contents.items[0].value
for (const node of seq.items) node.type = Type.QUOTE_DOUBLE
expect(
String(doc)
.split('\n')
.map(line => line.length)
).toMatchObject([4, 20, 20, 20, 20, 10, 0])
})
})
})
}
describe('timestamp-like string (YAML 1.1)', () => {
for (const [name, str] of [
['canonical', '2001-12-15T02:59:43.1Z'],
['validIso8601', '2001-12-14t21:59:43.10-05:00'],
['spaceSeparated', '2001-12-14 21:59:43.10 -5'],
['noTimeZone', '2001-12-15 2:59:43.10']
]) {
test(name, () => {
const res = YAML.stringify(str, { version: '1.1' })
expect(res).toBe(`"${str}"\n`)
expect(YAML.parse(res, { version: '1.1' })).toBe(str)
})
}
})
describe('circular references', () => {
test('parent at root', () => {
const map = { foo: 'bar' }
map.map = map
expect(YAML.stringify(map)).toBe(`&a1
foo: bar
map: *a1\n`)
})
test('ancestor at root', () => {
const baz = {}
const map = { foo: { bar: { baz } } }
baz.map = map
expect(YAML.stringify(map)).toBe(`&a1
foo:
bar:
baz:
map: *a1\n`)
})
test('sibling sequences', () => {
const one = ['one']
const two = ['two']
const seq = [one, two, one, one, two]
expect(YAML.stringify(seq)).toBe(`- &a1
- one
- &a2
- two
- *a1
- *a1
- *a2\n`)
})
test('further relatives', () => {
const baz = { a: 1 }
const seq = [{ foo: { bar: { baz } } }, { fe: { fi: { fo: { baz } } } }]
expect(YAML.stringify(seq)).toBe(`- foo:
bar:
baz:
&a1
a: 1
- fe:
fi:
fo:
baz: *a1\n`)
})
test('only match objects', () => {
const date = new Date('2001-12-15T02:59:43.1Z')
const seq = ['a', 'a', 1, 1, true, true, date, date]
expect(YAML.stringify(seq, { anchorPrefix: 'foo', version: '1.1' }))
.toBe(`- a
- a
- 1
- 1
- true
- true
- &foo1 2001-12-15T02:59:43.100Z
- *foo1\n`)
})
test('do not match nulls', () => {
const set = { a: null, b: null }
expect(YAML.stringify(set)).toBe('? a\n? b\n')
})
})
test('array', () => {
const array = [3, ['four', 5]]
const str = YAML.stringify(array)
expect(str).toBe(
`- 3
- - four
- 5\n`
)
})
describe('maps', () => {
test('JS Object', () => {
const object = { x: 3, y: [4], z: { w: 'five', v: 6 } }
const str = YAML.stringify(object)
expect(str).toBe(
`x: 3
y:
- 4
z:
w: five
v: 6\n`
)
})
test('Map with non-Pair item', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode({ x: 3, y: 4 })
expect(String(doc)).toBe('x: 3\ny: 4\n')
doc.contents.items.push('TEST')
expect(() => String(doc)).toThrow(/^Map items must all be pairs.*TEST/)
})
test('Keep block scalar types for keys', () => {
const doc = YAML.parseDocument('? >+ #comment\n foo\n\n: bar')
expect(String(doc)).toBe('? >+ #comment\n foo\n\n: bar\n')
})
test('Document as key', () => {
const doc1 = new YAML.Document()
doc1.contents = YAML.createNode({ a: 1 })
const doc2 = new YAML.Document()
doc2.contents = YAML.createNode({ b: 2, c: 3 })
doc1.add(doc2)
expect(String(doc1)).toBe('a: 1\n? b: 2\n c: 3\n: null\n')
})
})
test('eemeli/yaml#43: Quoting colons', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode({ key: ':' })
const str = String(doc)
expect(() => YAML.parse(str)).not.toThrow()
expect(str).toBe('key: ":"\n')
})
test('eemeli/yaml#52: Quoting item markers', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode({ key: '-' })
const str = String(doc)
expect(() => YAML.parse(str)).not.toThrow()
expect(str).toBe('key: "-"\n')
doc.contents = YAML.createNode({ key: '?' })
const str2 = String(doc)
expect(() => YAML.parse(str2)).not.toThrow()
expect(str2).toBe('key: "?"\n')
})
describe('eemeli/yaml#80: custom tags', () => {
const regexp = {
identify: value => value instanceof RegExp,
tag: '!re',
resolve(doc, cst) {
const match = cst.strValue.match(/^\/([\s\S]+)\/([gimuy]*)$/)
return new RegExp(match[1], match[2])
}
}
const sharedSymbol = {
identify: value => value.constructor === Symbol,
tag: '!symbol/shared',
resolve: (doc, cst) => Symbol.for(cst.strValue),
stringify(item, ctx, onComment, onChompKeep) {
const key = Symbol.keyFor(item.value)
if (key === undefined)
throw new Error('Only shared symbols are supported')
return stringifyString({ value: key }, ctx, onComment, onChompKeep)
}
}
beforeAll(() => {
YAML.defaultOptions.customTags = [regexp, sharedSymbol]
})
afterAll(() => {
YAML.defaultOptions.customTags = []
})
describe('RegExp', () => {
test('stringify as plain scalar', () => {
const str = YAML.stringify(/re/g)
expect(str).toBe('!re /re/g\n')
const res = YAML.parse(str)
expect(res).toBeInstanceOf(RegExp)
})
test('stringify as quoted scalar', () => {
const str = YAML.stringify(/re: /g)
expect(str).toBe('!re "/re: /g"\n')
const res = YAML.parse(str)
expect(res).toBeInstanceOf(RegExp)
})
test('parse plain string as string', () => {
const res = YAML.parse('/re/g')
expect(res).toBe('/re/g')
})
test('parse quoted string as string', () => {
const res = YAML.parse('"/re/g"')
expect(res).toBe('/re/g')
})
})
describe('Symbol', () => {
test('stringify as plain scalar', () => {
const symbol = Symbol.for('foo')
const str = YAML.stringify(symbol)
expect(str).toBe('!symbol/shared foo\n')
const res = YAML.parse(str)
expect(res).toBe(symbol)
})
test('stringify as block scalar', () => {
const symbol = Symbol.for('foo\nbar')
const str = YAML.stringify(symbol)
expect(str).toBe('!symbol/shared |-\nfoo\nbar\n')
const res = YAML.parse(str)
expect(res).toBe(symbol)
})
})
})
test('reserved names', () => {
const str = YAML.stringify({ comment: 'foo' })
expect(str).toBe('comment: foo\n')
})
describe('eemeli/yaml#85', () => {
test('reported', () => {
const str = `testArray: []\ntestObject: {}\ntestArray2: [ "hello" ]\n`
const doc = YAML.parseDocument(str)
expect(String(doc)).toBe(str)
})
test('multiline flow collection', () => {
const str = `foo: [ bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar, bar ]`
const doc = YAML.parseDocument(str)
const str2 = String(doc)
expect(str2).toMatch(/^foo:\n {2}\[\n {4}bar/)
expect(YAML.parse(str2)).toMatchObject(doc.toJSON())
})
})
test('eemeli/yaml#87', () => {
const doc = YAML.parseDocument('test: x')
doc.set('test', { a: 'test' })
expect(String(doc)).toBe('test:\n a: test\n')
})
describe('simple keys', () => {
test('key with null value', () => {
const doc = YAML.parseDocument('~: ~')
expect(String(doc)).toBe('? null\n')
doc.options.simpleKeys = true
expect(String(doc)).toBe('null: null\n')
})
test('key with block scalar value', () => {
const doc = YAML.parseDocument('foo: bar')
doc.contents.items[0].key.type = 'BLOCK_LITERAL'
expect(String(doc)).toBe('? |-\n foo\n: bar\n')
doc.options.simpleKeys = true
expect(String(doc)).toBe('"foo": bar\n')
})
test('key with comment', () => {
const doc = YAML.parseDocument('foo: bar')
doc.contents.items[0].key.comment = 'FOO'
expect(String(doc)).toBe('? foo #FOO\n: bar\n')
doc.options.simpleKeys = true
expect(() => String(doc)).toThrow(
/With simple keys, key nodes cannot have comments/
)
})
test('key with collection value', () => {
const doc = YAML.parseDocument('[foo]: bar')
expect(String(doc)).toBe('? [ foo ]\n: bar\n')
doc.options.simpleKeys = true
expect(() => String(doc)).toThrow(
/With simple keys, collection cannot be used as a key value/
)
})
test('key value lingth > 1024', () => {
let str = `
? ${new Array(1026).join('a')}
: longkey`
const doc = YAML.parseDocument(str)
expect(String(doc)).toBe(`? ${new Array(1026).join('a')}\n: longkey\n`)
doc.options.simpleKeys = true
expect(() => String(doc)).toThrow(
/With simple keys, single line scalar must not span more than 1024 characters/
)
})
})
test('eemeli/yaml#128: YAML node inside object', () => {
const seq = YAML.createNode(['a'])
seq.commentBefore = 'sc'
const map = YAML.createNode({ foo: 'bar', seq })
map.commentBefore = 'mc'
const obj = { array: [1], map }
expect(YAML.stringify(obj)).toBe(
source`
array:
- 1
map:
#mc
foo: bar
seq:
#sc
- a
` + '\n'
)
})
describe('sortMapEntries', () => {
const obj = { b: 2, a: 1, c: 3 }
test('sortMapEntries: undefined', () => {
expect(YAML.stringify(obj)).toBe('b: 2\na: 1\nc: 3\n')
})
test('sortMapEntries: true', () => {
expect(YAML.stringify(obj, { sortMapEntries: true })).toBe(
'a: 1\nb: 2\nc: 3\n'
)
})
test('sortMapEntries: function', () => {
const sortMapEntries = (a, b) =>
a.key < b.key ? 1 : a.key > b.key ? -1 : 0
expect(YAML.stringify(obj, { sortMapEntries })).toBe('c: 3\nb: 2\na: 1\n')
})
test('doc.add', () => {
const doc = new YAML.Document({ sortMapEntries: true })
doc.setSchema()
doc.contents = doc.schema.createNode(obj)
doc.add(new Pair('bb', 4))
expect(String(doc)).toBe('a: 1\nb: 2\nbb: 4\nc: 3\n')
})
test('doc.set', () => {
const doc = new YAML.Document({ sortMapEntries: true })
doc.setSchema()
doc.contents = doc.schema.createNode(obj)
doc.set('bb', 4)
expect(String(doc)).toBe('a: 1\nb: 2\nbb: 4\nc: 3\n')
})
})
describe('custom indent', () => {
let obj
beforeEach(() => {
const seq = YAML.createNode(['a'])
seq.commentBefore = 'sc'
const map = YAML.createNode({ foo: 'bar', seq })
map.commentBefore = 'mc'
obj = { array: [{ a: 1, b: 2 }], map }
})
test('indent: 0', () => {
expect(() => YAML.stringify(obj, { indent: 0 })).toThrow(
/must be a positive integer/
)
})
test('indent: 1', () => {
expect(YAML.stringify(obj, { indent: 1 })).toBe(
source`
array:
- a: 1
b: 2
map:
#mc
foo: bar
seq:
#sc
- a
` + '\n'
)
})
test('indent: 4', () => {
expect(YAML.stringify(obj, { indent: 4 })).toBe(
source`
array:
- a: 1
b: 2
map:
#mc
foo: bar
seq:
#sc
- a
` + '\n'
)
})
})
describe('indentSeq: false', () => {
let obj
beforeEach(() => {
const seq = YAML.createNode(['a'])
seq.commentBefore = 'sc'
obj = { array: [{ a: 1, b: 2 }], map: { seq } }
})
test('indent: 1', () => {
expect(YAML.stringify(obj, { indent: 1, indentSeq: false })).toBe(
source`
array:
- a: 1
b: 2
map:
seq:
#sc
- a
` + '\n'
)
})
test('indent: 2', () => {
expect(YAML.stringify(obj, { indent: 2, indentSeq: false })).toBe(
source`
array:
- a: 1
b: 2
map:
seq:
#sc
- a
` + '\n'
)
})
test('indent: 4', () => {
expect(YAML.stringify(obj, { indent: 4, indentSeq: false })).toBe(
source`
array:
- a: 1
b: 2
map:
seq:
#sc
- a
` + '\n'
)
})
})
describe('Document markers in top-level scalars', () => {
let origDoubleQuotedOptions
beforeAll(() => {
origDoubleQuotedOptions = YAML.scalarOptions.str.doubleQuoted
YAML.scalarOptions.str.doubleQuoted = {
jsonEncoding: false,
minMultiLineLength: 0
}
})
afterAll(() => {
YAML.scalarOptions.str.doubleQuoted = origDoubleQuotedOptions
})
test('---', () => {
const str = YAML.stringify('---')
expect(str).toBe('|-\n ---\n')
expect(YAML.parse(str)).toBe('---')
})
test('...', () => {
const str = YAML.stringify('...')
expect(str).toBe('|-\n ...\n')
expect(YAML.parse(str)).toBe('...')
})
test('foo\\n...\\n', () => {
const str = YAML.stringify('foo\n...\n')
expect(str).toBe('|\n foo\n ...\n')
expect(YAML.parse(str)).toBe('foo\n...\n')
})
test("'foo\\n...'", () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode('foo\n...', true)
doc.contents.type = Type.QUOTE_SINGLE
const str = String(doc)
expect(str).toBe("'foo\n\n ...'\n")
expect(YAML.parse(str)).toBe('foo\n...')
})
test('"foo\\n..."', () => {
const doc = new YAML.Document()
doc.contents = YAML.createNode('foo\n...', true)
doc.contents.type = Type.QUOTE_DOUBLE
const str = String(doc)
expect(str).toBe('"foo\n\n ..."\n')
expect(YAML.parse(str)).toBe('foo\n...')
})
test('foo\\n%bar\\n', () => {
const str = YAML.stringify('foo\n%bar\n')
expect(str).toBe('|\n foo\n %bar\n')
expect(YAML.parse(str)).toBe('foo\n%bar\n')
})
})
describe('YAML.stringify on ast Document', () => {
test('null document', () => {
const doc = YAML.parseDocument('null')
expect(YAML.stringify(doc)).toBe('null\n')
})
})
yaml-1.10.2/tests/doc/types.js000066400000000000000000000504441402322402300161450ustar00rootroot00000000000000import { YAML } from '../../src/index.js'
import { Scalar, YAMLSeq } from '../../src/ast/index.js'
import { binary } from '../../src/tags/yaml-1.1/binary.js'
import { YAMLOMap } from '../../src/tags/yaml-1.1/omap.js'
import { YAMLSet } from '../../src/tags/yaml-1.1/set.js'
let origFoldOptions
beforeAll(() => {
origFoldOptions = YAML.scalarOptions.str.fold
YAML.scalarOptions.str.fold = {
lineWidth: 20,
minContentWidth: 0
}
})
afterAll(() => {
YAML.scalarOptions.str.fold = origFoldOptions
})
describe('json schema', () => {
test('!!bool', () => {
const src = `"canonical": true
"answer": false
"logical": True
"option": TruE`
const doc = YAML.parseDocument(src, { schema: 'json' })
expect(doc.toJSON()).toMatchObject({
canonical: true,
answer: false,
logical: null,
option: null
})
expect(doc.errors).toHaveLength(2)
doc.errors = []
doc.contents.items.splice(2, 2)
expect(String(doc)).toBe('"canonical": true\n"answer": false\n')
})
test('!!float', () => {
const src = `"canonical": 6.8523015e+5
"fixed": 685230.15
"negative infinity": -.inf
"not a number": .NaN`
const doc = YAML.parseDocument(src, { schema: 'json' })
expect(doc.toJSON()).toMatchObject({
canonical: 685230.15,
fixed: 685230.15,
'negative infinity': null,
'not a number': null
})
expect(doc.errors).toHaveLength(2)
doc.errors = []
doc.contents.items.splice(2, 2)
doc.contents.items[1].value.tag = 'tag:yaml.org,2002:float'
expect(String(doc)).toBe(
'"canonical": 685230.15\n"fixed": !!float 685230.15\n'
)
})
test('!!int', () => {
const src = `"canonical": 685230
"decimal": -685230
"octal": 0o2472256
"hexadecimal": 0x0A74AE`
const doc = YAML.parseDocument(src, { schema: 'json' })
expect(doc.toJSON()).toMatchObject({
canonical: 685230,
decimal: -685230,
octal: null,
hexadecimal: null
})
expect(doc.errors).toHaveLength(2)
doc.errors = []
doc.contents.items.splice(2, 2)
doc.set('bigint', 42n)
expect(String(doc)).toBe(
'"canonical": 685230\n"decimal": -685230\n"bigint": 42\n'
)
})
test('!!null', () => {
const src = `"empty":
"canonical": ~
"english": null
~: 'null key'`
const doc = YAML.parseDocument(src, { schema: 'json' })
expect(doc.toJSON()).toMatchObject({
empty: null,
canonical: null,
english: null,
'': 'null key'
})
expect(doc.errors).toHaveLength(2)
doc.errors = []
expect(String(doc)).toBe(
'"empty": null\n"canonical": null\n"english": null\n? null\n: "null key"\n'
)
})
})
describe('core schema', () => {
test('!!bool', () => {
const src = `canonical: true
answer: FALSE
logical: True
option: TruE\n`
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
canonical: true,
answer: false,
logical: true,
option: 'TruE'
})
expect(String(doc)).toBe(`canonical: true
answer: false
logical: true
option: TruE\n`)
})
test('!!float', () => {
const src = `canonical: 6.8523015e+5
fixed: 685230.15
negative infinity: -.inf
not a number: .NaN`
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
canonical: 685230.15,
fixed: 685230.15,
'negative infinity': Number.NEGATIVE_INFINITY,
'not a number': NaN
})
expect(String(doc)).toBe(`canonical: 6.8523015e+5
fixed: 685230.15
negative infinity: -.inf
not a number: .nan\n`)
})
test('!!int', () => {
const src = `canonical: 685230
decimal: +685230
octal: 0o2472256
hexadecimal: 0x0A74AE`
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
canonical: 685230,
decimal: 685230,
octal: 685230,
hexadecimal: 685230
})
expect(String(doc)).toBe(`canonical: 685230
decimal: 685230
octal: 0o2472256
hexadecimal: 0xa74ae\n`)
})
test('!!null', () => {
const src = `empty:
canonical: ~
english: null
~: null key`
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
empty: null,
canonical: null,
english: null,
'': 'null key'
})
expect(String(doc)).toBe(`empty: null
canonical: null
english: null
null: null key\n`)
})
describe('!!map', () => {
test('mapAsMap: false', () => {
const src = `
one: 1
2: two
{ 3: 4 }: many\n`
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
one: 1,
2: 'two',
'{ 3: 4 }': 'many'
})
expect(doc.errors).toHaveLength(0)
doc.contents.items[2].key = { 3: 4 }
expect(doc.toJSON()).toMatchObject({
one: 1,
2: 'two',
'{"3":4}': 'many'
})
})
test('mapAsMap: true', () => {
const src = `
one: 1
2: two
{ 3: 4 }: many\n`
const doc = YAML.parseDocument(src, { mapAsMap: true })
expect(doc.toJSON()).toMatchObject(
new Map([
['one', 1],
[2, 'two'],
[new Map([[3, 4]]), 'many']
])
)
expect(doc.errors).toHaveLength(0)
doc.contents.items[2].key = { 3: 4 }
expect(doc.toJSON()).toMatchObject(
new Map([
['one', 1],
[2, 'two'],
[{ 3: 4 }, 'many']
])
)
})
})
})
describe('YAML 1.1 schema', () => {
test('!!binary', () => {
const src = `canonical: !!binary "\\
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\\
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\\
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\\
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="
generic: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
description:
The binary value above is a tiny arrow encoded as a gif image.`
const doc = YAML.parseDocument(src, { schema: 'yaml-1.1' })
const canonical = doc.contents.items[0].value.value
const generic = doc.contents.items[1].value.value
expect(canonical).toBeInstanceOf(Uint8Array)
expect(generic).toBeInstanceOf(Uint8Array)
expect(canonical).toHaveLength(185)
expect(generic).toHaveLength(185)
let canonicalStr = ''
let genericStr = ''
for (let i = 0; i < canonical.length; ++i)
canonicalStr += String.fromCharCode(canonical[i])
for (let i = 0; i < generic.length; ++i)
genericStr += String.fromCharCode(generic[i])
expect(canonicalStr).toBe(genericStr)
expect(canonicalStr.substr(0, 5)).toBe('GIF89')
YAML.scalarOptions.str.fold.lineWidth = 80
expect(String(doc))
.toBe(`canonical: !!binary "R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J\\
+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/\\
++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwnuNAFOhpEMTRiggcz4BN\\
JHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="
generic: !!binary |-
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmlp
aWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++SH+Dk1h
ZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYN
G84BwwEeECcgggoBADs=
description: The binary value above is a tiny arrow encoded as a gif image.\n`)
YAML.scalarOptions.str.fold.lineWidth = 20
})
test('!!bool', () => {
const src = `
canonical: y
answer: NO
logical: True
option: on`
const doc = YAML.parseDocument(src, { version: '1.1' })
expect(doc.toJSON()).toMatchObject({
canonical: true,
answer: false,
logical: true,
option: true
})
expect(String(doc)).toBe(`canonical: true
answer: false
logical: true
option: true\n`)
})
test('!!float', () => {
const src = `%YAML 1.1
---
canonical: 6.8523015e+5
exponential: 685.230_15e+03
fixed: 685_230.15
sexagesimal: 190:20:30.15
negative infinity: -.inf
not a number: .NaN`
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
canonical: 685230.15,
exponential: 685230.15,
fixed: 685230.15,
sexagesimal: 685230.15,
'negative infinity': Number.NEGATIVE_INFINITY,
'not a number': NaN
})
expect(String(doc)).toBe(`%YAML 1.1
---
canonical: 6.8523015e+5
exponential: 6.8523015e+5
fixed: 685230.15
sexagesimal: 190:20:30.15
negative infinity: -.inf
not a number: .nan\n`)
})
test('!!int', () => {
const src = `%YAML 1.1
---
canonical: 685230
decimal: +685_230
octal: 02472256
hexadecimal: 0x_0A_74_AE
binary: 0b1010_0111_0100_1010_1110
sexagesimal: 190:20:30`
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
canonical: 685230,
decimal: 685230,
octal: 685230,
hexadecimal: 685230,
binary: 685230,
sexagesimal: 685230
})
expect(String(doc)).toBe(`%YAML 1.1
---
canonical: 685230
decimal: 685230
octal: 02472256
hexadecimal: 0xa74ae
binary: 0b10100111010010101110
sexagesimal: 190:20:30\n`)
})
test('!!null', () => {
const src = `%YAML 1.1
---
empty:
canonical: ~
english: null
~: null key`
const doc = YAML.parseDocument(src)
expect(doc.toJSON()).toMatchObject({
empty: null,
canonical: null,
english: null,
'': 'null key'
})
expect(String(doc)).toBe(`%YAML 1.1
---
empty: null
canonical: null
english: null
null: null key\n`)
})
describe('!!timestamp', () => {
test('parse & document', () => {
const src = `%YAML 1.1
---
canonical: 2001-12-15T02:59:43.1Z
valid iso8601: 2001-12-14t21:59:43.10-05:00
space separated: 2001-12-14 21:59:43.10 -5
no time zone (Z): 2001-12-15 2:59:43.10
date (00:00:00Z): 2002-12-14`
const doc = YAML.parseDocument(src, { keepBlobsInJSON: false })
doc.contents.items.forEach(item => {
expect(item.value.value).toBeInstanceOf(Date)
})
expect(doc.toJSON()).toMatchObject({
canonical: '2001-12-15T02:59:43.100Z',
'valid iso8601': '2001-12-15T02:59:43.100Z',
'space separated': '2001-12-15T02:59:43.100Z',
'no time zone (Z)': '2001-12-15T02:59:43.100Z',
'date (00:00:00Z)': '2002-12-14T00:00:00.000Z'
})
expect(String(doc)).toBe(`%YAML 1.1
---
canonical: 2001-12-15T02:59:43.100Z
valid iso8601: 2001-12-15T02:59:43.100Z
space separated: 2001-12-15T02:59:43.100Z
no time zone (Z): 2001-12-15T02:59:43.100Z
date (00:00:00Z): 2002-12-14\n`)
})
test('stringify', () => {
const date = new Date('2018-12-22T08:02:52Z')
const str = YAML.stringify(date) // stringified as !!str
expect(str).toBe('2018-12-22T08:02:52.000Z\n')
const str2 = YAML.stringify(date, { version: '1.1' })
expect(str2).toBe('2018-12-22T08:02:52\n')
})
})
describe('!!pairs', () => {
for (const { name, src } of [
{ name: 'parse block seq', src: `!!pairs\n- a: 1\n- b: 2\n- a: 3\n` },
{ name: 'parse flow seq', src: `!!pairs [ a: 1, b: 2, a: 3 ]\n` }
])
test(name, () => {
const doc = YAML.parseDocument(src, { version: '1.1' })
expect(doc.contents).toBeInstanceOf(YAMLSeq)
expect(doc.contents.items).toMatchObject([
{ key: { value: 'a' }, value: { value: 1 } },
{ key: { value: 'b' }, value: { value: 2 } },
{ key: { value: 'a' }, value: { value: 3 } }
])
expect(doc.toJSON()).toBeInstanceOf(Array)
expect(doc.toJSON()).toMatchObject([{ a: 1 }, { b: 2 }, { a: 3 }])
expect(String(doc)).toBe(src)
})
test('stringify', () => {
const doc = new YAML.Document({ version: '1.1' })
doc.setSchema()
doc.contents = doc.schema.createNode(
[
['a', 1],
['b', 2],
['a', 3]
],
false,
'!!pairs'
)
expect(doc.contents.tag).toBe('tag:yaml.org,2002:pairs')
expect(String(doc)).toBe(`!!pairs\n- a: 1\n- b: 2\n- a: 3\n`)
})
})
describe('!!omap', () => {
for (const { name, src } of [
{ name: 'parse block seq', src: `!!omap\n- a: 1\n- b: 2\n- c: 3\n` },
{ name: 'parse flow seq', src: `!!omap [ a: 1, b: 2, c: 3 ]\n` }
])
test(name, () => {
const doc = YAML.parseDocument(src, { version: '1.1' })
expect(doc.contents).toBeInstanceOf(YAMLOMap)
expect(doc.toJSON()).toBeInstanceOf(Map)
expect(doc.toJSON()).toMatchObject(
new Map([
['a', 1],
['b', 2],
['c', 3]
])
)
expect(String(doc)).toBe(src)
})
test('require unique keys', () => {
const src = `!!omap\n- a: 1\n- b: 2\n- b: 9\n`
const doc = YAML.parseDocument(src, { version: '1.1' })
expect(doc.errors).toMatchObject([
{
name: 'YAMLSemanticError',
message: 'Ordered maps must not include duplicate keys'
}
])
})
test('stringify Map', () => {
const map = new Map([
['a', 1],
['b', 2],
['c', 3]
])
const str = YAML.stringify(map, { version: '1.1' })
expect(str).toBe(`!!omap\n- a: 1\n- b: 2\n- c: 3\n`)
const str2 = YAML.stringify(map)
expect(str2).toBe(`a: 1\nb: 2\nc: 3\n`)
})
test('stringify Array', () => {
const doc = new YAML.Document({ version: '1.1' })
doc.setSchema()
doc.contents = doc.schema.createNode(
[
['a', 1],
['b', 2],
['a', 3]
],
false,
'!!omap'
)
expect(doc.contents).toBeInstanceOf(YAMLOMap)
expect(String(doc)).toBe(`!!omap\n- a: 1\n- b: 2\n- a: 3\n`)
})
})
describe('!!set', () => {
for (const { name, src } of [
{ name: 'parse block map', src: `!!set\n? a\n? b\n? c\n` },
{ name: 'parse flow map', src: `!!set { a, b, c }\n` }
])
test(name, () => {
const doc = YAML.parseDocument(src, { version: '1.1' })
expect(doc.contents).toBeInstanceOf(YAMLSet)
expect(doc.toJSON()).toBeInstanceOf(Set)
expect(doc.toJSON()).toMatchObject(new Set(['a', 'b', 'c']))
expect(String(doc)).toBe(src)
})
test('require null values', () => {
const src = `!!set\n? a\n? b\nc: d\n`
const doc = YAML.parseDocument(src, { version: '1.1' })
expect(doc.errors).toMatchObject([
{
name: 'YAMLSemanticError',
message: 'Set items must all have null values'
}
])
})
test('stringify', () => {
const set = new Set(['a', 'b', 'c'])
const str = YAML.stringify(set, { version: '1.1' })
expect(str).toBe(`!!set\n? a\n? b\n? c\n`)
const str2 = YAML.stringify(set)
expect(str2).toBe(`- a\n- b\n- c\n`)
})
test('eemeli/yaml#78', () => {
const set = new Set(['a', 'b', 'c'])
const str = YAML.stringify({ set }, { version: '1.1' })
expect(str).toBe(`set:\n !!set\n ? a\n ? b\n ? c\n`)
})
})
})
describe('custom tags', () => {
const src = `%TAG !e! tag:example.com,2000:test/
---
!e!x
- !y 2
- !e!z 3
- ! 4
- '5'`
test('parse', () => {
const doc = YAML.parseDocument(src)
expect(doc.contents).toBeInstanceOf(YAMLSeq)
expect(doc.contents.tag).toBe('tag:example.com,2000:test/x')
const { items } = doc.contents
expect(items).toHaveLength(4)
items.forEach(item => expect(typeof item.value).toBe('string'))
expect(items[0].tag).toBe('!y')
expect(items[1].tag).toBe('tag:example.com,2000:test/z')
expect(items[2].tag).toBe('tag:example.com,2000:other/w')
})
test('stringify', () => {
const doc = YAML.parseDocument(src)
expect(String(doc)).toBe(
`%TAG !e! tag:example.com,2000:test/
---
!e!x
- !y "2"
- !e!z "3"
- ! "4"
- '5'\n`
)
})
test('modify', () => {
const doc = YAML.parseDocument(src)
const prefix = 'tag:example.com,2000:other/'
doc.setTagPrefix('!f!', prefix)
expect(doc.tagPrefixes).toMatchObject([
{ handle: '!e!' },
{ handle: '!f!' }
])
doc.contents.commentBefore = 'c'
doc.contents.items[3].comment = 'cc'
const s = new Scalar(6)
s.tag = '!g'
doc.contents.items.splice(1, 1, s, '7')
expect(String(doc)).toBe(
`%TAG !e! tag:example.com,2000:test/
%TAG !f! tag:example.com,2000:other/
---
#c
!e!x
- !y "2"
- !g 6
- "7"
- !f!w "4"
- '5' #cc\n`
)
doc.setTagPrefix('!f!', null)
expect(doc.tagPrefixes).toMatchObject([{ handle: '!e!' }])
expect(() => doc.setTagPrefix('!f', prefix)).toThrow(
'Handle must start and end with !'
)
})
test('YAML 1.0 explicit tags', () => {
const src = `%YAML:1.0
---
date: 2001-01-23
number: !int '123'
string: !str 123
pool: !!ball { number: 8 }
perl: !perl/Text::Tabs {}`
const doc = YAML.parseDocument(src)
expect(doc.version).toBe('1.0')
expect(doc.toJSON()).toMatchObject({
number: 123,
string: '123',
pool: { number: 8 },
perl: {}
})
const date = doc.contents.items[0].value.value
expect(date).toBeInstanceOf(Date)
expect(date.getFullYear()).toBe(2001)
expect(String(doc)).toBe(`%YAML:1.0
---
date: 2001-01-23
number: !yaml.org,2002:int 123
string: !yaml.org,2002:str "123"
pool:
!ball { number: 8 }
perl:
!perl/Text::Tabs {}\n`)
})
test('YAML 1.0 tag prefixing', () => {
const src = `%YAML:1.0
---
invoice: !domain.tld,2002/^invoice
customers: !seq
- !^customer
given : Chris
family : Dumars`
const doc = YAML.parseDocument(src)
expect(doc.version).toBe('1.0')
expect(doc.toJSON()).toMatchObject({
invoice: { customers: [{ family: 'Dumars', given: 'Chris' }] }
})
expect(String(doc)).toBe(`%YAML:1.0
---
invoice:
!domain.tld,2002/^invoice
customers:
!yaml.org,2002:seq
- !^customer
given: Chris
family: Dumars\n`)
})
describe('custom tag objects', () => {
const src = `!!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=`
test('tag object in tags', () => {
const bin = YAML.parse(src, { customTags: [binary] })
expect(bin).toBeInstanceOf(Uint8Array)
})
test('tag array in tags', () => {
const bin = YAML.parse(src, { customTags: [[binary]] })
expect(bin).toBeInstanceOf(Uint8Array)
})
test('tag string in tags', () => {
const bin = YAML.parse(src, { customTags: ['binary'] })
expect(bin).toBeInstanceOf(Uint8Array)
})
test('tag string in tag array', () => {
const bin = YAML.parse(src, { customTags: [['binary']] })
expect(bin).toBeInstanceOf(Uint8Array)
})
test('custom tags from function', () => {
const customTags = tags => tags.concat('binary')
const bin = YAML.parse(src, { customTags })
expect(bin).toBeInstanceOf(Uint8Array)
})
test('no custom tag object', () => {
const doc = YAML.parseDocument(src)
const message =
'The tag tag:yaml.org,2002:binary is unavailable, falling back to tag:yaml.org,2002:str'
expect(doc.warnings).toMatchObject([{ message }])
expect(typeof doc.contents.value).toBe('string')
})
})
})
describe('schema changes', () => {
test('write as json', () => {
const doc = YAML.parseDocument('foo: bar', { schema: 'core' })
expect(doc.options.schema).toBe('core')
doc.setSchema('json')
expect(doc.options.schema).toBe('json')
expect(String(doc)).toBe('"foo": "bar"\n')
})
test('fail for missing type', () => {
const doc = YAML.parseDocument('foo: 1971-02-03T12:13:14', {
version: '1.1'
})
expect(doc.options.version).toBe('1.1')
doc.setSchema('1.2')
expect(doc.version).toBeNull()
expect(doc.options.version).toBe('1.2')
expect(doc.options.schema).toBeUndefined()
expect(() => String(doc)).toThrow(/Tag not resolved for Date value/)
})
test('set schema + custom tags', () => {
const doc = YAML.parseDocument('foo: 1971-02-03T12:13:14', {
version: '1.1'
})
doc.setSchema('json', ['timestamp'])
expect(String(doc)).toBe('"foo": 1971-02-03T12:13:14\n')
})
test('set version + custom tags', () => {
const doc = YAML.parseDocument('foo: 1971-02-03T12:13:14', {
version: '1.1'
})
doc.setSchema(1.2, ['timestamp'])
expect(String(doc)).toBe('foo: 1971-02-03T12:13:14\n')
})
})
yaml-1.10.2/tests/properties.js000066400000000000000000000020221402322402300164150ustar00rootroot00000000000000import YAML from '../index.js'
import * as fc from 'fast-check'
describe('properties', () => {
test('parse stringified object', () => {
const key = fc.fullUnicodeString()
const values = [
key,
fc.lorem(1000, false), // words
fc.lorem(100, true), // sentences
fc.boolean(),
fc.integer(),
fc.double(),
fc.constantFrom(null, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY)
]
const yamlArbitrary = fc.anything({ key: key, values: values })
const optionsArbitrary = fc.record(
{
keepBlobsInJSON: fc.boolean(),
keepCstNodes: fc.boolean(),
keepNodeTypes: fc.boolean(),
mapAsMap: fc.constant(false),
merge: fc.boolean(),
schema: fc.constantFrom('core', 'yaml-1.1') // ignore 'failsafe', 'json'
},
{ withDeletedKeys: true }
)
fc.assert(
fc.property(yamlArbitrary, optionsArbitrary, (obj, opts) => {
expect(YAML.parse(YAML.stringify(obj, opts), opts)).toStrictEqual(obj)
})
)
})
})
yaml-1.10.2/tests/typings.ts000066400000000000000000000043211402322402300157340ustar00rootroot00000000000000// To test types, compile this file with tsc
import * as YAML from '../index'
import { YAMLMap, YAMLSeq, Pair } from '../types'
YAML.parse('3.14159')
// 3.14159
YAML.parse('[ true, false, maybe, null ]\n')
// [ true, false, 'maybe', null ]
const file = `# file.yml
YAML:
- A human-readable data serialization language
- https://en.wikipedia.org/wiki/YAML
yaml:
- A complete JavaScript implementation
- https://www.npmjs.com/package/yaml`
YAML.parse(file)
// { YAML:
// [ 'A human-readable data serialization language',
// 'https://en.wikipedia.org/wiki/YAML' ],
// yaml:
// [ 'A complete JavaScript implementation',
// 'https://www.npmjs.com/package/yaml' ] }
YAML.stringify(3.14159)
// '3.14159\n'
YAML.stringify([true, false, 'maybe', null])
// `- true
// - false
// - maybe
// - null
// `
YAML.stringify({ number: 3, plain: 'string', block: 'two\nlines\n' })
// `number: 3
// plain: string
// block: >
// two
//
// lines
// `
const src = '[{ a: A }, { b: B }]'
const doc = YAML.parseDocument(src)
const seq = doc.contents as YAMLSeq
const { anchors } = doc
const [a, b] = seq.items as YAMLMap[]
anchors.setAnchor(a.items[0].value) // 'a1'
anchors.setAnchor(b.items[0].value) // 'a2'
anchors.setAnchor(null, 'a1') // 'a1'
anchors.getName(a) // undefined
anchors.getNode('a2')
// { value: 'B', range: [ 16, 18 ], type: 'PLAIN' }
String(doc)
// [ { a: A }, { b: &a2 B } ]
const alias = anchors.createAlias(a, 'AA')
seq.items.push(alias)
const refs = new Map()
doc.toJSON(null, (value, count) => refs.set(value, count))
// [ { a: 'A' }, { b: 'B' }, { a: 'A' } ]
String(doc)
// [ &AA { a: A }, { b: &a2 B }, *AA ]
refs
// Map(3) { undefined => 1, 'B' => 1, { a: 'A' } => 2 }
const merge = anchors.createMergePair(alias)
b.items.push(merge)
doc.toJSON()
// [ { a: 'A' }, { b: 'B', a: 'A' }, { a: 'A' } ]
String(doc)
// [ &AA { a: A }, { b: &a2 B, <<: *AA }, *AA ]
// This creates a circular reference
merge.value.items.push(anchors.createAlias(b))
doc.toJSON() // [RangeError: Maximum call stack size exceeded]
String(doc)
// [
// &AA { a: A },
// &a3 {
// b: &a2 B,
// <<:
// [ *AA, *a3 ]
// },
// *AA
// ]
const map = new YAMLMap()
map.items.push(new Pair('foo', 'bar'))
doc.contents = map
yaml-1.10.2/tests/yaml-test-suite/000077500000000000000000000000001402322402300167355ustar00rootroot00000000000000yaml-1.10.2/tests/yaml-test-suite.js000066400000000000000000000062711402322402300173010ustar00rootroot00000000000000import fs from 'fs'
import path from 'path'
import YAML from '../index.js'
import { testEvents } from '../dist/test-events.js'
const testDirs = fs
.readdirSync(path.resolve(__dirname, 'yaml-test-suite'))
.filter(dir => /^[A-Z0-9]{4}$/.test(dir))
const matchJson = (docs, json) => {
if (!json) return
const received = docs[0] ? docs.map(doc => doc.toJSON()) : null
const expected =
docs.length > 1
? json
.replace(/\n$/, '')
.split('\n')
.map(line => JSON.parse(line))
: [JSON.parse(json)]
if (!received || typeof received !== 'object') {
expect(received).toBe(expected)
} else {
expect(received).toMatchObject(expected)
}
}
let origFoldOptions
beforeAll(() => {
origFoldOptions = YAML.scalarOptions.str.fold
YAML.scalarOptions.str.fold = {
lineWidth: 20,
minContentWidth: 0
}
})
afterAll(() => {
YAML.scalarOptions.str.fold = origFoldOptions
})
testDirs.forEach(dir => {
const root = path.resolve(__dirname, 'yaml-test-suite', dir)
const name = fs.readFileSync(path.resolve(root, '==='), 'utf8').trim()
const yaml = fs.readFileSync(path.resolve(root, 'in.yaml'), 'utf8')
let error, events, json, outYaml
try {
fs.readFileSync(path.resolve(root, 'error'), 'utf8')
error = true
} catch (e) {
/* ignore error */
}
try {
// Too much variance in event stream length for error cases
events = !error && fs.readFileSync(path.resolve(root, 'test.event'), 'utf8')
} catch (e) {
/* ignore error */
}
try {
json = fs.readFileSync(path.resolve(root, 'in.json'), 'utf8')
} catch (e) {
/* ignore error */
}
try {
outYaml = fs.readFileSync(path.resolve(root, 'out.yaml'), 'utf8')
} catch (e) {
/* ignore error */
}
describe(`${dir}: ${name}`, () => {
const docs = YAML.parseAllDocuments(yaml)
if (events) {
test('test.event', () => {
const res = testEvents(yaml)
expect(res.events.join('\n') + '\n').toBe(events)
expect(res.error).toBeNull()
})
}
if (json) test('in.json', () => matchJson(docs, json))
test('errors', () => {
const errors = docs
.map(doc => doc.errors)
.filter(docErrors => docErrors.length > 0)
if (error) {
expect(errors).not.toHaveLength(0)
} else {
expect(errors).toHaveLength(0)
}
})
if (!error) {
const src2 =
docs.map(doc => String(doc).replace(/\n$/, '')).join('\n...\n') + '\n'
const docs2 = YAML.parseAllDocuments(src2)
trace: name,
'\nIN\n' + yaml,
'\nJSON\n' + JSON.stringify(docs[0], null, ' '),
'\n\nOUT\n' + src2,
'\nOUT-JSON\n' + JSON.stringify(src2),
'\nRE-JSON\n' + JSON.stringify(docs2[0], null, ' ')
if (json) test('stringfy+re-parse', () => matchJson(docs2, json))
if (outYaml) {
test('out.yaml', () => {
const resDocs = YAML.parseAllDocuments(yaml, { mapAsMap: true })
const resJson = resDocs.map(doc => doc.toJSON())
const expDocs = YAML.parseAllDocuments(outYaml, { mapAsMap: true })
const expJson = expDocs.map(doc => doc.toJSON())
expect(resJson).toMatchObject(expJson)
})
}
}
})
})
yaml-1.10.2/types.d.ts000066400000000000000000000265541402322402300144770ustar00rootroot00000000000000import { Document, scalarOptions } from './index'
import { CST } from './parse-cst'
import { Type } from './util'
export const binaryOptions: scalarOptions.Binary
export const boolOptions: scalarOptions.Bool
export const intOptions: scalarOptions.Int
export const nullOptions: scalarOptions.Null
export const strOptions: scalarOptions.Str
export class Schema {
/** Default: `'tag:yaml.org,2002:'` */
static defaultPrefix: string
static defaultTags: {
/** Default: `'tag:yaml.org,2002:map'` */
MAP: string
/** Default: `'tag:yaml.org,2002:seq'` */
SEQ: string
/** Default: `'tag:yaml.org,2002:str'` */
STR: string
}
constructor(options: Schema.Options)
/**
* Convert any value into a `Node` using this schema, recursively turning
* objects into collections.
*
* @param wrapScalars If `true`, also wraps plain values in `Scalar` objects;
* if undefined or `false` and `value` is not an object, it will be returned
* directly.
* @param tag Use to specify the collection type, e.g. `"!!omap"`. Note that
* this requires the corresponding tag to be available in this schema.
*/
createNode(
value: any,
wrapScalars?: boolean,
tag?: string,
ctx?: Schema.CreateNodeContext
): Node
/**
* Convert a key and a value into a `Pair` using this schema, recursively
* wrapping all values as `Scalar` or `Collection` nodes.
*
* @param ctx To not wrap scalars, use a context `{ wrapScalars: false }`
*/
createPair(key: any, value: any, ctx?: Schema.CreateNodeContext): Pair
merge: boolean
name: Schema.Name
sortMapEntries: ((a: Pair, b: Pair) => number) | null
tags: Schema.Tag[]
}
export namespace Schema {
type Name = 'core' | 'failsafe' | 'json' | 'yaml-1.1'
interface Options {
/**
* Array of additional tags to include in the schema, or a function that may
* modify the schema's base tag array.
*/
customTags?: (TagId | Tag)[] | ((tags: Tag[]) => Tag[])
/**
* Enable support for `<<` merge keys.
*
* Default: `false` for YAML 1.2, `true` for earlier versions
*/
merge?: boolean
/**
* The base schema to use.
*
* Default: `"core"` for YAML 1.2, `"yaml-1.1"` for earlier versions
*/
schema?: Name
/**
* When stringifying, sort map entries. If `true`, sort by comparing key values with `<`.
*
* Default: `false`
*/
sortMapEntries?: boolean | ((a: Pair, b: Pair) => number)
/**
* @deprecated Use `customTags` instead.
*/
tags?: Options['customTags']
}
interface CreateNodeContext {
wrapScalars?: boolean
[key: string]: any
}
interface StringifyContext {
forceBlockIndent?: boolean
implicitKey?: boolean
indent?: string
indentAtStart?: number
inFlow?: boolean
[key: string]: any
}
type TagId =
| 'binary'
| 'bool'
| 'float'
| 'floatExp'
| 'floatNaN'
| 'floatTime'
| 'int'
| 'intHex'
| 'intOct'
| 'intTime'
| 'null'
| 'omap'
| 'pairs'
| 'set'
| 'timestamp'
type Tag = CustomTag | DefaultTag
interface BaseTag {
/**
* An optional factory function, used e.g. by collections when wrapping JS objects as AST nodes.
*/
createNode?: (
schema: Schema,
value: any,
ctx: Schema.CreateNodeContext
) => YAMLMap | YAMLSeq | Scalar
/**
* If a tag has multiple forms that should be parsed and/or stringified differently, use `format` to identify them.
*/
format?: string
/**
* Used by `YAML.createNode` to detect your data type, e.g. using `typeof` or
* `instanceof`.
*/
identify(value: any): boolean
/**
* The `Node` child class that implements this tag. Required for collections and tags that have overlapping JS representations.
*/
nodeClass?: new () => any
/**
* Used by some tags to configure their stringification, where applicable.
*/
options?: object
/**
* Optional function stringifying the AST node in the current context. If your
* data includes a suitable `.toString()` method, you can probably leave this
* undefined and use the default stringifier.
*
* @param item The node being stringified.
* @param ctx Contains the stringifying context variables.
* @param onComment Callback to signal that the stringifier includes the
* item's comment in its output.
* @param onChompKeep Callback to signal that the output uses a block scalar
* type with the `+` chomping indicator.
*/
stringify?: (
item: Node,
ctx: Schema.StringifyContext,
onComment?: () => void,
onChompKeep?: () => void
) => string
/**
* The identifier for your data type, with which its stringified form will be
* prefixed. Should either be a !-prefixed local `!tag`, or a fully qualified
* `tag:domain,date:foo`.
*/
tag: string
}
interface CustomTag extends BaseTag {
/**
* A JavaScript class that should be matched to this tag, e.g. `Date` for `!!timestamp`.
* @deprecated Use `Tag.identify` instead
*/
class?: new () => any
/**
* Turns a CST node into an AST node. If returning a non-`Node` value, the
* output will be wrapped as a `Scalar`.
*/
resolve(doc: Document, cstNode: CST.Node): Node | any
}
interface DefaultTag extends BaseTag {
/**
* If `true`, together with `test` allows for values to be stringified without
* an explicit tag. For most cases, it's unlikely that you'll actually want to
* use this, even if you first think you do.
*/
default: true
/**
* Alternative form used by default tags; called with `test` match results.
*/
resolve(...match: string[]): Node | any
/**
* Together with `default` allows for values to be stringified without an
* explicit tag and detected using a regular expression. For most cases, it's
* unlikely that you'll actually want to use these, even if you first think
* you do.
*/
test: RegExp
}
}
export class Node {
/** A comment on or immediately after this */
comment?: string | null
/** A comment before this */
commentBefore?: string | null
/** Only available when `keepCstNodes` is set to `true` */
cstNode?: CST.Node
/**
* The [start, end] range of characters of the source parsed
* into this node (undefined for pairs or if not parsed)
*/
range?: [number, number] | null
/** A blank line before this node and its commentBefore */
spaceBefore?: boolean
/** A fully qualified tag, if required */
tag?: string
/** A plain JS representation of this node */
toJSON(arg?: any): any
/** The type of this node */
type?: Type | Pair.Type
}
export class Scalar extends Node {
constructor(value: any)
type?: Scalar.Type
/**
* By default (undefined), numbers use decimal notation.
* The YAML 1.2 core schema only supports 'HEX' and 'OCT'.
*/
format?: 'BIN' | 'HEX' | 'OCT' | 'TIME'
value: any
toJSON(arg?: any, ctx?: AST.NodeToJsonContext): any
toString(): string
}
export namespace Scalar {
type Type =
| Type.BLOCK_FOLDED
| Type.BLOCK_LITERAL
| Type.PLAIN
| Type.QUOTE_DOUBLE
| Type.QUOTE_SINGLE
}
export class Alias extends Node {
type: Type.ALIAS
source: Node
cstNode?: CST.Alias
toString(ctx: Schema.StringifyContext): string
}
export class Pair extends Node {
constructor(key: any, value?: any)
type: Pair.Type.PAIR | Pair.Type.MERGE_PAIR
/** Always Node or null when parsed, but can be set to anything. */
key: any
/** Always Node or null when parsed, but can be set to anything. */
value: any
cstNode?: never // no corresponding cstNode
toJSON(arg?: any, ctx?: AST.NodeToJsonContext): object | Map
toString(
ctx?: Schema.StringifyContext,
onComment?: () => void,
onChompKeep?: () => void
): string
}
export namespace Pair {
enum Type {
PAIR = 'PAIR',
MERGE_PAIR = 'MERGE_PAIR'
}
}
export class Merge extends Pair {
type: Pair.Type.MERGE_PAIR
/** Always Scalar('<<'), defined by the type specification */
key: AST.PlainValue
/** Always YAMLSeq, stringified as *A if length = 1 */
value: YAMLSeq
toString(ctx?: Schema.StringifyContext, onComment?: () => void): string
}
export class Collection extends Node {
type?: Type.MAP | Type.FLOW_MAP | Type.SEQ | Type.FLOW_SEQ | Type.DOCUMENT
items: any[]
schema?: Schema
/**
* Adds a value to the collection. For `!!map` and `!!omap` the value must
* be a Pair instance or a `{ key, value }` object, which may not have a key
* that already exists in the map.
*/
add(value: any): void
addIn(path: Iterable, value: any): void
/**
* Removes a value from the collection.
* @returns `true` if the item was found and removed.
*/
delete(key: any): boolean
deleteIn(path: Iterable): boolean
/**
* Returns item at `key`, or `undefined` if not found. By default unwraps
* scalar values from their surrounding node; to disable set `keepScalar` to
* `true` (collections are always returned intact).
*/
get(key: any, keepScalar?: boolean): any
getIn(path: Iterable, keepScalar?: boolean): any
/**
* Checks if the collection includes a value with the key `key`.
*/
has(key: any): boolean
hasIn(path: Iterable): boolean
/**
* Sets a value in this collection. For `!!set`, `value` needs to be a
* boolean to add/remove the item from the set.
*/
set(key: any, value: any): void
setIn(path: Iterable, value: any): void
}
export class YAMLMap extends Collection {
type?: Type.FLOW_MAP | Type.MAP
items: Array
hasAllNullValues(): boolean
toJSON(arg?: any, ctx?: AST.NodeToJsonContext): object | Map
toString(
ctx?: Schema.StringifyContext,
onComment?: () => void,
onChompKeep?: () => void
): string
}
export class YAMLSeq extends Collection {
type?: Type.FLOW_SEQ | Type.SEQ
delete(key: number | string | Scalar): boolean
get(key: number | string | Scalar, keepScalar?: boolean): any
has(key: number | string | Scalar): boolean
set(key: number | string | Scalar, value: any): void
hasAllNullValues(): boolean
toJSON(arg?: any, ctx?: AST.NodeToJsonContext): any[]
toString(
ctx?: Schema.StringifyContext,
onComment?: () => void,
onChompKeep?: () => void
): string
}
export namespace AST {
interface NodeToJsonContext {
anchors?: any[]
doc: Document
keep?: boolean
mapAsMap?: boolean
maxAliasCount?: number
onCreate?: (node: Node) => void
[key: string]: any
}
interface BlockFolded extends Scalar {
type: Type.BLOCK_FOLDED
cstNode?: CST.BlockFolded
}
interface BlockLiteral extends Scalar {
type: Type.BLOCK_LITERAL
cstNode?: CST.BlockLiteral
}
interface PlainValue extends Scalar {
type: Type.PLAIN
cstNode?: CST.PlainValue
}
interface QuoteDouble extends Scalar {
type: Type.QUOTE_DOUBLE
cstNode?: CST.QuoteDouble
}
interface QuoteSingle extends Scalar {
type: Type.QUOTE_SINGLE
cstNode?: CST.QuoteSingle
}
interface FlowMap extends YAMLMap {
type: Type.FLOW_MAP
cstNode?: CST.FlowMap
}
interface BlockMap extends YAMLMap {
type: Type.MAP
cstNode?: CST.Map
}
interface FlowSeq extends YAMLSeq {
type: Type.FLOW_SEQ
items: Array
cstNode?: CST.FlowSeq
}
interface BlockSeq extends YAMLSeq {
type: Type.SEQ
items: Array
cstNode?: CST.Seq
}
}
yaml-1.10.2/types.js000066400000000000000000000007761402322402300142410ustar00rootroot00000000000000const types = require('./dist/types')
exports.binaryOptions = types.binaryOptions
exports.boolOptions = types.boolOptions
exports.intOptions = types.intOptions
exports.nullOptions = types.nullOptions
exports.strOptions = types.strOptions
exports.Schema = types.Schema
exports.Alias = types.Alias
exports.Collection = types.Collection
exports.Merge = types.Merge
exports.Node = types.Node
exports.Pair = types.Pair
exports.Scalar = types.Scalar
exports.YAMLMap = types.YAMLMap
exports.YAMLSeq = types.YAMLSeq
yaml-1.10.2/types.mjs000066400000000000000000000011021402322402300143760ustar00rootroot00000000000000import types from './dist/types.js'
export const binaryOptions = types.binaryOptions
export const boolOptions = types.boolOptions
export const intOptions = types.intOptions
export const nullOptions = types.nullOptions
export const strOptions = types.strOptions
export const Schema = types.Schema
export const Alias = types.Alias
export const Collection = types.Collection
export const Merge = types.Merge
export const Node = types.Node
export const Pair = types.Pair
export const Scalar = types.Scalar
export const YAMLMap = types.YAMLMap
export const YAMLSeq = types.YAMLSeq
yaml-1.10.2/types/000077500000000000000000000000001402322402300136715ustar00rootroot00000000000000yaml-1.10.2/types/binary.js000066400000000000000000000003471402322402300155170ustar00rootroot00000000000000'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
const legacy = require('../dist/legacy-exports')
exports.binary = legacy.binary
exports.default = [exports.binary]
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/types/omap.js000066400000000000000000000001651402322402300151650ustar00rootroot00000000000000const legacy = require('../dist/legacy-exports')
module.exports = legacy.omap
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/types/pairs.js000066400000000000000000000001661402322402300153500ustar00rootroot00000000000000const legacy = require('../dist/legacy-exports')
module.exports = legacy.pairs
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/types/set.js000066400000000000000000000001641402322402300150230ustar00rootroot00000000000000const legacy = require('../dist/legacy-exports')
module.exports = legacy.set
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/types/timestamp.js000066400000000000000000000005271402322402300162360ustar00rootroot00000000000000'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
const legacy = require('../dist/legacy-exports')
exports.default = [legacy.intTime, legacy.floatTime, legacy.timestamp]
exports.floatTime = legacy.floatTime
exports.intTime = legacy.intTime
exports.timestamp = legacy.timestamp
legacy.warnFileDeprecation(__filename)
yaml-1.10.2/util.d.ts000066400000000000000000000040361402322402300142770ustar00rootroot00000000000000import { Document } from './index'
import { CST } from './parse-cst'
import { AST, Pair, Scalar, Schema } from './types'
export function findPair(items: any[], key: Scalar | any): Pair | undefined
export function parseMap(doc: Document, cst: CST.Map): AST.BlockMap
export function parseMap(doc: Document, cst: CST.FlowMap): AST.FlowMap
export function parseSeq(doc: Document, cst: CST.Seq): AST.BlockSeq
export function parseSeq(doc: Document, cst: CST.FlowSeq): AST.FlowSeq
export function stringifyNumber(item: Scalar): string
export function stringifyString(
item: Scalar,
ctx: Schema.StringifyContext,
onComment?: () => void,
onChompKeep?: () => void
): string
export function toJSON(
value: any,
arg?: any,
ctx?: Schema.CreateNodeContext
): any
export enum Type {
ALIAS = 'ALIAS',
BLANK_LINE = 'BLANK_LINE',
BLOCK_FOLDED = 'BLOCK_FOLDED',
BLOCK_LITERAL = 'BLOCK_LITERAL',
COMMENT = 'COMMENT',
DIRECTIVE = 'DIRECTIVE',
DOCUMENT = 'DOCUMENT',
FLOW_MAP = 'FLOW_MAP',
FLOW_SEQ = 'FLOW_SEQ',
MAP = 'MAP',
MAP_KEY = 'MAP_KEY',
MAP_VALUE = 'MAP_VALUE',
PLAIN = 'PLAIN',
QUOTE_DOUBLE = 'QUOTE_DOUBLE',
QUOTE_SINGLE = 'QUOTE_SINGLE',
SEQ = 'SEQ',
SEQ_ITEM = 'SEQ_ITEM'
}
interface LinePos {
line: number
col: number
}
export class YAMLError extends Error {
name:
| 'YAMLReferenceError'
| 'YAMLSemanticError'
| 'YAMLSyntaxError'
| 'YAMLWarning'
message: string
source?: CST.Node
nodeType?: Type
range?: CST.Range
linePos?: { start: LinePos; end: LinePos }
/**
* Drops `source` and adds `nodeType`, `range` and `linePos`, as well as
* adding details to `message`. Run automatically for document errors if
* the `prettyErrors` option is set.
*/
makePretty(): void
}
export class YAMLReferenceError extends YAMLError {
name: 'YAMLReferenceError'
}
export class YAMLSemanticError extends YAMLError {
name: 'YAMLSemanticError'
}
export class YAMLSyntaxError extends YAMLError {
name: 'YAMLSyntaxError'
}
export class YAMLWarning extends YAMLError {
name: 'YAMLWarning'
}
yaml-1.10.2/util.js000066400000000000000000000007771402322402300140530ustar00rootroot00000000000000const util = require('./dist/util')
exports.findPair = util.findPair
exports.toJSON = util.toJSON
exports.parseMap = util.parseMap
exports.parseSeq = util.parseSeq
exports.stringifyNumber = util.stringifyNumber
exports.stringifyString = util.stringifyString
exports.Type = util.Type
exports.YAMLError = util.YAMLError
exports.YAMLReferenceError = util.YAMLReferenceError
exports.YAMLSemanticError = util.YAMLSemanticError
exports.YAMLSyntaxError = util.YAMLSyntaxError
exports.YAMLWarning = util.YAMLWarning
yaml-1.10.2/util.mjs000066400000000000000000000010731402322402300142160ustar00rootroot00000000000000import util from './dist/util.js'
export const findPair = util.findPair
export const toJSON = util.toJSON
export const parseMap = util.parseMap
export const parseSeq = util.parseSeq
export const stringifyNumber = util.stringifyNumber
export const stringifyString = util.stringifyString
export const Type = util.Type
export const YAMLError = util.YAMLError
export const YAMLReferenceError = util.YAMLReferenceError
export const YAMLSemanticError = util.YAMLSemanticError
export const YAMLSyntaxError = util.YAMLSyntaxError
export const YAMLWarning = util.YAMLWarning