diff options
Diffstat (limited to 'node_modules/js-yaml')
37 files changed, 8896 insertions, 0 deletions
| diff --git a/node_modules/js-yaml/CHANGELOG.md b/node_modules/js-yaml/CHANGELOG.md new file mode 100644 index 0000000..3f1cc98 --- /dev/null +++ b/node_modules/js-yaml/CHANGELOG.md @@ -0,0 +1,501 @@ +3.13.1 / 2019-04-05 +------------------- + +- Fix possible code execution in (already unsafe) `.load()`, #480. + + +3.13.0 / 2019-03-20 +------------------- + +- Security fix: `safeLoad()` can hang when arrays with nested refs +  used as key. Now throws exception for nested arrays. #475. + + +3.12.2 / 2019-02-26 +------------------- + +- Fix `noArrayIndent` option for root level, #468. + + +3.12.1 / 2019-01-05 +------------------- + +- Added `noArrayIndent` option, #432. + + +3.12.0 / 2018-06-02 +------------------- + +- Support arrow functions without a block statement, #421. + + +3.11.0 / 2018-03-05 +------------------- + +- Fix dump in bin/octal/hex formats for negative integers, #399. +- Add arrow functions suport for `!!js/function`. + + +3.10.0 / 2017-09-10 +------------------- + +- Fix `condenseFlow` output (quote keys for sure, instead of spaces), #371, #370. +- Dump astrals as codepoints instead of surrogate pair, #368. + + +3.9.1 / 2017-07-08 +------------------ + +- Ensure stack is present for custom errors in node 7.+, #351. + + +3.9.0 / 2017-07-08 +------------------ + +- Add `condenseFlow` option (to create pretty URL query params), #346. +- Support array return from safeLoadAll/loadAll, #350. + + +3.8.4 / 2017-05-08 +------------------ + +- Dumper: prevent space after dash for arrays that wrap, #343. + + +3.8.3 / 2017-04-05 +------------------ + +- Should not allow numbers to begin and end with underscore, #335. + + +3.8.2 / 2017-03-02 +------------------ + +- Fix `!!float 123` (integers) parse, #333. +- Don't allow leading zeros in floats (except 0, 0.xxx). +- Allow positive exponent without sign in floats. + + +3.8.1 / 2017-02-07 +------------------ + +- Maintenance: update browserified build. + + +3.8.0 / 2017-02-07 +------------------ + +- Fix reported position for `duplicated mapping key` errors. +  Now points to block start instead of block end. +  (#243, thanks to @shockey). + + +3.7.0 / 2016-11-12 +------------------ + +- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). +- Support polymorphism for tags (#300, thanks to @monken). + + +3.6.1 / 2016-05-11 +------------------ + +- Fix output cut on a pipe, #286. + + +3.6.0 / 2016-04-16 +------------------ + +- Dumper rewrite, fix multiple bugs with trailing `\n`. +  Big thanks to @aepsilon! +- Loader: fix leading/trailing newlines in block scalars, @aepsilon. + + +3.5.5 / 2016-03-17 +------------------ + +- Date parse fix: don't allow dates with on digit in month and day, #268. + + +3.5.4 / 2016-03-09 +------------------ + +- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. + + +3.5.3 / 2016-02-11 +------------------ + +- Maintenance release. + + +3.5.2 / 2016-01-11 +------------------ + +- Maintenance: missed comma in bower config. + + +3.5.1 / 2016-01-11 +------------------ + +- Removed `inherit` dependency, #239. +- Better browserify workaround for esprima load. +- Demo rewrite. + + +3.5.0 / 2016-01-10 +------------------ + +- Dumper. Fold strings only, #217. +- Dumper. `norefs` option, to clone linked objects, #229. +- Loader. Throw a warning for duplicate keys, #166. +- Improved browserify support (mark `esprima` & `Buffer` excluded). + + +3.4.6 / 2015-11-26 +------------------ + +- Use standalone `inherit` to keep browserified files clear. + + +3.4.5 / 2015-11-23 +------------------ + +- Added `lineWidth` option to dumper. + + +3.4.4 / 2015-11-21 +------------------ + +- Fixed floats dump (missed dot for scientific format), #220. +- Allow non-printable characters inside quoted scalars, #192. + + +3.4.3 / 2015-10-10 +------------------ + +- Maintenance release - deps bump (esprima, argparse). + + +3.4.2 / 2015-09-09 +------------------ + +- Fixed serialization of duplicated entries in sequences, #205. +  Thanks to @vogelsgesang. + + +3.4.1 / 2015-09-05 +------------------ + +- Fixed stacktrace handling in generated errors, for browsers (FF/IE). + + +3.4.0 / 2015-08-23 +------------------ + +- Fixed multiline keys dump, #197. Thanks to @tcr. +- Don't throw on warnongs anymore. Use `onWarning` option to catch. +- Throw error on unknown tags (was warning before). +- Fixed heading line breaks in some scalars (regression). +- Reworked internals of error class. + + +3.3.1 / 2015-05-13 +------------------ + +- Added `.sortKeys` dumper option, thanks to @rjmunro. +- Fixed astral characters support, #191. + + +3.3.0 / 2015-04-26 +------------------ + +- Significantly improved long strings formatting in dumper, thanks to @isaacs. +- Strip BOM if exists. + + +3.2.7 / 2015-02-19 +------------------ + +- Maintenance release. +- Updated dependencies. +- HISTORY.md -> CHANGELOG.md + + +3.2.6 / 2015-02-07 +------------------ + +- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). +- Fixed demo dates dump (#113, thanks to @Hypercubed). + + +3.2.5 / 2014-12-28 +------------------ + +- Fixed resolving of all built-in types on empty nodes. +- Fixed invalid warning on empty lines within quoted scalars and flow collections. +- Fixed bug: Tag on an empty node didn't resolve in some cases. + + +3.2.4 / 2014-12-19 +------------------ + +- Fixed resolving of !!null tag on an empty node. + + +3.2.3 / 2014-11-08 +------------------ + +- Implemented dumping of objects with circular and cross references. +- Partially fixed aliasing of constructed objects. (see issue #141 for details) + + +3.2.2 / 2014-09-07 +------------------ + +- Fixed infinite loop on unindented block scalars. +- Rewritten base64 encode/decode in binary type, to keep code licence clear. + + +3.2.1 / 2014-08-24 +------------------ + +- Nothig new. Just fix npm publish error. + + +3.2.0 / 2014-08-24 +------------------ + +- Added input piping support to CLI. +- Fixed typo, that could cause hand on initial indent (#139). + + +3.1.0 / 2014-07-07 +------------------ + +- 1.5x-2x speed boost. +- Removed deprecated `require('xxx.yml')` support. +- Significant code cleanup and refactoring. +- Internal API changed. If you used custom types - see updated examples. +  Others are not affected. +- Even if the input string has no trailing line break character, +  it will be parsed as if it has one. +- Added benchmark scripts. +- Moved bower files to /dist folder +- Bugfixes. + + +3.0.2 / 2014-02-27 +------------------ + +- Fixed bug: "constructor" string parsed as `null`. + + +3.0.1 / 2013-12-22 +------------------ + +- Fixed parsing of literal scalars. (issue #108) +- Prevented adding unnecessary spaces in object dumps. (issue #68) +- Fixed dumping of objects with very long (> 1024 in length) keys. + + +3.0.0 / 2013-12-16 +------------------ + +- Refactored code. Changed API for custom types. +- Removed output colors in CLI, dump json by default. +- Removed big dependencies from browser version (esprima, buffer) +  - load `esprima` manually, if !!js/function needed +  - !!bin now returns Array in browser +- AMD support. +- Don't quote dumped strings because of `-` & `?` (if not first char). +- __Deprecated__ loading yaml files via `require()`, as not recommended +  behaviour for node. + + +2.1.3 / 2013-10-16 +------------------ + +- Fix wrong loading of empty block scalars. + + +2.1.2 / 2013-10-07 +------------------ + +- Fix unwanted line breaks in folded scalars. + + +2.1.1 / 2013-10-02 +------------------ + +- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 +- Fixed reader bug in JSON-like sequences/mappings. + + +2.1.0 / 2013-06-05 +------------------ + +- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), +  JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). +- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` +  and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. +- Bug fix: export `NIL` constant from the public interface. +- Add `skipInvalid` dumper option. +- Use `safeLoad` for `require` extension. + + +2.0.5 / 2013-04-26 +------------------ + +- Close security issue in !!js/function constructor. +  Big thanks to @nealpoole for security audit. + + +2.0.4 / 2013-04-08 +------------------ + +- Updated .npmignore to reduce package size + + +2.0.3 / 2013-02-26 +------------------ + +- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) + + +2.0.2 / 2013-02-15 +------------------ + +- Fixed input validation: tabs are printable characters. + + +2.0.1 / 2013-02-09 +------------------ + +- Fixed error, when options not passed to function cass + + +2.0.0 / 2013-02-09 +------------------ + +- Full rewrite. New architecture. Fast one-stage parsing. +- Changed custom types API. +- Added YAML dumper. + + +1.0.3 / 2012-11-05 +------------------ + +- Fixed utf-8 files loading. + + +1.0.2 / 2012-08-02 +------------------ + +- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. +- Fix timstamps incorectly parsed in local time when no time part specified. + + +1.0.1 / 2012-07-07 +------------------ + +- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. +- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. + + +1.0.0 / 2012-07-01 +------------------ + +- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. +  Fixes #42. +- `require(filename)` now returns a single document and throws an Error if +  file contains more than one document. +- CLI was merged back from js-yaml.bin + + +0.3.7 / 2012-02-28 +------------------ + +- Fix export of `addConstructor()`. Closes #39. + + +0.3.6 / 2012-02-22 +------------------ + +- Removed AMD parts - too buggy to use. Need help to rewrite from scratch +- Removed YUI compressor warning (renamed `double` variable). Closes #40. + + +0.3.5 / 2012-01-10 +------------------ + +- Workagound for .npmignore fuckup under windows. Thanks to airportyh. + + +0.3.4 / 2011-12-24 +------------------ + +- Fixes str[] for oldIEs support. +- Adds better has change support for browserified demo. +- improves compact output of Error. Closes #33. + + +0.3.3 / 2011-12-20 +------------------ + +- jsyaml executable moved to separate module. +- adds `compact` stringification of Errors. + + +0.3.2 / 2011-12-16 +------------------ + +- Fixes ug with block style scalars. Closes #26. +- All sources are passing JSLint now. +- Fixes bug in Safari. Closes #28. +- Fixes bug in Opers. Closes #29. +- Improves browser support. Closes #20. +- Added jsyaml executable. +- Added !!js/function support. Closes #12. + + +0.3.1 / 2011-11-18 +------------------ + +- Added AMD support for browserified version. +- Wrapped browserified js-yaml into closure. +- Fixed the resolvement of non-specific tags. Closes #17. +- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. +- Added !!js/regexp and !!js/undefined types. Partially solves #12. +- Fixed !!set mapping. +- Fixed month parse in dates. Closes #19. + + +0.3.0 / 2011-11-09 +------------------ + +- Removed JS.Class dependency. Closes #3. +- Added browserified version. Closes #13. +- Added live demo of browserified version. +- Ported some of the PyYAML tests. See #14. +- Fixed timestamp bug when fraction was given. + + +0.2.2 / 2011-11-06 +------------------ + +- Fixed crash on docs without ---. Closes #8. +- Fixed miltiline string parse +- Fixed tests/comments for using array as key + + +0.2.1 / 2011-11-02 +------------------ + +- Fixed short file read (<4k). Closes #9. + + +0.2.0 / 2011-11-02 +------------------ + +- First public release diff --git a/node_modules/js-yaml/LICENSE b/node_modules/js-yaml/LICENSE new file mode 100644 index 0000000..09d3a29 --- /dev/null +++ b/node_modules/js-yaml/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/js-yaml/README.md b/node_modules/js-yaml/README.md new file mode 100644 index 0000000..03a9e5a --- /dev/null +++ b/node_modules/js-yaml/README.md @@ -0,0 +1,314 @@ +JS-YAML - YAML 1.2 parser / writer for JavaScript +================================================= + +[](https://travis-ci.org/nodeca/js-yaml) +[](https://www.npmjs.org/package/js-yaml) + +__[Online Demo](http://nodeca.github.com/js-yaml/)__ + + +This is an implementation of [YAML](http://yaml.org/), a human-friendly data +serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was +completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. + + +Installation +------------ + +### YAML module for node.js + +``` +npm install js-yaml +``` + + +### CLI executable + +If you want to inspect your YAML files from CLI, install js-yaml globally: + +``` +npm install -g js-yaml +``` + +#### Usage + +``` +usage: js-yaml [-h] [-v] [-c] [-t] file + +Positional arguments: +  file           File with YAML document(s) + +Optional arguments: +  -h, --help     Show this help message and exit. +  -v, --version  Show program's version number and exit. +  -c, --compact  Display errors in compact mode +  -t, --trace    Show stack trace on error +``` + + +### Bundled YAML library for browsers + +``` html +<!-- esprima required only for !!js/function --> +<script src="esprima.js"></script> +<script src="js-yaml.min.js"></script> +<script type="text/javascript"> +var doc = jsyaml.load('greeting: hello\nname: world'); +</script> +``` + +Browser support was done mostly for the online demo. If you find any errors - feel +free to send pull requests with fixes. Also note, that IE and other old browsers +needs [es5-shims](https://github.com/kriskowal/es5-shim) to operate. + +Notes: + +1. We have no resources to support browserified version. Don't expect it to be +   well tested. Don't expect fast fixes if something goes wrong there. +2. `!!js/function` in browser bundle will not work by default. If you really need +   it - load `esprima` parser first (via amd or directly). +3. `!!bin` in browser will return `Array`, because browsers do not support +   node.js `Buffer` and adding Buffer shims is completely useless on practice. + + +API +--- + +Here we cover the most 'useful' methods. If you need advanced details (creating +your own tags), see [wiki](https://github.com/nodeca/js-yaml/wiki) and +[examples](https://github.com/nodeca/js-yaml/tree/master/examples) for more +info. + +``` javascript +yaml = require('js-yaml'); +fs   = require('fs'); + +// Get document, or throw exception on error +try { +  var doc = yaml.safeLoad(fs.readFileSync('/home/ixti/example.yml', 'utf8')); +  console.log(doc); +} catch (e) { +  console.log(e); +} +``` + + +### safeLoad (string [ , options ]) + +**Recommended loading way.** Parses `string` as single YAML document. Returns a JavaScript +object or throws `YAMLException` on error. By default, does not support regexps, +functions and undefined. This method is safe for untrusted data. + +options: + +- `filename` _(default: null)_ - string to be used as a file path in +  error/warning messages. +- `onWarning` _(default: null)_ - function to call on warning messages. +  Loader will call this function with an instance of `YAMLException` for each warning. +- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ - specifies a schema to use. +  - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: +    http://www.yaml.org/spec/1.2/spec.html#id2802346 +  - `JSON_SCHEMA` - all JSON-supported types: +    http://www.yaml.org/spec/1.2/spec.html#id2803231 +  - `CORE_SCHEMA` - same as `JSON_SCHEMA`: +    http://www.yaml.org/spec/1.2/spec.html#id2804923 +  - `DEFAULT_SAFE_SCHEMA` - all supported YAML types, without unsafe ones +    (`!!js/undefined`, `!!js/regexp` and `!!js/function`): +    http://yaml.org/type/ +  - `DEFAULT_FULL_SCHEMA` - all supported YAML types. +- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. + +NOTE: This function **does not** understand multi-document sources, it throws +exception on those. + +NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. +So, the JSON schema is not as strictly defined in the YAML specification. +It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. +The core schema also has no such restrictions. It allows binary notation for integers. + + +### load (string [ , options ]) + +**Use with care with untrusted sources**. The same as `safeLoad()` but uses +`DEFAULT_FULL_SCHEMA` by default - adds some JavaScript-specific types: +`!!js/function`, `!!js/regexp` and `!!js/undefined`. For untrusted sources, you +must additionally validate object structure to avoid injections: + +``` javascript +var untrusted_code = '"toString": !<tag:yaml.org,2002:js/function> "function (){very_evil_thing();}"'; + +// I'm just converting that string, what could possibly go wrong? +require('js-yaml').load(untrusted_code) + '' +``` + + +### safeLoadAll (string [, iterator] [, options ]) + +Same as `safeLoad()`, but understands multi-document sources. Applies +`iterator` to each document if specified, or returns array of documents. + +``` javascript +var yaml = require('js-yaml'); + +yaml.safeLoadAll(data, function (doc) { +  console.log(doc); +}); +``` + + +### loadAll (string [, iterator] [ , options ]) + +Same as `safeLoadAll()` but uses `DEFAULT_FULL_SCHEMA` by default. + + +### safeDump (object [ , options ]) + +Serializes `object` as a YAML document. Uses `DEFAULT_SAFE_SCHEMA`, so it will +throw an exception if you try to dump regexps or functions. However, you can +disable exceptions by setting the `skipInvalid` option to `true`. + +options: + +- `indent` _(default: 2)_ - indentation width to use (in spaces). +- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements +- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function +  in the safe schema) and skip pairs and single values with such types. +- `flowLevel` (default: -1) - specifies level of nesting, when to switch from +  block to flow style for collections. -1 means block style everwhere +- `styles` - "tag" => "style" map. Each tag may have own set of styles. +- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ specifies a schema to use. +- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a +  function, use the function to sort the keys. +- `lineWidth` _(default: `80`)_ - set max line width. +- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references +- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older +  yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 +- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. + +The following table show availlable styles (e.g. "canonical", +"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml +output is shown on the right side after `=>` (default setting) or `->`: + +``` none +!!null +  "canonical"   -> "~" +  "lowercase"   => "null" +  "uppercase"   -> "NULL" +  "camelcase"   -> "Null" + +!!int +  "binary"      -> "0b1", "0b101010", "0b1110001111010" +  "octal"       -> "01", "052", "016172" +  "decimal"     => "1", "42", "7290" +  "hexadecimal" -> "0x1", "0x2A", "0x1C7A" + +!!bool +  "lowercase"   => "true", "false" +  "uppercase"   -> "TRUE", "FALSE" +  "camelcase"   -> "True", "False" + +!!float +  "lowercase"   => ".nan", '.inf' +  "uppercase"   -> ".NAN", '.INF' +  "camelcase"   -> ".NaN", '.Inf' +``` + +Example: + +``` javascript +safeDump (object, { +  'styles': { +    '!!null': 'canonical' // dump null as ~ +  }, +  'sortKeys': true        // sort object keys +}); +``` + +### dump (object [ , options ]) + +Same as `safeDump()` but without limits (uses `DEFAULT_FULL_SCHEMA` by default). + + +Supported YAML types +-------------------- + +The list of standard YAML tags and corresponding JavaScipt types. See also +[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and +[YAML types repository](http://yaml.org/type/). + +``` +!!null ''                   # null +!!bool 'yes'                # bool +!!int '3...'                # number +!!float '3.14...'           # number +!!binary '...base64...'     # buffer +!!timestamp 'YYYY-...'      # date +!!omap [ ... ]              # array of key-value pairs +!!pairs [ ... ]             # array or array pairs +!!set { ... }               # array of objects with given keys and null values +!!str '...'                 # string +!!seq [ ... ]               # array +!!map { ... }               # object +``` + +**JavaScript-specific tags** + +``` +!!js/regexp /pattern/gim            # RegExp +!!js/undefined ''                   # Undefined +!!js/function 'function () {...}'   # Function +``` + +Caveats +------- + +Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects +or arrays as keys, and stringifies (by calling `toString()` method) them at the +moment of adding them. + +``` yaml +--- +? [ foo, bar ] +: - baz +? { foo: bar } +: - baz +  - baz +``` + +``` javascript +{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } +``` + +Also, reading of properties on implicit block mapping keys is not supported yet. +So, the following YAML document cannot be loaded. + +``` yaml +&anchor foo: +  foo: bar +  *anchor: duplicate key +  baz: bat +  *anchor: duplicate key +``` + + +Breaking changes in 2.x.x -> 3.x.x +---------------------------------- + +If you have not used __custom__ tags or loader classes and not loaded yaml +files via `require()`, no changes are needed. Just upgrade the library. + +Otherwise, you should: + +1. Replace all occurrences of `require('xxxx.yml')` by `fs.readFileSync()` + +  `yaml.safeLoad()`. +2. rewrite your custom tags constructors and custom loader +  classes, to conform the new API. See +  [examples](https://github.com/nodeca/js-yaml/tree/master/examples) and +  [wiki](https://github.com/nodeca/js-yaml/wiki) for details. + + +License +------- + +View the [LICENSE](https://github.com/nodeca/js-yaml/blob/master/LICENSE) file +(MIT). diff --git a/node_modules/js-yaml/bin/js-yaml.js b/node_modules/js-yaml/bin/js-yaml.js new file mode 100755 index 0000000..e79186b --- /dev/null +++ b/node_modules/js-yaml/bin/js-yaml.js @@ -0,0 +1,132 @@ +#!/usr/bin/env node + + +'use strict'; + +/*eslint-disable no-console*/ + + +// stdlib +var fs    = require('fs'); + + +// 3rd-party +var argparse = require('argparse'); + + +// internal +var yaml = require('..'); + + +//////////////////////////////////////////////////////////////////////////////// + + +var cli = new argparse.ArgumentParser({ +  prog:     'js-yaml', +  version:  require('../package.json').version, +  addHelp:  true +}); + + +cli.addArgument([ '-c', '--compact' ], { +  help:   'Display errors in compact mode', +  action: 'storeTrue' +}); + + +// deprecated (not needed after we removed output colors) +// option suppressed, but not completely removed for compatibility +cli.addArgument([ '-j', '--to-json' ], { +  help:   argparse.Const.SUPPRESS, +  dest:   'json', +  action: 'storeTrue' +}); + + +cli.addArgument([ '-t', '--trace' ], { +  help:   'Show stack trace on error', +  action: 'storeTrue' +}); + +cli.addArgument([ 'file' ], { +  help:   'File to read, utf-8 encoded without BOM', +  nargs:  '?', +  defaultValue: '-' +}); + + +//////////////////////////////////////////////////////////////////////////////// + + +var options = cli.parseArgs(); + + +//////////////////////////////////////////////////////////////////////////////// + +function readFile(filename, encoding, callback) { +  if (options.file === '-') { +    // read from stdin + +    var chunks = []; + +    process.stdin.on('data', function (chunk) { +      chunks.push(chunk); +    }); + +    process.stdin.on('end', function () { +      return callback(null, Buffer.concat(chunks).toString(encoding)); +    }); +  } else { +    fs.readFile(filename, encoding, callback); +  } +} + +readFile(options.file, 'utf8', function (error, input) { +  var output, isYaml; + +  if (error) { +    if (error.code === 'ENOENT') { +      console.error('File not found: ' + options.file); +      process.exit(2); +    } + +    console.error( +      options.trace && error.stack || +      error.message || +      String(error)); + +    process.exit(1); +  } + +  try { +    output = JSON.parse(input); +    isYaml = false; +  } catch (err) { +    if (err instanceof SyntaxError) { +      try { +        output = []; +        yaml.loadAll(input, function (doc) { output.push(doc); }, {}); +        isYaml = true; + +        if (output.length === 0) output = null; +        else if (output.length === 1) output = output[0]; + +      } catch (e) { +        if (options.trace && err.stack) console.error(e.stack); +        else console.error(e.toString(options.compact)); + +        process.exit(1); +      } +    } else { +      console.error( +        options.trace && err.stack || +        err.message || +        String(err)); + +      process.exit(1); +    } +  } + +  if (isYaml) console.log(JSON.stringify(output, null, '  ')); +  else console.log(yaml.dump(output)); +}); diff --git a/node_modules/js-yaml/dist/js-yaml.js b/node_modules/js-yaml/dist/js-yaml.js new file mode 100644 index 0000000..fad044a --- /dev/null +++ b/node_modules/js-yaml/dist/js-yaml.js @@ -0,0 +1,3946 @@ +/* js-yaml 3.13.1 https://github.com/nodeca/js-yaml */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jsyaml = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ +'use strict'; + + +var loader = require('./js-yaml/loader'); +var dumper = require('./js-yaml/dumper'); + + +function deprecated(name) { +  return function () { +    throw new Error('Function ' + name + ' is deprecated and cannot be used.'); +  }; +} + + +module.exports.Type                = require('./js-yaml/type'); +module.exports.Schema              = require('./js-yaml/schema'); +module.exports.FAILSAFE_SCHEMA     = require('./js-yaml/schema/failsafe'); +module.exports.JSON_SCHEMA         = require('./js-yaml/schema/json'); +module.exports.CORE_SCHEMA         = require('./js-yaml/schema/core'); +module.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full'); +module.exports.load                = loader.load; +module.exports.loadAll             = loader.loadAll; +module.exports.safeLoad            = loader.safeLoad; +module.exports.safeLoadAll         = loader.safeLoadAll; +module.exports.dump                = dumper.dump; +module.exports.safeDump            = dumper.safeDump; +module.exports.YAMLException       = require('./js-yaml/exception'); + +// Deprecated schema names from JS-YAML 2.0.x +module.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe'); +module.exports.SAFE_SCHEMA    = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full'); + +// Deprecated functions from JS-YAML 1.x.x +module.exports.scan           = deprecated('scan'); +module.exports.parse          = deprecated('parse'); +module.exports.compose        = deprecated('compose'); +module.exports.addConstructor = deprecated('addConstructor'); + +},{"./js-yaml/dumper":3,"./js-yaml/exception":4,"./js-yaml/loader":5,"./js-yaml/schema":7,"./js-yaml/schema/core":8,"./js-yaml/schema/default_full":9,"./js-yaml/schema/default_safe":10,"./js-yaml/schema/failsafe":11,"./js-yaml/schema/json":12,"./js-yaml/type":13}],2:[function(require,module,exports){ +'use strict'; + + +function isNothing(subject) { +  return (typeof subject === 'undefined') || (subject === null); +} + + +function isObject(subject) { +  return (typeof subject === 'object') && (subject !== null); +} + + +function toArray(sequence) { +  if (Array.isArray(sequence)) return sequence; +  else if (isNothing(sequence)) return []; + +  return [ sequence ]; +} + + +function extend(target, source) { +  var index, length, key, sourceKeys; + +  if (source) { +    sourceKeys = Object.keys(source); + +    for (index = 0, length = sourceKeys.length; index < length; index += 1) { +      key = sourceKeys[index]; +      target[key] = source[key]; +    } +  } + +  return target; +} + + +function repeat(string, count) { +  var result = '', cycle; + +  for (cycle = 0; cycle < count; cycle += 1) { +    result += string; +  } + +  return result; +} + + +function isNegativeZero(number) { +  return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); +} + + +module.exports.isNothing      = isNothing; +module.exports.isObject       = isObject; +module.exports.toArray        = toArray; +module.exports.repeat         = repeat; +module.exports.isNegativeZero = isNegativeZero; +module.exports.extend         = extend; + +},{}],3:[function(require,module,exports){ +'use strict'; + +/*eslint-disable no-use-before-define*/ + +var common              = require('./common'); +var YAMLException       = require('./exception'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); + +var _toString       = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_TAB                  = 0x09; /* Tab */ +var CHAR_LINE_FEED            = 0x0A; /* LF */ +var CHAR_SPACE                = 0x20; /* Space */ +var CHAR_EXCLAMATION          = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE         = 0x22; /* " */ +var CHAR_SHARP                = 0x23; /* # */ +var CHAR_PERCENT              = 0x25; /* % */ +var CHAR_AMPERSAND            = 0x26; /* & */ +var CHAR_SINGLE_QUOTE         = 0x27; /* ' */ +var CHAR_ASTERISK             = 0x2A; /* * */ +var CHAR_COMMA                = 0x2C; /* , */ +var CHAR_MINUS                = 0x2D; /* - */ +var CHAR_COLON                = 0x3A; /* : */ +var CHAR_GREATER_THAN         = 0x3E; /* > */ +var CHAR_QUESTION             = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT        = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET  = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT         = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET   = 0x7B; /* { */ +var CHAR_VERTICAL_LINE        = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET  = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00]   = '\\0'; +ESCAPE_SEQUENCES[0x07]   = '\\a'; +ESCAPE_SEQUENCES[0x08]   = '\\b'; +ESCAPE_SEQUENCES[0x09]   = '\\t'; +ESCAPE_SEQUENCES[0x0A]   = '\\n'; +ESCAPE_SEQUENCES[0x0B]   = '\\v'; +ESCAPE_SEQUENCES[0x0C]   = '\\f'; +ESCAPE_SEQUENCES[0x0D]   = '\\r'; +ESCAPE_SEQUENCES[0x1B]   = '\\e'; +ESCAPE_SEQUENCES[0x22]   = '\\"'; +ESCAPE_SEQUENCES[0x5C]   = '\\\\'; +ESCAPE_SEQUENCES[0x85]   = '\\N'; +ESCAPE_SEQUENCES[0xA0]   = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ +  'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', +  'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +function compileStyleMap(schema, map) { +  var result, keys, index, length, tag, style, type; + +  if (map === null) return {}; + +  result = {}; +  keys = Object.keys(map); + +  for (index = 0, length = keys.length; index < length; index += 1) { +    tag = keys[index]; +    style = String(map[tag]); + +    if (tag.slice(0, 2) === '!!') { +      tag = 'tag:yaml.org,2002:' + tag.slice(2); +    } +    type = schema.compiledTypeMap['fallback'][tag]; + +    if (type && _hasOwnProperty.call(type.styleAliases, style)) { +      style = type.styleAliases[style]; +    } + +    result[tag] = style; +  } + +  return result; +} + +function encodeHex(character) { +  var string, handle, length; + +  string = character.toString(16).toUpperCase(); + +  if (character <= 0xFF) { +    handle = 'x'; +    length = 2; +  } else if (character <= 0xFFFF) { +    handle = 'u'; +    length = 4; +  } else if (character <= 0xFFFFFFFF) { +    handle = 'U'; +    length = 8; +  } else { +    throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); +  } + +  return '\\' + handle + common.repeat('0', length - string.length) + string; +} + +function State(options) { +  this.schema        = options['schema'] || DEFAULT_FULL_SCHEMA; +  this.indent        = Math.max(1, (options['indent'] || 2)); +  this.noArrayIndent = options['noArrayIndent'] || false; +  this.skipInvalid   = options['skipInvalid'] || false; +  this.flowLevel     = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); +  this.styleMap      = compileStyleMap(this.schema, options['styles'] || null); +  this.sortKeys      = options['sortKeys'] || false; +  this.lineWidth     = options['lineWidth'] || 80; +  this.noRefs        = options['noRefs'] || false; +  this.noCompatMode  = options['noCompatMode'] || false; +  this.condenseFlow  = options['condenseFlow'] || false; + +  this.implicitTypes = this.schema.compiledImplicit; +  this.explicitTypes = this.schema.compiledExplicit; + +  this.tag = null; +  this.result = ''; + +  this.duplicates = []; +  this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { +  var ind = common.repeat(' ', spaces), +      position = 0, +      next = -1, +      result = '', +      line, +      length = string.length; + +  while (position < length) { +    next = string.indexOf('\n', position); +    if (next === -1) { +      line = string.slice(position); +      position = length; +    } else { +      line = string.slice(position, next + 1); +      position = next + 1; +    } + +    if (line.length && line !== '\n') result += ind; + +    result += line; +  } + +  return result; +} + +function generateNextLine(state, level) { +  return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { +  var index, length, type; + +  for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { +    type = state.implicitTypes[index]; + +    if (type.resolve(str)) { +      return true; +    } +  } + +  return false; +} + +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { +  return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { +  return  (0x00020 <= c && c <= 0x00007E) +      || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) +      || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) +      ||  (0x10000 <= c && c <= 0x10FFFF); +} + +// Simplified test for values allowed after the first character in plain style. +function isPlainSafe(c) { +  // Uses a subset of nb-char - c-flow-indicator - ":" - "#" +  // where nb-char ::= c-printable - b-char - c-byte-order-mark. +  return isPrintable(c) && c !== 0xFEFF +    // - c-flow-indicator +    && c !== CHAR_COMMA +    && c !== CHAR_LEFT_SQUARE_BRACKET +    && c !== CHAR_RIGHT_SQUARE_BRACKET +    && c !== CHAR_LEFT_CURLY_BRACKET +    && c !== CHAR_RIGHT_CURLY_BRACKET +    // - ":" - "#" +    && c !== CHAR_COLON +    && c !== CHAR_SHARP; +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { +  // Uses a subset of ns-char - c-indicator +  // where ns-char = nb-char - s-white. +  return isPrintable(c) && c !== 0xFEFF +    && !isWhitespace(c) // - s-white +    // - (c-indicator ::= +    // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” +    && c !== CHAR_MINUS +    && c !== CHAR_QUESTION +    && c !== CHAR_COLON +    && c !== CHAR_COMMA +    && c !== CHAR_LEFT_SQUARE_BRACKET +    && c !== CHAR_RIGHT_SQUARE_BRACKET +    && c !== CHAR_LEFT_CURLY_BRACKET +    && c !== CHAR_RIGHT_CURLY_BRACKET +    // | “#” | “&” | “*” | “!” | “|” | “>” | “'” | “"” +    && c !== CHAR_SHARP +    && c !== CHAR_AMPERSAND +    && c !== CHAR_ASTERISK +    && c !== CHAR_EXCLAMATION +    && c !== CHAR_VERTICAL_LINE +    && c !== CHAR_GREATER_THAN +    && c !== CHAR_SINGLE_QUOTE +    && c !== CHAR_DOUBLE_QUOTE +    // | “%” | “@” | “`”) +    && c !== CHAR_PERCENT +    && c !== CHAR_COMMERCIAL_AT +    && c !== CHAR_GRAVE_ACCENT; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { +  var leadingSpaceRe = /^\n* /; +  return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN   = 1, +    STYLE_SINGLE  = 2, +    STYLE_LITERAL = 3, +    STYLE_FOLDED  = 4, +    STYLE_DOUBLE  = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +//    STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +//    STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +//    STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { +  var i; +  var char; +  var hasLineBreak = false; +  var hasFoldableLine = false; // only checked if shouldTrackWidth +  var shouldTrackWidth = lineWidth !== -1; +  var previousLineBreak = -1; // count the first line correctly +  var plain = isPlainSafeFirst(string.charCodeAt(0)) +          && !isWhitespace(string.charCodeAt(string.length - 1)); + +  if (singleLineOnly) { +    // Case: no block styles. +    // Check for disallowed characters to rule out plain and single. +    for (i = 0; i < string.length; i++) { +      char = string.charCodeAt(i); +      if (!isPrintable(char)) { +        return STYLE_DOUBLE; +      } +      plain = plain && isPlainSafe(char); +    } +  } else { +    // Case: block styles permitted. +    for (i = 0; i < string.length; i++) { +      char = string.charCodeAt(i); +      if (char === CHAR_LINE_FEED) { +        hasLineBreak = true; +        // Check if any line can be folded. +        if (shouldTrackWidth) { +          hasFoldableLine = hasFoldableLine || +            // Foldable line = too long, and not more-indented. +            (i - previousLineBreak - 1 > lineWidth && +             string[previousLineBreak + 1] !== ' '); +          previousLineBreak = i; +        } +      } else if (!isPrintable(char)) { +        return STYLE_DOUBLE; +      } +      plain = plain && isPlainSafe(char); +    } +    // in case the end is missing a \n +    hasFoldableLine = hasFoldableLine || (shouldTrackWidth && +      (i - previousLineBreak - 1 > lineWidth && +       string[previousLineBreak + 1] !== ' ')); +  } +  // Although every style can represent \n without escaping, prefer block styles +  // for multiline, since they're more readable and they don't add empty lines. +  // Also prefer folding a super-long line. +  if (!hasLineBreak && !hasFoldableLine) { +    // Strings interpretable as another type have to be quoted; +    // e.g. the string 'true' vs. the boolean true. +    return plain && !testAmbiguousType(string) +      ? STYLE_PLAIN : STYLE_SINGLE; +  } +  // Edge case: block indentation indicator can only have one digit. +  if (indentPerLevel > 9 && needIndentIndicator(string)) { +    return STYLE_DOUBLE; +  } +  // At this point we know block styles are valid. +  // Prefer literal style unless we want to fold. +  return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +//  since the dumper adds its own newline. This always works: +//    • No ending newline => unaffected; already using strip "-" chomping. +//    • Ending newline    => removed then restored. +//  Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey) { +  state.dump = (function () { +    if (string.length === 0) { +      return "''"; +    } +    if (!state.noCompatMode && +        DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { +      return "'" + string + "'"; +    } + +    var indent = state.indent * Math.max(1, level); // no 0-indent scalars +    // As indentation gets deeper, let the width decrease monotonically +    // to the lower bound min(state.lineWidth, 40). +    // Note that this implies +    //  state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. +    //  state.lineWidth > 40 + state.indent: width decreases until the lower bound. +    // This behaves better than a constant minimum width which disallows narrower options, +    // or an indent threshold which causes the width to suddenly increase. +    var lineWidth = state.lineWidth === -1 +      ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + +    // Without knowing if keys are implicit/explicit, assume implicit for safety. +    var singleLineOnly = iskey +      // No block styles in flow mode. +      || (state.flowLevel > -1 && level >= state.flowLevel); +    function testAmbiguity(string) { +      return testImplicitResolving(state, string); +    } + +    switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { +      case STYLE_PLAIN: +        return string; +      case STYLE_SINGLE: +        return "'" + string.replace(/'/g, "''") + "'"; +      case STYLE_LITERAL: +        return '|' + blockHeader(string, state.indent) +          + dropEndingNewline(indentString(string, indent)); +      case STYLE_FOLDED: +        return '>' + blockHeader(string, state.indent) +          + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); +      case STYLE_DOUBLE: +        return '"' + escapeString(string, lineWidth) + '"'; +      default: +        throw new YAMLException('impossible error: invalid scalar style'); +    } +  }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { +  var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + +  // note the special case: the string '\n' counts as a "trailing" empty line. +  var clip =          string[string.length - 1] === '\n'; +  var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); +  var chomp = keep ? '+' : (clip ? '' : '-'); + +  return indentIndicator + chomp + '\n'; +} + +// (See the note for writeScalar.) +function dropEndingNewline(string) { +  return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} + +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { +  // In folded style, $k$ consecutive newlines output as $k+1$ newlines— +  // unless they're before or after a more-indented line, or at the very +  // beginning or end, in which case $k$ maps to $k$. +  // Therefore, parse each chunk as newline(s) followed by a content line. +  var lineRe = /(\n+)([^\n]*)/g; + +  // first line (possibly an empty line) +  var result = (function () { +    var nextLF = string.indexOf('\n'); +    nextLF = nextLF !== -1 ? nextLF : string.length; +    lineRe.lastIndex = nextLF; +    return foldLine(string.slice(0, nextLF), width); +  }()); +  // If we haven't reached the first content line yet, don't add an extra \n. +  var prevMoreIndented = string[0] === '\n' || string[0] === ' '; +  var moreIndented; + +  // rest of the lines +  var match; +  while ((match = lineRe.exec(string))) { +    var prefix = match[1], line = match[2]; +    moreIndented = (line[0] === ' '); +    result += prefix +      + (!prevMoreIndented && !moreIndented && line !== '' +        ? '\n' : '') +      + foldLine(line, width); +    prevMoreIndented = moreIndented; +  } + +  return result; +} + +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { +  if (line === '' || line[0] === ' ') return line; + +  // Since a more-indented line adds a \n, breaks can't be followed by a space. +  var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. +  var match; +  // start is an inclusive index. end, curr, and next are exclusive. +  var start = 0, end, curr = 0, next = 0; +  var result = ''; + +  // Invariants: 0 <= start <= length-1. +  //   0 <= curr <= next <= max(0, length-2). curr - start <= width. +  // Inside the loop: +  //   A match implies length >= 2, so curr and next are <= length-2. +  while ((match = breakRe.exec(line))) { +    next = match.index; +    // maintain invariant: curr - start <= width +    if (next - start > width) { +      end = (curr > start) ? curr : next; // derive end <= length-2 +      result += '\n' + line.slice(start, end); +      // skip the space that was output as \n +      start = end + 1;                    // derive start <= length-1 +    } +    curr = next; +  } + +  // By the invariants, start <= length-1, so there is something left over. +  // It is either the whole string or a part starting from non-whitespace. +  result += '\n'; +  // Insert a break if the remainder is too long and there is a break available. +  if (line.length - start > width && curr > start) { +    result += line.slice(start, curr) + '\n' + line.slice(curr + 1); +  } else { +    result += line.slice(start); +  } + +  return result.slice(1); // drop extra \n joiner +} + +// Escapes a double-quoted string. +function escapeString(string) { +  var result = ''; +  var char, nextChar; +  var escapeSeq; + +  for (var i = 0; i < string.length; i++) { +    char = string.charCodeAt(i); +    // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates"). +    if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) { +      nextChar = string.charCodeAt(i + 1); +      if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) { +        // Combine the surrogate pair and store it escaped. +        result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); +        // Advance index one extra since we already used that char here. +        i++; continue; +      } +    } +    escapeSeq = ESCAPE_SEQUENCES[char]; +    result += !escapeSeq && isPrintable(char) +      ? string[i] +      : escapeSeq || encodeHex(char); +  } + +  return result; +} + +function writeFlowSequence(state, level, object) { +  var _result = '', +      _tag    = state.tag, +      index, +      length; + +  for (index = 0, length = object.length; index < length; index += 1) { +    // Write only valid elements. +    if (writeNode(state, level, object[index], false, false)) { +      if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : ''); +      _result += state.dump; +    } +  } + +  state.tag = _tag; +  state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { +  var _result = '', +      _tag    = state.tag, +      index, +      length; + +  for (index = 0, length = object.length; index < length; index += 1) { +    // Write only valid elements. +    if (writeNode(state, level + 1, object[index], true, true)) { +      if (!compact || index !== 0) { +        _result += generateNextLine(state, level); +      } + +      if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { +        _result += '-'; +      } else { +        _result += '- '; +      } + +      _result += state.dump; +    } +  } + +  state.tag = _tag; +  state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { +  var _result       = '', +      _tag          = state.tag, +      objectKeyList = Object.keys(object), +      index, +      length, +      objectKey, +      objectValue, +      pairBuffer; + +  for (index = 0, length = objectKeyList.length; index < length; index += 1) { +    pairBuffer = state.condenseFlow ? '"' : ''; + +    if (index !== 0) pairBuffer += ', '; + +    objectKey = objectKeyList[index]; +    objectValue = object[objectKey]; + +    if (!writeNode(state, level, objectKey, false, false)) { +      continue; // Skip this pair because of invalid key; +    } + +    if (state.dump.length > 1024) pairBuffer += '? '; + +    pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + +    if (!writeNode(state, level, objectValue, false, false)) { +      continue; // Skip this pair because of invalid value. +    } + +    pairBuffer += state.dump; + +    // Both key and value are valid. +    _result += pairBuffer; +  } + +  state.tag = _tag; +  state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { +  var _result       = '', +      _tag          = state.tag, +      objectKeyList = Object.keys(object), +      index, +      length, +      objectKey, +      objectValue, +      explicitPair, +      pairBuffer; + +  // Allow sorting keys so that the output file is deterministic +  if (state.sortKeys === true) { +    // Default sorting +    objectKeyList.sort(); +  } else if (typeof state.sortKeys === 'function') { +    // Custom sort function +    objectKeyList.sort(state.sortKeys); +  } else if (state.sortKeys) { +    // Something is wrong +    throw new YAMLException('sortKeys must be a boolean or a function'); +  } + +  for (index = 0, length = objectKeyList.length; index < length; index += 1) { +    pairBuffer = ''; + +    if (!compact || index !== 0) { +      pairBuffer += generateNextLine(state, level); +    } + +    objectKey = objectKeyList[index]; +    objectValue = object[objectKey]; + +    if (!writeNode(state, level + 1, objectKey, true, true, true)) { +      continue; // Skip this pair because of invalid key. +    } + +    explicitPair = (state.tag !== null && state.tag !== '?') || +                   (state.dump && state.dump.length > 1024); + +    if (explicitPair) { +      if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { +        pairBuffer += '?'; +      } else { +        pairBuffer += '? '; +      } +    } + +    pairBuffer += state.dump; + +    if (explicitPair) { +      pairBuffer += generateNextLine(state, level); +    } + +    if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { +      continue; // Skip this pair because of invalid value. +    } + +    if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { +      pairBuffer += ':'; +    } else { +      pairBuffer += ': '; +    } + +    pairBuffer += state.dump; + +    // Both key and value are valid. +    _result += pairBuffer; +  } + +  state.tag = _tag; +  state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { +  var _result, typeList, index, length, type, style; + +  typeList = explicit ? state.explicitTypes : state.implicitTypes; + +  for (index = 0, length = typeList.length; index < length; index += 1) { +    type = typeList[index]; + +    if ((type.instanceOf  || type.predicate) && +        (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && +        (!type.predicate  || type.predicate(object))) { + +      state.tag = explicit ? type.tag : '?'; + +      if (type.represent) { +        style = state.styleMap[type.tag] || type.defaultStyle; + +        if (_toString.call(type.represent) === '[object Function]') { +          _result = type.represent(object, style); +        } else if (_hasOwnProperty.call(type.represent, style)) { +          _result = type.represent[style](object, style); +        } else { +          throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); +        } + +        state.dump = _result; +      } + +      return true; +    } +  } + +  return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey) { +  state.tag = null; +  state.dump = object; + +  if (!detectType(state, object, false)) { +    detectType(state, object, true); +  } + +  var type = _toString.call(state.dump); + +  if (block) { +    block = (state.flowLevel < 0 || state.flowLevel > level); +  } + +  var objectOrArray = type === '[object Object]' || type === '[object Array]', +      duplicateIndex, +      duplicate; + +  if (objectOrArray) { +    duplicateIndex = state.duplicates.indexOf(object); +    duplicate = duplicateIndex !== -1; +  } + +  if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { +    compact = false; +  } + +  if (duplicate && state.usedDuplicates[duplicateIndex]) { +    state.dump = '*ref_' + duplicateIndex; +  } else { +    if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { +      state.usedDuplicates[duplicateIndex] = true; +    } +    if (type === '[object Object]') { +      if (block && (Object.keys(state.dump).length !== 0)) { +        writeBlockMapping(state, level, state.dump, compact); +        if (duplicate) { +          state.dump = '&ref_' + duplicateIndex + state.dump; +        } +      } else { +        writeFlowMapping(state, level, state.dump); +        if (duplicate) { +          state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; +        } +      } +    } else if (type === '[object Array]') { +      var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level; +      if (block && (state.dump.length !== 0)) { +        writeBlockSequence(state, arrayLevel, state.dump, compact); +        if (duplicate) { +          state.dump = '&ref_' + duplicateIndex + state.dump; +        } +      } else { +        writeFlowSequence(state, arrayLevel, state.dump); +        if (duplicate) { +          state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; +        } +      } +    } else if (type === '[object String]') { +      if (state.tag !== '?') { +        writeScalar(state, state.dump, level, iskey); +      } +    } else { +      if (state.skipInvalid) return false; +      throw new YAMLException('unacceptable kind of an object to dump ' + type); +    } + +    if (state.tag !== null && state.tag !== '?') { +      state.dump = '!<' + state.tag + '> ' + state.dump; +    } +  } + +  return true; +} + +function getDuplicateReferences(object, state) { +  var objects = [], +      duplicatesIndexes = [], +      index, +      length; + +  inspectNode(object, objects, duplicatesIndexes); + +  for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { +    state.duplicates.push(objects[duplicatesIndexes[index]]); +  } +  state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { +  var objectKeyList, +      index, +      length; + +  if (object !== null && typeof object === 'object') { +    index = objects.indexOf(object); +    if (index !== -1) { +      if (duplicatesIndexes.indexOf(index) === -1) { +        duplicatesIndexes.push(index); +      } +    } else { +      objects.push(object); + +      if (Array.isArray(object)) { +        for (index = 0, length = object.length; index < length; index += 1) { +          inspectNode(object[index], objects, duplicatesIndexes); +        } +      } else { +        objectKeyList = Object.keys(object); + +        for (index = 0, length = objectKeyList.length; index < length; index += 1) { +          inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); +        } +      } +    } +  } +} + +function dump(input, options) { +  options = options || {}; + +  var state = new State(options); + +  if (!state.noRefs) getDuplicateReferences(input, state); + +  if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; + +  return ''; +} + +function safeDump(input, options) { +  return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + +module.exports.dump     = dump; +module.exports.safeDump = safeDump; + +},{"./common":2,"./exception":4,"./schema/default_full":9,"./schema/default_safe":10}],4:[function(require,module,exports){ +// YAML error class. http://stackoverflow.com/questions/8458984 +// +'use strict'; + +function YAMLException(reason, mark) { +  // Super constructor +  Error.call(this); + +  this.name = 'YAMLException'; +  this.reason = reason; +  this.mark = mark; +  this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); + +  // Include stack trace in error object +  if (Error.captureStackTrace) { +    // Chrome and NodeJS +    Error.captureStackTrace(this, this.constructor); +  } else { +    // FF, IE 10+ and Safari 6+. Fallback for others +    this.stack = (new Error()).stack || ''; +  } +} + + +// Inherit from Error +YAMLException.prototype = Object.create(Error.prototype); +YAMLException.prototype.constructor = YAMLException; + + +YAMLException.prototype.toString = function toString(compact) { +  var result = this.name + ': '; + +  result += this.reason || '(unknown reason)'; + +  if (!compact && this.mark) { +    result += ' ' + this.mark.toString(); +  } + +  return result; +}; + + +module.exports = YAMLException; + +},{}],5:[function(require,module,exports){ +'use strict'; + +/*eslint-disable max-len,no-use-before-define*/ + +var common              = require('./common'); +var YAMLException       = require('./exception'); +var Mark                = require('./mark'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); + + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN   = 1; +var CONTEXT_FLOW_OUT  = 2; +var CONTEXT_BLOCK_IN  = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP  = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP  = 3; + + +var PATTERN_NON_PRINTABLE         = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS       = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE            = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI               = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function _class(obj) { return Object.prototype.toString.call(obj); } + +function is_EOL(c) { +  return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { +  return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { +  return (c === 0x09/* Tab */) || +         (c === 0x20/* Space */) || +         (c === 0x0A/* LF */) || +         (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { +  return c === 0x2C/* , */ || +         c === 0x5B/* [ */ || +         c === 0x5D/* ] */ || +         c === 0x7B/* { */ || +         c === 0x7D/* } */; +} + +function fromHexCode(c) { +  var lc; + +  if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { +    return c - 0x30; +  } + +  /*eslint-disable no-bitwise*/ +  lc = c | 0x20; + +  if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { +    return lc - 0x61 + 10; +  } + +  return -1; +} + +function escapedHexLen(c) { +  if (c === 0x78/* x */) { return 2; } +  if (c === 0x75/* u */) { return 4; } +  if (c === 0x55/* U */) { return 8; } +  return 0; +} + +function fromDecimalCode(c) { +  if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { +    return c - 0x30; +  } + +  return -1; +} + +function simpleEscapeSequence(c) { +  /* eslint-disable indent */ +  return (c === 0x30/* 0 */) ? '\x00' : +        (c === 0x61/* a */) ? '\x07' : +        (c === 0x62/* b */) ? '\x08' : +        (c === 0x74/* t */) ? '\x09' : +        (c === 0x09/* Tab */) ? '\x09' : +        (c === 0x6E/* n */) ? '\x0A' : +        (c === 0x76/* v */) ? '\x0B' : +        (c === 0x66/* f */) ? '\x0C' : +        (c === 0x72/* r */) ? '\x0D' : +        (c === 0x65/* e */) ? '\x1B' : +        (c === 0x20/* Space */) ? ' ' : +        (c === 0x22/* " */) ? '\x22' : +        (c === 0x2F/* / */) ? '/' : +        (c === 0x5C/* \ */) ? '\x5C' : +        (c === 0x4E/* N */) ? '\x85' : +        (c === 0x5F/* _ */) ? '\xA0' : +        (c === 0x4C/* L */) ? '\u2028' : +        (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { +  if (c <= 0xFFFF) { +    return String.fromCharCode(c); +  } +  // Encode UTF-16 surrogate pair +  // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF +  return String.fromCharCode( +    ((c - 0x010000) >> 10) + 0xD800, +    ((c - 0x010000) & 0x03FF) + 0xDC00 +  ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { +  simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; +  simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State(input, options) { +  this.input = input; + +  this.filename  = options['filename']  || null; +  this.schema    = options['schema']    || DEFAULT_FULL_SCHEMA; +  this.onWarning = options['onWarning'] || null; +  this.legacy    = options['legacy']    || false; +  this.json      = options['json']      || false; +  this.listener  = options['listener']  || null; + +  this.implicitTypes = this.schema.compiledImplicit; +  this.typeMap       = this.schema.compiledTypeMap; + +  this.length     = input.length; +  this.position   = 0; +  this.line       = 0; +  this.lineStart  = 0; +  this.lineIndent = 0; + +  this.documents = []; + +  /* +  this.version; +  this.checkLineBreaks; +  this.tagMap; +  this.anchorMap; +  this.tag; +  this.anchor; +  this.kind; +  this.result;*/ + +} + + +function generateError(state, message) { +  return new YAMLException( +    message, +    new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); +} + +function throwError(state, message) { +  throw generateError(state, message); +} + +function throwWarning(state, message) { +  if (state.onWarning) { +    state.onWarning.call(null, generateError(state, message)); +  } +} + + +var directiveHandlers = { + +  YAML: function handleYamlDirective(state, name, args) { + +    var match, major, minor; + +    if (state.version !== null) { +      throwError(state, 'duplication of %YAML directive'); +    } + +    if (args.length !== 1) { +      throwError(state, 'YAML directive accepts exactly one argument'); +    } + +    match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + +    if (match === null) { +      throwError(state, 'ill-formed argument of the YAML directive'); +    } + +    major = parseInt(match[1], 10); +    minor = parseInt(match[2], 10); + +    if (major !== 1) { +      throwError(state, 'unacceptable YAML version of the document'); +    } + +    state.version = args[0]; +    state.checkLineBreaks = (minor < 2); + +    if (minor !== 1 && minor !== 2) { +      throwWarning(state, 'unsupported YAML version of the document'); +    } +  }, + +  TAG: function handleTagDirective(state, name, args) { + +    var handle, prefix; + +    if (args.length !== 2) { +      throwError(state, 'TAG directive accepts exactly two arguments'); +    } + +    handle = args[0]; +    prefix = args[1]; + +    if (!PATTERN_TAG_HANDLE.test(handle)) { +      throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); +    } + +    if (_hasOwnProperty.call(state.tagMap, handle)) { +      throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); +    } + +    if (!PATTERN_TAG_URI.test(prefix)) { +      throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); +    } + +    state.tagMap[handle] = prefix; +  } +}; + + +function captureSegment(state, start, end, checkJson) { +  var _position, _length, _character, _result; + +  if (start < end) { +    _result = state.input.slice(start, end); + +    if (checkJson) { +      for (_position = 0, _length = _result.length; _position < _length; _position += 1) { +        _character = _result.charCodeAt(_position); +        if (!(_character === 0x09 || +              (0x20 <= _character && _character <= 0x10FFFF))) { +          throwError(state, 'expected valid JSON character'); +        } +      } +    } else if (PATTERN_NON_PRINTABLE.test(_result)) { +      throwError(state, 'the stream contains non-printable characters'); +    } + +    state.result += _result; +  } +} + +function mergeMappings(state, destination, source, overridableKeys) { +  var sourceKeys, key, index, quantity; + +  if (!common.isObject(source)) { +    throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); +  } + +  sourceKeys = Object.keys(source); + +  for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { +    key = sourceKeys[index]; + +    if (!_hasOwnProperty.call(destination, key)) { +      destination[key] = source[key]; +      overridableKeys[key] = true; +    } +  } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { +  var index, quantity; + +  // The output is a plain object here, so keys can only be strings. +  // We need to convert keyNode to a string, but doing so can hang the process +  // (deeply nested arrays that explode exponentially using aliases). +  if (Array.isArray(keyNode)) { +    keyNode = Array.prototype.slice.call(keyNode); + +    for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { +      if (Array.isArray(keyNode[index])) { +        throwError(state, 'nested arrays are not supported inside keys'); +      } + +      if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { +        keyNode[index] = '[object Object]'; +      } +    } +  } + +  // Avoid code execution in load() via toString property +  // (still use its own toString for arrays, timestamps, +  // and whatever user schema extensions happen to have @@toStringTag) +  if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { +    keyNode = '[object Object]'; +  } + + +  keyNode = String(keyNode); + +  if (_result === null) { +    _result = {}; +  } + +  if (keyTag === 'tag:yaml.org,2002:merge') { +    if (Array.isArray(valueNode)) { +      for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { +        mergeMappings(state, _result, valueNode[index], overridableKeys); +      } +    } else { +      mergeMappings(state, _result, valueNode, overridableKeys); +    } +  } else { +    if (!state.json && +        !_hasOwnProperty.call(overridableKeys, keyNode) && +        _hasOwnProperty.call(_result, keyNode)) { +      state.line = startLine || state.line; +      state.position = startPos || state.position; +      throwError(state, 'duplicated mapping key'); +    } +    _result[keyNode] = valueNode; +    delete overridableKeys[keyNode]; +  } + +  return _result; +} + +function readLineBreak(state) { +  var ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch === 0x0A/* LF */) { +    state.position++; +  } else if (ch === 0x0D/* CR */) { +    state.position++; +    if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { +      state.position++; +    } +  } else { +    throwError(state, 'a line break is expected'); +  } + +  state.line += 1; +  state.lineStart = state.position; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { +  var lineBreaks = 0, +      ch = state.input.charCodeAt(state.position); + +  while (ch !== 0) { +    while (is_WHITE_SPACE(ch)) { +      ch = state.input.charCodeAt(++state.position); +    } + +    if (allowComments && ch === 0x23/* # */) { +      do { +        ch = state.input.charCodeAt(++state.position); +      } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); +    } + +    if (is_EOL(ch)) { +      readLineBreak(state); + +      ch = state.input.charCodeAt(state.position); +      lineBreaks++; +      state.lineIndent = 0; + +      while (ch === 0x20/* Space */) { +        state.lineIndent++; +        ch = state.input.charCodeAt(++state.position); +      } +    } else { +      break; +    } +  } + +  if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { +    throwWarning(state, 'deficient indentation'); +  } + +  return lineBreaks; +} + +function testDocumentSeparator(state) { +  var _position = state.position, +      ch; + +  ch = state.input.charCodeAt(_position); + +  // Condition state.position === state.lineStart is tested +  // in parent on each call, for efficiency. No needs to test here again. +  if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && +      ch === state.input.charCodeAt(_position + 1) && +      ch === state.input.charCodeAt(_position + 2)) { + +    _position += 3; + +    ch = state.input.charCodeAt(_position); + +    if (ch === 0 || is_WS_OR_EOL(ch)) { +      return true; +    } +  } + +  return false; +} + +function writeFoldedLines(state, count) { +  if (count === 1) { +    state.result += ' '; +  } else if (count > 1) { +    state.result += common.repeat('\n', count - 1); +  } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { +  var preceding, +      following, +      captureStart, +      captureEnd, +      hasPendingContent, +      _line, +      _lineStart, +      _lineIndent, +      _kind = state.kind, +      _result = state.result, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (is_WS_OR_EOL(ch)      || +      is_FLOW_INDICATOR(ch) || +      ch === 0x23/* # */    || +      ch === 0x26/* & */    || +      ch === 0x2A/* * */    || +      ch === 0x21/* ! */    || +      ch === 0x7C/* | */    || +      ch === 0x3E/* > */    || +      ch === 0x27/* ' */    || +      ch === 0x22/* " */    || +      ch === 0x25/* % */    || +      ch === 0x40/* @ */    || +      ch === 0x60/* ` */) { +    return false; +  } + +  if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { +    following = state.input.charCodeAt(state.position + 1); + +    if (is_WS_OR_EOL(following) || +        withinFlowCollection && is_FLOW_INDICATOR(following)) { +      return false; +    } +  } + +  state.kind = 'scalar'; +  state.result = ''; +  captureStart = captureEnd = state.position; +  hasPendingContent = false; + +  while (ch !== 0) { +    if (ch === 0x3A/* : */) { +      following = state.input.charCodeAt(state.position + 1); + +      if (is_WS_OR_EOL(following) || +          withinFlowCollection && is_FLOW_INDICATOR(following)) { +        break; +      } + +    } else if (ch === 0x23/* # */) { +      preceding = state.input.charCodeAt(state.position - 1); + +      if (is_WS_OR_EOL(preceding)) { +        break; +      } + +    } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || +               withinFlowCollection && is_FLOW_INDICATOR(ch)) { +      break; + +    } else if (is_EOL(ch)) { +      _line = state.line; +      _lineStart = state.lineStart; +      _lineIndent = state.lineIndent; +      skipSeparationSpace(state, false, -1); + +      if (state.lineIndent >= nodeIndent) { +        hasPendingContent = true; +        ch = state.input.charCodeAt(state.position); +        continue; +      } else { +        state.position = captureEnd; +        state.line = _line; +        state.lineStart = _lineStart; +        state.lineIndent = _lineIndent; +        break; +      } +    } + +    if (hasPendingContent) { +      captureSegment(state, captureStart, captureEnd, false); +      writeFoldedLines(state, state.line - _line); +      captureStart = captureEnd = state.position; +      hasPendingContent = false; +    } + +    if (!is_WHITE_SPACE(ch)) { +      captureEnd = state.position + 1; +    } + +    ch = state.input.charCodeAt(++state.position); +  } + +  captureSegment(state, captureStart, captureEnd, false); + +  if (state.result) { +    return true; +  } + +  state.kind = _kind; +  state.result = _result; +  return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { +  var ch, +      captureStart, captureEnd; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x27/* ' */) { +    return false; +  } + +  state.kind = 'scalar'; +  state.result = ''; +  state.position++; +  captureStart = captureEnd = state.position; + +  while ((ch = state.input.charCodeAt(state.position)) !== 0) { +    if (ch === 0x27/* ' */) { +      captureSegment(state, captureStart, state.position, true); +      ch = state.input.charCodeAt(++state.position); + +      if (ch === 0x27/* ' */) { +        captureStart = state.position; +        state.position++; +        captureEnd = state.position; +      } else { +        return true; +      } + +    } else if (is_EOL(ch)) { +      captureSegment(state, captureStart, captureEnd, true); +      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); +      captureStart = captureEnd = state.position; + +    } else if (state.position === state.lineStart && testDocumentSeparator(state)) { +      throwError(state, 'unexpected end of the document within a single quoted scalar'); + +    } else { +      state.position++; +      captureEnd = state.position; +    } +  } + +  throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { +  var captureStart, +      captureEnd, +      hexLength, +      hexResult, +      tmp, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x22/* " */) { +    return false; +  } + +  state.kind = 'scalar'; +  state.result = ''; +  state.position++; +  captureStart = captureEnd = state.position; + +  while ((ch = state.input.charCodeAt(state.position)) !== 0) { +    if (ch === 0x22/* " */) { +      captureSegment(state, captureStart, state.position, true); +      state.position++; +      return true; + +    } else if (ch === 0x5C/* \ */) { +      captureSegment(state, captureStart, state.position, true); +      ch = state.input.charCodeAt(++state.position); + +      if (is_EOL(ch)) { +        skipSeparationSpace(state, false, nodeIndent); + +        // TODO: rework to inline fn with no type cast? +      } else if (ch < 256 && simpleEscapeCheck[ch]) { +        state.result += simpleEscapeMap[ch]; +        state.position++; + +      } else if ((tmp = escapedHexLen(ch)) > 0) { +        hexLength = tmp; +        hexResult = 0; + +        for (; hexLength > 0; hexLength--) { +          ch = state.input.charCodeAt(++state.position); + +          if ((tmp = fromHexCode(ch)) >= 0) { +            hexResult = (hexResult << 4) + tmp; + +          } else { +            throwError(state, 'expected hexadecimal character'); +          } +        } + +        state.result += charFromCodepoint(hexResult); + +        state.position++; + +      } else { +        throwError(state, 'unknown escape sequence'); +      } + +      captureStart = captureEnd = state.position; + +    } else if (is_EOL(ch)) { +      captureSegment(state, captureStart, captureEnd, true); +      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); +      captureStart = captureEnd = state.position; + +    } else if (state.position === state.lineStart && testDocumentSeparator(state)) { +      throwError(state, 'unexpected end of the document within a double quoted scalar'); + +    } else { +      state.position++; +      captureEnd = state.position; +    } +  } + +  throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { +  var readNext = true, +      _line, +      _tag     = state.tag, +      _result, +      _anchor  = state.anchor, +      following, +      terminator, +      isPair, +      isExplicitPair, +      isMapping, +      overridableKeys = {}, +      keyNode, +      keyTag, +      valueNode, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch === 0x5B/* [ */) { +    terminator = 0x5D;/* ] */ +    isMapping = false; +    _result = []; +  } else if (ch === 0x7B/* { */) { +    terminator = 0x7D;/* } */ +    isMapping = true; +    _result = {}; +  } else { +    return false; +  } + +  if (state.anchor !== null) { +    state.anchorMap[state.anchor] = _result; +  } + +  ch = state.input.charCodeAt(++state.position); + +  while (ch !== 0) { +    skipSeparationSpace(state, true, nodeIndent); + +    ch = state.input.charCodeAt(state.position); + +    if (ch === terminator) { +      state.position++; +      state.tag = _tag; +      state.anchor = _anchor; +      state.kind = isMapping ? 'mapping' : 'sequence'; +      state.result = _result; +      return true; +    } else if (!readNext) { +      throwError(state, 'missed comma between flow collection entries'); +    } + +    keyTag = keyNode = valueNode = null; +    isPair = isExplicitPair = false; + +    if (ch === 0x3F/* ? */) { +      following = state.input.charCodeAt(state.position + 1); + +      if (is_WS_OR_EOL(following)) { +        isPair = isExplicitPair = true; +        state.position++; +        skipSeparationSpace(state, true, nodeIndent); +      } +    } + +    _line = state.line; +    composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); +    keyTag = state.tag; +    keyNode = state.result; +    skipSeparationSpace(state, true, nodeIndent); + +    ch = state.input.charCodeAt(state.position); + +    if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { +      isPair = true; +      ch = state.input.charCodeAt(++state.position); +      skipSeparationSpace(state, true, nodeIndent); +      composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); +      valueNode = state.result; +    } + +    if (isMapping) { +      storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); +    } else if (isPair) { +      _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); +    } else { +      _result.push(keyNode); +    } + +    skipSeparationSpace(state, true, nodeIndent); + +    ch = state.input.charCodeAt(state.position); + +    if (ch === 0x2C/* , */) { +      readNext = true; +      ch = state.input.charCodeAt(++state.position); +    } else { +      readNext = false; +    } +  } + +  throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { +  var captureStart, +      folding, +      chomping       = CHOMPING_CLIP, +      didReadContent = false, +      detectedIndent = false, +      textIndent     = nodeIndent, +      emptyLines     = 0, +      atMoreIndented = false, +      tmp, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch === 0x7C/* | */) { +    folding = false; +  } else if (ch === 0x3E/* > */) { +    folding = true; +  } else { +    return false; +  } + +  state.kind = 'scalar'; +  state.result = ''; + +  while (ch !== 0) { +    ch = state.input.charCodeAt(++state.position); + +    if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { +      if (CHOMPING_CLIP === chomping) { +        chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; +      } else { +        throwError(state, 'repeat of a chomping mode identifier'); +      } + +    } else if ((tmp = fromDecimalCode(ch)) >= 0) { +      if (tmp === 0) { +        throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); +      } else if (!detectedIndent) { +        textIndent = nodeIndent + tmp - 1; +        detectedIndent = true; +      } else { +        throwError(state, 'repeat of an indentation width identifier'); +      } + +    } else { +      break; +    } +  } + +  if (is_WHITE_SPACE(ch)) { +    do { ch = state.input.charCodeAt(++state.position); } +    while (is_WHITE_SPACE(ch)); + +    if (ch === 0x23/* # */) { +      do { ch = state.input.charCodeAt(++state.position); } +      while (!is_EOL(ch) && (ch !== 0)); +    } +  } + +  while (ch !== 0) { +    readLineBreak(state); +    state.lineIndent = 0; + +    ch = state.input.charCodeAt(state.position); + +    while ((!detectedIndent || state.lineIndent < textIndent) && +           (ch === 0x20/* Space */)) { +      state.lineIndent++; +      ch = state.input.charCodeAt(++state.position); +    } + +    if (!detectedIndent && state.lineIndent > textIndent) { +      textIndent = state.lineIndent; +    } + +    if (is_EOL(ch)) { +      emptyLines++; +      continue; +    } + +    // End of the scalar. +    if (state.lineIndent < textIndent) { + +      // Perform the chomping. +      if (chomping === CHOMPING_KEEP) { +        state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); +      } else if (chomping === CHOMPING_CLIP) { +        if (didReadContent) { // i.e. only if the scalar is not empty. +          state.result += '\n'; +        } +      } + +      // Break this `while` cycle and go to the funciton's epilogue. +      break; +    } + +    // Folded style: use fancy rules to handle line breaks. +    if (folding) { + +      // Lines starting with white space characters (more-indented lines) are not folded. +      if (is_WHITE_SPACE(ch)) { +        atMoreIndented = true; +        // except for the first content line (cf. Example 8.1) +        state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + +      // End of more-indented block. +      } else if (atMoreIndented) { +        atMoreIndented = false; +        state.result += common.repeat('\n', emptyLines + 1); + +      // Just one line break - perceive as the same line. +      } else if (emptyLines === 0) { +        if (didReadContent) { // i.e. only if we have already read some scalar content. +          state.result += ' '; +        } + +      // Several line breaks - perceive as different lines. +      } else { +        state.result += common.repeat('\n', emptyLines); +      } + +    // Literal style: just add exact number of line breaks between content lines. +    } else { +      // Keep all line breaks except the header line break. +      state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); +    } + +    didReadContent = true; +    detectedIndent = true; +    emptyLines = 0; +    captureStart = state.position; + +    while (!is_EOL(ch) && (ch !== 0)) { +      ch = state.input.charCodeAt(++state.position); +    } + +    captureSegment(state, captureStart, state.position, false); +  } + +  return true; +} + +function readBlockSequence(state, nodeIndent) { +  var _line, +      _tag      = state.tag, +      _anchor   = state.anchor, +      _result   = [], +      following, +      detected  = false, +      ch; + +  if (state.anchor !== null) { +    state.anchorMap[state.anchor] = _result; +  } + +  ch = state.input.charCodeAt(state.position); + +  while (ch !== 0) { + +    if (ch !== 0x2D/* - */) { +      break; +    } + +    following = state.input.charCodeAt(state.position + 1); + +    if (!is_WS_OR_EOL(following)) { +      break; +    } + +    detected = true; +    state.position++; + +    if (skipSeparationSpace(state, true, -1)) { +      if (state.lineIndent <= nodeIndent) { +        _result.push(null); +        ch = state.input.charCodeAt(state.position); +        continue; +      } +    } + +    _line = state.line; +    composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); +    _result.push(state.result); +    skipSeparationSpace(state, true, -1); + +    ch = state.input.charCodeAt(state.position); + +    if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { +      throwError(state, 'bad indentation of a sequence entry'); +    } else if (state.lineIndent < nodeIndent) { +      break; +    } +  } + +  if (detected) { +    state.tag = _tag; +    state.anchor = _anchor; +    state.kind = 'sequence'; +    state.result = _result; +    return true; +  } +  return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { +  var following, +      allowCompact, +      _line, +      _pos, +      _tag          = state.tag, +      _anchor       = state.anchor, +      _result       = {}, +      overridableKeys = {}, +      keyTag        = null, +      keyNode       = null, +      valueNode     = null, +      atExplicitKey = false, +      detected      = false, +      ch; + +  if (state.anchor !== null) { +    state.anchorMap[state.anchor] = _result; +  } + +  ch = state.input.charCodeAt(state.position); + +  while (ch !== 0) { +    following = state.input.charCodeAt(state.position + 1); +    _line = state.line; // Save the current line. +    _pos = state.position; + +    // +    // Explicit notation case. There are two separate blocks: +    // first for the key (denoted by "?") and second for the value (denoted by ":") +    // +    if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + +      if (ch === 0x3F/* ? */) { +        if (atExplicitKey) { +          storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); +          keyTag = keyNode = valueNode = null; +        } + +        detected = true; +        atExplicitKey = true; +        allowCompact = true; + +      } else if (atExplicitKey) { +        // i.e. 0x3A/* : */ === character after the explicit key. +        atExplicitKey = false; +        allowCompact = true; + +      } else { +        throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); +      } + +      state.position += 1; +      ch = following; + +    // +    // Implicit notation case. Flow-style node as the key first, then ":", and the value. +    // +    } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + +      if (state.line === _line) { +        ch = state.input.charCodeAt(state.position); + +        while (is_WHITE_SPACE(ch)) { +          ch = state.input.charCodeAt(++state.position); +        } + +        if (ch === 0x3A/* : */) { +          ch = state.input.charCodeAt(++state.position); + +          if (!is_WS_OR_EOL(ch)) { +            throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); +          } + +          if (atExplicitKey) { +            storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); +            keyTag = keyNode = valueNode = null; +          } + +          detected = true; +          atExplicitKey = false; +          allowCompact = false; +          keyTag = state.tag; +          keyNode = state.result; + +        } else if (detected) { +          throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + +        } else { +          state.tag = _tag; +          state.anchor = _anchor; +          return true; // Keep the result of `composeNode`. +        } + +      } else if (detected) { +        throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + +      } else { +        state.tag = _tag; +        state.anchor = _anchor; +        return true; // Keep the result of `composeNode`. +      } + +    } else { +      break; // Reading is done. Go to the epilogue. +    } + +    // +    // Common reading code for both explicit and implicit notations. +    // +    if (state.line === _line || state.lineIndent > nodeIndent) { +      if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { +        if (atExplicitKey) { +          keyNode = state.result; +        } else { +          valueNode = state.result; +        } +      } + +      if (!atExplicitKey) { +        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); +        keyTag = keyNode = valueNode = null; +      } + +      skipSeparationSpace(state, true, -1); +      ch = state.input.charCodeAt(state.position); +    } + +    if (state.lineIndent > nodeIndent && (ch !== 0)) { +      throwError(state, 'bad indentation of a mapping entry'); +    } else if (state.lineIndent < nodeIndent) { +      break; +    } +  } + +  // +  // Epilogue. +  // + +  // Special case: last mapping's node contains only the key in explicit notation. +  if (atExplicitKey) { +    storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); +  } + +  // Expose the resulting mapping. +  if (detected) { +    state.tag = _tag; +    state.anchor = _anchor; +    state.kind = 'mapping'; +    state.result = _result; +  } + +  return detected; +} + +function readTagProperty(state) { +  var _position, +      isVerbatim = false, +      isNamed    = false, +      tagHandle, +      tagName, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x21/* ! */) return false; + +  if (state.tag !== null) { +    throwError(state, 'duplication of a tag property'); +  } + +  ch = state.input.charCodeAt(++state.position); + +  if (ch === 0x3C/* < */) { +    isVerbatim = true; +    ch = state.input.charCodeAt(++state.position); + +  } else if (ch === 0x21/* ! */) { +    isNamed = true; +    tagHandle = '!!'; +    ch = state.input.charCodeAt(++state.position); + +  } else { +    tagHandle = '!'; +  } + +  _position = state.position; + +  if (isVerbatim) { +    do { ch = state.input.charCodeAt(++state.position); } +    while (ch !== 0 && ch !== 0x3E/* > */); + +    if (state.position < state.length) { +      tagName = state.input.slice(_position, state.position); +      ch = state.input.charCodeAt(++state.position); +    } else { +      throwError(state, 'unexpected end of the stream within a verbatim tag'); +    } +  } else { +    while (ch !== 0 && !is_WS_OR_EOL(ch)) { + +      if (ch === 0x21/* ! */) { +        if (!isNamed) { +          tagHandle = state.input.slice(_position - 1, state.position + 1); + +          if (!PATTERN_TAG_HANDLE.test(tagHandle)) { +            throwError(state, 'named tag handle cannot contain such characters'); +          } + +          isNamed = true; +          _position = state.position + 1; +        } else { +          throwError(state, 'tag suffix cannot contain exclamation marks'); +        } +      } + +      ch = state.input.charCodeAt(++state.position); +    } + +    tagName = state.input.slice(_position, state.position); + +    if (PATTERN_FLOW_INDICATORS.test(tagName)) { +      throwError(state, 'tag suffix cannot contain flow indicator characters'); +    } +  } + +  if (tagName && !PATTERN_TAG_URI.test(tagName)) { +    throwError(state, 'tag name cannot contain such characters: ' + tagName); +  } + +  if (isVerbatim) { +    state.tag = tagName; + +  } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { +    state.tag = state.tagMap[tagHandle] + tagName; + +  } else if (tagHandle === '!') { +    state.tag = '!' + tagName; + +  } else if (tagHandle === '!!') { +    state.tag = 'tag:yaml.org,2002:' + tagName; + +  } else { +    throwError(state, 'undeclared tag handle "' + tagHandle + '"'); +  } + +  return true; +} + +function readAnchorProperty(state) { +  var _position, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x26/* & */) return false; + +  if (state.anchor !== null) { +    throwError(state, 'duplication of an anchor property'); +  } + +  ch = state.input.charCodeAt(++state.position); +  _position = state.position; + +  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { +    ch = state.input.charCodeAt(++state.position); +  } + +  if (state.position === _position) { +    throwError(state, 'name of an anchor node must contain at least one character'); +  } + +  state.anchor = state.input.slice(_position, state.position); +  return true; +} + +function readAlias(state) { +  var _position, alias, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x2A/* * */) return false; + +  ch = state.input.charCodeAt(++state.position); +  _position = state.position; + +  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { +    ch = state.input.charCodeAt(++state.position); +  } + +  if (state.position === _position) { +    throwError(state, 'name of an alias node must contain at least one character'); +  } + +  alias = state.input.slice(_position, state.position); + +  if (!state.anchorMap.hasOwnProperty(alias)) { +    throwError(state, 'unidentified alias "' + alias + '"'); +  } + +  state.result = state.anchorMap[alias]; +  skipSeparationSpace(state, true, -1); +  return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { +  var allowBlockStyles, +      allowBlockScalars, +      allowBlockCollections, +      indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent +      atNewLine  = false, +      hasContent = false, +      typeIndex, +      typeQuantity, +      type, +      flowIndent, +      blockIndent; + +  if (state.listener !== null) { +    state.listener('open', state); +  } + +  state.tag    = null; +  state.anchor = null; +  state.kind   = null; +  state.result = null; + +  allowBlockStyles = allowBlockScalars = allowBlockCollections = +    CONTEXT_BLOCK_OUT === nodeContext || +    CONTEXT_BLOCK_IN  === nodeContext; + +  if (allowToSeek) { +    if (skipSeparationSpace(state, true, -1)) { +      atNewLine = true; + +      if (state.lineIndent > parentIndent) { +        indentStatus = 1; +      } else if (state.lineIndent === parentIndent) { +        indentStatus = 0; +      } else if (state.lineIndent < parentIndent) { +        indentStatus = -1; +      } +    } +  } + +  if (indentStatus === 1) { +    while (readTagProperty(state) || readAnchorProperty(state)) { +      if (skipSeparationSpace(state, true, -1)) { +        atNewLine = true; +        allowBlockCollections = allowBlockStyles; + +        if (state.lineIndent > parentIndent) { +          indentStatus = 1; +        } else if (state.lineIndent === parentIndent) { +          indentStatus = 0; +        } else if (state.lineIndent < parentIndent) { +          indentStatus = -1; +        } +      } else { +        allowBlockCollections = false; +      } +    } +  } + +  if (allowBlockCollections) { +    allowBlockCollections = atNewLine || allowCompact; +  } + +  if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { +    if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { +      flowIndent = parentIndent; +    } else { +      flowIndent = parentIndent + 1; +    } + +    blockIndent = state.position - state.lineStart; + +    if (indentStatus === 1) { +      if (allowBlockCollections && +          (readBlockSequence(state, blockIndent) || +           readBlockMapping(state, blockIndent, flowIndent)) || +          readFlowCollection(state, flowIndent)) { +        hasContent = true; +      } else { +        if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || +            readSingleQuotedScalar(state, flowIndent) || +            readDoubleQuotedScalar(state, flowIndent)) { +          hasContent = true; + +        } else if (readAlias(state)) { +          hasContent = true; + +          if (state.tag !== null || state.anchor !== null) { +            throwError(state, 'alias node should not have any properties'); +          } + +        } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { +          hasContent = true; + +          if (state.tag === null) { +            state.tag = '?'; +          } +        } + +        if (state.anchor !== null) { +          state.anchorMap[state.anchor] = state.result; +        } +      } +    } else if (indentStatus === 0) { +      // Special case: block sequences are allowed to have same indentation level as the parent. +      // http://www.yaml.org/spec/1.2/spec.html#id2799784 +      hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); +    } +  } + +  if (state.tag !== null && state.tag !== '!') { +    if (state.tag === '?') { +      for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { +        type = state.implicitTypes[typeIndex]; + +        // Implicit resolving is not allowed for non-scalar types, and '?' +        // non-specific tag is only assigned to plain scalars. So, it isn't +        // needed to check for 'kind' conformity. + +        if (type.resolve(state.result)) { // `state.result` updated in resolver if matched +          state.result = type.construct(state.result); +          state.tag = type.tag; +          if (state.anchor !== null) { +            state.anchorMap[state.anchor] = state.result; +          } +          break; +        } +      } +    } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { +      type = state.typeMap[state.kind || 'fallback'][state.tag]; + +      if (state.result !== null && type.kind !== state.kind) { +        throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); +      } + +      if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched +        throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); +      } else { +        state.result = type.construct(state.result); +        if (state.anchor !== null) { +          state.anchorMap[state.anchor] = state.result; +        } +      } +    } else { +      throwError(state, 'unknown tag !<' + state.tag + '>'); +    } +  } + +  if (state.listener !== null) { +    state.listener('close', state); +  } +  return state.tag !== null ||  state.anchor !== null || hasContent; +} + +function readDocument(state) { +  var documentStart = state.position, +      _position, +      directiveName, +      directiveArgs, +      hasDirectives = false, +      ch; + +  state.version = null; +  state.checkLineBreaks = state.legacy; +  state.tagMap = {}; +  state.anchorMap = {}; + +  while ((ch = state.input.charCodeAt(state.position)) !== 0) { +    skipSeparationSpace(state, true, -1); + +    ch = state.input.charCodeAt(state.position); + +    if (state.lineIndent > 0 || ch !== 0x25/* % */) { +      break; +    } + +    hasDirectives = true; +    ch = state.input.charCodeAt(++state.position); +    _position = state.position; + +    while (ch !== 0 && !is_WS_OR_EOL(ch)) { +      ch = state.input.charCodeAt(++state.position); +    } + +    directiveName = state.input.slice(_position, state.position); +    directiveArgs = []; + +    if (directiveName.length < 1) { +      throwError(state, 'directive name must not be less than one character in length'); +    } + +    while (ch !== 0) { +      while (is_WHITE_SPACE(ch)) { +        ch = state.input.charCodeAt(++state.position); +      } + +      if (ch === 0x23/* # */) { +        do { ch = state.input.charCodeAt(++state.position); } +        while (ch !== 0 && !is_EOL(ch)); +        break; +      } + +      if (is_EOL(ch)) break; + +      _position = state.position; + +      while (ch !== 0 && !is_WS_OR_EOL(ch)) { +        ch = state.input.charCodeAt(++state.position); +      } + +      directiveArgs.push(state.input.slice(_position, state.position)); +    } + +    if (ch !== 0) readLineBreak(state); + +    if (_hasOwnProperty.call(directiveHandlers, directiveName)) { +      directiveHandlers[directiveName](state, directiveName, directiveArgs); +    } else { +      throwWarning(state, 'unknown document directive "' + directiveName + '"'); +    } +  } + +  skipSeparationSpace(state, true, -1); + +  if (state.lineIndent === 0 && +      state.input.charCodeAt(state.position)     === 0x2D/* - */ && +      state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && +      state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { +    state.position += 3; +    skipSeparationSpace(state, true, -1); + +  } else if (hasDirectives) { +    throwError(state, 'directives end mark is expected'); +  } + +  composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); +  skipSeparationSpace(state, true, -1); + +  if (state.checkLineBreaks && +      PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { +    throwWarning(state, 'non-ASCII line breaks are interpreted as content'); +  } + +  state.documents.push(state.result); + +  if (state.position === state.lineStart && testDocumentSeparator(state)) { + +    if (state.input.charCodeAt(state.position) === 0x2E/* . */) { +      state.position += 3; +      skipSeparationSpace(state, true, -1); +    } +    return; +  } + +  if (state.position < (state.length - 1)) { +    throwError(state, 'end of the stream or a document separator is expected'); +  } else { +    return; +  } +} + + +function loadDocuments(input, options) { +  input = String(input); +  options = options || {}; + +  if (input.length !== 0) { + +    // Add tailing `\n` if not exists +    if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && +        input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { +      input += '\n'; +    } + +    // Strip BOM +    if (input.charCodeAt(0) === 0xFEFF) { +      input = input.slice(1); +    } +  } + +  var state = new State(input, options); + +  // Use 0 as string terminator. That significantly simplifies bounds check. +  state.input += '\0'; + +  while (state.input.charCodeAt(state.position) === 0x20/* Space */) { +    state.lineIndent += 1; +    state.position += 1; +  } + +  while (state.position < (state.length - 1)) { +    readDocument(state); +  } + +  return state.documents; +} + + +function loadAll(input, iterator, options) { +  var documents = loadDocuments(input, options), index, length; + +  if (typeof iterator !== 'function') { +    return documents; +  } + +  for (index = 0, length = documents.length; index < length; index += 1) { +    iterator(documents[index]); +  } +} + + +function load(input, options) { +  var documents = loadDocuments(input, options); + +  if (documents.length === 0) { +    /*eslint-disable no-undefined*/ +    return undefined; +  } else if (documents.length === 1) { +    return documents[0]; +  } +  throw new YAMLException('expected a single document in the stream, but found more'); +} + + +function safeLoadAll(input, output, options) { +  if (typeof output === 'function') { +    loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +  } else { +    return loadAll(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +  } +} + + +function safeLoad(input, options) { +  return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +module.exports.loadAll     = loadAll; +module.exports.load        = load; +module.exports.safeLoadAll = safeLoadAll; +module.exports.safeLoad    = safeLoad; + +},{"./common":2,"./exception":4,"./mark":6,"./schema/default_full":9,"./schema/default_safe":10}],6:[function(require,module,exports){ +'use strict'; + + +var common = require('./common'); + + +function Mark(name, buffer, position, line, column) { +  this.name     = name; +  this.buffer   = buffer; +  this.position = position; +  this.line     = line; +  this.column   = column; +} + + +Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { +  var head, start, tail, end, snippet; + +  if (!this.buffer) return null; + +  indent = indent || 4; +  maxLength = maxLength || 75; + +  head = ''; +  start = this.position; + +  while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { +    start -= 1; +    if (this.position - start > (maxLength / 2 - 1)) { +      head = ' ... '; +      start += 5; +      break; +    } +  } + +  tail = ''; +  end = this.position; + +  while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { +    end += 1; +    if (end - this.position > (maxLength / 2 - 1)) { +      tail = ' ... '; +      end -= 5; +      break; +    } +  } + +  snippet = this.buffer.slice(start, end); + +  return common.repeat(' ', indent) + head + snippet + tail + '\n' + +         common.repeat(' ', indent + this.position - start + head.length) + '^'; +}; + + +Mark.prototype.toString = function toString(compact) { +  var snippet, where = ''; + +  if (this.name) { +    where += 'in "' + this.name + '" '; +  } + +  where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); + +  if (!compact) { +    snippet = this.getSnippet(); + +    if (snippet) { +      where += ':\n' + snippet; +    } +  } + +  return where; +}; + + +module.exports = Mark; + +},{"./common":2}],7:[function(require,module,exports){ +'use strict'; + +/*eslint-disable max-len*/ + +var common        = require('./common'); +var YAMLException = require('./exception'); +var Type          = require('./type'); + + +function compileList(schema, name, result) { +  var exclude = []; + +  schema.include.forEach(function (includedSchema) { +    result = compileList(includedSchema, name, result); +  }); + +  schema[name].forEach(function (currentType) { +    result.forEach(function (previousType, previousIndex) { +      if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { +        exclude.push(previousIndex); +      } +    }); + +    result.push(currentType); +  }); + +  return result.filter(function (type, index) { +    return exclude.indexOf(index) === -1; +  }); +} + + +function compileMap(/* lists... */) { +  var result = { +        scalar: {}, +        sequence: {}, +        mapping: {}, +        fallback: {} +      }, index, length; + +  function collectType(type) { +    result[type.kind][type.tag] = result['fallback'][type.tag] = type; +  } + +  for (index = 0, length = arguments.length; index < length; index += 1) { +    arguments[index].forEach(collectType); +  } +  return result; +} + + +function Schema(definition) { +  this.include  = definition.include  || []; +  this.implicit = definition.implicit || []; +  this.explicit = definition.explicit || []; + +  this.implicit.forEach(function (type) { +    if (type.loadKind && type.loadKind !== 'scalar') { +      throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); +    } +  }); + +  this.compiledImplicit = compileList(this, 'implicit', []); +  this.compiledExplicit = compileList(this, 'explicit', []); +  this.compiledTypeMap  = compileMap(this.compiledImplicit, this.compiledExplicit); +} + + +Schema.DEFAULT = null; + + +Schema.create = function createSchema() { +  var schemas, types; + +  switch (arguments.length) { +    case 1: +      schemas = Schema.DEFAULT; +      types = arguments[0]; +      break; + +    case 2: +      schemas = arguments[0]; +      types = arguments[1]; +      break; + +    default: +      throw new YAMLException('Wrong number of arguments for Schema.create function'); +  } + +  schemas = common.toArray(schemas); +  types = common.toArray(types); + +  if (!schemas.every(function (schema) { return schema instanceof Schema; })) { +    throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); +  } + +  if (!types.every(function (type) { return type instanceof Type; })) { +    throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); +  } + +  return new Schema({ +    include: schemas, +    explicit: types +  }); +}; + + +module.exports = Schema; + +},{"./common":2,"./exception":4,"./type":13}],8:[function(require,module,exports){ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ +  include: [ +    require('./json') +  ] +}); + +},{"../schema":7,"./json":12}],9:[function(require,module,exports){ +// JS-YAML's default schema for `load` function. +// It is not described in the YAML specification. +// +// This schema is based on JS-YAML's default safe schema and includes +// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. +// +// Also this schema is used as default base schema at `Schema.create` function. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = Schema.DEFAULT = new Schema({ +  include: [ +    require('./default_safe') +  ], +  explicit: [ +    require('../type/js/undefined'), +    require('../type/js/regexp'), +    require('../type/js/function') +  ] +}); + +},{"../schema":7,"../type/js/function":18,"../type/js/regexp":19,"../type/js/undefined":20,"./default_safe":10}],10:[function(require,module,exports){ +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ +  include: [ +    require('./core') +  ], +  implicit: [ +    require('../type/timestamp'), +    require('../type/merge') +  ], +  explicit: [ +    require('../type/binary'), +    require('../type/omap'), +    require('../type/pairs'), +    require('../type/set') +  ] +}); + +},{"../schema":7,"../type/binary":14,"../type/merge":22,"../type/omap":24,"../type/pairs":25,"../type/set":27,"../type/timestamp":29,"./core":8}],11:[function(require,module,exports){ +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ +  explicit: [ +    require('../type/str'), +    require('../type/seq'), +    require('../type/map') +  ] +}); + +},{"../schema":7,"../type/map":21,"../type/seq":26,"../type/str":28}],12:[function(require,module,exports){ +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ +  include: [ +    require('./failsafe') +  ], +  implicit: [ +    require('../type/null'), +    require('../type/bool'), +    require('../type/int'), +    require('../type/float') +  ] +}); + +},{"../schema":7,"../type/bool":15,"../type/float":16,"../type/int":17,"../type/null":23,"./failsafe":11}],13:[function(require,module,exports){ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ +  'kind', +  'resolve', +  'construct', +  'instanceOf', +  'predicate', +  'represent', +  'defaultStyle', +  'styleAliases' +]; + +var YAML_NODE_KINDS = [ +  'scalar', +  'sequence', +  'mapping' +]; + +function compileStyleAliases(map) { +  var result = {}; + +  if (map !== null) { +    Object.keys(map).forEach(function (style) { +      map[style].forEach(function (alias) { +        result[String(alias)] = style; +      }); +    }); +  } + +  return result; +} + +function Type(tag, options) { +  options = options || {}; + +  Object.keys(options).forEach(function (name) { +    if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { +      throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); +    } +  }); + +  // TODO: Add tag format check. +  this.tag          = tag; +  this.kind         = options['kind']         || null; +  this.resolve      = options['resolve']      || function () { return true; }; +  this.construct    = options['construct']    || function (data) { return data; }; +  this.instanceOf   = options['instanceOf']   || null; +  this.predicate    = options['predicate']    || null; +  this.represent    = options['represent']    || null; +  this.defaultStyle = options['defaultStyle'] || null; +  this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + +  if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { +    throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); +  } +} + +module.exports = Type; + +},{"./exception":4}],14:[function(require,module,exports){ +'use strict'; + +/*eslint-disable no-bitwise*/ + +var NodeBuffer; + +try { +  // A trick for browserified version, to not include `Buffer` shim +  var _require = require; +  NodeBuffer = _require('buffer').Buffer; +} catch (__) {} + +var Type       = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { +  if (data === null) return false; + +  var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + +  // Convert one by one. +  for (idx = 0; idx < max; idx++) { +    code = map.indexOf(data.charAt(idx)); + +    // Skip CR/LF +    if (code > 64) continue; + +    // Fail on illegal characters +    if (code < 0) return false; + +    bitlen += 6; +  } + +  // If there are any bits left, source was corrupted +  return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { +  var idx, tailbits, +      input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan +      max = input.length, +      map = BASE64_MAP, +      bits = 0, +      result = []; + +  // Collect by 6*4 bits (3 bytes) + +  for (idx = 0; idx < max; idx++) { +    if ((idx % 4 === 0) && idx) { +      result.push((bits >> 16) & 0xFF); +      result.push((bits >> 8) & 0xFF); +      result.push(bits & 0xFF); +    } + +    bits = (bits << 6) | map.indexOf(input.charAt(idx)); +  } + +  // Dump tail + +  tailbits = (max % 4) * 6; + +  if (tailbits === 0) { +    result.push((bits >> 16) & 0xFF); +    result.push((bits >> 8) & 0xFF); +    result.push(bits & 0xFF); +  } else if (tailbits === 18) { +    result.push((bits >> 10) & 0xFF); +    result.push((bits >> 2) & 0xFF); +  } else if (tailbits === 12) { +    result.push((bits >> 4) & 0xFF); +  } + +  // Wrap into Buffer for NodeJS and leave Array for browser +  if (NodeBuffer) { +    // Support node 6.+ Buffer API when available +    return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result); +  } + +  return result; +} + +function representYamlBinary(object /*, style*/) { +  var result = '', bits = 0, idx, tail, +      max = object.length, +      map = BASE64_MAP; + +  // Convert every three bytes to 4 ASCII characters. + +  for (idx = 0; idx < max; idx++) { +    if ((idx % 3 === 0) && idx) { +      result += map[(bits >> 18) & 0x3F]; +      result += map[(bits >> 12) & 0x3F]; +      result += map[(bits >> 6) & 0x3F]; +      result += map[bits & 0x3F]; +    } + +    bits = (bits << 8) + object[idx]; +  } + +  // Dump tail + +  tail = max % 3; + +  if (tail === 0) { +    result += map[(bits >> 18) & 0x3F]; +    result += map[(bits >> 12) & 0x3F]; +    result += map[(bits >> 6) & 0x3F]; +    result += map[bits & 0x3F]; +  } else if (tail === 2) { +    result += map[(bits >> 10) & 0x3F]; +    result += map[(bits >> 4) & 0x3F]; +    result += map[(bits << 2) & 0x3F]; +    result += map[64]; +  } else if (tail === 1) { +    result += map[(bits >> 2) & 0x3F]; +    result += map[(bits << 4) & 0x3F]; +    result += map[64]; +    result += map[64]; +  } + +  return result; +} + +function isBinary(object) { +  return NodeBuffer && NodeBuffer.isBuffer(object); +} + +module.exports = new Type('tag:yaml.org,2002:binary', { +  kind: 'scalar', +  resolve: resolveYamlBinary, +  construct: constructYamlBinary, +  predicate: isBinary, +  represent: representYamlBinary +}); + +},{"../type":13}],15:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlBoolean(data) { +  if (data === null) return false; + +  var max = data.length; + +  return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || +         (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { +  return data === 'true' || +         data === 'True' || +         data === 'TRUE'; +} + +function isBoolean(object) { +  return Object.prototype.toString.call(object) === '[object Boolean]'; +} + +module.exports = new Type('tag:yaml.org,2002:bool', { +  kind: 'scalar', +  resolve: resolveYamlBoolean, +  construct: constructYamlBoolean, +  predicate: isBoolean, +  represent: { +    lowercase: function (object) { return object ? 'true' : 'false'; }, +    uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, +    camelcase: function (object) { return object ? 'True' : 'False'; } +  }, +  defaultStyle: 'lowercase' +}); + +},{"../type":13}],16:[function(require,module,exports){ +'use strict'; + +var common = require('../common'); +var Type   = require('../type'); + +var YAML_FLOAT_PATTERN = new RegExp( +  // 2.5e4, 2.5 and integers +  '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + +  // .2e4, .2 +  // special case, seems not from spec +  '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + +  // 20:59 +  '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + +  // .inf +  '|[-+]?\\.(?:inf|Inf|INF)' + +  // .nan +  '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { +  if (data === null) return false; + +  if (!YAML_FLOAT_PATTERN.test(data) || +      // Quick hack to not allow integers end with `_` +      // Probably should update regexp & check speed +      data[data.length - 1] === '_') { +    return false; +  } + +  return true; +} + +function constructYamlFloat(data) { +  var value, sign, base, digits; + +  value  = data.replace(/_/g, '').toLowerCase(); +  sign   = value[0] === '-' ? -1 : 1; +  digits = []; + +  if ('+-'.indexOf(value[0]) >= 0) { +    value = value.slice(1); +  } + +  if (value === '.inf') { +    return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + +  } else if (value === '.nan') { +    return NaN; + +  } else if (value.indexOf(':') >= 0) { +    value.split(':').forEach(function (v) { +      digits.unshift(parseFloat(v, 10)); +    }); + +    value = 0.0; +    base = 1; + +    digits.forEach(function (d) { +      value += d * base; +      base *= 60; +    }); + +    return sign * value; + +  } +  return sign * parseFloat(value, 10); +} + + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { +  var res; + +  if (isNaN(object)) { +    switch (style) { +      case 'lowercase': return '.nan'; +      case 'uppercase': return '.NAN'; +      case 'camelcase': return '.NaN'; +    } +  } else if (Number.POSITIVE_INFINITY === object) { +    switch (style) { +      case 'lowercase': return '.inf'; +      case 'uppercase': return '.INF'; +      case 'camelcase': return '.Inf'; +    } +  } else if (Number.NEGATIVE_INFINITY === object) { +    switch (style) { +      case 'lowercase': return '-.inf'; +      case 'uppercase': return '-.INF'; +      case 'camelcase': return '-.Inf'; +    } +  } else if (common.isNegativeZero(object)) { +    return '-0.0'; +  } + +  res = object.toString(10); + +  // JS stringifier can build scientific format without dots: 5e-100, +  // while YAML requres dot: 5.e-100. Fix it with simple hack + +  return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; +} + +function isFloat(object) { +  return (Object.prototype.toString.call(object) === '[object Number]') && +         (object % 1 !== 0 || common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { +  kind: 'scalar', +  resolve: resolveYamlFloat, +  construct: constructYamlFloat, +  predicate: isFloat, +  represent: representYamlFloat, +  defaultStyle: 'lowercase' +}); + +},{"../common":2,"../type":13}],17:[function(require,module,exports){ +'use strict'; + +var common = require('../common'); +var Type   = require('../type'); + +function isHexCode(c) { +  return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || +         ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || +         ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { +  return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { +  return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { +  if (data === null) return false; + +  var max = data.length, +      index = 0, +      hasDigits = false, +      ch; + +  if (!max) return false; + +  ch = data[index]; + +  // sign +  if (ch === '-' || ch === '+') { +    ch = data[++index]; +  } + +  if (ch === '0') { +    // 0 +    if (index + 1 === max) return true; +    ch = data[++index]; + +    // base 2, base 8, base 16 + +    if (ch === 'b') { +      // base 2 +      index++; + +      for (; index < max; index++) { +        ch = data[index]; +        if (ch === '_') continue; +        if (ch !== '0' && ch !== '1') return false; +        hasDigits = true; +      } +      return hasDigits && ch !== '_'; +    } + + +    if (ch === 'x') { +      // base 16 +      index++; + +      for (; index < max; index++) { +        ch = data[index]; +        if (ch === '_') continue; +        if (!isHexCode(data.charCodeAt(index))) return false; +        hasDigits = true; +      } +      return hasDigits && ch !== '_'; +    } + +    // base 8 +    for (; index < max; index++) { +      ch = data[index]; +      if (ch === '_') continue; +      if (!isOctCode(data.charCodeAt(index))) return false; +      hasDigits = true; +    } +    return hasDigits && ch !== '_'; +  } + +  // base 10 (except 0) or base 60 + +  // value should not start with `_`; +  if (ch === '_') return false; + +  for (; index < max; index++) { +    ch = data[index]; +    if (ch === '_') continue; +    if (ch === ':') break; +    if (!isDecCode(data.charCodeAt(index))) { +      return false; +    } +    hasDigits = true; +  } + +  // Should have digits and should not end with `_` +  if (!hasDigits || ch === '_') return false; + +  // if !base60 - done; +  if (ch !== ':') return true; + +  // base60 almost not used, no needs to optimize +  return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} + +function constructYamlInteger(data) { +  var value = data, sign = 1, ch, base, digits = []; + +  if (value.indexOf('_') !== -1) { +    value = value.replace(/_/g, ''); +  } + +  ch = value[0]; + +  if (ch === '-' || ch === '+') { +    if (ch === '-') sign = -1; +    value = value.slice(1); +    ch = value[0]; +  } + +  if (value === '0') return 0; + +  if (ch === '0') { +    if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); +    if (value[1] === 'x') return sign * parseInt(value, 16); +    return sign * parseInt(value, 8); +  } + +  if (value.indexOf(':') !== -1) { +    value.split(':').forEach(function (v) { +      digits.unshift(parseInt(v, 10)); +    }); + +    value = 0; +    base = 1; + +    digits.forEach(function (d) { +      value += (d * base); +      base *= 60; +    }); + +    return sign * value; + +  } + +  return sign * parseInt(value, 10); +} + +function isInteger(object) { +  return (Object.prototype.toString.call(object)) === '[object Number]' && +         (object % 1 === 0 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { +  kind: 'scalar', +  resolve: resolveYamlInteger, +  construct: constructYamlInteger, +  predicate: isInteger, +  represent: { +    binary:      function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, +    octal:       function (obj) { return obj >= 0 ? '0'  + obj.toString(8) : '-0'  + obj.toString(8).slice(1); }, +    decimal:     function (obj) { return obj.toString(10); }, +    /* eslint-disable max-len */ +    hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() :  '-0x' + obj.toString(16).toUpperCase().slice(1); } +  }, +  defaultStyle: 'decimal', +  styleAliases: { +    binary:      [ 2,  'bin' ], +    octal:       [ 8,  'oct' ], +    decimal:     [ 10, 'dec' ], +    hexadecimal: [ 16, 'hex' ] +  } +}); + +},{"../common":2,"../type":13}],18:[function(require,module,exports){ +'use strict'; + +var esprima; + +// Browserified version does not have esprima +// +// 1. For node.js just require module as deps +// 2. For browser try to require mudule via external AMD system. +//    If not found - try to fallback to window.esprima. If not +//    found too - then fail to parse. +// +try { +  // workaround to exclude package from browserify list. +  var _require = require; +  esprima = _require('esprima'); +} catch (_) { +  /*global window */ +  if (typeof window !== 'undefined') esprima = window.esprima; +} + +var Type = require('../../type'); + +function resolveJavascriptFunction(data) { +  if (data === null) return false; + +  try { +    var source = '(' + data + ')', +        ast    = esprima.parse(source, { range: true }); + +    if (ast.type                    !== 'Program'             || +        ast.body.length             !== 1                     || +        ast.body[0].type            !== 'ExpressionStatement' || +        (ast.body[0].expression.type !== 'ArrowFunctionExpression' && +          ast.body[0].expression.type !== 'FunctionExpression')) { +      return false; +    } + +    return true; +  } catch (err) { +    return false; +  } +} + +function constructJavascriptFunction(data) { +  /*jslint evil:true*/ + +  var source = '(' + data + ')', +      ast    = esprima.parse(source, { range: true }), +      params = [], +      body; + +  if (ast.type                    !== 'Program'             || +      ast.body.length             !== 1                     || +      ast.body[0].type            !== 'ExpressionStatement' || +      (ast.body[0].expression.type !== 'ArrowFunctionExpression' && +        ast.body[0].expression.type !== 'FunctionExpression')) { +    throw new Error('Failed to resolve function'); +  } + +  ast.body[0].expression.params.forEach(function (param) { +    params.push(param.name); +  }); + +  body = ast.body[0].expression.body.range; + +  // Esprima's ranges include the first '{' and the last '}' characters on +  // function expressions. So cut them out. +  if (ast.body[0].expression.body.type === 'BlockStatement') { +    /*eslint-disable no-new-func*/ +    return new Function(params, source.slice(body[0] + 1, body[1] - 1)); +  } +  // ES6 arrow functions can omit the BlockStatement. In that case, just return +  // the body. +  /*eslint-disable no-new-func*/ +  return new Function(params, 'return ' + source.slice(body[0], body[1])); +} + +function representJavascriptFunction(object /*, style*/) { +  return object.toString(); +} + +function isFunction(object) { +  return Object.prototype.toString.call(object) === '[object Function]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/function', { +  kind: 'scalar', +  resolve: resolveJavascriptFunction, +  construct: constructJavascriptFunction, +  predicate: isFunction, +  represent: representJavascriptFunction +}); + +},{"../../type":13}],19:[function(require,module,exports){ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptRegExp(data) { +  if (data === null) return false; +  if (data.length === 0) return false; + +  var regexp = data, +      tail   = /\/([gim]*)$/.exec(data), +      modifiers = ''; + +  // if regexp starts with '/' it can have modifiers and must be properly closed +  // `/foo/gim` - modifiers tail can be maximum 3 chars +  if (regexp[0] === '/') { +    if (tail) modifiers = tail[1]; + +    if (modifiers.length > 3) return false; +    // if expression starts with /, is should be properly terminated +    if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; +  } + +  return true; +} + +function constructJavascriptRegExp(data) { +  var regexp = data, +      tail   = /\/([gim]*)$/.exec(data), +      modifiers = ''; + +  // `/foo/gim` - tail can be maximum 4 chars +  if (regexp[0] === '/') { +    if (tail) modifiers = tail[1]; +    regexp = regexp.slice(1, regexp.length - modifiers.length - 1); +  } + +  return new RegExp(regexp, modifiers); +} + +function representJavascriptRegExp(object /*, style*/) { +  var result = '/' + object.source + '/'; + +  if (object.global) result += 'g'; +  if (object.multiline) result += 'm'; +  if (object.ignoreCase) result += 'i'; + +  return result; +} + +function isRegExp(object) { +  return Object.prototype.toString.call(object) === '[object RegExp]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/regexp', { +  kind: 'scalar', +  resolve: resolveJavascriptRegExp, +  construct: constructJavascriptRegExp, +  predicate: isRegExp, +  represent: representJavascriptRegExp +}); + +},{"../../type":13}],20:[function(require,module,exports){ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptUndefined() { +  return true; +} + +function constructJavascriptUndefined() { +  /*eslint-disable no-undefined*/ +  return undefined; +} + +function representJavascriptUndefined() { +  return ''; +} + +function isUndefined(object) { +  return typeof object === 'undefined'; +} + +module.exports = new Type('tag:yaml.org,2002:js/undefined', { +  kind: 'scalar', +  resolve: resolveJavascriptUndefined, +  construct: constructJavascriptUndefined, +  predicate: isUndefined, +  represent: representJavascriptUndefined +}); + +},{"../../type":13}],21:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:map', { +  kind: 'mapping', +  construct: function (data) { return data !== null ? data : {}; } +}); + +},{"../type":13}],22:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { +  return data === '<<' || data === null; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { +  kind: 'scalar', +  resolve: resolveYamlMerge +}); + +},{"../type":13}],23:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +function resolveYamlNull(data) { +  if (data === null) return true; + +  var max = data.length; + +  return (max === 1 && data === '~') || +         (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { +  return null; +} + +function isNull(object) { +  return object === null; +} + +module.exports = new Type('tag:yaml.org,2002:null', { +  kind: 'scalar', +  resolve: resolveYamlNull, +  construct: constructYamlNull, +  predicate: isNull, +  represent: { +    canonical: function () { return '~';    }, +    lowercase: function () { return 'null'; }, +    uppercase: function () { return 'NULL'; }, +    camelcase: function () { return 'Null'; } +  }, +  defaultStyle: 'lowercase' +}); + +},{"../type":13}],24:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString       = Object.prototype.toString; + +function resolveYamlOmap(data) { +  if (data === null) return true; + +  var objectKeys = [], index, length, pair, pairKey, pairHasKey, +      object = data; + +  for (index = 0, length = object.length; index < length; index += 1) { +    pair = object[index]; +    pairHasKey = false; + +    if (_toString.call(pair) !== '[object Object]') return false; + +    for (pairKey in pair) { +      if (_hasOwnProperty.call(pair, pairKey)) { +        if (!pairHasKey) pairHasKey = true; +        else return false; +      } +    } + +    if (!pairHasKey) return false; + +    if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); +    else return false; +  } + +  return true; +} + +function constructYamlOmap(data) { +  return data !== null ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { +  kind: 'sequence', +  resolve: resolveYamlOmap, +  construct: constructYamlOmap +}); + +},{"../type":13}],25:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { +  if (data === null) return true; + +  var index, length, pair, keys, result, +      object = data; + +  result = new Array(object.length); + +  for (index = 0, length = object.length; index < length; index += 1) { +    pair = object[index]; + +    if (_toString.call(pair) !== '[object Object]') return false; + +    keys = Object.keys(pair); + +    if (keys.length !== 1) return false; + +    result[index] = [ keys[0], pair[keys[0]] ]; +  } + +  return true; +} + +function constructYamlPairs(data) { +  if (data === null) return []; + +  var index, length, pair, keys, result, +      object = data; + +  result = new Array(object.length); + +  for (index = 0, length = object.length; index < length; index += 1) { +    pair = object[index]; + +    keys = Object.keys(pair); + +    result[index] = [ keys[0], pair[keys[0]] ]; +  } + +  return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { +  kind: 'sequence', +  resolve: resolveYamlPairs, +  construct: constructYamlPairs +}); + +},{"../type":13}],26:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { +  kind: 'sequence', +  construct: function (data) { return data !== null ? data : []; } +}); + +},{"../type":13}],27:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { +  if (data === null) return true; + +  var key, object = data; + +  for (key in object) { +    if (_hasOwnProperty.call(object, key)) { +      if (object[key] !== null) return false; +    } +  } + +  return true; +} + +function constructYamlSet(data) { +  return data !== null ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { +  kind: 'mapping', +  resolve: resolveYamlSet, +  construct: constructYamlSet +}); + +},{"../type":13}],28:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { +  kind: 'scalar', +  construct: function (data) { return data !== null ? data : ''; } +}); + +},{"../type":13}],29:[function(require,module,exports){ +'use strict'; + +var Type = require('../type'); + +var YAML_DATE_REGEXP = new RegExp( +  '^([0-9][0-9][0-9][0-9])'          + // [1] year +  '-([0-9][0-9])'                    + // [2] month +  '-([0-9][0-9])$');                   // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( +  '^([0-9][0-9][0-9][0-9])'          + // [1] year +  '-([0-9][0-9]?)'                   + // [2] month +  '-([0-9][0-9]?)'                   + // [3] day +  '(?:[Tt]|[ \\t]+)'                 + // ... +  '([0-9][0-9]?)'                    + // [4] hour +  ':([0-9][0-9])'                    + // [5] minute +  ':([0-9][0-9])'                    + // [6] second +  '(?:\\.([0-9]*))?'                 + // [7] fraction +  '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour +  '(?::([0-9][0-9]))?))?$');           // [11] tz_minute + +function resolveYamlTimestamp(data) { +  if (data === null) return false; +  if (YAML_DATE_REGEXP.exec(data) !== null) return true; +  if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; +  return false; +} + +function constructYamlTimestamp(data) { +  var match, year, month, day, hour, minute, second, fraction = 0, +      delta = null, tz_hour, tz_minute, date; + +  match = YAML_DATE_REGEXP.exec(data); +  if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + +  if (match === null) throw new Error('Date resolve error'); + +  // match: [1] year [2] month [3] day + +  year = +(match[1]); +  month = +(match[2]) - 1; // JS month starts with 0 +  day = +(match[3]); + +  if (!match[4]) { // no hour +    return new Date(Date.UTC(year, month, day)); +  } + +  // match: [4] hour [5] minute [6] second [7] fraction + +  hour = +(match[4]); +  minute = +(match[5]); +  second = +(match[6]); + +  if (match[7]) { +    fraction = match[7].slice(0, 3); +    while (fraction.length < 3) { // milli-seconds +      fraction += '0'; +    } +    fraction = +fraction; +  } + +  // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + +  if (match[9]) { +    tz_hour = +(match[10]); +    tz_minute = +(match[11] || 0); +    delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds +    if (match[9] === '-') delta = -delta; +  } + +  date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + +  if (delta) date.setTime(date.getTime() - delta); + +  return date; +} + +function representYamlTimestamp(object /*, style*/) { +  return object.toISOString(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { +  kind: 'scalar', +  resolve: resolveYamlTimestamp, +  construct: constructYamlTimestamp, +  instanceOf: Date, +  represent: representYamlTimestamp +}); + +},{"../type":13}],"/":[function(require,module,exports){ +'use strict'; + + +var yaml = require('./lib/js-yaml.js'); + + +module.exports = yaml; + +},{"./lib/js-yaml.js":1}]},{},[])("/") +}); diff --git a/node_modules/js-yaml/dist/js-yaml.min.js b/node_modules/js-yaml/dist/js-yaml.min.js new file mode 100644 index 0000000..0623500 --- /dev/null +++ b/node_modules/js-yaml/dist/js-yaml.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).jsyaml=e()}}(function(){return function o(a,s,c){function u(t,e){if(!s[t]){if(!a[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(l)return l(t,!0);var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}var r=s[t]={exports:{}};a[t][0].call(r.exports,function(e){return u(a[t][1][e]||e)},r,r.exports,o,a,s,c)}return s[t].exports}for(var l="function"==typeof require&&require,e=0;e<c.length;e++)u(c[e]);return u}({1:[function(e,t,n){"use strict";var i=e("./js-yaml/loader"),r=e("./js-yaml/dumper");function o(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}t.exports.Type=e("./js-yaml/type"),t.exports.Schema=e("./js-yaml/schema"),t.exports.FAILSAFE_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.JSON_SCHEMA=e("./js-yaml/schema/json"),t.exports.CORE_SCHEMA=e("./js-yaml/schema/core"),t.exports.DEFAULT_SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_FULL_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.load=i.load,t.exports.loadAll=i.loadAll,t.exports.safeLoad=i.safeLoad,t.exports.safeLoadAll=i.safeLoadAll,t.exports.dump=r.dump,t.exports.safeDump=r.safeDump,t.exports.YAMLException=e("./js-yaml/exception"),t.exports.MINIMAL_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.scan=o("scan"),t.exports.parse=o("parse"),t.exports.compose=o("compose"),t.exports.addConstructor=o("addConstructor")},{"./js-yaml/dumper":3,"./js-yaml/exception":4,"./js-yaml/loader":5,"./js-yaml/schema":7,"./js-yaml/schema/core":8,"./js-yaml/schema/default_full":9,"./js-yaml/schema/default_safe":10,"./js-yaml/schema/failsafe":11,"./js-yaml/schema/json":12,"./js-yaml/type":13}],2:[function(e,t,n){"use strict";function i(e){return null==e}t.exports.isNothing=i,t.exports.isObject=function(e){return"object"==typeof e&&null!==e},t.exports.toArray=function(e){return Array.isArray(e)?e:i(e)?[]:[e]},t.exports.repeat=function(e,t){var n,i="";for(n=0;n<t;n+=1)i+=e;return i},t.exports.isNegativeZero=function(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e},t.exports.extend=function(e,t){var n,i,r,o;if(t)for(n=0,i=(o=Object.keys(t)).length;n<i;n+=1)e[r=o[n]]=t[r];return e}},{}],3:[function(e,t,n){"use strict";var c=e("./common"),d=e("./exception"),i=e("./schema/default_full"),r=e("./schema/default_safe"),p=Object.prototype.toString,u=Object.prototype.hasOwnProperty,o=9,h=10,a=32,f=33,m=34,g=35,y=37,x=38,v=39,A=42,b=44,w=45,C=58,k=62,j=63,S=64,I=91,O=93,E=96,F=123,_=124,N=125,s={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},l=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function M(e){var t,n,i;if(t=e.toString(16).toUpperCase(),e<=255)n="x",i=2;else if(e<=65535)n="u",i=4;else{if(!(e<=4294967295))throw new d("code point within a string may not be greater than 0xFFFFFFFF");n="U",i=8}return"\\"+n+c.repeat("0",i-t.length)+t}function T(e){this.schema=e.schema||i,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=c.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=function(e,t){var n,i,r,o,a,s,c;if(null===t)return{};for(n={},r=0,o=(i=Object.keys(t)).length;r<o;r+=1)a=i[r],s=String(t[a]),"!!"===a.slice(0,2)&&(a="tag:yaml.org,2002:"+a.slice(2)),(c=e.compiledTypeMap.fallback[a])&&u.call(c.styleAliases,s)&&(s=c.styleAliases[s]),n[a]=s;return n}(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.condenseFlow=e.condenseFlow||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function L(e,t){for(var n,i=c.repeat(" ",t),r=0,o=-1,a="",s=e.length;r<s;)r=-1===(o=e.indexOf("\n",r))?(n=e.slice(r),s):(n=e.slice(r,o+1),o+1),n.length&&"\n"!==n&&(a+=i),a+=n;return a}function D(e,t){return"\n"+c.repeat(" ",e.indent*t)}function U(e){return e===a||e===o}function q(e){return 32<=e&&e<=126||161<=e&&e<=55295&&8232!==e&&8233!==e||57344<=e&&e<=65533&&65279!==e||65536<=e&&e<=1114111}function Y(e){return q(e)&&65279!==e&&e!==b&&e!==I&&e!==O&&e!==F&&e!==N&&e!==C&&e!==g}function R(e){return/^\n* /.test(e)}var B=1,P=2,W=3,K=4,$=5;function H(e,t,n,i,r){var o,a,s=!1,c=!1,u=-1!==i,l=-1,p=function(e){return q(e)&&65279!==e&&!U(e)&&e!==w&&e!==j&&e!==C&&e!==b&&e!==I&&e!==O&&e!==F&&e!==N&&e!==g&&e!==x&&e!==A&&e!==f&&e!==_&&e!==k&&e!==v&&e!==m&&e!==y&&e!==S&&e!==E}(e.charCodeAt(0))&&!U(e.charCodeAt(e.length-1));if(t)for(o=0;o<e.length;o++){if(!q(a=e.charCodeAt(o)))return $;p=p&&Y(a)}else{for(o=0;o<e.length;o++){if((a=e.charCodeAt(o))===h)s=!0,u&&(c=c||i<o-l-1&&" "!==e[l+1],l=o);else if(!q(a))return $;p=p&&Y(a)}c=c||u&&i<o-l-1&&" "!==e[l+1]}return s||c?9<n&&R(e)?$:c?K:W:p&&!r(e)?B:P}function G(i,r,o,a){i.dump=function(){if(0===r.length)return"''";if(!i.noCompatMode&&-1!==l.indexOf(r))return"'"+r+"'";var e=i.indent*Math.max(1,o),t=-1===i.lineWidth?-1:Math.max(Math.min(i.lineWidth,40),i.lineWidth-e),n=a||-1<i.flowLevel&&o>=i.flowLevel;switch(H(r,n,i.indent,t,function(e){return function(e,t){var n,i;for(n=0,i=e.implicitTypes.length;n<i;n+=1)if(e.implicitTypes[n].resolve(t))return!0;return!1}(i,e)})){case B:return r;case P:return"'"+r.replace(/'/g,"''")+"'";case W:return"|"+V(r,i.indent)+Z(L(r,e));case K:return">"+V(r,i.indent)+Z(L(function(t,n){var e,i,r=/(\n+)([^\n]*)/g,o=function(){var e=t.indexOf("\n");return e=-1!==e?e:t.length,r.lastIndex=e,z(t.slice(0,e),n)}(),a="\n"===t[0]||" "===t[0];for(;i=r.exec(t);){var s=i[1],c=i[2];e=" "===c[0],o+=s+(a||e||""===c?"":"\n")+z(c,n),a=e}return o}(r,t),e));case $:return'"'+function(e){for(var t,n,i,r="",o=0;o<e.length;o++)55296<=(t=e.charCodeAt(o))&&t<=56319&&56320<=(n=e.charCodeAt(o+1))&&n<=57343?(r+=M(1024*(t-55296)+n-56320+65536),o++):(i=s[t],r+=!i&&q(t)?e[o]:i||M(t));return r}(r)+'"';default:throw new d("impossible error: invalid scalar style")}}()}function V(e,t){var n=R(e)?String(t):"",i="\n"===e[e.length-1];return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function Z(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function z(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,o=0,a=0,s=0,c="";n=r.exec(e);)t<(s=n.index)-o&&(i=o<a?a:s,c+="\n"+e.slice(o,i),o=i+1),a=s;return c+="\n",e.length-o>t&&o<a?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function J(e,t,n){var i,r,o,a,s,c;for(o=0,a=(r=n?e.explicitTypes:e.implicitTypes).length;o<a;o+=1)if(((s=r[o]).instanceOf||s.predicate)&&(!s.instanceOf||"object"==typeof t&&t instanceof s.instanceOf)&&(!s.predicate||s.predicate(t))){if(e.tag=n?s.tag:"?",s.represent){if(c=e.styleMap[s.tag]||s.defaultStyle,"[object Function]"===p.call(s.represent))i=s.represent(t,c);else{if(!u.call(s.represent,c))throw new d("!<"+s.tag+'> tag resolver accepts not "'+c+'" style');i=s.represent[c](t,c)}e.dump=i}return!0}return!1}function Q(e,t,n,i,r,o){e.tag=null,e.dump=n,J(e,n,!1)||J(e,n,!0);var a=p.call(e.dump);i&&(i=e.flowLevel<0||e.flowLevel>t);var s,c,u="[object Object]"===a||"[object Array]"===a;if(u&&(c=-1!==(s=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||c||2!==e.indent&&0<t)&&(r=!1),c&&e.usedDuplicates[s])e.dump="*ref_"+s;else{if(u&&c&&!e.usedDuplicates[s]&&(e.usedDuplicates[s]=!0),"[object Object]"===a)i&&0!==Object.keys(e.dump).length?(function(e,t,n,i){var r,o,a,s,c,u,l="",p=e.tag,f=Object.keys(n);if(!0===e.sortKeys)f.sort();else if("function"==typeof e.sortKeys)f.sort(e.sortKeys);else if(e.sortKeys)throw new d("sortKeys must be a boolean or a function");for(r=0,o=f.length;r<o;r+=1)u="",i&&0===r||(u+=D(e,t)),s=n[a=f[r]],Q(e,t+1,a,!0,!0,!0)&&((c=null!==e.tag&&"?"!==e.tag||e.dump&&1024<e.dump.length)&&(e.dump&&h===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,c&&(u+=D(e,t)),Q(e,t+1,s,!0,c)&&(e.dump&&h===e.dump.charCodeAt(0)?u+=":":u+=": ",l+=u+=e.dump));e.tag=p,e.dump=l||"{}"}(e,t,e.dump,r),c&&(e.dump="&ref_"+s+e.dump)):(function(e,t,n){var i,r,o,a,s,c="",u=e.tag,l=Object.keys(n);for(i=0,r=l.length;i<r;i+=1)s=e.condenseFlow?'"':"",0!==i&&(s+=", "),a=n[o=l[i]],Q(e,t,o,!1,!1)&&(1024<e.dump.length&&(s+="? "),s+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Q(e,t,a,!1,!1)&&(c+=s+=e.dump));e.tag=u,e.dump="{"+c+"}"}(e,t,e.dump),c&&(e.dump="&ref_"+s+" "+e.dump));else if("[object Array]"===a){var l=e.noArrayIndent&&0<t?t-1:t;i&&0!==e.dump.length?(function(e,t,n,i){var r,o,a="",s=e.tag;for(r=0,o=n.length;r<o;r+=1)Q(e,t+1,n[r],!0,!0)&&(i&&0===r||(a+=D(e,t)),e.dump&&h===e.dump.charCodeAt(0)?a+="-":a+="- ",a+=e.dump);e.tag=s,e.dump=a||"[]"}(e,l,e.dump,r),c&&(e.dump="&ref_"+s+e.dump)):(function(e,t,n){var i,r,o="",a=e.tag;for(i=0,r=n.length;i<r;i+=1)Q(e,t,n[i],!1,!1)&&(0!==i&&(o+=","+(e.condenseFlow?"":" ")),o+=e.dump);e.tag=a,e.dump="["+o+"]"}(e,l,e.dump),c&&(e.dump="&ref_"+s+" "+e.dump))}else{if("[object String]"!==a){if(e.skipInvalid)return!1;throw new d("unacceptable kind of an object to dump "+a)}"?"!==e.tag&&G(e,e.dump,t,o)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function X(e,t){var n,i,r=[],o=[];for(function e(t,n,i){var r,o,a;if(null!==t&&"object"==typeof t)if(-1!==(o=n.indexOf(t)))-1===i.indexOf(o)&&i.push(o);else if(n.push(t),Array.isArray(t))for(o=0,a=t.length;o<a;o+=1)e(t[o],n,i);else for(r=Object.keys(t),o=0,a=r.length;o<a;o+=1)e(t[r[o]],n,i)}(e,r,o),n=0,i=o.length;n<i;n+=1)t.duplicates.push(r[o[n]]);t.usedDuplicates=new Array(i)}function ee(e,t){var n=new T(t=t||{});return n.noRefs||X(e,n),Q(n,0,e,!0,!0)?n.dump+"\n":""}t.exports.dump=ee,t.exports.safeDump=function(e,t){return ee(e,c.extend({schema:r},t))}},{"./common":2,"./exception":4,"./schema/default_full":9,"./schema/default_safe":10}],4:[function(e,t,n){"use strict";function i(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}((i.prototype=Object.create(Error.prototype)).constructor=i).prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t},t.exports=i},{}],5:[function(e,t,n){"use strict";var g=e("./common"),i=e("./exception"),r=e("./mark"),o=e("./schema/default_safe"),a=e("./schema/default_full"),y=Object.prototype.hasOwnProperty,x=1,v=2,A=3,b=4,w=1,C=2,k=3,c=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,s=/[\x85\u2028\u2029]/,u=/[,\[\]\{\}]/,l=/^(?:!|!!|![a-z\-]+!)$/i,p=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function f(e){return Object.prototype.toString.call(e)}function j(e){return 10===e||13===e}function S(e){return 9===e||32===e}function I(e){return 9===e||32===e||10===e||13===e}function O(e){return 44===e||91===e||93===e||123===e||125===e}function d(e){return 48===e?"\0":97===e?"":98===e?"\b":116===e?"\t":9===e?"\t":110===e?"\n":118===e?"\v":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"
":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}for(var E=new Array(256),F=new Array(256),h=0;h<256;h++)E[h]=d(h)?1:0,F[h]=d(h);function m(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||a,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function _(e,t){return new i(t,new r(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function N(e,t){throw _(e,t)}function M(e,t){e.onWarning&&e.onWarning.call(null,_(e,t))}var T={YAML:function(e,t,n){var i,r,o;null!==e.version&&N(e,"duplication of %YAML directive"),1!==n.length&&N(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&N(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&N(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&M(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&N(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],l.test(i)||N(e,"ill-formed tag handle (first argument) of the TAG directive"),y.call(e.tagMap,i)&&N(e,'there is a previously declared suffix for "'+i+'" tag handle'),p.test(r)||N(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[i]=r}};function L(e,t,n,i){var r,o,a,s;if(t<n){if(s=e.input.slice(t,n),i)for(r=0,o=s.length;r<o;r+=1)9===(a=s.charCodeAt(r))||32<=a&&a<=1114111||N(e,"expected valid JSON character");else c.test(s)&&N(e,"the stream contains non-printable characters");e.result+=s}}function D(e,t,n,i){var r,o,a,s;for(g.isObject(n)||N(e,"cannot merge mappings; the provided source object is unacceptable"),a=0,s=(r=Object.keys(n)).length;a<s;a+=1)o=r[a],y.call(t,o)||(t[o]=n[o],i[o]=!0)}function U(e,t,n,i,r,o,a,s){var c,u;if(Array.isArray(r))for(c=0,u=(r=Array.prototype.slice.call(r)).length;c<u;c+=1)Array.isArray(r[c])&&N(e,"nested arrays are not supported inside keys"),"object"==typeof r&&"[object Object]"===f(r[c])&&(r[c]="[object Object]");if("object"==typeof r&&"[object Object]"===f(r)&&(r="[object Object]"),r=String(r),null===t&&(t={}),"tag:yaml.org,2002:merge"===i)if(Array.isArray(o))for(c=0,u=o.length;c<u;c+=1)D(e,t,o[c],n);else D(e,t,o,n);else e.json||y.call(n,r)||!y.call(t,r)||(e.line=a||e.line,e.position=s||e.position,N(e,"duplicated mapping key")),t[r]=o,delete n[r];return t}function q(e){var t;10===(t=e.input.charCodeAt(e.position))?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):N(e,"a line break is expected"),e.line+=1,e.lineStart=e.position}function Y(e,t,n){for(var i=0,r=e.input.charCodeAt(e.position);0!==r;){for(;S(r);)r=e.input.charCodeAt(++e.position);if(t&&35===r)for(;10!==(r=e.input.charCodeAt(++e.position))&&13!==r&&0!==r;);if(!j(r))break;for(q(e),r=e.input.charCodeAt(e.position),i++,e.lineIndent=0;32===r;)e.lineIndent++,r=e.input.charCodeAt(++e.position)}return-1!==n&&0!==i&&e.lineIndent<n&&M(e,"deficient indentation"),i}function R(e){var t,n=e.position;return!(45!==(t=e.input.charCodeAt(n))&&46!==t||t!==e.input.charCodeAt(n+1)||t!==e.input.charCodeAt(n+2)||(n+=3,0!==(t=e.input.charCodeAt(n))&&!I(t)))}function B(e,t){1===t?e.result+=" ":1<t&&(e.result+=g.repeat("\n",t-1))}function P(e,t){var n,i,r=e.tag,o=e.anchor,a=[],s=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&45===i&&I(e.input.charCodeAt(e.position+1));)if(s=!0,e.position++,Y(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,$(e,t,A,!1,!0),a.push(e.result),Y(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)N(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break;return!!s&&(e.tag=r,e.anchor=o,e.kind="sequence",e.result=a,!0)}function W(e){var t,n,i,r,o=!1,a=!1;if(33!==(r=e.input.charCodeAt(e.position)))return!1;if(null!==e.tag&&N(e,"duplication of a tag property"),60===(r=e.input.charCodeAt(++e.position))?(o=!0,r=e.input.charCodeAt(++e.position)):33===r?(a=!0,n="!!",r=e.input.charCodeAt(++e.position)):n="!",t=e.position,o){for(;0!==(r=e.input.charCodeAt(++e.position))&&62!==r;);e.position<e.length?(i=e.input.slice(t,e.position),r=e.input.charCodeAt(++e.position)):N(e,"unexpected end of the stream within a verbatim tag")}else{for(;0!==r&&!I(r);)33===r&&(a?N(e,"tag suffix cannot contain exclamation marks"):(n=e.input.slice(t-1,e.position+1),l.test(n)||N(e,"named tag handle cannot contain such characters"),a=!0,t=e.position+1)),r=e.input.charCodeAt(++e.position);i=e.input.slice(t,e.position),u.test(i)&&N(e,"tag suffix cannot contain flow indicator characters")}return i&&!p.test(i)&&N(e,"tag name cannot contain such characters: "+i),o?e.tag=i:y.call(e.tagMap,n)?e.tag=e.tagMap[n]+i:"!"===n?e.tag="!"+i:"!!"===n?e.tag="tag:yaml.org,2002:"+i:N(e,'undeclared tag handle "'+n+'"'),!0}function K(e){var t,n;if(38!==(n=e.input.charCodeAt(e.position)))return!1;for(null!==e.anchor&&N(e,"duplication of an anchor property"),n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!I(n)&&!O(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&N(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(t,e.position),!0}function $(e,t,n,i,r){var o,a,s,c,u,l,p,f,d=1,h=!1,m=!1;if(null!==e.listener&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,o=a=s=b===n||A===n,i&&Y(e,!0,-1)&&(h=!0,e.lineIndent>t?d=1:e.lineIndent===t?d=0:e.lineIndent<t&&(d=-1)),1===d)for(;W(e)||K(e);)Y(e,!0,-1)?(h=!0,s=o,e.lineIndent>t?d=1:e.lineIndent===t?d=0:e.lineIndent<t&&(d=-1)):s=!1;if(s&&(s=h||r),1!==d&&b!==n||(p=x===n||v===n?t:t+1,f=e.position-e.lineStart,1===d?s&&(P(e,f)||function(e,t,n){var i,r,o,a,s,c=e.tag,u=e.anchor,l={},p={},f=null,d=null,h=null,m=!1,g=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=l),s=e.input.charCodeAt(e.position);0!==s;){if(i=e.input.charCodeAt(e.position+1),o=e.line,a=e.position,63!==s&&58!==s||!I(i)){if(!$(e,n,v,!1,!0))break;if(e.line===o){for(s=e.input.charCodeAt(e.position);S(s);)s=e.input.charCodeAt(++e.position);if(58===s)I(s=e.input.charCodeAt(++e.position))||N(e,"a whitespace character is expected after the key-value separator within a block mapping"),m&&(U(e,l,p,f,d,null),f=d=h=null),r=m=!(g=!0),f=e.tag,d=e.result;else{if(!g)return e.tag=c,e.anchor=u,!0;N(e,"can not read an implicit mapping pair; a colon is missed")}}else{if(!g)return e.tag=c,e.anchor=u,!0;N(e,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===s?(m&&(U(e,l,p,f,d,null),f=d=h=null),r=m=g=!0):m?r=!(m=!1):N(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,s=i;if((e.line===o||e.lineIndent>t)&&($(e,t,b,!0,r)&&(m?d=e.result:h=e.result),m||(U(e,l,p,f,d,h,o,a),f=d=h=null),Y(e,!0,-1),s=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==s)N(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return m&&U(e,l,p,f,d,null),g&&(e.tag=c,e.anchor=u,e.kind="mapping",e.result=l),g}(e,f,p))||function(e,t){var n,i,r,o,a,s,c,u,l,p,f=!0,d=e.tag,h=e.anchor,m={};if(91===(p=e.input.charCodeAt(e.position)))s=!(r=93),i=[];else{if(123!==p)return!1;r=125,s=!0,i={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),p=e.input.charCodeAt(++e.position);0!==p;){if(Y(e,!0,t),(p=e.input.charCodeAt(e.position))===r)return e.position++,e.tag=d,e.anchor=h,e.kind=s?"mapping":"sequence",e.result=i,!0;f||N(e,"missed comma between flow collection entries"),l=null,o=a=!1,63===p&&I(e.input.charCodeAt(e.position+1))&&(o=a=!0,e.position++,Y(e,!0,t)),n=e.line,$(e,t,x,!1,!0),u=e.tag,c=e.result,Y(e,!0,t),p=e.input.charCodeAt(e.position),!a&&e.line!==n||58!==p||(o=!0,p=e.input.charCodeAt(++e.position),Y(e,!0,t),$(e,t,x,!1,!0),l=e.result),s?U(e,i,m,u,c,l):o?i.push(U(e,null,m,u,c,l)):i.push(c),Y(e,!0,t),44===(p=e.input.charCodeAt(e.position))?(f=!0,p=e.input.charCodeAt(++e.position)):f=!1}N(e,"unexpected end of the stream within a flow collection")}(e,p)?m=!0:(a&&function(e,t){var n,i,r,o,a,s=w,c=!1,u=!1,l=t,p=0,f=!1;if(124===(o=e.input.charCodeAt(e.position)))i=!1;else{if(62!==o)return!1;i=!0}for(e.kind="scalar",e.result="";0!==o;)if(43===(o=e.input.charCodeAt(++e.position))||45===o)w===s?s=43===o?k:C:N(e,"repeat of a chomping mode identifier");else{if(!(0<=(r=48<=(a=o)&&a<=57?a-48:-1)))break;0==r?N(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?N(e,"repeat of an indentation width identifier"):(l=t+r-1,u=!0)}if(S(o)){for(;S(o=e.input.charCodeAt(++e.position)););if(35===o)for(;!j(o=e.input.charCodeAt(++e.position))&&0!==o;);}for(;0!==o;){for(q(e),e.lineIndent=0,o=e.input.charCodeAt(e.position);(!u||e.lineIndent<l)&&32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position);if(!u&&e.lineIndent>l&&(l=e.lineIndent),j(o))p++;else{if(e.lineIndent<l){s===k?e.result+=g.repeat("\n",c?1+p:p):s===w&&c&&(e.result+="\n");break}for(i?S(o)?(f=!0,e.result+=g.repeat("\n",c?1+p:p)):f?(f=!1,e.result+=g.repeat("\n",p+1)):0===p?c&&(e.result+=" "):e.result+=g.repeat("\n",p):e.result+=g.repeat("\n",c?1+p:p),u=c=!0,p=0,n=e.position;!j(o)&&0!==o;)o=e.input.charCodeAt(++e.position);L(e,n,e.position,!1)}}return!0}(e,p)||function(e,t){var n,i,r;if(39!==(n=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,i=r=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(L(e,i,e.position,!0),39!==(n=e.input.charCodeAt(++e.position)))return!0;i=e.position,e.position++,r=e.position}else j(n)?(L(e,i,r,!0),B(e,Y(e,!1,t)),i=r=e.position):e.position===e.lineStart&&R(e)?N(e,"unexpected end of the document within a single quoted scalar"):(e.position++,r=e.position);N(e,"unexpected end of the stream within a single quoted scalar")}(e,p)||function(e,t){var n,i,r,o,a,s,c,u,l,p;if(34!==(s=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(s=e.input.charCodeAt(e.position));){if(34===s)return L(e,n,e.position,!0),e.position++,!0;if(92===s){if(L(e,n,e.position,!0),j(s=e.input.charCodeAt(++e.position)))Y(e,!1,t);else if(s<256&&E[s])e.result+=F[s],e.position++;else if(0<(a=120===(p=s)?2:117===p?4:85===p?8:0)){for(r=a,o=0;0<r;r--)s=e.input.charCodeAt(++e.position),l=void 0,0<=(a=48<=(u=s)&&u<=57?u-48:97<=(l=32|u)&&l<=102?l-97+10:-1)?o=(o<<4)+a:N(e,"expected hexadecimal character");e.result+=(c=o)<=65535?String.fromCharCode(c):String.fromCharCode(55296+(c-65536>>10),56320+(c-65536&1023)),e.position++}else N(e,"unknown escape sequence");n=i=e.position}else j(s)?(L(e,n,i,!0),B(e,Y(e,!1,t)),n=i=e.position):e.position===e.lineStart&&R(e)?N(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}N(e,"unexpected end of the stream within a double quoted scalar")}(e,p)?m=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!I(i)&&!O(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&N(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),e.anchorMap.hasOwnProperty(n)||N(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],Y(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,s,c,u,l,p=e.kind,f=e.result;if(I(l=e.input.charCodeAt(e.position))||O(l)||35===l||38===l||42===l||33===l||124===l||62===l||39===l||34===l||37===l||64===l||96===l)return!1;if((63===l||45===l)&&(I(i=e.input.charCodeAt(e.position+1))||n&&O(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==l;){if(58===l){if(I(i=e.input.charCodeAt(e.position+1))||n&&O(i))break}else if(35===l){if(I(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&R(e)||n&&O(l))break;if(j(l)){if(s=e.line,c=e.lineStart,u=e.lineIndent,Y(e,!1,-1),e.lineIndent>=t){a=!0,l=e.input.charCodeAt(e.position);continue}e.position=o,e.line=s,e.lineStart=c,e.lineIndent=u;break}}a&&(L(e,r,o,!1),B(e,e.line-s),r=o=e.position,a=!1),S(l)||(o=e.position+1),l=e.input.charCodeAt(++e.position)}return L(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,p,x===n)&&(m=!0,null===e.tag&&(e.tag="?")):(m=!0,null===e.tag&&null===e.anchor||N(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===d&&(m=s&&P(e,f))),null!==e.tag&&"!"!==e.tag)if("?"===e.tag){for(c=0,u=e.implicitTypes.length;c<u;c+=1)if((l=e.implicitTypes[c]).resolve(e.result)){e.result=l.construct(e.result),e.tag=l.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else y.call(e.typeMap[e.kind||"fallback"],e.tag)?(l=e.typeMap[e.kind||"fallback"][e.tag],null!==e.result&&l.kind!==e.kind&&N(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):N(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):N(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||m}function H(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(r=e.input.charCodeAt(e.position))&&(Y(e,!0,-1),r=e.input.charCodeAt(e.position),!(0<e.lineIndent||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!I(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&N(e,"directive name must not be less than one character in length");0!==r;){for(;S(r);)r=e.input.charCodeAt(++e.position);if(35===r){for(;0!==(r=e.input.charCodeAt(++e.position))&&!j(r););break}if(j(r))break;for(t=e.position;0!==r&&!I(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&q(e),y.call(T,n)?T[n](e,n,i):M(e,'unknown document directive "'+n+'"')}Y(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,Y(e,!0,-1)):a&&N(e,"directives end mark is expected"),$(e,e.lineIndent-1,b,!1,!0),Y(e,!0,-1),e.checkLineBreaks&&s.test(e.input.slice(o,e.position))&&M(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&R(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,Y(e,!0,-1)):e.position<e.length-1&&N(e,"end of the stream or a document separator is expected")}function G(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new m(e,t);for(n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)H(n);return n.documents}function V(e,t,n){var i,r,o=G(e,n);if("function"!=typeof t)return o;for(i=0,r=o.length;i<r;i+=1)t(o[i])}function Z(e,t){var n=G(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new i("expected a single document in the stream, but found more")}}t.exports.loadAll=V,t.exports.load=Z,t.exports.safeLoadAll=function(e,t,n){if("function"!=typeof t)return V(e,g.extend({schema:o},n));V(e,t,g.extend({schema:o},n))},t.exports.safeLoad=function(e,t){return Z(e,g.extend({schema:o},t))}},{"./common":2,"./exception":4,"./mark":6,"./schema/default_full":9,"./schema/default_safe":10}],6:[function(e,t,n){"use strict";var s=e("./common");function i(e,t,n,i,r){this.name=e,this.buffer=t,this.position=n,this.line=i,this.column=r}i.prototype.getSnippet=function(e,t){var n,i,r,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,n="",i=this.position;0<i&&-1==="\0\r\n
\u2028\u2029".indexOf(this.buffer.charAt(i-1));)if(i-=1,this.position-i>t/2-1){n=" ... ",i+=5;break}for(r="",o=this.position;o<this.buffer.length&&-1==="\0\r\n
\u2028\u2029".indexOf(this.buffer.charAt(o));)if((o+=1)-this.position>t/2-1){r=" ... ",o-=5;break}return a=this.buffer.slice(i,o),s.repeat(" ",e)+n+a+r+"\n"+s.repeat(" ",e+this.position-i+n.length)+"^"},i.prototype.toString=function(e){var t,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet())&&(n+=":\n"+t),n},t.exports=i},{"./common":2}],7:[function(e,t,n){"use strict";var i=e("./common"),r=e("./exception"),o=e("./type");function a(e,t,i){var r=[];return e.include.forEach(function(e){i=a(e,t,i)}),e[t].forEach(function(n){i.forEach(function(e,t){e.tag===n.tag&&e.kind===n.kind&&r.push(t)}),i.push(n)}),i.filter(function(e,t){return-1===r.indexOf(t)})}function s(e){this.include=e.include||[],this.implicit=e.implicit||[],this.explicit=e.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&"scalar"!==e.loadKind)throw new r("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=a(this,"implicit",[]),this.compiledExplicit=a(this,"explicit",[]),this.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{}};function i(e){n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return n}(this.compiledImplicit,this.compiledExplicit)}s.DEFAULT=null,s.create=function(){var e,t;switch(arguments.length){case 1:e=s.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new r("Wrong number of arguments for Schema.create function")}if(e=i.toArray(e),t=i.toArray(t),!e.every(function(e){return e instanceof s}))throw new r("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!t.every(function(e){return e instanceof o}))throw new r("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new s({include:e,explicit:t})},t.exports=s},{"./common":2,"./exception":4,"./type":13}],8:[function(e,t,n){"use strict";var i=e("../schema");t.exports=new i({include:[e("./json")]})},{"../schema":7,"./json":12}],9:[function(e,t,n){"use strict";var i=e("../schema");t.exports=i.DEFAULT=new i({include:[e("./default_safe")],explicit:[e("../type/js/undefined"),e("../type/js/regexp"),e("../type/js/function")]})},{"../schema":7,"../type/js/function":18,"../type/js/regexp":19,"../type/js/undefined":20,"./default_safe":10}],10:[function(e,t,n){"use strict";var i=e("../schema");t.exports=new i({include:[e("./core")],implicit:[e("../type/timestamp"),e("../type/merge")],explicit:[e("../type/binary"),e("../type/omap"),e("../type/pairs"),e("../type/set")]})},{"../schema":7,"../type/binary":14,"../type/merge":22,"../type/omap":24,"../type/pairs":25,"../type/set":27,"../type/timestamp":29,"./core":8}],11:[function(e,t,n){"use strict";var i=e("../schema");t.exports=new i({explicit:[e("../type/str"),e("../type/seq"),e("../type/map")]})},{"../schema":7,"../type/map":21,"../type/seq":26,"../type/str":28}],12:[function(e,t,n){"use strict";var i=e("../schema");t.exports=new i({include:[e("./failsafe")],implicit:[e("../type/null"),e("../type/bool"),e("../type/int"),e("../type/float")]})},{"../schema":7,"../type/bool":15,"../type/float":16,"../type/int":17,"../type/null":23,"./failsafe":11}],13:[function(e,t,n){"use strict";var i=e("./exception"),r=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],o=["scalar","sequence","mapping"];t.exports=function(t,e){if(e=e||{},Object.keys(e).forEach(function(e){if(-1===r.indexOf(e))throw new i('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(e){return e},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=function(e){var n={};return null!==e&&Object.keys(e).forEach(function(t){e[t].forEach(function(e){n[String(e)]=t})}),n}(e.styleAliases||null),-1===o.indexOf(this.kind))throw new i('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}},{"./exception":4}],14:[function(e,t,n){"use strict";var c;try{c=e("buffer").Buffer}catch(e){}var i=e("../type"),u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";t.exports=new i("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=u;for(n=0;n<r;n++)if(!(64<(t=o.indexOf(e.charAt(n))))){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=u,a=0,s=[];for(t=0;t<r;t++)t%4==0&&t&&(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0==(n=r%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18==n?(s.push(a>>10&255),s.push(a>>2&255)):12==n&&s.push(a>>4&255),c?c.from?c.from(s):new c(s):s},predicate:function(e){return c&&c.isBuffer(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=u;for(t=0;t<o;t++)t%3==0&&t&&(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0==(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2==n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1==n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}})},{"../type":13}],15:[function(e,t,n){"use strict";var i=e("../type");t.exports=new i("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},{"../type":13}],16:[function(e,t,n){"use strict";var i=e("../common"),r=e("../type"),o=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var a=/^[-+]?[0-9]+e/;t.exports=new r("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!o.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n,i,r;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,r=[],0<="+-".indexOf(t[0])&&(t=t.slice(1)),".inf"===t?1==n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:0<=t.indexOf(":")?(t.split(":").forEach(function(e){r.unshift(parseFloat(e,10))}),t=0,i=1,r.forEach(function(e){t+=e*i,i*=60}),n*t):n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||i.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(i.isNegativeZero(e))return"-0.0";return n=e.toString(10),a.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"})},{"../common":2,"../type":13}],17:[function(e,t,n){"use strict";var i=e("../common"),r=e("../type");t.exports=new r("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i,r,o=e.length,a=0,s=!1;if(!o)return!1;if("-"!==(t=e[a])&&"+"!==t||(t=e[++a]),"0"===t){if(a+1===o)return!0;if("b"===(t=e[++a])){for(a++;a<o;a++)if("_"!==(t=e[a])){if("0"!==t&&"1"!==t)return!1;s=!0}return s&&"_"!==t}if("x"===t){for(a++;a<o;a++)if("_"!==(t=e[a])){if(!(48<=(i=e.charCodeAt(a))&&i<=57||65<=i&&i<=70||97<=i&&i<=102))return!1;s=!0}return s&&"_"!==t}for(;a<o;a++)if("_"!==(t=e[a])){if(!(48<=(n=e.charCodeAt(a))&&n<=55))return!1;s=!0}return s&&"_"!==t}if("_"===t)return!1;for(;a<o;a++)if("_"!==(t=e[a])){if(":"===t)break;if(!(48<=(r=e.charCodeAt(a))&&r<=57))return!1;s=!0}return!(!s||"_"===t)&&(":"!==t||/^(:[0-5]?[0-9])+$/.test(e.slice(a)))},construct:function(e){var t,n,i=e,r=1,o=[];return-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),"-"!==(t=i[0])&&"+"!==t||("-"===t&&(r=-1),t=(i=i.slice(1))[0]),"0"===i?0:"0"===t?"b"===i[1]?r*parseInt(i.slice(2),2):"x"===i[1]?r*parseInt(i,16):r*parseInt(i,8):-1!==i.indexOf(":")?(i.split(":").forEach(function(e){o.unshift(parseInt(e,10))}),i=0,n=1,o.forEach(function(e){i+=e*n,n*=60}),r*i):r*parseInt(i,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&e%1==0&&!i.isNegativeZero(e)},represent:{binary:function(e){return 0<=e?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return 0<=e?"0"+e.toString(8):"-0"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return 0<=e?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},{"../common":2,"../type":13}],18:[function(e,t,n){"use strict";var o;try{o=e("esprima")}catch(e){"undefined"!=typeof window&&(o=window.esprima)}var i=e("../../type");t.exports=new i("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:function(e){if(null===e)return!1;try{var t="("+e+")",n=o.parse(t,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&("ArrowFunctionExpression"===n.body[0].expression.type||"FunctionExpression"===n.body[0].expression.type)}catch(e){return!1}},construct:function(e){var t,n="("+e+")",i=o.parse(n,{range:!0}),r=[];if("Program"!==i.type||1!==i.body.length||"ExpressionStatement"!==i.body[0].type||"ArrowFunctionExpression"!==i.body[0].expression.type&&"FunctionExpression"!==i.body[0].expression.type)throw new Error("Failed to resolve function");return i.body[0].expression.params.forEach(function(e){r.push(e.name)}),t=i.body[0].expression.body.range,"BlockStatement"===i.body[0].expression.body.type?new Function(r,n.slice(t[0]+1,t[1]-1)):new Function(r,"return "+n.slice(t[0],t[1]))},predicate:function(e){return"[object Function]"===Object.prototype.toString.call(e)},represent:function(e){return e.toString()}})},{"../../type":13}],19:[function(e,t,n){"use strict";var i=e("../../type");t.exports=new i("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:function(e){if(null===e)return!1;if(0===e.length)return!1;var t=e,n=/\/([gim]*)$/.exec(e),i="";if("/"===t[0]){if(n&&(i=n[1]),3<i.length)return!1;if("/"!==t[t.length-i.length-1])return!1}return!0},construct:function(e){var t=e,n=/\/([gim]*)$/.exec(e),i="";return"/"===t[0]&&(n&&(i=n[1]),t=t.slice(1,t.length-i.length-1)),new RegExp(t,i)},predicate:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},represent:function(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}})},{"../../type":13}],20:[function(e,t,n){"use strict";var i=e("../../type");t.exports=new i("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:function(){return!0},construct:function(){},predicate:function(e){return void 0===e},represent:function(){return""}})},{"../../type":13}],21:[function(e,t,n){"use strict";var i=e("../type");t.exports=new i("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},{"../type":13}],22:[function(e,t,n){"use strict";var i=e("../type");t.exports=new i("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}})},{"../type":13}],23:[function(e,t,n){"use strict";var i=e("../type");t.exports=new i("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},{"../type":13}],24:[function(e,t,n){"use strict";var i=e("../type"),c=Object.prototype.hasOwnProperty,u=Object.prototype.toString;t.exports=new i("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],s=e;for(t=0,n=s.length;t<n;t+=1){if(i=s[t],o=!1,"[object Object]"!==u.call(i))return!1;for(r in i)if(c.call(i,r)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(r))return!1;a.push(r)}return!0},construct:function(e){return null!==e?e:[]}})},{"../type":13}],25:[function(e,t,n){"use strict";var i=e("../type"),s=Object.prototype.toString;t.exports=new i("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1){if(i=a[t],"[object Object]"!==s.call(i))return!1;if(1!==(r=Object.keys(i)).length)return!1;o[t]=[r[0],i[r[0]]]}return!0},construct:function(e){if(null===e)return[];var t,n,i,r,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1)i=a[t],r=Object.keys(i),o[t]=[r[0],i[r[0]]];return o}})},{"../type":13}],26:[function(e,t,n){"use strict";var i=e("../type");t.exports=new i("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})},{"../type":13}],27:[function(e,t,n){"use strict";var i=e("../type"),r=Object.prototype.hasOwnProperty;t.exports=new i("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(e){if(null===e)return!0;var t,n=e;for(t in n)if(r.call(n,t)&&null!==n[t])return!1;return!0},construct:function(e){return null!==e?e:{}}})},{"../type":13}],28:[function(e,t,n){"use strict";var i=e("../type");t.exports=new i("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})},{"../type":13}],29:[function(e,t,n){"use strict";var i=e("../type"),p=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),f=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");t.exports=new i("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==p.exec(e)||null!==f.exec(e))},construct:function(e){var t,n,i,r,o,a,s,c,u=0,l=null;if(null===(t=p.exec(e))&&(t=f.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],s=+t[6],t[7]){for(u=t[7].slice(0,3);u.length<3;)u+="0";u=+u}return t[9]&&(l=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(l=-l)),c=new Date(Date.UTC(n,i,r,o,a,s,u)),l&&c.setTime(c.getTime()-l),c},instanceOf:Date,represent:function(e){return e.toISOString()}})},{"../type":13}],"/":[function(e,t,n){"use strict";var i=e("./lib/js-yaml.js");t.exports=i},{"./lib/js-yaml.js":1}]},{},[])("/")}); diff --git a/node_modules/js-yaml/index.js b/node_modules/js-yaml/index.js new file mode 100644 index 0000000..1374435 --- /dev/null +++ b/node_modules/js-yaml/index.js @@ -0,0 +1,7 @@ +'use strict'; + + +var yaml = require('./lib/js-yaml.js'); + + +module.exports = yaml; diff --git a/node_modules/js-yaml/lib/js-yaml.js b/node_modules/js-yaml/lib/js-yaml.js new file mode 100644 index 0000000..f0e9281 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml.js @@ -0,0 +1,39 @@ +'use strict'; + + +var loader = require('./js-yaml/loader'); +var dumper = require('./js-yaml/dumper'); + + +function deprecated(name) { +  return function () { +    throw new Error('Function ' + name + ' is deprecated and cannot be used.'); +  }; +} + + +module.exports.Type                = require('./js-yaml/type'); +module.exports.Schema              = require('./js-yaml/schema'); +module.exports.FAILSAFE_SCHEMA     = require('./js-yaml/schema/failsafe'); +module.exports.JSON_SCHEMA         = require('./js-yaml/schema/json'); +module.exports.CORE_SCHEMA         = require('./js-yaml/schema/core'); +module.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full'); +module.exports.load                = loader.load; +module.exports.loadAll             = loader.loadAll; +module.exports.safeLoad            = loader.safeLoad; +module.exports.safeLoadAll         = loader.safeLoadAll; +module.exports.dump                = dumper.dump; +module.exports.safeDump            = dumper.safeDump; +module.exports.YAMLException       = require('./js-yaml/exception'); + +// Deprecated schema names from JS-YAML 2.0.x +module.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe'); +module.exports.SAFE_SCHEMA    = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full'); + +// Deprecated functions from JS-YAML 1.x.x +module.exports.scan           = deprecated('scan'); +module.exports.parse          = deprecated('parse'); +module.exports.compose        = deprecated('compose'); +module.exports.addConstructor = deprecated('addConstructor'); diff --git a/node_modules/js-yaml/lib/js-yaml/common.js b/node_modules/js-yaml/lib/js-yaml/common.js new file mode 100644 index 0000000..25ef7d8 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/common.js @@ -0,0 +1,59 @@ +'use strict'; + + +function isNothing(subject) { +  return (typeof subject === 'undefined') || (subject === null); +} + + +function isObject(subject) { +  return (typeof subject === 'object') && (subject !== null); +} + + +function toArray(sequence) { +  if (Array.isArray(sequence)) return sequence; +  else if (isNothing(sequence)) return []; + +  return [ sequence ]; +} + + +function extend(target, source) { +  var index, length, key, sourceKeys; + +  if (source) { +    sourceKeys = Object.keys(source); + +    for (index = 0, length = sourceKeys.length; index < length; index += 1) { +      key = sourceKeys[index]; +      target[key] = source[key]; +    } +  } + +  return target; +} + + +function repeat(string, count) { +  var result = '', cycle; + +  for (cycle = 0; cycle < count; cycle += 1) { +    result += string; +  } + +  return result; +} + + +function isNegativeZero(number) { +  return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); +} + + +module.exports.isNothing      = isNothing; +module.exports.isObject       = isObject; +module.exports.toArray        = toArray; +module.exports.repeat         = repeat; +module.exports.isNegativeZero = isNegativeZero; +module.exports.extend         = extend; diff --git a/node_modules/js-yaml/lib/js-yaml/dumper.js b/node_modules/js-yaml/lib/js-yaml/dumper.js new file mode 100644 index 0000000..86f3479 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/dumper.js @@ -0,0 +1,827 @@ +'use strict'; + +/*eslint-disable no-use-before-define*/ + +var common              = require('./common'); +var YAMLException       = require('./exception'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); + +var _toString       = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_TAB                  = 0x09; /* Tab */ +var CHAR_LINE_FEED            = 0x0A; /* LF */ +var CHAR_SPACE                = 0x20; /* Space */ +var CHAR_EXCLAMATION          = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE         = 0x22; /* " */ +var CHAR_SHARP                = 0x23; /* # */ +var CHAR_PERCENT              = 0x25; /* % */ +var CHAR_AMPERSAND            = 0x26; /* & */ +var CHAR_SINGLE_QUOTE         = 0x27; /* ' */ +var CHAR_ASTERISK             = 0x2A; /* * */ +var CHAR_COMMA                = 0x2C; /* , */ +var CHAR_MINUS                = 0x2D; /* - */ +var CHAR_COLON                = 0x3A; /* : */ +var CHAR_GREATER_THAN         = 0x3E; /* > */ +var CHAR_QUESTION             = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT        = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET  = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT         = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET   = 0x7B; /* { */ +var CHAR_VERTICAL_LINE        = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET  = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00]   = '\\0'; +ESCAPE_SEQUENCES[0x07]   = '\\a'; +ESCAPE_SEQUENCES[0x08]   = '\\b'; +ESCAPE_SEQUENCES[0x09]   = '\\t'; +ESCAPE_SEQUENCES[0x0A]   = '\\n'; +ESCAPE_SEQUENCES[0x0B]   = '\\v'; +ESCAPE_SEQUENCES[0x0C]   = '\\f'; +ESCAPE_SEQUENCES[0x0D]   = '\\r'; +ESCAPE_SEQUENCES[0x1B]   = '\\e'; +ESCAPE_SEQUENCES[0x22]   = '\\"'; +ESCAPE_SEQUENCES[0x5C]   = '\\\\'; +ESCAPE_SEQUENCES[0x85]   = '\\N'; +ESCAPE_SEQUENCES[0xA0]   = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ +  'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', +  'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +function compileStyleMap(schema, map) { +  var result, keys, index, length, tag, style, type; + +  if (map === null) return {}; + +  result = {}; +  keys = Object.keys(map); + +  for (index = 0, length = keys.length; index < length; index += 1) { +    tag = keys[index]; +    style = String(map[tag]); + +    if (tag.slice(0, 2) === '!!') { +      tag = 'tag:yaml.org,2002:' + tag.slice(2); +    } +    type = schema.compiledTypeMap['fallback'][tag]; + +    if (type && _hasOwnProperty.call(type.styleAliases, style)) { +      style = type.styleAliases[style]; +    } + +    result[tag] = style; +  } + +  return result; +} + +function encodeHex(character) { +  var string, handle, length; + +  string = character.toString(16).toUpperCase(); + +  if (character <= 0xFF) { +    handle = 'x'; +    length = 2; +  } else if (character <= 0xFFFF) { +    handle = 'u'; +    length = 4; +  } else if (character <= 0xFFFFFFFF) { +    handle = 'U'; +    length = 8; +  } else { +    throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); +  } + +  return '\\' + handle + common.repeat('0', length - string.length) + string; +} + +function State(options) { +  this.schema        = options['schema'] || DEFAULT_FULL_SCHEMA; +  this.indent        = Math.max(1, (options['indent'] || 2)); +  this.noArrayIndent = options['noArrayIndent'] || false; +  this.skipInvalid   = options['skipInvalid'] || false; +  this.flowLevel     = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); +  this.styleMap      = compileStyleMap(this.schema, options['styles'] || null); +  this.sortKeys      = options['sortKeys'] || false; +  this.lineWidth     = options['lineWidth'] || 80; +  this.noRefs        = options['noRefs'] || false; +  this.noCompatMode  = options['noCompatMode'] || false; +  this.condenseFlow  = options['condenseFlow'] || false; + +  this.implicitTypes = this.schema.compiledImplicit; +  this.explicitTypes = this.schema.compiledExplicit; + +  this.tag = null; +  this.result = ''; + +  this.duplicates = []; +  this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { +  var ind = common.repeat(' ', spaces), +      position = 0, +      next = -1, +      result = '', +      line, +      length = string.length; + +  while (position < length) { +    next = string.indexOf('\n', position); +    if (next === -1) { +      line = string.slice(position); +      position = length; +    } else { +      line = string.slice(position, next + 1); +      position = next + 1; +    } + +    if (line.length && line !== '\n') result += ind; + +    result += line; +  } + +  return result; +} + +function generateNextLine(state, level) { +  return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { +  var index, length, type; + +  for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { +    type = state.implicitTypes[index]; + +    if (type.resolve(str)) { +      return true; +    } +  } + +  return false; +} + +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { +  return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { +  return  (0x00020 <= c && c <= 0x00007E) +      || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) +      || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) +      ||  (0x10000 <= c && c <= 0x10FFFF); +} + +// Simplified test for values allowed after the first character in plain style. +function isPlainSafe(c) { +  // Uses a subset of nb-char - c-flow-indicator - ":" - "#" +  // where nb-char ::= c-printable - b-char - c-byte-order-mark. +  return isPrintable(c) && c !== 0xFEFF +    // - c-flow-indicator +    && c !== CHAR_COMMA +    && c !== CHAR_LEFT_SQUARE_BRACKET +    && c !== CHAR_RIGHT_SQUARE_BRACKET +    && c !== CHAR_LEFT_CURLY_BRACKET +    && c !== CHAR_RIGHT_CURLY_BRACKET +    // - ":" - "#" +    && c !== CHAR_COLON +    && c !== CHAR_SHARP; +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { +  // Uses a subset of ns-char - c-indicator +  // where ns-char = nb-char - s-white. +  return isPrintable(c) && c !== 0xFEFF +    && !isWhitespace(c) // - s-white +    // - (c-indicator ::= +    // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” +    && c !== CHAR_MINUS +    && c !== CHAR_QUESTION +    && c !== CHAR_COLON +    && c !== CHAR_COMMA +    && c !== CHAR_LEFT_SQUARE_BRACKET +    && c !== CHAR_RIGHT_SQUARE_BRACKET +    && c !== CHAR_LEFT_CURLY_BRACKET +    && c !== CHAR_RIGHT_CURLY_BRACKET +    // | “#” | “&” | “*” | “!” | “|” | “>” | “'” | “"” +    && c !== CHAR_SHARP +    && c !== CHAR_AMPERSAND +    && c !== CHAR_ASTERISK +    && c !== CHAR_EXCLAMATION +    && c !== CHAR_VERTICAL_LINE +    && c !== CHAR_GREATER_THAN +    && c !== CHAR_SINGLE_QUOTE +    && c !== CHAR_DOUBLE_QUOTE +    // | “%” | “@” | “`”) +    && c !== CHAR_PERCENT +    && c !== CHAR_COMMERCIAL_AT +    && c !== CHAR_GRAVE_ACCENT; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { +  var leadingSpaceRe = /^\n* /; +  return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN   = 1, +    STYLE_SINGLE  = 2, +    STYLE_LITERAL = 3, +    STYLE_FOLDED  = 4, +    STYLE_DOUBLE  = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +//    STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +//    STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +//    STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { +  var i; +  var char; +  var hasLineBreak = false; +  var hasFoldableLine = false; // only checked if shouldTrackWidth +  var shouldTrackWidth = lineWidth !== -1; +  var previousLineBreak = -1; // count the first line correctly +  var plain = isPlainSafeFirst(string.charCodeAt(0)) +          && !isWhitespace(string.charCodeAt(string.length - 1)); + +  if (singleLineOnly) { +    // Case: no block styles. +    // Check for disallowed characters to rule out plain and single. +    for (i = 0; i < string.length; i++) { +      char = string.charCodeAt(i); +      if (!isPrintable(char)) { +        return STYLE_DOUBLE; +      } +      plain = plain && isPlainSafe(char); +    } +  } else { +    // Case: block styles permitted. +    for (i = 0; i < string.length; i++) { +      char = string.charCodeAt(i); +      if (char === CHAR_LINE_FEED) { +        hasLineBreak = true; +        // Check if any line can be folded. +        if (shouldTrackWidth) { +          hasFoldableLine = hasFoldableLine || +            // Foldable line = too long, and not more-indented. +            (i - previousLineBreak - 1 > lineWidth && +             string[previousLineBreak + 1] !== ' '); +          previousLineBreak = i; +        } +      } else if (!isPrintable(char)) { +        return STYLE_DOUBLE; +      } +      plain = plain && isPlainSafe(char); +    } +    // in case the end is missing a \n +    hasFoldableLine = hasFoldableLine || (shouldTrackWidth && +      (i - previousLineBreak - 1 > lineWidth && +       string[previousLineBreak + 1] !== ' ')); +  } +  // Although every style can represent \n without escaping, prefer block styles +  // for multiline, since they're more readable and they don't add empty lines. +  // Also prefer folding a super-long line. +  if (!hasLineBreak && !hasFoldableLine) { +    // Strings interpretable as another type have to be quoted; +    // e.g. the string 'true' vs. the boolean true. +    return plain && !testAmbiguousType(string) +      ? STYLE_PLAIN : STYLE_SINGLE; +  } +  // Edge case: block indentation indicator can only have one digit. +  if (indentPerLevel > 9 && needIndentIndicator(string)) { +    return STYLE_DOUBLE; +  } +  // At this point we know block styles are valid. +  // Prefer literal style unless we want to fold. +  return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +//  since the dumper adds its own newline. This always works: +//    • No ending newline => unaffected; already using strip "-" chomping. +//    • Ending newline    => removed then restored. +//  Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey) { +  state.dump = (function () { +    if (string.length === 0) { +      return "''"; +    } +    if (!state.noCompatMode && +        DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { +      return "'" + string + "'"; +    } + +    var indent = state.indent * Math.max(1, level); // no 0-indent scalars +    // As indentation gets deeper, let the width decrease monotonically +    // to the lower bound min(state.lineWidth, 40). +    // Note that this implies +    //  state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. +    //  state.lineWidth > 40 + state.indent: width decreases until the lower bound. +    // This behaves better than a constant minimum width which disallows narrower options, +    // or an indent threshold which causes the width to suddenly increase. +    var lineWidth = state.lineWidth === -1 +      ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + +    // Without knowing if keys are implicit/explicit, assume implicit for safety. +    var singleLineOnly = iskey +      // No block styles in flow mode. +      || (state.flowLevel > -1 && level >= state.flowLevel); +    function testAmbiguity(string) { +      return testImplicitResolving(state, string); +    } + +    switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { +      case STYLE_PLAIN: +        return string; +      case STYLE_SINGLE: +        return "'" + string.replace(/'/g, "''") + "'"; +      case STYLE_LITERAL: +        return '|' + blockHeader(string, state.indent) +          + dropEndingNewline(indentString(string, indent)); +      case STYLE_FOLDED: +        return '>' + blockHeader(string, state.indent) +          + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); +      case STYLE_DOUBLE: +        return '"' + escapeString(string, lineWidth) + '"'; +      default: +        throw new YAMLException('impossible error: invalid scalar style'); +    } +  }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { +  var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + +  // note the special case: the string '\n' counts as a "trailing" empty line. +  var clip =          string[string.length - 1] === '\n'; +  var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); +  var chomp = keep ? '+' : (clip ? '' : '-'); + +  return indentIndicator + chomp + '\n'; +} + +// (See the note for writeScalar.) +function dropEndingNewline(string) { +  return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} + +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { +  // In folded style, $k$ consecutive newlines output as $k+1$ newlines— +  // unless they're before or after a more-indented line, or at the very +  // beginning or end, in which case $k$ maps to $k$. +  // Therefore, parse each chunk as newline(s) followed by a content line. +  var lineRe = /(\n+)([^\n]*)/g; + +  // first line (possibly an empty line) +  var result = (function () { +    var nextLF = string.indexOf('\n'); +    nextLF = nextLF !== -1 ? nextLF : string.length; +    lineRe.lastIndex = nextLF; +    return foldLine(string.slice(0, nextLF), width); +  }()); +  // If we haven't reached the first content line yet, don't add an extra \n. +  var prevMoreIndented = string[0] === '\n' || string[0] === ' '; +  var moreIndented; + +  // rest of the lines +  var match; +  while ((match = lineRe.exec(string))) { +    var prefix = match[1], line = match[2]; +    moreIndented = (line[0] === ' '); +    result += prefix +      + (!prevMoreIndented && !moreIndented && line !== '' +        ? '\n' : '') +      + foldLine(line, width); +    prevMoreIndented = moreIndented; +  } + +  return result; +} + +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { +  if (line === '' || line[0] === ' ') return line; + +  // Since a more-indented line adds a \n, breaks can't be followed by a space. +  var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. +  var match; +  // start is an inclusive index. end, curr, and next are exclusive. +  var start = 0, end, curr = 0, next = 0; +  var result = ''; + +  // Invariants: 0 <= start <= length-1. +  //   0 <= curr <= next <= max(0, length-2). curr - start <= width. +  // Inside the loop: +  //   A match implies length >= 2, so curr and next are <= length-2. +  while ((match = breakRe.exec(line))) { +    next = match.index; +    // maintain invariant: curr - start <= width +    if (next - start > width) { +      end = (curr > start) ? curr : next; // derive end <= length-2 +      result += '\n' + line.slice(start, end); +      // skip the space that was output as \n +      start = end + 1;                    // derive start <= length-1 +    } +    curr = next; +  } + +  // By the invariants, start <= length-1, so there is something left over. +  // It is either the whole string or a part starting from non-whitespace. +  result += '\n'; +  // Insert a break if the remainder is too long and there is a break available. +  if (line.length - start > width && curr > start) { +    result += line.slice(start, curr) + '\n' + line.slice(curr + 1); +  } else { +    result += line.slice(start); +  } + +  return result.slice(1); // drop extra \n joiner +} + +// Escapes a double-quoted string. +function escapeString(string) { +  var result = ''; +  var char, nextChar; +  var escapeSeq; + +  for (var i = 0; i < string.length; i++) { +    char = string.charCodeAt(i); +    // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates"). +    if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) { +      nextChar = string.charCodeAt(i + 1); +      if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) { +        // Combine the surrogate pair and store it escaped. +        result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); +        // Advance index one extra since we already used that char here. +        i++; continue; +      } +    } +    escapeSeq = ESCAPE_SEQUENCES[char]; +    result += !escapeSeq && isPrintable(char) +      ? string[i] +      : escapeSeq || encodeHex(char); +  } + +  return result; +} + +function writeFlowSequence(state, level, object) { +  var _result = '', +      _tag    = state.tag, +      index, +      length; + +  for (index = 0, length = object.length; index < length; index += 1) { +    // Write only valid elements. +    if (writeNode(state, level, object[index], false, false)) { +      if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : ''); +      _result += state.dump; +    } +  } + +  state.tag = _tag; +  state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { +  var _result = '', +      _tag    = state.tag, +      index, +      length; + +  for (index = 0, length = object.length; index < length; index += 1) { +    // Write only valid elements. +    if (writeNode(state, level + 1, object[index], true, true)) { +      if (!compact || index !== 0) { +        _result += generateNextLine(state, level); +      } + +      if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { +        _result += '-'; +      } else { +        _result += '- '; +      } + +      _result += state.dump; +    } +  } + +  state.tag = _tag; +  state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { +  var _result       = '', +      _tag          = state.tag, +      objectKeyList = Object.keys(object), +      index, +      length, +      objectKey, +      objectValue, +      pairBuffer; + +  for (index = 0, length = objectKeyList.length; index < length; index += 1) { +    pairBuffer = state.condenseFlow ? '"' : ''; + +    if (index !== 0) pairBuffer += ', '; + +    objectKey = objectKeyList[index]; +    objectValue = object[objectKey]; + +    if (!writeNode(state, level, objectKey, false, false)) { +      continue; // Skip this pair because of invalid key; +    } + +    if (state.dump.length > 1024) pairBuffer += '? '; + +    pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + +    if (!writeNode(state, level, objectValue, false, false)) { +      continue; // Skip this pair because of invalid value. +    } + +    pairBuffer += state.dump; + +    // Both key and value are valid. +    _result += pairBuffer; +  } + +  state.tag = _tag; +  state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { +  var _result       = '', +      _tag          = state.tag, +      objectKeyList = Object.keys(object), +      index, +      length, +      objectKey, +      objectValue, +      explicitPair, +      pairBuffer; + +  // Allow sorting keys so that the output file is deterministic +  if (state.sortKeys === true) { +    // Default sorting +    objectKeyList.sort(); +  } else if (typeof state.sortKeys === 'function') { +    // Custom sort function +    objectKeyList.sort(state.sortKeys); +  } else if (state.sortKeys) { +    // Something is wrong +    throw new YAMLException('sortKeys must be a boolean or a function'); +  } + +  for (index = 0, length = objectKeyList.length; index < length; index += 1) { +    pairBuffer = ''; + +    if (!compact || index !== 0) { +      pairBuffer += generateNextLine(state, level); +    } + +    objectKey = objectKeyList[index]; +    objectValue = object[objectKey]; + +    if (!writeNode(state, level + 1, objectKey, true, true, true)) { +      continue; // Skip this pair because of invalid key. +    } + +    explicitPair = (state.tag !== null && state.tag !== '?') || +                   (state.dump && state.dump.length > 1024); + +    if (explicitPair) { +      if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { +        pairBuffer += '?'; +      } else { +        pairBuffer += '? '; +      } +    } + +    pairBuffer += state.dump; + +    if (explicitPair) { +      pairBuffer += generateNextLine(state, level); +    } + +    if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { +      continue; // Skip this pair because of invalid value. +    } + +    if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { +      pairBuffer += ':'; +    } else { +      pairBuffer += ': '; +    } + +    pairBuffer += state.dump; + +    // Both key and value are valid. +    _result += pairBuffer; +  } + +  state.tag = _tag; +  state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { +  var _result, typeList, index, length, type, style; + +  typeList = explicit ? state.explicitTypes : state.implicitTypes; + +  for (index = 0, length = typeList.length; index < length; index += 1) { +    type = typeList[index]; + +    if ((type.instanceOf  || type.predicate) && +        (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && +        (!type.predicate  || type.predicate(object))) { + +      state.tag = explicit ? type.tag : '?'; + +      if (type.represent) { +        style = state.styleMap[type.tag] || type.defaultStyle; + +        if (_toString.call(type.represent) === '[object Function]') { +          _result = type.represent(object, style); +        } else if (_hasOwnProperty.call(type.represent, style)) { +          _result = type.represent[style](object, style); +        } else { +          throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); +        } + +        state.dump = _result; +      } + +      return true; +    } +  } + +  return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey) { +  state.tag = null; +  state.dump = object; + +  if (!detectType(state, object, false)) { +    detectType(state, object, true); +  } + +  var type = _toString.call(state.dump); + +  if (block) { +    block = (state.flowLevel < 0 || state.flowLevel > level); +  } + +  var objectOrArray = type === '[object Object]' || type === '[object Array]', +      duplicateIndex, +      duplicate; + +  if (objectOrArray) { +    duplicateIndex = state.duplicates.indexOf(object); +    duplicate = duplicateIndex !== -1; +  } + +  if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { +    compact = false; +  } + +  if (duplicate && state.usedDuplicates[duplicateIndex]) { +    state.dump = '*ref_' + duplicateIndex; +  } else { +    if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { +      state.usedDuplicates[duplicateIndex] = true; +    } +    if (type === '[object Object]') { +      if (block && (Object.keys(state.dump).length !== 0)) { +        writeBlockMapping(state, level, state.dump, compact); +        if (duplicate) { +          state.dump = '&ref_' + duplicateIndex + state.dump; +        } +      } else { +        writeFlowMapping(state, level, state.dump); +        if (duplicate) { +          state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; +        } +      } +    } else if (type === '[object Array]') { +      var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level; +      if (block && (state.dump.length !== 0)) { +        writeBlockSequence(state, arrayLevel, state.dump, compact); +        if (duplicate) { +          state.dump = '&ref_' + duplicateIndex + state.dump; +        } +      } else { +        writeFlowSequence(state, arrayLevel, state.dump); +        if (duplicate) { +          state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; +        } +      } +    } else if (type === '[object String]') { +      if (state.tag !== '?') { +        writeScalar(state, state.dump, level, iskey); +      } +    } else { +      if (state.skipInvalid) return false; +      throw new YAMLException('unacceptable kind of an object to dump ' + type); +    } + +    if (state.tag !== null && state.tag !== '?') { +      state.dump = '!<' + state.tag + '> ' + state.dump; +    } +  } + +  return true; +} + +function getDuplicateReferences(object, state) { +  var objects = [], +      duplicatesIndexes = [], +      index, +      length; + +  inspectNode(object, objects, duplicatesIndexes); + +  for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { +    state.duplicates.push(objects[duplicatesIndexes[index]]); +  } +  state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { +  var objectKeyList, +      index, +      length; + +  if (object !== null && typeof object === 'object') { +    index = objects.indexOf(object); +    if (index !== -1) { +      if (duplicatesIndexes.indexOf(index) === -1) { +        duplicatesIndexes.push(index); +      } +    } else { +      objects.push(object); + +      if (Array.isArray(object)) { +        for (index = 0, length = object.length; index < length; index += 1) { +          inspectNode(object[index], objects, duplicatesIndexes); +        } +      } else { +        objectKeyList = Object.keys(object); + +        for (index = 0, length = objectKeyList.length; index < length; index += 1) { +          inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); +        } +      } +    } +  } +} + +function dump(input, options) { +  options = options || {}; + +  var state = new State(options); + +  if (!state.noRefs) getDuplicateReferences(input, state); + +  if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; + +  return ''; +} + +function safeDump(input, options) { +  return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + +module.exports.dump     = dump; +module.exports.safeDump = safeDump; diff --git a/node_modules/js-yaml/lib/js-yaml/exception.js b/node_modules/js-yaml/lib/js-yaml/exception.js new file mode 100644 index 0000000..b744a1e --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/exception.js @@ -0,0 +1,43 @@ +// YAML error class. http://stackoverflow.com/questions/8458984 +// +'use strict'; + +function YAMLException(reason, mark) { +  // Super constructor +  Error.call(this); + +  this.name = 'YAMLException'; +  this.reason = reason; +  this.mark = mark; +  this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); + +  // Include stack trace in error object +  if (Error.captureStackTrace) { +    // Chrome and NodeJS +    Error.captureStackTrace(this, this.constructor); +  } else { +    // FF, IE 10+ and Safari 6+. Fallback for others +    this.stack = (new Error()).stack || ''; +  } +} + + +// Inherit from Error +YAMLException.prototype = Object.create(Error.prototype); +YAMLException.prototype.constructor = YAMLException; + + +YAMLException.prototype.toString = function toString(compact) { +  var result = this.name + ': '; + +  result += this.reason || '(unknown reason)'; + +  if (!compact && this.mark) { +    result += ' ' + this.mark.toString(); +  } + +  return result; +}; + + +module.exports = YAMLException; diff --git a/node_modules/js-yaml/lib/js-yaml/loader.js b/node_modules/js-yaml/lib/js-yaml/loader.js new file mode 100644 index 0000000..2815c95 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/loader.js @@ -0,0 +1,1625 @@ +'use strict'; + +/*eslint-disable max-len,no-use-before-define*/ + +var common              = require('./common'); +var YAMLException       = require('./exception'); +var Mark                = require('./mark'); +var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); +var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); + + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN   = 1; +var CONTEXT_FLOW_OUT  = 2; +var CONTEXT_BLOCK_IN  = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP  = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP  = 3; + + +var PATTERN_NON_PRINTABLE         = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS       = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE            = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI               = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function _class(obj) { return Object.prototype.toString.call(obj); } + +function is_EOL(c) { +  return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { +  return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { +  return (c === 0x09/* Tab */) || +         (c === 0x20/* Space */) || +         (c === 0x0A/* LF */) || +         (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { +  return c === 0x2C/* , */ || +         c === 0x5B/* [ */ || +         c === 0x5D/* ] */ || +         c === 0x7B/* { */ || +         c === 0x7D/* } */; +} + +function fromHexCode(c) { +  var lc; + +  if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { +    return c - 0x30; +  } + +  /*eslint-disable no-bitwise*/ +  lc = c | 0x20; + +  if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { +    return lc - 0x61 + 10; +  } + +  return -1; +} + +function escapedHexLen(c) { +  if (c === 0x78/* x */) { return 2; } +  if (c === 0x75/* u */) { return 4; } +  if (c === 0x55/* U */) { return 8; } +  return 0; +} + +function fromDecimalCode(c) { +  if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { +    return c - 0x30; +  } + +  return -1; +} + +function simpleEscapeSequence(c) { +  /* eslint-disable indent */ +  return (c === 0x30/* 0 */) ? '\x00' : +        (c === 0x61/* a */) ? '\x07' : +        (c === 0x62/* b */) ? '\x08' : +        (c === 0x74/* t */) ? '\x09' : +        (c === 0x09/* Tab */) ? '\x09' : +        (c === 0x6E/* n */) ? '\x0A' : +        (c === 0x76/* v */) ? '\x0B' : +        (c === 0x66/* f */) ? '\x0C' : +        (c === 0x72/* r */) ? '\x0D' : +        (c === 0x65/* e */) ? '\x1B' : +        (c === 0x20/* Space */) ? ' ' : +        (c === 0x22/* " */) ? '\x22' : +        (c === 0x2F/* / */) ? '/' : +        (c === 0x5C/* \ */) ? '\x5C' : +        (c === 0x4E/* N */) ? '\x85' : +        (c === 0x5F/* _ */) ? '\xA0' : +        (c === 0x4C/* L */) ? '\u2028' : +        (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { +  if (c <= 0xFFFF) { +    return String.fromCharCode(c); +  } +  // Encode UTF-16 surrogate pair +  // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF +  return String.fromCharCode( +    ((c - 0x010000) >> 10) + 0xD800, +    ((c - 0x010000) & 0x03FF) + 0xDC00 +  ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { +  simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; +  simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State(input, options) { +  this.input = input; + +  this.filename  = options['filename']  || null; +  this.schema    = options['schema']    || DEFAULT_FULL_SCHEMA; +  this.onWarning = options['onWarning'] || null; +  this.legacy    = options['legacy']    || false; +  this.json      = options['json']      || false; +  this.listener  = options['listener']  || null; + +  this.implicitTypes = this.schema.compiledImplicit; +  this.typeMap       = this.schema.compiledTypeMap; + +  this.length     = input.length; +  this.position   = 0; +  this.line       = 0; +  this.lineStart  = 0; +  this.lineIndent = 0; + +  this.documents = []; + +  /* +  this.version; +  this.checkLineBreaks; +  this.tagMap; +  this.anchorMap; +  this.tag; +  this.anchor; +  this.kind; +  this.result;*/ + +} + + +function generateError(state, message) { +  return new YAMLException( +    message, +    new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); +} + +function throwError(state, message) { +  throw generateError(state, message); +} + +function throwWarning(state, message) { +  if (state.onWarning) { +    state.onWarning.call(null, generateError(state, message)); +  } +} + + +var directiveHandlers = { + +  YAML: function handleYamlDirective(state, name, args) { + +    var match, major, minor; + +    if (state.version !== null) { +      throwError(state, 'duplication of %YAML directive'); +    } + +    if (args.length !== 1) { +      throwError(state, 'YAML directive accepts exactly one argument'); +    } + +    match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + +    if (match === null) { +      throwError(state, 'ill-formed argument of the YAML directive'); +    } + +    major = parseInt(match[1], 10); +    minor = parseInt(match[2], 10); + +    if (major !== 1) { +      throwError(state, 'unacceptable YAML version of the document'); +    } + +    state.version = args[0]; +    state.checkLineBreaks = (minor < 2); + +    if (minor !== 1 && minor !== 2) { +      throwWarning(state, 'unsupported YAML version of the document'); +    } +  }, + +  TAG: function handleTagDirective(state, name, args) { + +    var handle, prefix; + +    if (args.length !== 2) { +      throwError(state, 'TAG directive accepts exactly two arguments'); +    } + +    handle = args[0]; +    prefix = args[1]; + +    if (!PATTERN_TAG_HANDLE.test(handle)) { +      throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); +    } + +    if (_hasOwnProperty.call(state.tagMap, handle)) { +      throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); +    } + +    if (!PATTERN_TAG_URI.test(prefix)) { +      throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); +    } + +    state.tagMap[handle] = prefix; +  } +}; + + +function captureSegment(state, start, end, checkJson) { +  var _position, _length, _character, _result; + +  if (start < end) { +    _result = state.input.slice(start, end); + +    if (checkJson) { +      for (_position = 0, _length = _result.length; _position < _length; _position += 1) { +        _character = _result.charCodeAt(_position); +        if (!(_character === 0x09 || +              (0x20 <= _character && _character <= 0x10FFFF))) { +          throwError(state, 'expected valid JSON character'); +        } +      } +    } else if (PATTERN_NON_PRINTABLE.test(_result)) { +      throwError(state, 'the stream contains non-printable characters'); +    } + +    state.result += _result; +  } +} + +function mergeMappings(state, destination, source, overridableKeys) { +  var sourceKeys, key, index, quantity; + +  if (!common.isObject(source)) { +    throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); +  } + +  sourceKeys = Object.keys(source); + +  for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { +    key = sourceKeys[index]; + +    if (!_hasOwnProperty.call(destination, key)) { +      destination[key] = source[key]; +      overridableKeys[key] = true; +    } +  } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { +  var index, quantity; + +  // The output is a plain object here, so keys can only be strings. +  // We need to convert keyNode to a string, but doing so can hang the process +  // (deeply nested arrays that explode exponentially using aliases). +  if (Array.isArray(keyNode)) { +    keyNode = Array.prototype.slice.call(keyNode); + +    for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { +      if (Array.isArray(keyNode[index])) { +        throwError(state, 'nested arrays are not supported inside keys'); +      } + +      if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { +        keyNode[index] = '[object Object]'; +      } +    } +  } + +  // Avoid code execution in load() via toString property +  // (still use its own toString for arrays, timestamps, +  // and whatever user schema extensions happen to have @@toStringTag) +  if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { +    keyNode = '[object Object]'; +  } + + +  keyNode = String(keyNode); + +  if (_result === null) { +    _result = {}; +  } + +  if (keyTag === 'tag:yaml.org,2002:merge') { +    if (Array.isArray(valueNode)) { +      for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { +        mergeMappings(state, _result, valueNode[index], overridableKeys); +      } +    } else { +      mergeMappings(state, _result, valueNode, overridableKeys); +    } +  } else { +    if (!state.json && +        !_hasOwnProperty.call(overridableKeys, keyNode) && +        _hasOwnProperty.call(_result, keyNode)) { +      state.line = startLine || state.line; +      state.position = startPos || state.position; +      throwError(state, 'duplicated mapping key'); +    } +    _result[keyNode] = valueNode; +    delete overridableKeys[keyNode]; +  } + +  return _result; +} + +function readLineBreak(state) { +  var ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch === 0x0A/* LF */) { +    state.position++; +  } else if (ch === 0x0D/* CR */) { +    state.position++; +    if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { +      state.position++; +    } +  } else { +    throwError(state, 'a line break is expected'); +  } + +  state.line += 1; +  state.lineStart = state.position; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { +  var lineBreaks = 0, +      ch = state.input.charCodeAt(state.position); + +  while (ch !== 0) { +    while (is_WHITE_SPACE(ch)) { +      ch = state.input.charCodeAt(++state.position); +    } + +    if (allowComments && ch === 0x23/* # */) { +      do { +        ch = state.input.charCodeAt(++state.position); +      } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); +    } + +    if (is_EOL(ch)) { +      readLineBreak(state); + +      ch = state.input.charCodeAt(state.position); +      lineBreaks++; +      state.lineIndent = 0; + +      while (ch === 0x20/* Space */) { +        state.lineIndent++; +        ch = state.input.charCodeAt(++state.position); +      } +    } else { +      break; +    } +  } + +  if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { +    throwWarning(state, 'deficient indentation'); +  } + +  return lineBreaks; +} + +function testDocumentSeparator(state) { +  var _position = state.position, +      ch; + +  ch = state.input.charCodeAt(_position); + +  // Condition state.position === state.lineStart is tested +  // in parent on each call, for efficiency. No needs to test here again. +  if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && +      ch === state.input.charCodeAt(_position + 1) && +      ch === state.input.charCodeAt(_position + 2)) { + +    _position += 3; + +    ch = state.input.charCodeAt(_position); + +    if (ch === 0 || is_WS_OR_EOL(ch)) { +      return true; +    } +  } + +  return false; +} + +function writeFoldedLines(state, count) { +  if (count === 1) { +    state.result += ' '; +  } else if (count > 1) { +    state.result += common.repeat('\n', count - 1); +  } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { +  var preceding, +      following, +      captureStart, +      captureEnd, +      hasPendingContent, +      _line, +      _lineStart, +      _lineIndent, +      _kind = state.kind, +      _result = state.result, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (is_WS_OR_EOL(ch)      || +      is_FLOW_INDICATOR(ch) || +      ch === 0x23/* # */    || +      ch === 0x26/* & */    || +      ch === 0x2A/* * */    || +      ch === 0x21/* ! */    || +      ch === 0x7C/* | */    || +      ch === 0x3E/* > */    || +      ch === 0x27/* ' */    || +      ch === 0x22/* " */    || +      ch === 0x25/* % */    || +      ch === 0x40/* @ */    || +      ch === 0x60/* ` */) { +    return false; +  } + +  if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { +    following = state.input.charCodeAt(state.position + 1); + +    if (is_WS_OR_EOL(following) || +        withinFlowCollection && is_FLOW_INDICATOR(following)) { +      return false; +    } +  } + +  state.kind = 'scalar'; +  state.result = ''; +  captureStart = captureEnd = state.position; +  hasPendingContent = false; + +  while (ch !== 0) { +    if (ch === 0x3A/* : */) { +      following = state.input.charCodeAt(state.position + 1); + +      if (is_WS_OR_EOL(following) || +          withinFlowCollection && is_FLOW_INDICATOR(following)) { +        break; +      } + +    } else if (ch === 0x23/* # */) { +      preceding = state.input.charCodeAt(state.position - 1); + +      if (is_WS_OR_EOL(preceding)) { +        break; +      } + +    } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || +               withinFlowCollection && is_FLOW_INDICATOR(ch)) { +      break; + +    } else if (is_EOL(ch)) { +      _line = state.line; +      _lineStart = state.lineStart; +      _lineIndent = state.lineIndent; +      skipSeparationSpace(state, false, -1); + +      if (state.lineIndent >= nodeIndent) { +        hasPendingContent = true; +        ch = state.input.charCodeAt(state.position); +        continue; +      } else { +        state.position = captureEnd; +        state.line = _line; +        state.lineStart = _lineStart; +        state.lineIndent = _lineIndent; +        break; +      } +    } + +    if (hasPendingContent) { +      captureSegment(state, captureStart, captureEnd, false); +      writeFoldedLines(state, state.line - _line); +      captureStart = captureEnd = state.position; +      hasPendingContent = false; +    } + +    if (!is_WHITE_SPACE(ch)) { +      captureEnd = state.position + 1; +    } + +    ch = state.input.charCodeAt(++state.position); +  } + +  captureSegment(state, captureStart, captureEnd, false); + +  if (state.result) { +    return true; +  } + +  state.kind = _kind; +  state.result = _result; +  return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { +  var ch, +      captureStart, captureEnd; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x27/* ' */) { +    return false; +  } + +  state.kind = 'scalar'; +  state.result = ''; +  state.position++; +  captureStart = captureEnd = state.position; + +  while ((ch = state.input.charCodeAt(state.position)) !== 0) { +    if (ch === 0x27/* ' */) { +      captureSegment(state, captureStart, state.position, true); +      ch = state.input.charCodeAt(++state.position); + +      if (ch === 0x27/* ' */) { +        captureStart = state.position; +        state.position++; +        captureEnd = state.position; +      } else { +        return true; +      } + +    } else if (is_EOL(ch)) { +      captureSegment(state, captureStart, captureEnd, true); +      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); +      captureStart = captureEnd = state.position; + +    } else if (state.position === state.lineStart && testDocumentSeparator(state)) { +      throwError(state, 'unexpected end of the document within a single quoted scalar'); + +    } else { +      state.position++; +      captureEnd = state.position; +    } +  } + +  throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { +  var captureStart, +      captureEnd, +      hexLength, +      hexResult, +      tmp, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x22/* " */) { +    return false; +  } + +  state.kind = 'scalar'; +  state.result = ''; +  state.position++; +  captureStart = captureEnd = state.position; + +  while ((ch = state.input.charCodeAt(state.position)) !== 0) { +    if (ch === 0x22/* " */) { +      captureSegment(state, captureStart, state.position, true); +      state.position++; +      return true; + +    } else if (ch === 0x5C/* \ */) { +      captureSegment(state, captureStart, state.position, true); +      ch = state.input.charCodeAt(++state.position); + +      if (is_EOL(ch)) { +        skipSeparationSpace(state, false, nodeIndent); + +        // TODO: rework to inline fn with no type cast? +      } else if (ch < 256 && simpleEscapeCheck[ch]) { +        state.result += simpleEscapeMap[ch]; +        state.position++; + +      } else if ((tmp = escapedHexLen(ch)) > 0) { +        hexLength = tmp; +        hexResult = 0; + +        for (; hexLength > 0; hexLength--) { +          ch = state.input.charCodeAt(++state.position); + +          if ((tmp = fromHexCode(ch)) >= 0) { +            hexResult = (hexResult << 4) + tmp; + +          } else { +            throwError(state, 'expected hexadecimal character'); +          } +        } + +        state.result += charFromCodepoint(hexResult); + +        state.position++; + +      } else { +        throwError(state, 'unknown escape sequence'); +      } + +      captureStart = captureEnd = state.position; + +    } else if (is_EOL(ch)) { +      captureSegment(state, captureStart, captureEnd, true); +      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); +      captureStart = captureEnd = state.position; + +    } else if (state.position === state.lineStart && testDocumentSeparator(state)) { +      throwError(state, 'unexpected end of the document within a double quoted scalar'); + +    } else { +      state.position++; +      captureEnd = state.position; +    } +  } + +  throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { +  var readNext = true, +      _line, +      _tag     = state.tag, +      _result, +      _anchor  = state.anchor, +      following, +      terminator, +      isPair, +      isExplicitPair, +      isMapping, +      overridableKeys = {}, +      keyNode, +      keyTag, +      valueNode, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch === 0x5B/* [ */) { +    terminator = 0x5D;/* ] */ +    isMapping = false; +    _result = []; +  } else if (ch === 0x7B/* { */) { +    terminator = 0x7D;/* } */ +    isMapping = true; +    _result = {}; +  } else { +    return false; +  } + +  if (state.anchor !== null) { +    state.anchorMap[state.anchor] = _result; +  } + +  ch = state.input.charCodeAt(++state.position); + +  while (ch !== 0) { +    skipSeparationSpace(state, true, nodeIndent); + +    ch = state.input.charCodeAt(state.position); + +    if (ch === terminator) { +      state.position++; +      state.tag = _tag; +      state.anchor = _anchor; +      state.kind = isMapping ? 'mapping' : 'sequence'; +      state.result = _result; +      return true; +    } else if (!readNext) { +      throwError(state, 'missed comma between flow collection entries'); +    } + +    keyTag = keyNode = valueNode = null; +    isPair = isExplicitPair = false; + +    if (ch === 0x3F/* ? */) { +      following = state.input.charCodeAt(state.position + 1); + +      if (is_WS_OR_EOL(following)) { +        isPair = isExplicitPair = true; +        state.position++; +        skipSeparationSpace(state, true, nodeIndent); +      } +    } + +    _line = state.line; +    composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); +    keyTag = state.tag; +    keyNode = state.result; +    skipSeparationSpace(state, true, nodeIndent); + +    ch = state.input.charCodeAt(state.position); + +    if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { +      isPair = true; +      ch = state.input.charCodeAt(++state.position); +      skipSeparationSpace(state, true, nodeIndent); +      composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); +      valueNode = state.result; +    } + +    if (isMapping) { +      storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); +    } else if (isPair) { +      _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); +    } else { +      _result.push(keyNode); +    } + +    skipSeparationSpace(state, true, nodeIndent); + +    ch = state.input.charCodeAt(state.position); + +    if (ch === 0x2C/* , */) { +      readNext = true; +      ch = state.input.charCodeAt(++state.position); +    } else { +      readNext = false; +    } +  } + +  throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { +  var captureStart, +      folding, +      chomping       = CHOMPING_CLIP, +      didReadContent = false, +      detectedIndent = false, +      textIndent     = nodeIndent, +      emptyLines     = 0, +      atMoreIndented = false, +      tmp, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch === 0x7C/* | */) { +    folding = false; +  } else if (ch === 0x3E/* > */) { +    folding = true; +  } else { +    return false; +  } + +  state.kind = 'scalar'; +  state.result = ''; + +  while (ch !== 0) { +    ch = state.input.charCodeAt(++state.position); + +    if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { +      if (CHOMPING_CLIP === chomping) { +        chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; +      } else { +        throwError(state, 'repeat of a chomping mode identifier'); +      } + +    } else if ((tmp = fromDecimalCode(ch)) >= 0) { +      if (tmp === 0) { +        throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); +      } else if (!detectedIndent) { +        textIndent = nodeIndent + tmp - 1; +        detectedIndent = true; +      } else { +        throwError(state, 'repeat of an indentation width identifier'); +      } + +    } else { +      break; +    } +  } + +  if (is_WHITE_SPACE(ch)) { +    do { ch = state.input.charCodeAt(++state.position); } +    while (is_WHITE_SPACE(ch)); + +    if (ch === 0x23/* # */) { +      do { ch = state.input.charCodeAt(++state.position); } +      while (!is_EOL(ch) && (ch !== 0)); +    } +  } + +  while (ch !== 0) { +    readLineBreak(state); +    state.lineIndent = 0; + +    ch = state.input.charCodeAt(state.position); + +    while ((!detectedIndent || state.lineIndent < textIndent) && +           (ch === 0x20/* Space */)) { +      state.lineIndent++; +      ch = state.input.charCodeAt(++state.position); +    } + +    if (!detectedIndent && state.lineIndent > textIndent) { +      textIndent = state.lineIndent; +    } + +    if (is_EOL(ch)) { +      emptyLines++; +      continue; +    } + +    // End of the scalar. +    if (state.lineIndent < textIndent) { + +      // Perform the chomping. +      if (chomping === CHOMPING_KEEP) { +        state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); +      } else if (chomping === CHOMPING_CLIP) { +        if (didReadContent) { // i.e. only if the scalar is not empty. +          state.result += '\n'; +        } +      } + +      // Break this `while` cycle and go to the funciton's epilogue. +      break; +    } + +    // Folded style: use fancy rules to handle line breaks. +    if (folding) { + +      // Lines starting with white space characters (more-indented lines) are not folded. +      if (is_WHITE_SPACE(ch)) { +        atMoreIndented = true; +        // except for the first content line (cf. Example 8.1) +        state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + +      // End of more-indented block. +      } else if (atMoreIndented) { +        atMoreIndented = false; +        state.result += common.repeat('\n', emptyLines + 1); + +      // Just one line break - perceive as the same line. +      } else if (emptyLines === 0) { +        if (didReadContent) { // i.e. only if we have already read some scalar content. +          state.result += ' '; +        } + +      // Several line breaks - perceive as different lines. +      } else { +        state.result += common.repeat('\n', emptyLines); +      } + +    // Literal style: just add exact number of line breaks between content lines. +    } else { +      // Keep all line breaks except the header line break. +      state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); +    } + +    didReadContent = true; +    detectedIndent = true; +    emptyLines = 0; +    captureStart = state.position; + +    while (!is_EOL(ch) && (ch !== 0)) { +      ch = state.input.charCodeAt(++state.position); +    } + +    captureSegment(state, captureStart, state.position, false); +  } + +  return true; +} + +function readBlockSequence(state, nodeIndent) { +  var _line, +      _tag      = state.tag, +      _anchor   = state.anchor, +      _result   = [], +      following, +      detected  = false, +      ch; + +  if (state.anchor !== null) { +    state.anchorMap[state.anchor] = _result; +  } + +  ch = state.input.charCodeAt(state.position); + +  while (ch !== 0) { + +    if (ch !== 0x2D/* - */) { +      break; +    } + +    following = state.input.charCodeAt(state.position + 1); + +    if (!is_WS_OR_EOL(following)) { +      break; +    } + +    detected = true; +    state.position++; + +    if (skipSeparationSpace(state, true, -1)) { +      if (state.lineIndent <= nodeIndent) { +        _result.push(null); +        ch = state.input.charCodeAt(state.position); +        continue; +      } +    } + +    _line = state.line; +    composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); +    _result.push(state.result); +    skipSeparationSpace(state, true, -1); + +    ch = state.input.charCodeAt(state.position); + +    if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { +      throwError(state, 'bad indentation of a sequence entry'); +    } else if (state.lineIndent < nodeIndent) { +      break; +    } +  } + +  if (detected) { +    state.tag = _tag; +    state.anchor = _anchor; +    state.kind = 'sequence'; +    state.result = _result; +    return true; +  } +  return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { +  var following, +      allowCompact, +      _line, +      _pos, +      _tag          = state.tag, +      _anchor       = state.anchor, +      _result       = {}, +      overridableKeys = {}, +      keyTag        = null, +      keyNode       = null, +      valueNode     = null, +      atExplicitKey = false, +      detected      = false, +      ch; + +  if (state.anchor !== null) { +    state.anchorMap[state.anchor] = _result; +  } + +  ch = state.input.charCodeAt(state.position); + +  while (ch !== 0) { +    following = state.input.charCodeAt(state.position + 1); +    _line = state.line; // Save the current line. +    _pos = state.position; + +    // +    // Explicit notation case. There are two separate blocks: +    // first for the key (denoted by "?") and second for the value (denoted by ":") +    // +    if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + +      if (ch === 0x3F/* ? */) { +        if (atExplicitKey) { +          storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); +          keyTag = keyNode = valueNode = null; +        } + +        detected = true; +        atExplicitKey = true; +        allowCompact = true; + +      } else if (atExplicitKey) { +        // i.e. 0x3A/* : */ === character after the explicit key. +        atExplicitKey = false; +        allowCompact = true; + +      } else { +        throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); +      } + +      state.position += 1; +      ch = following; + +    // +    // Implicit notation case. Flow-style node as the key first, then ":", and the value. +    // +    } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + +      if (state.line === _line) { +        ch = state.input.charCodeAt(state.position); + +        while (is_WHITE_SPACE(ch)) { +          ch = state.input.charCodeAt(++state.position); +        } + +        if (ch === 0x3A/* : */) { +          ch = state.input.charCodeAt(++state.position); + +          if (!is_WS_OR_EOL(ch)) { +            throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); +          } + +          if (atExplicitKey) { +            storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); +            keyTag = keyNode = valueNode = null; +          } + +          detected = true; +          atExplicitKey = false; +          allowCompact = false; +          keyTag = state.tag; +          keyNode = state.result; + +        } else if (detected) { +          throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + +        } else { +          state.tag = _tag; +          state.anchor = _anchor; +          return true; // Keep the result of `composeNode`. +        } + +      } else if (detected) { +        throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + +      } else { +        state.tag = _tag; +        state.anchor = _anchor; +        return true; // Keep the result of `composeNode`. +      } + +    } else { +      break; // Reading is done. Go to the epilogue. +    } + +    // +    // Common reading code for both explicit and implicit notations. +    // +    if (state.line === _line || state.lineIndent > nodeIndent) { +      if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { +        if (atExplicitKey) { +          keyNode = state.result; +        } else { +          valueNode = state.result; +        } +      } + +      if (!atExplicitKey) { +        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); +        keyTag = keyNode = valueNode = null; +      } + +      skipSeparationSpace(state, true, -1); +      ch = state.input.charCodeAt(state.position); +    } + +    if (state.lineIndent > nodeIndent && (ch !== 0)) { +      throwError(state, 'bad indentation of a mapping entry'); +    } else if (state.lineIndent < nodeIndent) { +      break; +    } +  } + +  // +  // Epilogue. +  // + +  // Special case: last mapping's node contains only the key in explicit notation. +  if (atExplicitKey) { +    storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); +  } + +  // Expose the resulting mapping. +  if (detected) { +    state.tag = _tag; +    state.anchor = _anchor; +    state.kind = 'mapping'; +    state.result = _result; +  } + +  return detected; +} + +function readTagProperty(state) { +  var _position, +      isVerbatim = false, +      isNamed    = false, +      tagHandle, +      tagName, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x21/* ! */) return false; + +  if (state.tag !== null) { +    throwError(state, 'duplication of a tag property'); +  } + +  ch = state.input.charCodeAt(++state.position); + +  if (ch === 0x3C/* < */) { +    isVerbatim = true; +    ch = state.input.charCodeAt(++state.position); + +  } else if (ch === 0x21/* ! */) { +    isNamed = true; +    tagHandle = '!!'; +    ch = state.input.charCodeAt(++state.position); + +  } else { +    tagHandle = '!'; +  } + +  _position = state.position; + +  if (isVerbatim) { +    do { ch = state.input.charCodeAt(++state.position); } +    while (ch !== 0 && ch !== 0x3E/* > */); + +    if (state.position < state.length) { +      tagName = state.input.slice(_position, state.position); +      ch = state.input.charCodeAt(++state.position); +    } else { +      throwError(state, 'unexpected end of the stream within a verbatim tag'); +    } +  } else { +    while (ch !== 0 && !is_WS_OR_EOL(ch)) { + +      if (ch === 0x21/* ! */) { +        if (!isNamed) { +          tagHandle = state.input.slice(_position - 1, state.position + 1); + +          if (!PATTERN_TAG_HANDLE.test(tagHandle)) { +            throwError(state, 'named tag handle cannot contain such characters'); +          } + +          isNamed = true; +          _position = state.position + 1; +        } else { +          throwError(state, 'tag suffix cannot contain exclamation marks'); +        } +      } + +      ch = state.input.charCodeAt(++state.position); +    } + +    tagName = state.input.slice(_position, state.position); + +    if (PATTERN_FLOW_INDICATORS.test(tagName)) { +      throwError(state, 'tag suffix cannot contain flow indicator characters'); +    } +  } + +  if (tagName && !PATTERN_TAG_URI.test(tagName)) { +    throwError(state, 'tag name cannot contain such characters: ' + tagName); +  } + +  if (isVerbatim) { +    state.tag = tagName; + +  } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { +    state.tag = state.tagMap[tagHandle] + tagName; + +  } else if (tagHandle === '!') { +    state.tag = '!' + tagName; + +  } else if (tagHandle === '!!') { +    state.tag = 'tag:yaml.org,2002:' + tagName; + +  } else { +    throwError(state, 'undeclared tag handle "' + tagHandle + '"'); +  } + +  return true; +} + +function readAnchorProperty(state) { +  var _position, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x26/* & */) return false; + +  if (state.anchor !== null) { +    throwError(state, 'duplication of an anchor property'); +  } + +  ch = state.input.charCodeAt(++state.position); +  _position = state.position; + +  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { +    ch = state.input.charCodeAt(++state.position); +  } + +  if (state.position === _position) { +    throwError(state, 'name of an anchor node must contain at least one character'); +  } + +  state.anchor = state.input.slice(_position, state.position); +  return true; +} + +function readAlias(state) { +  var _position, alias, +      ch; + +  ch = state.input.charCodeAt(state.position); + +  if (ch !== 0x2A/* * */) return false; + +  ch = state.input.charCodeAt(++state.position); +  _position = state.position; + +  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { +    ch = state.input.charCodeAt(++state.position); +  } + +  if (state.position === _position) { +    throwError(state, 'name of an alias node must contain at least one character'); +  } + +  alias = state.input.slice(_position, state.position); + +  if (!state.anchorMap.hasOwnProperty(alias)) { +    throwError(state, 'unidentified alias "' + alias + '"'); +  } + +  state.result = state.anchorMap[alias]; +  skipSeparationSpace(state, true, -1); +  return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { +  var allowBlockStyles, +      allowBlockScalars, +      allowBlockCollections, +      indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent +      atNewLine  = false, +      hasContent = false, +      typeIndex, +      typeQuantity, +      type, +      flowIndent, +      blockIndent; + +  if (state.listener !== null) { +    state.listener('open', state); +  } + +  state.tag    = null; +  state.anchor = null; +  state.kind   = null; +  state.result = null; + +  allowBlockStyles = allowBlockScalars = allowBlockCollections = +    CONTEXT_BLOCK_OUT === nodeContext || +    CONTEXT_BLOCK_IN  === nodeContext; + +  if (allowToSeek) { +    if (skipSeparationSpace(state, true, -1)) { +      atNewLine = true; + +      if (state.lineIndent > parentIndent) { +        indentStatus = 1; +      } else if (state.lineIndent === parentIndent) { +        indentStatus = 0; +      } else if (state.lineIndent < parentIndent) { +        indentStatus = -1; +      } +    } +  } + +  if (indentStatus === 1) { +    while (readTagProperty(state) || readAnchorProperty(state)) { +      if (skipSeparationSpace(state, true, -1)) { +        atNewLine = true; +        allowBlockCollections = allowBlockStyles; + +        if (state.lineIndent > parentIndent) { +          indentStatus = 1; +        } else if (state.lineIndent === parentIndent) { +          indentStatus = 0; +        } else if (state.lineIndent < parentIndent) { +          indentStatus = -1; +        } +      } else { +        allowBlockCollections = false; +      } +    } +  } + +  if (allowBlockCollections) { +    allowBlockCollections = atNewLine || allowCompact; +  } + +  if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { +    if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { +      flowIndent = parentIndent; +    } else { +      flowIndent = parentIndent + 1; +    } + +    blockIndent = state.position - state.lineStart; + +    if (indentStatus === 1) { +      if (allowBlockCollections && +          (readBlockSequence(state, blockIndent) || +           readBlockMapping(state, blockIndent, flowIndent)) || +          readFlowCollection(state, flowIndent)) { +        hasContent = true; +      } else { +        if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || +            readSingleQuotedScalar(state, flowIndent) || +            readDoubleQuotedScalar(state, flowIndent)) { +          hasContent = true; + +        } else if (readAlias(state)) { +          hasContent = true; + +          if (state.tag !== null || state.anchor !== null) { +            throwError(state, 'alias node should not have any properties'); +          } + +        } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { +          hasContent = true; + +          if (state.tag === null) { +            state.tag = '?'; +          } +        } + +        if (state.anchor !== null) { +          state.anchorMap[state.anchor] = state.result; +        } +      } +    } else if (indentStatus === 0) { +      // Special case: block sequences are allowed to have same indentation level as the parent. +      // http://www.yaml.org/spec/1.2/spec.html#id2799784 +      hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); +    } +  } + +  if (state.tag !== null && state.tag !== '!') { +    if (state.tag === '?') { +      for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { +        type = state.implicitTypes[typeIndex]; + +        // Implicit resolving is not allowed for non-scalar types, and '?' +        // non-specific tag is only assigned to plain scalars. So, it isn't +        // needed to check for 'kind' conformity. + +        if (type.resolve(state.result)) { // `state.result` updated in resolver if matched +          state.result = type.construct(state.result); +          state.tag = type.tag; +          if (state.anchor !== null) { +            state.anchorMap[state.anchor] = state.result; +          } +          break; +        } +      } +    } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { +      type = state.typeMap[state.kind || 'fallback'][state.tag]; + +      if (state.result !== null && type.kind !== state.kind) { +        throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); +      } + +      if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched +        throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); +      } else { +        state.result = type.construct(state.result); +        if (state.anchor !== null) { +          state.anchorMap[state.anchor] = state.result; +        } +      } +    } else { +      throwError(state, 'unknown tag !<' + state.tag + '>'); +    } +  } + +  if (state.listener !== null) { +    state.listener('close', state); +  } +  return state.tag !== null ||  state.anchor !== null || hasContent; +} + +function readDocument(state) { +  var documentStart = state.position, +      _position, +      directiveName, +      directiveArgs, +      hasDirectives = false, +      ch; + +  state.version = null; +  state.checkLineBreaks = state.legacy; +  state.tagMap = {}; +  state.anchorMap = {}; + +  while ((ch = state.input.charCodeAt(state.position)) !== 0) { +    skipSeparationSpace(state, true, -1); + +    ch = state.input.charCodeAt(state.position); + +    if (state.lineIndent > 0 || ch !== 0x25/* % */) { +      break; +    } + +    hasDirectives = true; +    ch = state.input.charCodeAt(++state.position); +    _position = state.position; + +    while (ch !== 0 && !is_WS_OR_EOL(ch)) { +      ch = state.input.charCodeAt(++state.position); +    } + +    directiveName = state.input.slice(_position, state.position); +    directiveArgs = []; + +    if (directiveName.length < 1) { +      throwError(state, 'directive name must not be less than one character in length'); +    } + +    while (ch !== 0) { +      while (is_WHITE_SPACE(ch)) { +        ch = state.input.charCodeAt(++state.position); +      } + +      if (ch === 0x23/* # */) { +        do { ch = state.input.charCodeAt(++state.position); } +        while (ch !== 0 && !is_EOL(ch)); +        break; +      } + +      if (is_EOL(ch)) break; + +      _position = state.position; + +      while (ch !== 0 && !is_WS_OR_EOL(ch)) { +        ch = state.input.charCodeAt(++state.position); +      } + +      directiveArgs.push(state.input.slice(_position, state.position)); +    } + +    if (ch !== 0) readLineBreak(state); + +    if (_hasOwnProperty.call(directiveHandlers, directiveName)) { +      directiveHandlers[directiveName](state, directiveName, directiveArgs); +    } else { +      throwWarning(state, 'unknown document directive "' + directiveName + '"'); +    } +  } + +  skipSeparationSpace(state, true, -1); + +  if (state.lineIndent === 0 && +      state.input.charCodeAt(state.position)     === 0x2D/* - */ && +      state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && +      state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { +    state.position += 3; +    skipSeparationSpace(state, true, -1); + +  } else if (hasDirectives) { +    throwError(state, 'directives end mark is expected'); +  } + +  composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); +  skipSeparationSpace(state, true, -1); + +  if (state.checkLineBreaks && +      PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { +    throwWarning(state, 'non-ASCII line breaks are interpreted as content'); +  } + +  state.documents.push(state.result); + +  if (state.position === state.lineStart && testDocumentSeparator(state)) { + +    if (state.input.charCodeAt(state.position) === 0x2E/* . */) { +      state.position += 3; +      skipSeparationSpace(state, true, -1); +    } +    return; +  } + +  if (state.position < (state.length - 1)) { +    throwError(state, 'end of the stream or a document separator is expected'); +  } else { +    return; +  } +} + + +function loadDocuments(input, options) { +  input = String(input); +  options = options || {}; + +  if (input.length !== 0) { + +    // Add tailing `\n` if not exists +    if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && +        input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { +      input += '\n'; +    } + +    // Strip BOM +    if (input.charCodeAt(0) === 0xFEFF) { +      input = input.slice(1); +    } +  } + +  var state = new State(input, options); + +  // Use 0 as string terminator. That significantly simplifies bounds check. +  state.input += '\0'; + +  while (state.input.charCodeAt(state.position) === 0x20/* Space */) { +    state.lineIndent += 1; +    state.position += 1; +  } + +  while (state.position < (state.length - 1)) { +    readDocument(state); +  } + +  return state.documents; +} + + +function loadAll(input, iterator, options) { +  var documents = loadDocuments(input, options), index, length; + +  if (typeof iterator !== 'function') { +    return documents; +  } + +  for (index = 0, length = documents.length; index < length; index += 1) { +    iterator(documents[index]); +  } +} + + +function load(input, options) { +  var documents = loadDocuments(input, options); + +  if (documents.length === 0) { +    /*eslint-disable no-undefined*/ +    return undefined; +  } else if (documents.length === 1) { +    return documents[0]; +  } +  throw new YAMLException('expected a single document in the stream, but found more'); +} + + +function safeLoadAll(input, output, options) { +  if (typeof output === 'function') { +    loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +  } else { +    return loadAll(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +  } +} + + +function safeLoad(input, options) { +  return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +module.exports.loadAll     = loadAll; +module.exports.load        = load; +module.exports.safeLoadAll = safeLoadAll; +module.exports.safeLoad    = safeLoad; diff --git a/node_modules/js-yaml/lib/js-yaml/mark.js b/node_modules/js-yaml/lib/js-yaml/mark.js new file mode 100644 index 0000000..47b265c --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/mark.js @@ -0,0 +1,76 @@ +'use strict'; + + +var common = require('./common'); + + +function Mark(name, buffer, position, line, column) { +  this.name     = name; +  this.buffer   = buffer; +  this.position = position; +  this.line     = line; +  this.column   = column; +} + + +Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { +  var head, start, tail, end, snippet; + +  if (!this.buffer) return null; + +  indent = indent || 4; +  maxLength = maxLength || 75; + +  head = ''; +  start = this.position; + +  while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { +    start -= 1; +    if (this.position - start > (maxLength / 2 - 1)) { +      head = ' ... '; +      start += 5; +      break; +    } +  } + +  tail = ''; +  end = this.position; + +  while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { +    end += 1; +    if (end - this.position > (maxLength / 2 - 1)) { +      tail = ' ... '; +      end -= 5; +      break; +    } +  } + +  snippet = this.buffer.slice(start, end); + +  return common.repeat(' ', indent) + head + snippet + tail + '\n' + +         common.repeat(' ', indent + this.position - start + head.length) + '^'; +}; + + +Mark.prototype.toString = function toString(compact) { +  var snippet, where = ''; + +  if (this.name) { +    where += 'in "' + this.name + '" '; +  } + +  where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); + +  if (!compact) { +    snippet = this.getSnippet(); + +    if (snippet) { +      where += ':\n' + snippet; +    } +  } + +  return where; +}; + + +module.exports = Mark; diff --git a/node_modules/js-yaml/lib/js-yaml/schema.js b/node_modules/js-yaml/lib/js-yaml/schema.js new file mode 100644 index 0000000..ca7cf47 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema.js @@ -0,0 +1,108 @@ +'use strict'; + +/*eslint-disable max-len*/ + +var common        = require('./common'); +var YAMLException = require('./exception'); +var Type          = require('./type'); + + +function compileList(schema, name, result) { +  var exclude = []; + +  schema.include.forEach(function (includedSchema) { +    result = compileList(includedSchema, name, result); +  }); + +  schema[name].forEach(function (currentType) { +    result.forEach(function (previousType, previousIndex) { +      if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { +        exclude.push(previousIndex); +      } +    }); + +    result.push(currentType); +  }); + +  return result.filter(function (type, index) { +    return exclude.indexOf(index) === -1; +  }); +} + + +function compileMap(/* lists... */) { +  var result = { +        scalar: {}, +        sequence: {}, +        mapping: {}, +        fallback: {} +      }, index, length; + +  function collectType(type) { +    result[type.kind][type.tag] = result['fallback'][type.tag] = type; +  } + +  for (index = 0, length = arguments.length; index < length; index += 1) { +    arguments[index].forEach(collectType); +  } +  return result; +} + + +function Schema(definition) { +  this.include  = definition.include  || []; +  this.implicit = definition.implicit || []; +  this.explicit = definition.explicit || []; + +  this.implicit.forEach(function (type) { +    if (type.loadKind && type.loadKind !== 'scalar') { +      throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); +    } +  }); + +  this.compiledImplicit = compileList(this, 'implicit', []); +  this.compiledExplicit = compileList(this, 'explicit', []); +  this.compiledTypeMap  = compileMap(this.compiledImplicit, this.compiledExplicit); +} + + +Schema.DEFAULT = null; + + +Schema.create = function createSchema() { +  var schemas, types; + +  switch (arguments.length) { +    case 1: +      schemas = Schema.DEFAULT; +      types = arguments[0]; +      break; + +    case 2: +      schemas = arguments[0]; +      types = arguments[1]; +      break; + +    default: +      throw new YAMLException('Wrong number of arguments for Schema.create function'); +  } + +  schemas = common.toArray(schemas); +  types = common.toArray(types); + +  if (!schemas.every(function (schema) { return schema instanceof Schema; })) { +    throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); +  } + +  if (!types.every(function (type) { return type instanceof Type; })) { +    throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); +  } + +  return new Schema({ +    include: schemas, +    explicit: types +  }); +}; + + +module.exports = Schema; diff --git a/node_modules/js-yaml/lib/js-yaml/schema/core.js b/node_modules/js-yaml/lib/js-yaml/schema/core.js new file mode 100644 index 0000000..206daab --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/core.js @@ -0,0 +1,18 @@ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ +  include: [ +    require('./json') +  ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/schema/default_full.js b/node_modules/js-yaml/lib/js-yaml/schema/default_full.js new file mode 100644 index 0000000..a55ef42 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/default_full.js @@ -0,0 +1,25 @@ +// JS-YAML's default schema for `load` function. +// It is not described in the YAML specification. +// +// This schema is based on JS-YAML's default safe schema and includes +// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. +// +// Also this schema is used as default base schema at `Schema.create` function. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = Schema.DEFAULT = new Schema({ +  include: [ +    require('./default_safe') +  ], +  explicit: [ +    require('../type/js/undefined'), +    require('../type/js/regexp'), +    require('../type/js/function') +  ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js b/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js new file mode 100644 index 0000000..11d89bb --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js @@ -0,0 +1,28 @@ +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ +  include: [ +    require('./core') +  ], +  implicit: [ +    require('../type/timestamp'), +    require('../type/merge') +  ], +  explicit: [ +    require('../type/binary'), +    require('../type/omap'), +    require('../type/pairs'), +    require('../type/set') +  ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js b/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js new file mode 100644 index 0000000..b7a33eb --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js @@ -0,0 +1,17 @@ +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ +  explicit: [ +    require('../type/str'), +    require('../type/seq'), +    require('../type/map') +  ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/schema/json.js b/node_modules/js-yaml/lib/js-yaml/schema/json.js new file mode 100644 index 0000000..5be3dbf --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/schema/json.js @@ -0,0 +1,25 @@ +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ +  include: [ +    require('./failsafe') +  ], +  implicit: [ +    require('../type/null'), +    require('../type/bool'), +    require('../type/int'), +    require('../type/float') +  ] +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type.js b/node_modules/js-yaml/lib/js-yaml/type.js new file mode 100644 index 0000000..90b702a --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type.js @@ -0,0 +1,61 @@ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ +  'kind', +  'resolve', +  'construct', +  'instanceOf', +  'predicate', +  'represent', +  'defaultStyle', +  'styleAliases' +]; + +var YAML_NODE_KINDS = [ +  'scalar', +  'sequence', +  'mapping' +]; + +function compileStyleAliases(map) { +  var result = {}; + +  if (map !== null) { +    Object.keys(map).forEach(function (style) { +      map[style].forEach(function (alias) { +        result[String(alias)] = style; +      }); +    }); +  } + +  return result; +} + +function Type(tag, options) { +  options = options || {}; + +  Object.keys(options).forEach(function (name) { +    if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { +      throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); +    } +  }); + +  // TODO: Add tag format check. +  this.tag          = tag; +  this.kind         = options['kind']         || null; +  this.resolve      = options['resolve']      || function () { return true; }; +  this.construct    = options['construct']    || function (data) { return data; }; +  this.instanceOf   = options['instanceOf']   || null; +  this.predicate    = options['predicate']    || null; +  this.represent    = options['represent']    || null; +  this.defaultStyle = options['defaultStyle'] || null; +  this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + +  if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { +    throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); +  } +} + +module.exports = Type; diff --git a/node_modules/js-yaml/lib/js-yaml/type/binary.js b/node_modules/js-yaml/lib/js-yaml/type/binary.js new file mode 100644 index 0000000..10b1875 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/binary.js @@ -0,0 +1,138 @@ +'use strict'; + +/*eslint-disable no-bitwise*/ + +var NodeBuffer; + +try { +  // A trick for browserified version, to not include `Buffer` shim +  var _require = require; +  NodeBuffer = _require('buffer').Buffer; +} catch (__) {} + +var Type       = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { +  if (data === null) return false; + +  var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + +  // Convert one by one. +  for (idx = 0; idx < max; idx++) { +    code = map.indexOf(data.charAt(idx)); + +    // Skip CR/LF +    if (code > 64) continue; + +    // Fail on illegal characters +    if (code < 0) return false; + +    bitlen += 6; +  } + +  // If there are any bits left, source was corrupted +  return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { +  var idx, tailbits, +      input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan +      max = input.length, +      map = BASE64_MAP, +      bits = 0, +      result = []; + +  // Collect by 6*4 bits (3 bytes) + +  for (idx = 0; idx < max; idx++) { +    if ((idx % 4 === 0) && idx) { +      result.push((bits >> 16) & 0xFF); +      result.push((bits >> 8) & 0xFF); +      result.push(bits & 0xFF); +    } + +    bits = (bits << 6) | map.indexOf(input.charAt(idx)); +  } + +  // Dump tail + +  tailbits = (max % 4) * 6; + +  if (tailbits === 0) { +    result.push((bits >> 16) & 0xFF); +    result.push((bits >> 8) & 0xFF); +    result.push(bits & 0xFF); +  } else if (tailbits === 18) { +    result.push((bits >> 10) & 0xFF); +    result.push((bits >> 2) & 0xFF); +  } else if (tailbits === 12) { +    result.push((bits >> 4) & 0xFF); +  } + +  // Wrap into Buffer for NodeJS and leave Array for browser +  if (NodeBuffer) { +    // Support node 6.+ Buffer API when available +    return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result); +  } + +  return result; +} + +function representYamlBinary(object /*, style*/) { +  var result = '', bits = 0, idx, tail, +      max = object.length, +      map = BASE64_MAP; + +  // Convert every three bytes to 4 ASCII characters. + +  for (idx = 0; idx < max; idx++) { +    if ((idx % 3 === 0) && idx) { +      result += map[(bits >> 18) & 0x3F]; +      result += map[(bits >> 12) & 0x3F]; +      result += map[(bits >> 6) & 0x3F]; +      result += map[bits & 0x3F]; +    } + +    bits = (bits << 8) + object[idx]; +  } + +  // Dump tail + +  tail = max % 3; + +  if (tail === 0) { +    result += map[(bits >> 18) & 0x3F]; +    result += map[(bits >> 12) & 0x3F]; +    result += map[(bits >> 6) & 0x3F]; +    result += map[bits & 0x3F]; +  } else if (tail === 2) { +    result += map[(bits >> 10) & 0x3F]; +    result += map[(bits >> 4) & 0x3F]; +    result += map[(bits << 2) & 0x3F]; +    result += map[64]; +  } else if (tail === 1) { +    result += map[(bits >> 2) & 0x3F]; +    result += map[(bits << 4) & 0x3F]; +    result += map[64]; +    result += map[64]; +  } + +  return result; +} + +function isBinary(object) { +  return NodeBuffer && NodeBuffer.isBuffer(object); +} + +module.exports = new Type('tag:yaml.org,2002:binary', { +  kind: 'scalar', +  resolve: resolveYamlBinary, +  construct: constructYamlBinary, +  predicate: isBinary, +  represent: representYamlBinary +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/bool.js b/node_modules/js-yaml/lib/js-yaml/type/bool.js new file mode 100644 index 0000000..cb77459 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/bool.js @@ -0,0 +1,35 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlBoolean(data) { +  if (data === null) return false; + +  var max = data.length; + +  return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || +         (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { +  return data === 'true' || +         data === 'True' || +         data === 'TRUE'; +} + +function isBoolean(object) { +  return Object.prototype.toString.call(object) === '[object Boolean]'; +} + +module.exports = new Type('tag:yaml.org,2002:bool', { +  kind: 'scalar', +  resolve: resolveYamlBoolean, +  construct: constructYamlBoolean, +  predicate: isBoolean, +  represent: { +    lowercase: function (object) { return object ? 'true' : 'false'; }, +    uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, +    camelcase: function (object) { return object ? 'True' : 'False'; } +  }, +  defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/float.js b/node_modules/js-yaml/lib/js-yaml/type/float.js new file mode 100644 index 0000000..127671b --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/float.js @@ -0,0 +1,116 @@ +'use strict'; + +var common = require('../common'); +var Type   = require('../type'); + +var YAML_FLOAT_PATTERN = new RegExp( +  // 2.5e4, 2.5 and integers +  '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + +  // .2e4, .2 +  // special case, seems not from spec +  '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + +  // 20:59 +  '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + +  // .inf +  '|[-+]?\\.(?:inf|Inf|INF)' + +  // .nan +  '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { +  if (data === null) return false; + +  if (!YAML_FLOAT_PATTERN.test(data) || +      // Quick hack to not allow integers end with `_` +      // Probably should update regexp & check speed +      data[data.length - 1] === '_') { +    return false; +  } + +  return true; +} + +function constructYamlFloat(data) { +  var value, sign, base, digits; + +  value  = data.replace(/_/g, '').toLowerCase(); +  sign   = value[0] === '-' ? -1 : 1; +  digits = []; + +  if ('+-'.indexOf(value[0]) >= 0) { +    value = value.slice(1); +  } + +  if (value === '.inf') { +    return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + +  } else if (value === '.nan') { +    return NaN; + +  } else if (value.indexOf(':') >= 0) { +    value.split(':').forEach(function (v) { +      digits.unshift(parseFloat(v, 10)); +    }); + +    value = 0.0; +    base = 1; + +    digits.forEach(function (d) { +      value += d * base; +      base *= 60; +    }); + +    return sign * value; + +  } +  return sign * parseFloat(value, 10); +} + + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { +  var res; + +  if (isNaN(object)) { +    switch (style) { +      case 'lowercase': return '.nan'; +      case 'uppercase': return '.NAN'; +      case 'camelcase': return '.NaN'; +    } +  } else if (Number.POSITIVE_INFINITY === object) { +    switch (style) { +      case 'lowercase': return '.inf'; +      case 'uppercase': return '.INF'; +      case 'camelcase': return '.Inf'; +    } +  } else if (Number.NEGATIVE_INFINITY === object) { +    switch (style) { +      case 'lowercase': return '-.inf'; +      case 'uppercase': return '-.INF'; +      case 'camelcase': return '-.Inf'; +    } +  } else if (common.isNegativeZero(object)) { +    return '-0.0'; +  } + +  res = object.toString(10); + +  // JS stringifier can build scientific format without dots: 5e-100, +  // while YAML requres dot: 5.e-100. Fix it with simple hack + +  return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; +} + +function isFloat(object) { +  return (Object.prototype.toString.call(object) === '[object Number]') && +         (object % 1 !== 0 || common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { +  kind: 'scalar', +  resolve: resolveYamlFloat, +  construct: constructYamlFloat, +  predicate: isFloat, +  represent: representYamlFloat, +  defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/int.js b/node_modules/js-yaml/lib/js-yaml/type/int.js new file mode 100644 index 0000000..ba61c5f --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/int.js @@ -0,0 +1,173 @@ +'use strict'; + +var common = require('../common'); +var Type   = require('../type'); + +function isHexCode(c) { +  return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || +         ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || +         ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { +  return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { +  return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { +  if (data === null) return false; + +  var max = data.length, +      index = 0, +      hasDigits = false, +      ch; + +  if (!max) return false; + +  ch = data[index]; + +  // sign +  if (ch === '-' || ch === '+') { +    ch = data[++index]; +  } + +  if (ch === '0') { +    // 0 +    if (index + 1 === max) return true; +    ch = data[++index]; + +    // base 2, base 8, base 16 + +    if (ch === 'b') { +      // base 2 +      index++; + +      for (; index < max; index++) { +        ch = data[index]; +        if (ch === '_') continue; +        if (ch !== '0' && ch !== '1') return false; +        hasDigits = true; +      } +      return hasDigits && ch !== '_'; +    } + + +    if (ch === 'x') { +      // base 16 +      index++; + +      for (; index < max; index++) { +        ch = data[index]; +        if (ch === '_') continue; +        if (!isHexCode(data.charCodeAt(index))) return false; +        hasDigits = true; +      } +      return hasDigits && ch !== '_'; +    } + +    // base 8 +    for (; index < max; index++) { +      ch = data[index]; +      if (ch === '_') continue; +      if (!isOctCode(data.charCodeAt(index))) return false; +      hasDigits = true; +    } +    return hasDigits && ch !== '_'; +  } + +  // base 10 (except 0) or base 60 + +  // value should not start with `_`; +  if (ch === '_') return false; + +  for (; index < max; index++) { +    ch = data[index]; +    if (ch === '_') continue; +    if (ch === ':') break; +    if (!isDecCode(data.charCodeAt(index))) { +      return false; +    } +    hasDigits = true; +  } + +  // Should have digits and should not end with `_` +  if (!hasDigits || ch === '_') return false; + +  // if !base60 - done; +  if (ch !== ':') return true; + +  // base60 almost not used, no needs to optimize +  return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} + +function constructYamlInteger(data) { +  var value = data, sign = 1, ch, base, digits = []; + +  if (value.indexOf('_') !== -1) { +    value = value.replace(/_/g, ''); +  } + +  ch = value[0]; + +  if (ch === '-' || ch === '+') { +    if (ch === '-') sign = -1; +    value = value.slice(1); +    ch = value[0]; +  } + +  if (value === '0') return 0; + +  if (ch === '0') { +    if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); +    if (value[1] === 'x') return sign * parseInt(value, 16); +    return sign * parseInt(value, 8); +  } + +  if (value.indexOf(':') !== -1) { +    value.split(':').forEach(function (v) { +      digits.unshift(parseInt(v, 10)); +    }); + +    value = 0; +    base = 1; + +    digits.forEach(function (d) { +      value += (d * base); +      base *= 60; +    }); + +    return sign * value; + +  } + +  return sign * parseInt(value, 10); +} + +function isInteger(object) { +  return (Object.prototype.toString.call(object)) === '[object Number]' && +         (object % 1 === 0 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { +  kind: 'scalar', +  resolve: resolveYamlInteger, +  construct: constructYamlInteger, +  predicate: isInteger, +  represent: { +    binary:      function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, +    octal:       function (obj) { return obj >= 0 ? '0'  + obj.toString(8) : '-0'  + obj.toString(8).slice(1); }, +    decimal:     function (obj) { return obj.toString(10); }, +    /* eslint-disable max-len */ +    hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() :  '-0x' + obj.toString(16).toUpperCase().slice(1); } +  }, +  defaultStyle: 'decimal', +  styleAliases: { +    binary:      [ 2,  'bin' ], +    octal:       [ 8,  'oct' ], +    decimal:     [ 10, 'dec' ], +    hexadecimal: [ 16, 'hex' ] +  } +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/js/function.js b/node_modules/js-yaml/lib/js-yaml/type/js/function.js new file mode 100644 index 0000000..3604e23 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/js/function.js @@ -0,0 +1,92 @@ +'use strict'; + +var esprima; + +// Browserified version does not have esprima +// +// 1. For node.js just require module as deps +// 2. For browser try to require mudule via external AMD system. +//    If not found - try to fallback to window.esprima. If not +//    found too - then fail to parse. +// +try { +  // workaround to exclude package from browserify list. +  var _require = require; +  esprima = _require('esprima'); +} catch (_) { +  /*global window */ +  if (typeof window !== 'undefined') esprima = window.esprima; +} + +var Type = require('../../type'); + +function resolveJavascriptFunction(data) { +  if (data === null) return false; + +  try { +    var source = '(' + data + ')', +        ast    = esprima.parse(source, { range: true }); + +    if (ast.type                    !== 'Program'             || +        ast.body.length             !== 1                     || +        ast.body[0].type            !== 'ExpressionStatement' || +        (ast.body[0].expression.type !== 'ArrowFunctionExpression' && +          ast.body[0].expression.type !== 'FunctionExpression')) { +      return false; +    } + +    return true; +  } catch (err) { +    return false; +  } +} + +function constructJavascriptFunction(data) { +  /*jslint evil:true*/ + +  var source = '(' + data + ')', +      ast    = esprima.parse(source, { range: true }), +      params = [], +      body; + +  if (ast.type                    !== 'Program'             || +      ast.body.length             !== 1                     || +      ast.body[0].type            !== 'ExpressionStatement' || +      (ast.body[0].expression.type !== 'ArrowFunctionExpression' && +        ast.body[0].expression.type !== 'FunctionExpression')) { +    throw new Error('Failed to resolve function'); +  } + +  ast.body[0].expression.params.forEach(function (param) { +    params.push(param.name); +  }); + +  body = ast.body[0].expression.body.range; + +  // Esprima's ranges include the first '{' and the last '}' characters on +  // function expressions. So cut them out. +  if (ast.body[0].expression.body.type === 'BlockStatement') { +    /*eslint-disable no-new-func*/ +    return new Function(params, source.slice(body[0] + 1, body[1] - 1)); +  } +  // ES6 arrow functions can omit the BlockStatement. In that case, just return +  // the body. +  /*eslint-disable no-new-func*/ +  return new Function(params, 'return ' + source.slice(body[0], body[1])); +} + +function representJavascriptFunction(object /*, style*/) { +  return object.toString(); +} + +function isFunction(object) { +  return Object.prototype.toString.call(object) === '[object Function]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/function', { +  kind: 'scalar', +  resolve: resolveJavascriptFunction, +  construct: constructJavascriptFunction, +  predicate: isFunction, +  represent: representJavascriptFunction +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js b/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js new file mode 100644 index 0000000..43fa470 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js @@ -0,0 +1,60 @@ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptRegExp(data) { +  if (data === null) return false; +  if (data.length === 0) return false; + +  var regexp = data, +      tail   = /\/([gim]*)$/.exec(data), +      modifiers = ''; + +  // if regexp starts with '/' it can have modifiers and must be properly closed +  // `/foo/gim` - modifiers tail can be maximum 3 chars +  if (regexp[0] === '/') { +    if (tail) modifiers = tail[1]; + +    if (modifiers.length > 3) return false; +    // if expression starts with /, is should be properly terminated +    if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; +  } + +  return true; +} + +function constructJavascriptRegExp(data) { +  var regexp = data, +      tail   = /\/([gim]*)$/.exec(data), +      modifiers = ''; + +  // `/foo/gim` - tail can be maximum 4 chars +  if (regexp[0] === '/') { +    if (tail) modifiers = tail[1]; +    regexp = regexp.slice(1, regexp.length - modifiers.length - 1); +  } + +  return new RegExp(regexp, modifiers); +} + +function representJavascriptRegExp(object /*, style*/) { +  var result = '/' + object.source + '/'; + +  if (object.global) result += 'g'; +  if (object.multiline) result += 'm'; +  if (object.ignoreCase) result += 'i'; + +  return result; +} + +function isRegExp(object) { +  return Object.prototype.toString.call(object) === '[object RegExp]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/regexp', { +  kind: 'scalar', +  resolve: resolveJavascriptRegExp, +  construct: constructJavascriptRegExp, +  predicate: isRegExp, +  represent: representJavascriptRegExp +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js b/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js new file mode 100644 index 0000000..95b5569 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js @@ -0,0 +1,28 @@ +'use strict'; + +var Type = require('../../type'); + +function resolveJavascriptUndefined() { +  return true; +} + +function constructJavascriptUndefined() { +  /*eslint-disable no-undefined*/ +  return undefined; +} + +function representJavascriptUndefined() { +  return ''; +} + +function isUndefined(object) { +  return typeof object === 'undefined'; +} + +module.exports = new Type('tag:yaml.org,2002:js/undefined', { +  kind: 'scalar', +  resolve: resolveJavascriptUndefined, +  construct: constructJavascriptUndefined, +  predicate: isUndefined, +  represent: representJavascriptUndefined +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/map.js b/node_modules/js-yaml/lib/js-yaml/type/map.js new file mode 100644 index 0000000..f327bee --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/map.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:map', { +  kind: 'mapping', +  construct: function (data) { return data !== null ? data : {}; } +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/merge.js b/node_modules/js-yaml/lib/js-yaml/type/merge.js new file mode 100644 index 0000000..ae08a86 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/merge.js @@ -0,0 +1,12 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { +  return data === '<<' || data === null; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { +  kind: 'scalar', +  resolve: resolveYamlMerge +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/null.js b/node_modules/js-yaml/lib/js-yaml/type/null.js new file mode 100644 index 0000000..6874daa --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/null.js @@ -0,0 +1,34 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlNull(data) { +  if (data === null) return true; + +  var max = data.length; + +  return (max === 1 && data === '~') || +         (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { +  return null; +} + +function isNull(object) { +  return object === null; +} + +module.exports = new Type('tag:yaml.org,2002:null', { +  kind: 'scalar', +  resolve: resolveYamlNull, +  construct: constructYamlNull, +  predicate: isNull, +  represent: { +    canonical: function () { return '~';    }, +    lowercase: function () { return 'null'; }, +    uppercase: function () { return 'NULL'; }, +    camelcase: function () { return 'Null'; } +  }, +  defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/omap.js b/node_modules/js-yaml/lib/js-yaml/type/omap.js new file mode 100644 index 0000000..b2b5323 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/omap.js @@ -0,0 +1,44 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString       = Object.prototype.toString; + +function resolveYamlOmap(data) { +  if (data === null) return true; + +  var objectKeys = [], index, length, pair, pairKey, pairHasKey, +      object = data; + +  for (index = 0, length = object.length; index < length; index += 1) { +    pair = object[index]; +    pairHasKey = false; + +    if (_toString.call(pair) !== '[object Object]') return false; + +    for (pairKey in pair) { +      if (_hasOwnProperty.call(pair, pairKey)) { +        if (!pairHasKey) pairHasKey = true; +        else return false; +      } +    } + +    if (!pairHasKey) return false; + +    if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); +    else return false; +  } + +  return true; +} + +function constructYamlOmap(data) { +  return data !== null ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { +  kind: 'sequence', +  resolve: resolveYamlOmap, +  construct: constructYamlOmap +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/pairs.js b/node_modules/js-yaml/lib/js-yaml/type/pairs.js new file mode 100644 index 0000000..74b5240 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/pairs.js @@ -0,0 +1,53 @@ +'use strict'; + +var Type = require('../type'); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { +  if (data === null) return true; + +  var index, length, pair, keys, result, +      object = data; + +  result = new Array(object.length); + +  for (index = 0, length = object.length; index < length; index += 1) { +    pair = object[index]; + +    if (_toString.call(pair) !== '[object Object]') return false; + +    keys = Object.keys(pair); + +    if (keys.length !== 1) return false; + +    result[index] = [ keys[0], pair[keys[0]] ]; +  } + +  return true; +} + +function constructYamlPairs(data) { +  if (data === null) return []; + +  var index, length, pair, keys, result, +      object = data; + +  result = new Array(object.length); + +  for (index = 0, length = object.length; index < length; index += 1) { +    pair = object[index]; + +    keys = Object.keys(pair); + +    result[index] = [ keys[0], pair[keys[0]] ]; +  } + +  return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { +  kind: 'sequence', +  resolve: resolveYamlPairs, +  construct: constructYamlPairs +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/seq.js b/node_modules/js-yaml/lib/js-yaml/type/seq.js new file mode 100644 index 0000000..be8f77f --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/seq.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { +  kind: 'sequence', +  construct: function (data) { return data !== null ? data : []; } +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/set.js b/node_modules/js-yaml/lib/js-yaml/type/set.js new file mode 100644 index 0000000..f885a32 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/set.js @@ -0,0 +1,29 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { +  if (data === null) return true; + +  var key, object = data; + +  for (key in object) { +    if (_hasOwnProperty.call(object, key)) { +      if (object[key] !== null) return false; +    } +  } + +  return true; +} + +function constructYamlSet(data) { +  return data !== null ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { +  kind: 'mapping', +  resolve: resolveYamlSet, +  construct: constructYamlSet +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/str.js b/node_modules/js-yaml/lib/js-yaml/type/str.js new file mode 100644 index 0000000..27acc10 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/str.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { +  kind: 'scalar', +  construct: function (data) { return data !== null ? data : ''; } +}); diff --git a/node_modules/js-yaml/lib/js-yaml/type/timestamp.js b/node_modules/js-yaml/lib/js-yaml/type/timestamp.js new file mode 100644 index 0000000..8fa9c58 --- /dev/null +++ b/node_modules/js-yaml/lib/js-yaml/type/timestamp.js @@ -0,0 +1,88 @@ +'use strict'; + +var Type = require('../type'); + +var YAML_DATE_REGEXP = new RegExp( +  '^([0-9][0-9][0-9][0-9])'          + // [1] year +  '-([0-9][0-9])'                    + // [2] month +  '-([0-9][0-9])$');                   // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( +  '^([0-9][0-9][0-9][0-9])'          + // [1] year +  '-([0-9][0-9]?)'                   + // [2] month +  '-([0-9][0-9]?)'                   + // [3] day +  '(?:[Tt]|[ \\t]+)'                 + // ... +  '([0-9][0-9]?)'                    + // [4] hour +  ':([0-9][0-9])'                    + // [5] minute +  ':([0-9][0-9])'                    + // [6] second +  '(?:\\.([0-9]*))?'                 + // [7] fraction +  '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour +  '(?::([0-9][0-9]))?))?$');           // [11] tz_minute + +function resolveYamlTimestamp(data) { +  if (data === null) return false; +  if (YAML_DATE_REGEXP.exec(data) !== null) return true; +  if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; +  return false; +} + +function constructYamlTimestamp(data) { +  var match, year, month, day, hour, minute, second, fraction = 0, +      delta = null, tz_hour, tz_minute, date; + +  match = YAML_DATE_REGEXP.exec(data); +  if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + +  if (match === null) throw new Error('Date resolve error'); + +  // match: [1] year [2] month [3] day + +  year = +(match[1]); +  month = +(match[2]) - 1; // JS month starts with 0 +  day = +(match[3]); + +  if (!match[4]) { // no hour +    return new Date(Date.UTC(year, month, day)); +  } + +  // match: [4] hour [5] minute [6] second [7] fraction + +  hour = +(match[4]); +  minute = +(match[5]); +  second = +(match[6]); + +  if (match[7]) { +    fraction = match[7].slice(0, 3); +    while (fraction.length < 3) { // milli-seconds +      fraction += '0'; +    } +    fraction = +fraction; +  } + +  // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + +  if (match[9]) { +    tz_hour = +(match[10]); +    tz_minute = +(match[11] || 0); +    delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds +    if (match[9] === '-') delta = -delta; +  } + +  date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + +  if (delta) date.setTime(date.getTime() - delta); + +  return date; +} + +function representYamlTimestamp(object /*, style*/) { +  return object.toISOString(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { +  kind: 'scalar', +  resolve: resolveYamlTimestamp, +  construct: constructYamlTimestamp, +  instanceOf: Date, +  represent: representYamlTimestamp +}); diff --git a/node_modules/js-yaml/package.json b/node_modules/js-yaml/package.json new file mode 100644 index 0000000..171347a --- /dev/null +++ b/node_modules/js-yaml/package.json @@ -0,0 +1,97 @@ +{ +  "_args": [ +    [ +      "js-yaml@3.13.1", +      "/home/dstaesse/git/website" +    ] +  ], +  "_development": true, +  "_from": "js-yaml@3.13.1", +  "_id": "js-yaml@3.13.1", +  "_inBundle": false, +  "_integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", +  "_location": "/js-yaml", +  "_phantomChildren": {}, +  "_requested": { +    "type": "version", +    "registry": true, +    "raw": "js-yaml@3.13.1", +    "name": "js-yaml", +    "escapedName": "js-yaml", +    "rawSpec": "3.13.1", +    "saveSpec": null, +    "fetchSpec": "3.13.1" +  }, +  "_requiredBy": [ +    "/cosmiconfig" +  ], +  "_resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", +  "_spec": "3.13.1", +  "_where": "/home/dstaesse/git/website", +  "author": { +    "name": "Vladimir Zapparov", +    "email": "dervus.grim@gmail.com" +  }, +  "bin": { +    "js-yaml": "bin/js-yaml.js" +  }, +  "bugs": { +    "url": "https://github.com/nodeca/js-yaml/issues" +  }, +  "contributors": [ +    { +      "name": "Aleksey V Zapparov", +      "email": "ixti@member.fsf.org", +      "url": "http://www.ixti.net/" +    }, +    { +      "name": "Vitaly Puzrin", +      "email": "vitaly@rcdesign.ru", +      "url": "https://github.com/puzrin" +    }, +    { +      "name": "Martin Grenfell", +      "email": "martin.grenfell@gmail.com", +      "url": "http://got-ravings.blogspot.com" +    } +  ], +  "dependencies": { +    "argparse": "^1.0.7", +    "esprima": "^4.0.0" +  }, +  "description": "YAML 1.2 parser and serializer", +  "devDependencies": { +    "ansi": "^0.3.1", +    "benchmark": "^2.1.4", +    "browserify": "^16.2.2", +    "codemirror": "^5.13.4", +    "eslint": "^4.1.1", +    "fast-check": "1.1.3", +    "istanbul": "^0.4.5", +    "mocha": "^5.2.0", +    "uglify-js": "^3.0.1" +  }, +  "files": [ +    "index.js", +    "lib/", +    "bin/", +    "dist/" +  ], +  "homepage": "https://github.com/nodeca/js-yaml", +  "keywords": [ +    "yaml", +    "parser", +    "serializer", +    "pyyaml" +  ], +  "license": "MIT", +  "name": "js-yaml", +  "repository": { +    "type": "git", +    "url": "git+https://github.com/nodeca/js-yaml.git" +  }, +  "scripts": { +    "test": "make test" +  }, +  "version": "3.13.1" +} | 
