new license file version [CI SKIP]
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = merge;
|
||||
|
||||
function merge() {
|
||||
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
var defaults = arguments.length > 1 ? arguments[1] : undefined;
|
||||
|
||||
for (var key in defaults) {
|
||||
if (typeof obj[key] === 'undefined') {
|
||||
obj[key] = defaults[key];
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
module.exports = exports.default;
|
||||
module.exports.default = exports.default;
|
||||
@@ -0,0 +1 @@
|
||||
{"name":"@babel/helper-validator-identifier","version":"7.19.1","files":{"LICENSE":{"checkedAt":1678883670552,"integrity":"sha512-KYRMN3MVTuiy5XkFDHd5PnQmHaQnt3z16nsBDePxZ9YNmq7IFlslpBBlR3UI+zvlbEemzowOYeKil9a0ZkOYxQ==","mode":420,"size":1106},"README.md":{"checkedAt":1678883670591,"integrity":"sha512-FGG+XjlFP2qmRaQl+AAZmCxwEhKwOv6GbWtTteSIyrbM8GtiB7o19eYZ59XfiZoRS5zn1Q1JaMbtqY09FOM+Ng==","mode":420,"size":372},"lib/identifier.js":{"checkedAt":1678883670591,"integrity":"sha512-I3XnAf/8rLRFlFE4FmEx2nV+QKnsus+hdbBfg1XS2OJRMU2N5EK/ObGbkkNsyA+tUQEgXxpq0gI6sHT9GCBewg==","mode":420,"size":12207},"lib/identifier.js.map":{"checkedAt":1678883670599,"integrity":"sha512-Z3JtMlRJqbyvIvBP+hxnpFVbgeNrgLFvw1D/BbxkMXTQN3Vy13nKleCYuWDy5gaBcbfR7vhLYY9GXfFllXrAZA==","mode":420,"size":28006},"lib/index.js":{"checkedAt":1678883670599,"integrity":"sha512-064gF7x0x56qC0zZiklI5O8azwRChXU5kw7c2SRW+p+Sf3y70t2deSB24G/gE9aqv4tYXPQe2JJQVteiAYTfXg==","mode":420,"size":1358},"lib/index.js.map":{"checkedAt":1678883670599,"integrity":"sha512-CtEVoLzUtWObonMIVKbdhW4JkNN9wkj6YW8gltvFvoAkeldzakIscdH5MBNUaiRa8nzlJN8cVnJles2pkUokYQ==","mode":420,"size":407},"lib/keyword.js":{"checkedAt":1678883670600,"integrity":"sha512-W8u5kCE9tRg2yjhVqdkQqoGj4ymof1ofOE5IK60GOX0Fjs2kNU+dA/0MpMdz1ddDj3xM8CcSUvv62zF3lJlmdA==","mode":420,"size":1582},"lib/keyword.js.map":{"checkedAt":1678883670600,"integrity":"sha512-96woid6m3yGN6fFTL8Cl2tWXqftlGHOH+1pbs/bGwyuC2ORfTmBUJu0RSKW4IZhqjW2fqDjqVOo4k2tUnCFd8g==","mode":420,"size":3894},"package.json":{"checkedAt":1678883670600,"integrity":"sha512-bRadMOGa0pZY1uvPqs+nUMEj7zgJAeHjD24dPiI4ZqTASmV6bxsHYuUlU8tDZuXoUz1D5k5Wnn+YNlR9VWvecQ==","mode":420,"size":677},"scripts/generate-identifier-regex.js":{"checkedAt":1678883670600,"integrity":"sha512-tjexNBU24J9Vr4Q5F1dg9hvPzlcsQIi8sxvswzpbQgHOOAsuWfYo//XN93x2TD0U6ldItPXNgYzb2amqf8iRGw==","mode":420,"size":2043}}}
|
||||
@@ -0,0 +1,25 @@
|
||||
BSD 2-Clause License
|
||||
|
||||
Copyright (c) Google
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,616 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
|
||||
## [4.1.0] - 2021-04-15
|
||||
### Added
|
||||
- Types are now exported as `yaml.types.XXX`.
|
||||
- Every type now has `options` property with original arguments kept as they were
|
||||
(see `yaml.types.int.options` as an example).
|
||||
|
||||
### Changed
|
||||
- `Schema.extend()` now keeps old type order in case of conflicts
|
||||
(e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as `abcd` instead of `cbad`).
|
||||
|
||||
|
||||
## [4.0.0] - 2021-01-03
|
||||
### Changed
|
||||
- Check [migration guide](migrate_v3_to_v4.md) to see details for all breaking changes.
|
||||
- Breaking: "unsafe" tags `!!js/function`, `!!js/regexp`, `!!js/undefined` are
|
||||
moved to [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) package.
|
||||
- Breaking: removed `safe*` functions. Use `load`, `loadAll`, `dump`
|
||||
instead which are all now safe by default.
|
||||
- `yaml.DEFAULT_SAFE_SCHEMA` and `yaml.DEFAULT_FULL_SCHEMA` are removed, use
|
||||
`yaml.DEFAULT_SCHEMA` instead.
|
||||
- `yaml.Schema.create(schema, tags)` is removed, use `schema.extend(tags)` instead.
|
||||
- `!!binary` now always mapped to `Uint8Array` on load.
|
||||
- Reduced nesting of `/lib` folder.
|
||||
- Parse numbers according to YAML 1.2 instead of YAML 1.1 (`01234` is now decimal,
|
||||
`0o1234` is octal, `1:23` is parsed as string instead of base60).
|
||||
- `dump()` no longer quotes `:`, `[`, `]`, `(`, `)` except when necessary, #470, #557.
|
||||
- Line and column in exceptions are now formatted as `(X:Y)` instead of
|
||||
`at line X, column Y` (also present in compact format), #332.
|
||||
- Code snippet created in exceptions now contains multiple lines with line numbers.
|
||||
- `dump()` now serializes `undefined` as `null` in collections and removes keys with
|
||||
`undefined` in mappings, #571.
|
||||
- `dump()` with `skipInvalid=true` now serializes invalid items in collections as null.
|
||||
- Custom tags starting with `!` are now dumped as `!tag` instead of `!<!tag>`, #576.
|
||||
- Custom tags starting with `tag:yaml.org,2002:` are now shorthanded using `!!`, #258.
|
||||
|
||||
### Added
|
||||
- Added `.mjs` (es modules) support.
|
||||
- Added `quotingType` and `forceQuotes` options for dumper to configure
|
||||
string literal style, #290, #529.
|
||||
- Added `styles: { '!!null': 'empty' }` option for dumper
|
||||
(serializes `{ foo: null }` as "`foo: `"), #570.
|
||||
- Added `replacer` option (similar to option in JSON.stringify), #339.
|
||||
- Custom `Tag` can now handle all tags or multiple tags with the same prefix, #385.
|
||||
|
||||
### Fixed
|
||||
- Astral characters are no longer encoded by `dump()`, #587.
|
||||
- "duplicate mapping key" exception now points at the correct column, #452.
|
||||
- Extra commas in flow collections (e.g. `[foo,,bar]`) now throw an exception
|
||||
instead of producing null, #321.
|
||||
- `__proto__` key no longer overrides object prototype, #164.
|
||||
- Removed `bower.json`.
|
||||
- Tags are now url-decoded in `load()` and url-encoded in `dump()`
|
||||
(previously usage of custom non-ascii tags may have led to invalid YAML that can't be parsed).
|
||||
- Anchors now work correctly with empty nodes, #301.
|
||||
- Fix incorrect parsing of invalid block mapping syntax, #418.
|
||||
- Throw an error if block sequence/mapping indent contains a tab, #80.
|
||||
|
||||
|
||||
## [3.14.1] - 2020-12-07
|
||||
### Security
|
||||
- Fix possible code execution in (already unsafe) `.load()` (in &anchor).
|
||||
|
||||
|
||||
## [3.14.0] - 2020-05-22
|
||||
### Changed
|
||||
- Support `safe/loadAll(input, options)` variant of call.
|
||||
- CI: drop outdated nodejs versions.
|
||||
- Dev deps bump.
|
||||
|
||||
### Fixed
|
||||
- Quote `=` in plain scalars #519.
|
||||
- Check the node type for `!<?>` tag in case user manually specifies it.
|
||||
- Verify that there are no null-bytes in input.
|
||||
- Fix wrong quote position when writing condensed flow, #526.
|
||||
|
||||
|
||||
## [3.13.1] - 2019-04-05
|
||||
### Security
|
||||
- Fix possible code execution in (already unsafe) `.load()`, #480.
|
||||
|
||||
|
||||
## [3.13.0] - 2019-03-20
|
||||
### Security
|
||||
- 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
|
||||
### Fixed
|
||||
- Fix `noArrayIndent` option for root level, #468.
|
||||
|
||||
|
||||
## [3.12.1] - 2019-01-05
|
||||
### Added
|
||||
- Added `noArrayIndent` option, #432.
|
||||
|
||||
|
||||
## [3.12.0] - 2018-06-02
|
||||
### Changed
|
||||
- Support arrow functions without a block statement, #421.
|
||||
|
||||
|
||||
## [3.11.0] - 2018-03-05
|
||||
### Added
|
||||
- Add arrow functions suport for `!!js/function`.
|
||||
|
||||
### Fixed
|
||||
- Fix dump in bin/octal/hex formats for negative integers, #399.
|
||||
|
||||
|
||||
## [3.10.0] - 2017-09-10
|
||||
### Fixed
|
||||
- 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
|
||||
### Fixed
|
||||
- Ensure stack is present for custom errors in node 7.+, #351.
|
||||
|
||||
|
||||
## [3.9.0] - 2017-07-08
|
||||
### Added
|
||||
- Add `condenseFlow` option (to create pretty URL query params), #346.
|
||||
|
||||
### Fixed
|
||||
- Support array return from safeLoadAll/loadAll, #350.
|
||||
|
||||
|
||||
## [3.8.4] - 2017-05-08
|
||||
### Fixed
|
||||
- Dumper: prevent space after dash for arrays that wrap, #343.
|
||||
|
||||
|
||||
## [3.8.3] - 2017-04-05
|
||||
### Fixed
|
||||
- Should not allow numbers to begin and end with underscore, #335.
|
||||
|
||||
|
||||
## [3.8.2] - 2017-03-02
|
||||
### Fixed
|
||||
- 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
|
||||
### Changed
|
||||
- Maintenance: update browserified build.
|
||||
|
||||
|
||||
## [3.8.0] - 2017-02-07
|
||||
### Fixed
|
||||
- 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
|
||||
### Added
|
||||
- Support polymorphism for tags (#300, thanks to @monken).
|
||||
|
||||
### Fixed
|
||||
- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage).
|
||||
|
||||
|
||||
## [3.6.1] - 2016-05-11
|
||||
### Fixed
|
||||
- Fix output cut on a pipe, #286.
|
||||
|
||||
|
||||
## [3.6.0] - 2016-04-16
|
||||
### Fixed
|
||||
- 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
|
||||
### Fixed
|
||||
- Date parse fix: don't allow dates with on digit in month and day, #268.
|
||||
|
||||
|
||||
## [3.5.4] - 2016-03-09
|
||||
### Added
|
||||
- `noCompatMode` for dumper, to disable quoting YAML 1.1 values.
|
||||
|
||||
|
||||
## [3.5.3] - 2016-02-11
|
||||
### Changed
|
||||
- Maintenance release.
|
||||
|
||||
|
||||
## [3.5.2] - 2016-01-11
|
||||
### Changed
|
||||
- Maintenance: missed comma in bower config.
|
||||
|
||||
|
||||
## [3.5.1] - 2016-01-11
|
||||
### Changed
|
||||
- Removed `inherit` dependency, #239.
|
||||
- Better browserify workaround for esprima load.
|
||||
- Demo rewrite.
|
||||
|
||||
|
||||
## [3.5.0] - 2016-01-10
|
||||
### Fixed
|
||||
- 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
|
||||
### Changed
|
||||
- Use standalone `inherit` to keep browserified files clear.
|
||||
|
||||
|
||||
## [3.4.5] - 2015-11-23
|
||||
### Added
|
||||
- Added `lineWidth` option to dumper.
|
||||
|
||||
|
||||
## [3.4.4] - 2015-11-21
|
||||
### Fixed
|
||||
- Fixed floats dump (missed dot for scientific format), #220.
|
||||
- Allow non-printable characters inside quoted scalars, #192.
|
||||
|
||||
|
||||
## [3.4.3] - 2015-10-10
|
||||
### Changed
|
||||
- Maintenance release - deps bump (esprima, argparse).
|
||||
|
||||
|
||||
## [3.4.2] - 2015-09-09
|
||||
### Fixed
|
||||
- Fixed serialization of duplicated entries in sequences, #205.
|
||||
Thanks to @vogelsgesang.
|
||||
|
||||
|
||||
## [3.4.1] - 2015-09-05
|
||||
### Fixed
|
||||
- Fixed stacktrace handling in generated errors, for browsers (FF/IE).
|
||||
|
||||
|
||||
## [3.4.0] - 2015-08-23
|
||||
### Changed
|
||||
- Don't throw on warnings anymore. Use `onWarning` option to catch.
|
||||
- Throw error on unknown tags (was warning before).
|
||||
- Reworked internals of error class.
|
||||
|
||||
### Fixed
|
||||
- Fixed multiline keys dump, #197. Thanks to @tcr.
|
||||
- Fixed heading line breaks in some scalars (regression).
|
||||
|
||||
|
||||
## [3.3.1] - 2015-05-13
|
||||
### Added
|
||||
- Added `.sortKeys` dumper option, thanks to @rjmunro.
|
||||
|
||||
### Fixed
|
||||
- Fixed astral characters support, #191.
|
||||
|
||||
|
||||
## [3.3.0] - 2015-04-26
|
||||
### Changed
|
||||
- Significantly improved long strings formatting in dumper, thanks to @isaacs.
|
||||
- Strip BOM if exists.
|
||||
|
||||
|
||||
## [3.2.7] - 2015-02-19
|
||||
### Changed
|
||||
- Maintenance release.
|
||||
- Updated dependencies.
|
||||
- HISTORY.md -> CHANGELOG.md
|
||||
|
||||
|
||||
## [3.2.6] - 2015-02-07
|
||||
### Fixed
|
||||
- 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
|
||||
- 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
|
||||
- Fixed resolving of !!null tag on an empty node.
|
||||
|
||||
|
||||
## [3.2.3] - 2014-11-08
|
||||
### Fixed
|
||||
- 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
|
||||
- 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
|
||||
### Fixed
|
||||
- Nothig new. Just fix npm publish error.
|
||||
|
||||
|
||||
## [3.2.0] - 2014-08-24
|
||||
### Added
|
||||
- Added input piping support to CLI.
|
||||
|
||||
### Fixed
|
||||
- Fixed typo, that could cause hand on initial indent (#139).
|
||||
|
||||
|
||||
## [3.1.0] - 2014-07-07
|
||||
### Changed
|
||||
- 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
|
||||
- Fixed bug: "constructor" string parsed as `null`.
|
||||
|
||||
|
||||
## [3.0.1] - 2013-12-22
|
||||
### Fixed
|
||||
- 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
|
||||
### Changed
|
||||
- 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
|
||||
### Fixed
|
||||
- Fix wrong loading of empty block scalars.
|
||||
|
||||
|
||||
## [2.1.2] - 2013-10-07
|
||||
### Fixed
|
||||
- Fix unwanted line breaks in folded scalars.
|
||||
|
||||
|
||||
## [2.1.1] - 2013-10-02
|
||||
### Fixed
|
||||
- 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
|
||||
### Added
|
||||
- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`),
|
||||
JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`).
|
||||
- Add `skipInvalid` dumper option.
|
||||
|
||||
### Changed
|
||||
- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA`
|
||||
and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`.
|
||||
- Use `safeLoad` for `require` extension.
|
||||
|
||||
### Fixed
|
||||
- Bug fix: export `NIL` constant from the public interface.
|
||||
|
||||
|
||||
## [2.0.5] - 2013-04-26
|
||||
### Security
|
||||
- Close security issue in !!js/function constructor.
|
||||
Big thanks to @nealpoole for security audit.
|
||||
|
||||
|
||||
## [2.0.4] - 2013-04-08
|
||||
### Changed
|
||||
- Updated .npmignore to reduce package size
|
||||
|
||||
|
||||
## [2.0.3] - 2013-02-26
|
||||
### Fixed
|
||||
- Fixed dumping of empty arrays ans objects. ([] and {} instead of null)
|
||||
|
||||
|
||||
## [2.0.2] - 2013-02-15
|
||||
### Fixed
|
||||
- Fixed input validation: tabs are printable characters.
|
||||
|
||||
|
||||
## [2.0.1] - 2013-02-09
|
||||
### Fixed
|
||||
- Fixed error, when options not passed to function cass
|
||||
|
||||
|
||||
## [2.0.0] - 2013-02-09
|
||||
### Changed
|
||||
- Full rewrite. New architecture. Fast one-stage parsing.
|
||||
- Changed custom types API.
|
||||
- Added YAML dumper.
|
||||
|
||||
|
||||
## [1.0.3] - 2012-11-05
|
||||
### Fixed
|
||||
- Fixed utf-8 files loading.
|
||||
|
||||
|
||||
## [1.0.2] - 2012-08-02
|
||||
### Fixed
|
||||
- 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
|
||||
### Fixed
|
||||
- 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
|
||||
### Changed
|
||||
- `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
|
||||
### Fixed
|
||||
- Fix export of `addConstructor()`. Closes #39.
|
||||
|
||||
|
||||
## [0.3.6] - 2012-02-22
|
||||
### Changed
|
||||
- Removed AMD parts - too buggy to use. Need help to rewrite from scratch
|
||||
|
||||
### Fixed
|
||||
- Removed YUI compressor warning (renamed `double` variable). Closes #40.
|
||||
|
||||
|
||||
## [0.3.5] - 2012-01-10
|
||||
### Fixed
|
||||
- Workagound for .npmignore fuckup under windows. Thanks to airportyh.
|
||||
|
||||
|
||||
## [0.3.4] - 2011-12-24
|
||||
### Fixed
|
||||
- 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
|
||||
### Added
|
||||
- adds `compact` stringification of Errors.
|
||||
|
||||
### Changed
|
||||
- jsyaml executable moved to separate module.
|
||||
|
||||
|
||||
## [0.3.2] - 2011-12-16
|
||||
### Added
|
||||
- Added jsyaml executable.
|
||||
- Added !!js/function support. Closes #12.
|
||||
|
||||
### Fixed
|
||||
- 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.
|
||||
|
||||
|
||||
## [0.3.1] - 2011-11-18
|
||||
### Added
|
||||
- Added AMD support for browserified version.
|
||||
- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol.
|
||||
- Added !!js/regexp and !!js/undefined types. Partially solves #12.
|
||||
|
||||
### Changed
|
||||
- Wrapped browserified js-yaml into closure.
|
||||
|
||||
### Fixed
|
||||
- Fixed the resolvement of non-specific tags. Closes #17.
|
||||
- Fixed !!set mapping.
|
||||
- Fixed month parse in dates. Closes #19.
|
||||
|
||||
|
||||
## [0.3.0] - 2011-11-09
|
||||
### Added
|
||||
- Added browserified version. Closes #13.
|
||||
- Added live demo of browserified version.
|
||||
- Ported some of the PyYAML tests. See #14.
|
||||
|
||||
### Fixed
|
||||
- Removed JS.Class dependency. Closes #3.
|
||||
- Fixed timestamp bug when fraction was given.
|
||||
|
||||
|
||||
## [0.2.2] - 2011-11-06
|
||||
### Fixed
|
||||
- Fixed crash on docs without ---. Closes #8.
|
||||
- Fixed multiline string parse
|
||||
- Fixed tests/comments for using array as key
|
||||
|
||||
|
||||
## [0.2.1] - 2011-11-02
|
||||
### Fixed
|
||||
- Fixed short file read (<4k). Closes #9.
|
||||
|
||||
|
||||
## [0.2.0] - 2011-11-02
|
||||
### Changed
|
||||
- First public release
|
||||
|
||||
|
||||
[4.1.0]: https://github.com/nodeca/js-yaml/compare/4.0.0...4.1.0
|
||||
[4.0.0]: https://github.com/nodeca/js-yaml/compare/3.14.0...4.0.0
|
||||
[3.14.0]: https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0
|
||||
[3.13.1]: https://github.com/nodeca/js-yaml/compare/3.13.0...3.13.1
|
||||
[3.13.0]: https://github.com/nodeca/js-yaml/compare/3.12.2...3.13.0
|
||||
[3.12.2]: https://github.com/nodeca/js-yaml/compare/3.12.1...3.12.2
|
||||
[3.12.1]: https://github.com/nodeca/js-yaml/compare/3.12.0...3.12.1
|
||||
[3.12.0]: https://github.com/nodeca/js-yaml/compare/3.11.0...3.12.0
|
||||
[3.11.0]: https://github.com/nodeca/js-yaml/compare/3.10.0...3.11.0
|
||||
[3.10.0]: https://github.com/nodeca/js-yaml/compare/3.9.1...3.10.0
|
||||
[3.9.1]: https://github.com/nodeca/js-yaml/compare/3.9.0...3.9.1
|
||||
[3.9.0]: https://github.com/nodeca/js-yaml/compare/3.8.4...3.9.0
|
||||
[3.8.4]: https://github.com/nodeca/js-yaml/compare/3.8.3...3.8.4
|
||||
[3.8.3]: https://github.com/nodeca/js-yaml/compare/3.8.2...3.8.3
|
||||
[3.8.2]: https://github.com/nodeca/js-yaml/compare/3.8.1...3.8.2
|
||||
[3.8.1]: https://github.com/nodeca/js-yaml/compare/3.8.0...3.8.1
|
||||
[3.8.0]: https://github.com/nodeca/js-yaml/compare/3.7.0...3.8.0
|
||||
[3.7.0]: https://github.com/nodeca/js-yaml/compare/3.6.1...3.7.0
|
||||
[3.6.1]: https://github.com/nodeca/js-yaml/compare/3.6.0...3.6.1
|
||||
[3.6.0]: https://github.com/nodeca/js-yaml/compare/3.5.5...3.6.0
|
||||
[3.5.5]: https://github.com/nodeca/js-yaml/compare/3.5.4...3.5.5
|
||||
[3.5.4]: https://github.com/nodeca/js-yaml/compare/3.5.3...3.5.4
|
||||
[3.5.3]: https://github.com/nodeca/js-yaml/compare/3.5.2...3.5.3
|
||||
[3.5.2]: https://github.com/nodeca/js-yaml/compare/3.5.1...3.5.2
|
||||
[3.5.1]: https://github.com/nodeca/js-yaml/compare/3.5.0...3.5.1
|
||||
[3.5.0]: https://github.com/nodeca/js-yaml/compare/3.4.6...3.5.0
|
||||
[3.4.6]: https://github.com/nodeca/js-yaml/compare/3.4.5...3.4.6
|
||||
[3.4.5]: https://github.com/nodeca/js-yaml/compare/3.4.4...3.4.5
|
||||
[3.4.4]: https://github.com/nodeca/js-yaml/compare/3.4.3...3.4.4
|
||||
[3.4.3]: https://github.com/nodeca/js-yaml/compare/3.4.2...3.4.3
|
||||
[3.4.2]: https://github.com/nodeca/js-yaml/compare/3.4.1...3.4.2
|
||||
[3.4.1]: https://github.com/nodeca/js-yaml/compare/3.4.0...3.4.1
|
||||
[3.4.0]: https://github.com/nodeca/js-yaml/compare/3.3.1...3.4.0
|
||||
[3.3.1]: https://github.com/nodeca/js-yaml/compare/3.3.0...3.3.1
|
||||
[3.3.0]: https://github.com/nodeca/js-yaml/compare/3.2.7...3.3.0
|
||||
[3.2.7]: https://github.com/nodeca/js-yaml/compare/3.2.6...3.2.7
|
||||
[3.2.6]: https://github.com/nodeca/js-yaml/compare/3.2.5...3.2.6
|
||||
[3.2.5]: https://github.com/nodeca/js-yaml/compare/3.2.4...3.2.5
|
||||
[3.2.4]: https://github.com/nodeca/js-yaml/compare/3.2.3...3.2.4
|
||||
[3.2.3]: https://github.com/nodeca/js-yaml/compare/3.2.2...3.2.3
|
||||
[3.2.2]: https://github.com/nodeca/js-yaml/compare/3.2.1...3.2.2
|
||||
[3.2.1]: https://github.com/nodeca/js-yaml/compare/3.2.0...3.2.1
|
||||
[3.2.0]: https://github.com/nodeca/js-yaml/compare/3.1.0...3.2.0
|
||||
[3.1.0]: https://github.com/nodeca/js-yaml/compare/3.0.2...3.1.0
|
||||
[3.0.2]: https://github.com/nodeca/js-yaml/compare/3.0.1...3.0.2
|
||||
[3.0.1]: https://github.com/nodeca/js-yaml/compare/3.0.0...3.0.1
|
||||
[3.0.0]: https://github.com/nodeca/js-yaml/compare/2.1.3...3.0.0
|
||||
[2.1.3]: https://github.com/nodeca/js-yaml/compare/2.1.2...2.1.3
|
||||
[2.1.2]: https://github.com/nodeca/js-yaml/compare/2.1.1...2.1.2
|
||||
[2.1.1]: https://github.com/nodeca/js-yaml/compare/2.1.0...2.1.1
|
||||
[2.1.0]: https://github.com/nodeca/js-yaml/compare/2.0.5...2.1.0
|
||||
[2.0.5]: https://github.com/nodeca/js-yaml/compare/2.0.4...2.0.5
|
||||
[2.0.4]: https://github.com/nodeca/js-yaml/compare/2.0.3...2.0.4
|
||||
[2.0.3]: https://github.com/nodeca/js-yaml/compare/2.0.2...2.0.3
|
||||
[2.0.2]: https://github.com/nodeca/js-yaml/compare/2.0.1...2.0.2
|
||||
[2.0.1]: https://github.com/nodeca/js-yaml/compare/2.0.0...2.0.1
|
||||
[2.0.0]: https://github.com/nodeca/js-yaml/compare/1.0.3...2.0.0
|
||||
[1.0.3]: https://github.com/nodeca/js-yaml/compare/1.0.2...1.0.3
|
||||
[1.0.2]: https://github.com/nodeca/js-yaml/compare/1.0.1...1.0.2
|
||||
[1.0.1]: https://github.com/nodeca/js-yaml/compare/1.0.0...1.0.1
|
||||
[1.0.0]: https://github.com/nodeca/js-yaml/compare/0.3.7...1.0.0
|
||||
[0.3.7]: https://github.com/nodeca/js-yaml/compare/0.3.6...0.3.7
|
||||
[0.3.6]: https://github.com/nodeca/js-yaml/compare/0.3.5...0.3.6
|
||||
[0.3.5]: https://github.com/nodeca/js-yaml/compare/0.3.4...0.3.5
|
||||
[0.3.4]: https://github.com/nodeca/js-yaml/compare/0.3.3...0.3.4
|
||||
[0.3.3]: https://github.com/nodeca/js-yaml/compare/0.3.2...0.3.3
|
||||
[0.3.2]: https://github.com/nodeca/js-yaml/compare/0.3.1...0.3.2
|
||||
[0.3.1]: https://github.com/nodeca/js-yaml/compare/0.3.0...0.3.1
|
||||
[0.3.0]: https://github.com/nodeca/js-yaml/compare/0.2.2...0.3.0
|
||||
[0.2.2]: https://github.com/nodeca/js-yaml/compare/0.2.1...0.2.2
|
||||
[0.2.1]: https://github.com/nodeca/js-yaml/compare/0.2.0...0.2.1
|
||||
[0.2.0]: https://github.com/nodeca/js-yaml/releases/tag/0.2.0
|
||||
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env node
|
||||
/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */
|
||||
/* eslint-env node */
|
||||
/* vim: set ts=2 ft=javascript: */
|
||||
/*jshint node:true */
|
||||
|
||||
var X/*:CRC32Module*/;
|
||||
try { X = require('../'); } catch(e) { X = require('crc-32'); }
|
||||
|
||||
function help()/*:number*/ {
|
||||
[
|
||||
"usage: crc32 [options] [filename]",
|
||||
"",
|
||||
"Options:",
|
||||
" -h, --help output usage information",
|
||||
" -V, --version output the version number",
|
||||
" -S, --seed=<n> use integer seed as starting value (rolling CRC)",
|
||||
" -H, --hex-seed=<h> use hex seed as starting value (rolling CRC)",
|
||||
" -d, --signed print result with format `%d` (default)",
|
||||
" -u, --unsigned print result with format `%u`",
|
||||
" -x, --hex print result with format `%0.8x`",
|
||||
" -X, --HEX print result with format `%0.8X`",
|
||||
" -c, --crc32c use CRC32C (Castagnoli)",
|
||||
" -F, --format=<s> use specified printf format",
|
||||
"",
|
||||
"Set filename = '-' or pipe data into crc32 to read from stdin",
|
||||
"Default output mode is signed (-d)",
|
||||
""
|
||||
].forEach(function(l) { console.log(l); });
|
||||
return 0;
|
||||
}
|
||||
|
||||
function version()/*:number*/ { console.log(X.version); return 0; }
|
||||
|
||||
var fs = require('fs');
|
||||
try { require('exit-on-epipe'); } catch(e) {}
|
||||
|
||||
function die(msg/*:string*/, ec/*:?number*/)/*:void*/ { console.error(msg); process.exit(ec || 0); }
|
||||
|
||||
var args/*:Array<string>*/ = process.argv.slice(2);
|
||||
var filename/*:string*/ = "";
|
||||
var fmt/*:string*/ = "";
|
||||
var seed = 0, r = 10;
|
||||
|
||||
for(var i = 0; i < args.length; ++i) {
|
||||
var arg = args[i];
|
||||
if(arg.charCodeAt(0) != 45) { if(filename === "") filename = arg; continue; }
|
||||
var m = arg.indexOf("=") == -1 ? arg : arg.substr(0, arg.indexOf("="));
|
||||
switch(m) {
|
||||
case "-": filename = "-"; break;
|
||||
|
||||
case "--help": case "-h": process.exit(help()); break;
|
||||
case "--version": case "-V": process.exit(version()); break;
|
||||
|
||||
case "--crc32c": case "-c": try { X = require('../crc32c'); } catch(e) { X = require('crc-32/crc32c'); } break;
|
||||
|
||||
case "--signed": case "-d": fmt = "%d"; break;
|
||||
case "--unsigned": case "-u": fmt = "%u"; break;
|
||||
case "--hex": case "-x": fmt = "%0.8x"; break;
|
||||
case "--HEX": case "-X": fmt = "%0.8X"; break;
|
||||
case "--format": case "-F":
|
||||
try {
|
||||
require("printj");
|
||||
fmt = ((m!=arg) ? arg.substr(m.length+1) : args[++i])||"";
|
||||
} catch(e) {
|
||||
console.error("The `crc-32` module removed the `printj` dependency for formatting");
|
||||
console.error("Use the `crc32-cli` module instead:");
|
||||
console.error(" $ npx crc32-cli [options] [filename]");
|
||||
} break;
|
||||
|
||||
case "--hex-seed": case "-H": r = 16;
|
||||
/* falls through */
|
||||
case "--seed": case "-S":
|
||||
seed=parseInt((m!=arg) ? arg.substr(m.length+1) : args[++i], r)||0; break;
|
||||
|
||||
default: die("crc32: unrecognized option `" + arg + "'", 22);
|
||||
}
|
||||
}
|
||||
|
||||
if(!process.stdin.isTTY) filename = filename || "-";
|
||||
if(filename.length===0) die("crc32: must specify a filename ('-' for stdin)",1);
|
||||
|
||||
var crc32 = seed;
|
||||
// $FlowIgnore -- Writable is callable but type sig disagrees
|
||||
var writable = require('stream').Writable();
|
||||
writable._write = function(chunk, e, cb) { crc32 = X.buf(chunk, crc32); cb(); };
|
||||
writable._writev = function(chunks, cb) {
|
||||
chunks.forEach(function(c) { crc32 = X.buf(c.chunk, crc32);});
|
||||
cb();
|
||||
};
|
||||
writable.on('finish', function() {
|
||||
if(fmt === "") console.log(crc32);
|
||||
else try { console.log(require("printj").sprintf(fmt, crc32)); } catch(e) {
|
||||
switch(fmt) {
|
||||
case "%d": console.log(crc32); break;
|
||||
case "%u": console.log(crc32 >>> 0); break;
|
||||
case "%0.8x": console.log((crc32 >>> 0).toString(16).padStart(8, "0").toLowerCase()); break;
|
||||
case "%0.8X": console.log((crc32 >>> 0).toString(16).padStart(8, "0").toUpperCase()); break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if(filename === "-") process.stdin.pipe(writable);
|
||||
else if(fs.existsSync(filename)) fs.createReadStream(filename).pipe(writable);
|
||||
else die("crc32: " + filename + ": No such file or directory", 2);
|
||||
@@ -0,0 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
var filter = require("./filter")
|
||||
, isValue = require("./is-value");
|
||||
|
||||
module.exports = function (obj) {
|
||||
return filter(obj, function (val) { return isValue(val); });
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
"use strict";
|
||||
|
||||
var log = Math.log, LOG10E = Math.LOG10E;
|
||||
|
||||
module.exports = function (value) {
|
||||
if (isNaN(value)) return NaN;
|
||||
value = Number(value);
|
||||
if (value < 0) return NaN;
|
||||
if (value === 0) return -Infinity;
|
||||
if (value === 1) return 0;
|
||||
if (value === Infinity) return Infinity;
|
||||
|
||||
return log(value) * LOG10E;
|
||||
};
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"name":"parse-json","version":"5.2.0","files":{"license":{"checkedAt":1678883669302,"integrity":"sha512-0fM2/ycrxrltyaBKfQ748Ck23VlPUUBgNAR47ldf4B1V/HoXTfWBSk+vcshGKwEpmOynu4mOP5o+hyBfuRNa8g==","mode":420,"size":1117},"index.js":{"checkedAt":1678883673336,"integrity":"sha512-m4apFJObCO7vNnjCJwgR28AcNX5CEvQj2mj7HgCk5D8gAMxkZEcwg/vlQtnqVxgC2k7iCvEYPUXUHAy1PklDBA==","mode":420,"size":1330},"package.json":{"checkedAt":1678883673336,"integrity":"sha512-FM1WEcJx/OUyJ0EolLlwl/jaBzAbqaNAGYAAQ6bYERtjB+dXD/blFSDAWy9UllXFOZgHNBQ/VKiR1HZ3YVMcmw==","mode":420,"size":825},"readme.md":{"checkedAt":1678883673336,"integrity":"sha512-bOhYOa+qQJC09Yzu8g5RVpvpvFC0gFpLnjlegxDyYfjHwKVQWBvjWEbVdMOD/HAP8BoBc0pTl/3SgnipWNqcaA==","mode":420,"size":2137}}}
|
||||
@@ -0,0 +1,92 @@
|
||||
<script>import { Search, RowsPerPage, RowCount, Pagination } from './core';
|
||||
export let handler;
|
||||
export let search = true;
|
||||
export let rowsPerPage = true;
|
||||
export let rowCount = true;
|
||||
export let pagination = true;
|
||||
let element;
|
||||
let clientWidth = 1000;
|
||||
const triggerChange = handler.getTriggerChange();
|
||||
$: $triggerChange, scrollTop();
|
||||
const scrollTop = () => {
|
||||
if (element)
|
||||
element.scrollTop = 0;
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
<section bind:clientWidth={clientWidth}>
|
||||
<header class:container={search || rowsPerPage}>
|
||||
{#if search}
|
||||
<Search {handler}/>
|
||||
{/if}
|
||||
{#if rowsPerPage}
|
||||
<RowsPerPage {handler}/>
|
||||
{/if}
|
||||
</header>
|
||||
|
||||
<article bind:this={element}>
|
||||
<slot/>
|
||||
</article>
|
||||
|
||||
<footer class:container={rowCount || pagination}>
|
||||
{#if rowCount}
|
||||
<RowCount {handler} small={clientWidth < 600}/>
|
||||
{/if}
|
||||
{#if pagination}
|
||||
<Pagination {handler} small={clientWidth < 600}/>
|
||||
{/if}
|
||||
</footer>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
section {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
section :global(table) {
|
||||
text-align:center;
|
||||
border-collapse:separate;
|
||||
border-spacing:0;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
section :global(thead) {
|
||||
position:sticky;
|
||||
inset-block-start:0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
header, footer {
|
||||
min-height:8px;
|
||||
padding:0 16px;
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
align-items:center;
|
||||
}
|
||||
header.container {
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
footer{
|
||||
border-top: 1px solid #e0e0e0;
|
||||
}
|
||||
footer.container {
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
article {
|
||||
position:relative;
|
||||
height:calc(100% - 96px);
|
||||
overflow:auto;
|
||||
scrollbar-width:thin;
|
||||
}
|
||||
|
||||
article::-webkit-scrollbar {width: 6px;height: 6px;}
|
||||
article::-webkit-scrollbar-track {background: #f5f5f5;}
|
||||
article::-webkit-scrollbar-thumb {background: #c2c2c2;}
|
||||
article::-webkit-scrollbar-thumb:hover {background: #9e9e9e;}
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,29 @@
|
||||
UglifyJS is released under the BSD license:
|
||||
|
||||
Copyright 2012-2019 (c) Mihai Bazon <mihai.bazon@gmail.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials
|
||||
provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface Opts {
|
||||
algorithm: 'lookup' | 'best fit';
|
||||
}
|
||||
export declare function match(requestedLocales: string[], availableLocales: string[], defaultLocale: string, opts?: Opts): string;
|
||||
export { LookupSupportedLocales } from './abstract/LookupSupportedLocales';
|
||||
export { ResolveLocale } from './abstract/ResolveLocale';
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
@@ -0,0 +1,77 @@
|
||||
/* eslint-disable node/no-deprecated-api */
|
||||
|
||||
'use strict'
|
||||
|
||||
var buffer = require('buffer')
|
||||
var Buffer = buffer.Buffer
|
||||
|
||||
var safer = {}
|
||||
|
||||
var key
|
||||
|
||||
for (key in buffer) {
|
||||
if (!buffer.hasOwnProperty(key)) continue
|
||||
if (key === 'SlowBuffer' || key === 'Buffer') continue
|
||||
safer[key] = buffer[key]
|
||||
}
|
||||
|
||||
var Safer = safer.Buffer = {}
|
||||
for (key in Buffer) {
|
||||
if (!Buffer.hasOwnProperty(key)) continue
|
||||
if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue
|
||||
Safer[key] = Buffer[key]
|
||||
}
|
||||
|
||||
safer.Buffer.prototype = Buffer.prototype
|
||||
|
||||
if (!Safer.from || Safer.from === Uint8Array.from) {
|
||||
Safer.from = function (value, encodingOrOffset, length) {
|
||||
if (typeof value === 'number') {
|
||||
throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value)
|
||||
}
|
||||
if (value && typeof value.length === 'undefined') {
|
||||
throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)
|
||||
}
|
||||
return Buffer(value, encodingOrOffset, length)
|
||||
}
|
||||
}
|
||||
|
||||
if (!Safer.alloc) {
|
||||
Safer.alloc = function (size, fill, encoding) {
|
||||
if (typeof size !== 'number') {
|
||||
throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size)
|
||||
}
|
||||
if (size < 0 || size >= 2 * (1 << 30)) {
|
||||
throw new RangeError('The value "' + size + '" is invalid for option "size"')
|
||||
}
|
||||
var buf = Buffer(size)
|
||||
if (!fill || fill.length === 0) {
|
||||
buf.fill(0)
|
||||
} else if (typeof encoding === 'string') {
|
||||
buf.fill(fill, encoding)
|
||||
} else {
|
||||
buf.fill(fill)
|
||||
}
|
||||
return buf
|
||||
}
|
||||
}
|
||||
|
||||
if (!safer.kStringMaxLength) {
|
||||
try {
|
||||
safer.kStringMaxLength = process.binding('buffer').kStringMaxLength
|
||||
} catch (e) {
|
||||
// we can't determine kStringMaxLength in environments where process.binding
|
||||
// is unsupported, so let's not set it
|
||||
}
|
||||
}
|
||||
|
||||
if (!safer.constants) {
|
||||
safer.constants = {
|
||||
MAX_LENGTH: safer.kMaxLength
|
||||
}
|
||||
if (safer.kStringMaxLength) {
|
||||
safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = safer
|
||||
@@ -0,0 +1,3 @@
|
||||
const legacy = require('../dist/legacy-exports')
|
||||
module.exports = legacy.pairs
|
||||
legacy.warnFileDeprecation(__filename)
|
||||
@@ -0,0 +1,274 @@
|
||||
'use strict';
|
||||
|
||||
var GetIntrinsic = require('../');
|
||||
|
||||
var test = require('tape');
|
||||
var forEach = require('for-each');
|
||||
var debug = require('object-inspect');
|
||||
var generatorFns = require('make-generator-function')();
|
||||
var asyncFns = require('make-async-function').list();
|
||||
var asyncGenFns = require('make-async-generator-function')();
|
||||
var mockProperty = require('mock-property');
|
||||
|
||||
var callBound = require('call-bind/callBound');
|
||||
var v = require('es-value-fixtures');
|
||||
var $gOPD = require('gopd');
|
||||
var DefinePropertyOrThrow = require('es-abstract/2021/DefinePropertyOrThrow');
|
||||
|
||||
var $isProto = callBound('%Object.prototype.isPrototypeOf%');
|
||||
|
||||
test('export', function (t) {
|
||||
t.equal(typeof GetIntrinsic, 'function', 'it is a function');
|
||||
t.equal(GetIntrinsic.length, 2, 'function has length of 2');
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('throws', function (t) {
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('not an intrinsic'); },
|
||||
SyntaxError,
|
||||
'nonexistent intrinsic throws a syntax error'
|
||||
);
|
||||
|
||||
t['throws'](
|
||||
function () { GetIntrinsic(''); },
|
||||
TypeError,
|
||||
'empty string intrinsic throws a type error'
|
||||
);
|
||||
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('.'); },
|
||||
SyntaxError,
|
||||
'"just a dot" intrinsic throws a syntax error'
|
||||
);
|
||||
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('%String'); },
|
||||
SyntaxError,
|
||||
'Leading % without trailing % throws a syntax error'
|
||||
);
|
||||
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('String%'); },
|
||||
SyntaxError,
|
||||
'Trailing % without leading % throws a syntax error'
|
||||
);
|
||||
|
||||
t['throws'](
|
||||
function () { GetIntrinsic("String['prototype]"); },
|
||||
SyntaxError,
|
||||
'Dynamic property access is disallowed for intrinsics (unterminated string)'
|
||||
);
|
||||
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('%Proxy.prototype.undefined%'); },
|
||||
TypeError,
|
||||
"Throws when middle part doesn't exist (%Proxy.prototype.undefined%)"
|
||||
);
|
||||
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('%Array.prototype%garbage%'); },
|
||||
SyntaxError,
|
||||
'Throws with extra percent signs'
|
||||
);
|
||||
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('%Array.prototype%push%'); },
|
||||
SyntaxError,
|
||||
'Throws with extra percent signs, even on an existing intrinsic'
|
||||
);
|
||||
|
||||
forEach(v.nonStrings, function (nonString) {
|
||||
t['throws'](
|
||||
function () { GetIntrinsic(nonString); },
|
||||
TypeError,
|
||||
debug(nonString) + ' is not a String'
|
||||
);
|
||||
});
|
||||
|
||||
forEach(v.nonBooleans, function (nonBoolean) {
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('%', nonBoolean); },
|
||||
TypeError,
|
||||
debug(nonBoolean) + ' is not a Boolean'
|
||||
);
|
||||
});
|
||||
|
||||
forEach([
|
||||
'toString',
|
||||
'propertyIsEnumerable',
|
||||
'hasOwnProperty'
|
||||
], function (objectProtoMember) {
|
||||
t['throws'](
|
||||
function () { GetIntrinsic(objectProtoMember); },
|
||||
SyntaxError,
|
||||
debug(objectProtoMember) + ' is not an intrinsic'
|
||||
);
|
||||
});
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('base intrinsics', function (t) {
|
||||
t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object');
|
||||
t.equal(GetIntrinsic('Object'), Object, 'Object yields Object');
|
||||
t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array');
|
||||
t.equal(GetIntrinsic('Array'), Array, 'Array yields Array');
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('dotted paths', function (t) {
|
||||
t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString');
|
||||
t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString');
|
||||
t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push');
|
||||
t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push');
|
||||
|
||||
test('underscore paths are aliases for dotted paths', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) {
|
||||
var original = GetIntrinsic('%ObjProto_toString%');
|
||||
|
||||
forEach([
|
||||
'%Object.prototype.toString%',
|
||||
'Object.prototype.toString',
|
||||
'%ObjectPrototype.toString%',
|
||||
'ObjectPrototype.toString',
|
||||
'%ObjProto_toString%',
|
||||
'ObjProto_toString'
|
||||
], function (name) {
|
||||
DefinePropertyOrThrow(Object.prototype, 'toString', {
|
||||
'[[Value]]': function toString() {
|
||||
return original.apply(this, arguments);
|
||||
}
|
||||
});
|
||||
st.equal(GetIntrinsic(name), original, name + ' yields original Object.prototype.toString');
|
||||
});
|
||||
|
||||
DefinePropertyOrThrow(Object.prototype, 'toString', { '[[Value]]': original });
|
||||
st.end();
|
||||
});
|
||||
|
||||
test('dotted paths cache', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) {
|
||||
var original = GetIntrinsic('%Object.prototype.propertyIsEnumerable%');
|
||||
|
||||
forEach([
|
||||
'%Object.prototype.propertyIsEnumerable%',
|
||||
'Object.prototype.propertyIsEnumerable',
|
||||
'%ObjectPrototype.propertyIsEnumerable%',
|
||||
'ObjectPrototype.propertyIsEnumerable'
|
||||
], function (name) {
|
||||
var restore = mockProperty(Object.prototype, 'propertyIsEnumerable', {
|
||||
value: function propertyIsEnumerable() {
|
||||
return original.apply(this, arguments);
|
||||
}
|
||||
});
|
||||
st.equal(GetIntrinsic(name), original, name + ' yields cached Object.prototype.propertyIsEnumerable');
|
||||
|
||||
restore();
|
||||
});
|
||||
|
||||
st.end();
|
||||
});
|
||||
|
||||
test('dotted path reports correct error', function (st) {
|
||||
st['throws'](function () {
|
||||
GetIntrinsic('%NonExistentIntrinsic.prototype.property%');
|
||||
}, /%NonExistentIntrinsic%/, 'The base intrinsic of %NonExistentIntrinsic.prototype.property% is %NonExistentIntrinsic%');
|
||||
|
||||
st['throws'](function () {
|
||||
GetIntrinsic('%NonExistentIntrinsicPrototype.property%');
|
||||
}, /%NonExistentIntrinsicPrototype%/, 'The base intrinsic of %NonExistentIntrinsicPrototype.property% is %NonExistentIntrinsicPrototype%');
|
||||
|
||||
st.end();
|
||||
});
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('accessors', { skip: !$gOPD || typeof Map !== 'function' }, function (t) {
|
||||
var actual = $gOPD(Map.prototype, 'size');
|
||||
t.ok(actual, 'Map.prototype.size has a descriptor');
|
||||
t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function');
|
||||
t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it');
|
||||
t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it');
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('generator functions', { skip: !generatorFns.length }, function (t) {
|
||||
var $GeneratorFunction = GetIntrinsic('%GeneratorFunction%');
|
||||
var $GeneratorFunctionPrototype = GetIntrinsic('%Generator%');
|
||||
var $GeneratorPrototype = GetIntrinsic('%GeneratorPrototype%');
|
||||
|
||||
forEach(generatorFns, function (genFn) {
|
||||
var fnName = genFn.name;
|
||||
fnName = fnName ? "'" + fnName + "'" : 'genFn';
|
||||
|
||||
t.ok(genFn instanceof $GeneratorFunction, fnName + ' instanceof %GeneratorFunction%');
|
||||
t.ok($isProto($GeneratorFunctionPrototype, genFn), '%Generator% is prototype of ' + fnName);
|
||||
t.ok($isProto($GeneratorPrototype, genFn.prototype), '%GeneratorPrototype% is prototype of ' + fnName + '.prototype');
|
||||
});
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('async functions', { skip: !asyncFns.length }, function (t) {
|
||||
var $AsyncFunction = GetIntrinsic('%AsyncFunction%');
|
||||
var $AsyncFunctionPrototype = GetIntrinsic('%AsyncFunctionPrototype%');
|
||||
|
||||
forEach(asyncFns, function (asyncFn) {
|
||||
var fnName = asyncFn.name;
|
||||
fnName = fnName ? "'" + fnName + "'" : 'asyncFn';
|
||||
|
||||
t.ok(asyncFn instanceof $AsyncFunction, fnName + ' instanceof %AsyncFunction%');
|
||||
t.ok($isProto($AsyncFunctionPrototype, asyncFn), '%AsyncFunctionPrototype% is prototype of ' + fnName);
|
||||
});
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('async generator functions', { skip: asyncGenFns.length === 0 }, function (t) {
|
||||
var $AsyncGeneratorFunction = GetIntrinsic('%AsyncGeneratorFunction%');
|
||||
var $AsyncGeneratorFunctionPrototype = GetIntrinsic('%AsyncGenerator%');
|
||||
var $AsyncGeneratorPrototype = GetIntrinsic('%AsyncGeneratorPrototype%');
|
||||
|
||||
forEach(asyncGenFns, function (asyncGenFn) {
|
||||
var fnName = asyncGenFn.name;
|
||||
fnName = fnName ? "'" + fnName + "'" : 'asyncGenFn';
|
||||
|
||||
t.ok(asyncGenFn instanceof $AsyncGeneratorFunction, fnName + ' instanceof %AsyncGeneratorFunction%');
|
||||
t.ok($isProto($AsyncGeneratorFunctionPrototype, asyncGenFn), '%AsyncGenerator% is prototype of ' + fnName);
|
||||
t.ok($isProto($AsyncGeneratorPrototype, asyncGenFn.prototype), '%AsyncGeneratorPrototype% is prototype of ' + fnName + '.prototype');
|
||||
});
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('%ThrowTypeError%', function (t) {
|
||||
var $ThrowTypeError = GetIntrinsic('%ThrowTypeError%');
|
||||
|
||||
t.equal(typeof $ThrowTypeError, 'function', 'is a function');
|
||||
t['throws'](
|
||||
$ThrowTypeError,
|
||||
TypeError,
|
||||
'%ThrowTypeError% throws a TypeError'
|
||||
);
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('allowMissing', { skip: asyncGenFns.length > 0 }, function (t) {
|
||||
t['throws'](
|
||||
function () { GetIntrinsic('%AsyncGeneratorPrototype%'); },
|
||||
TypeError,
|
||||
'throws when missing'
|
||||
);
|
||||
|
||||
t.equal(
|
||||
GetIntrinsic('%AsyncGeneratorPrototype%', true),
|
||||
undefined,
|
||||
'does not throw when allowMissing'
|
||||
);
|
||||
|
||||
t.end();
|
||||
});
|
||||
@@ -0,0 +1,8 @@
|
||||
import { OperatorFunction, MonoTypeOperatorFunction, TruthyTypesOf } from '../types';
|
||||
export declare function takeWhile<T>(predicate: BooleanConstructor, inclusive: true): MonoTypeOperatorFunction<T>;
|
||||
export declare function takeWhile<T>(predicate: BooleanConstructor, inclusive: false): OperatorFunction<T, TruthyTypesOf<T>>;
|
||||
export declare function takeWhile<T>(predicate: BooleanConstructor): OperatorFunction<T, TruthyTypesOf<T>>;
|
||||
export declare function takeWhile<T, S extends T>(predicate: (value: T, index: number) => value is S): OperatorFunction<T, S>;
|
||||
export declare function takeWhile<T, S extends T>(predicate: (value: T, index: number) => value is S, inclusive: false): OperatorFunction<T, S>;
|
||||
export declare function takeWhile<T>(predicate: (value: T, index: number) => boolean, inclusive?: boolean): MonoTypeOperatorFunction<T>;
|
||||
//# sourceMappingURL=takeWhile.d.ts.map
|
||||
@@ -0,0 +1,10 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.min = void 0;
|
||||
var reduce_1 = require("./reduce");
|
||||
var isFunction_1 = require("../util/isFunction");
|
||||
function min(comparer) {
|
||||
return reduce_1.reduce(isFunction_1.isFunction(comparer) ? function (x, y) { return (comparer(x, y) < 0 ? x : y); } : function (x, y) { return (x < y ? x : y); });
|
||||
}
|
||||
exports.min = min;
|
||||
//# sourceMappingURL=min.js.map
|
||||
@@ -0,0 +1,10 @@
|
||||
import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
|
||||
|
||||
type EnsureArrayOptions = { ensureItem?: EnsureFunction };
|
||||
|
||||
|
||||
declare function ensureArray<T>(value: any, options?: EnsureArrayOptions & EnsureBaseOptions): T[];
|
||||
declare function ensureArray<T>(value: any, options?: EnsureArrayOptions & EnsureBaseOptions & EnsureIsOptional): T[] | null;
|
||||
declare function ensureArray<T>(value: any, options?: EnsureArrayOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault<T[]>): T[];
|
||||
|
||||
export default ensureArray;
|
||||
@@ -0,0 +1,32 @@
|
||||
'use strict'
|
||||
|
||||
const tape = require('tape')
|
||||
const { BufferList, BufferListStream } = require('../')
|
||||
const { Buffer } = require('buffer')
|
||||
|
||||
tape('isBufferList positives', (t) => {
|
||||
t.ok(BufferList.isBufferList(new BufferList()))
|
||||
t.ok(BufferList.isBufferList(new BufferListStream()))
|
||||
|
||||
t.end()
|
||||
})
|
||||
|
||||
tape('isBufferList negatives', (t) => {
|
||||
const types = [
|
||||
null,
|
||||
undefined,
|
||||
NaN,
|
||||
true,
|
||||
false,
|
||||
{},
|
||||
[],
|
||||
Buffer.alloc(0),
|
||||
[Buffer.alloc(0)]
|
||||
]
|
||||
|
||||
for (const obj of types) {
|
||||
t.notOk(BufferList.isBufferList(obj))
|
||||
}
|
||||
|
||||
t.end()
|
||||
})
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"name":"yallist","version":"3.1.1","files":{"LICENSE":{"checkedAt":1678883670198,"integrity":"sha512-P6dI5Z+zrwxSk1MIRPqpYG2ScYNkidLIATQXd50QzBgBh/XmcEd/nsd9NB4O9k6rfc+4dsY5DwJ7xvhpoS0PRg==","mode":420,"size":765},"iterator.js":{"checkedAt":1678883670198,"integrity":"sha512-gdEBfYpX2q8L4tHZwoKV39GhQ2qnmpbwvu+K+8y8fp7lVGhdXPpacQtlGn2Xo/kooGqITRLY69eA22wu6NeDWw==","mode":420,"size":207},"README.md":{"checkedAt":1678883670198,"integrity":"sha512-r+xy8CtSKInl7bODQ7P3Q0gPrK/lM9eEXzgUF7UxghBQbrH1Xb8k6PKpUunSSAa7dTSZ+JtRaQx39sLXF5Klpw==","mode":420,"size":4717},"yallist.js":{"checkedAt":1678883671995,"integrity":"sha512-yCNFOkjizk0xJGPuXl/Rs3PkLF5Kn8nosHo1fJnHfLzmn2J7UogOjcEDizwMGwiLcnhGaZCzU/PE/SShUU1Z+Q==","mode":420,"size":8425},"package.json":{"checkedAt":1678883671995,"integrity":"sha512-vXRpaz4UmNESN1+irTYi4xa4GG1TvuVGukHlwuqzDeSAroXltRBx3W3SVgGruKJIhcAGVC9vEtUusp1SQ0I9Lw==","mode":420,"size":652}}}
|
||||
@@ -0,0 +1,28 @@
|
||||
|
||||
Copyright (c) 2009-2011, Mozilla Foundation and contributors
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the Mozilla Foundation nor the names of project
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,198 @@
|
||||
# object-hash
|
||||
|
||||
Generate hashes from objects and values in node and the browser. Uses node.js
|
||||
crypto module for hashing. Supports SHA1 and many others (depending on the platform)
|
||||
as well as custom streams (e.g. CRC32).
|
||||
|
||||
[](https://www.npmjs.com/package/object-hash)
|
||||
|
||||
[](https://secure.travis-ci.org/puleos/object-hash?branch=master)
|
||||
[](https://coveralls.io/github/puleos/object-hash?branch=master)
|
||||
|
||||
* Hash values of any type.
|
||||
* Supports a keys only option for grouping similar objects with different values.
|
||||
|
||||
```js
|
||||
var hash = require('object-hash');
|
||||
|
||||
hash({foo: 'bar'}) // => '67b69634f9880a282c14a0f0cb7ba20cf5d677e9'
|
||||
hash([1, 2, 2.718, 3.14159]) // => '136b9b88375971dff9f1af09d7356e3e04281951'
|
||||
```
|
||||
|
||||
## Versioning Disclaimer
|
||||
|
||||
Starting with version `1.1.8` (released April 2017), new versions will consider
|
||||
the exact returned hash part of the API contract, i.e. changes that will affect
|
||||
hash values will be considered `semver-major`. Previous versions may violate
|
||||
that expectation.
|
||||
|
||||
For more information, see [this discussion](https://github.com/puleos/object-hash/issues/30).
|
||||
|
||||
## hash(value, options)
|
||||
|
||||
Generate a hash from any object or type. Defaults to sha1 with hex encoding.
|
||||
|
||||
* `algorithm` hash algo to be used: 'sha1', 'md5', 'passthrough'. default: sha1
|
||||
* This supports the algorithms returned by `crypto.getHashes()`. Note that the default of SHA-1 is not considered secure, and a stronger algorithm should be used if a cryptographical hash is desired.
|
||||
* This also supports the `passthrough` algorith, which will return the information that would otherwise have been hashed.
|
||||
* `excludeValues` {true|false} hash object keys, values ignored. default: false
|
||||
* `encoding` hash encoding, supports 'buffer', 'hex', 'binary', 'base64'. default: hex
|
||||
* `ignoreUnknown` {true|*false} ignore unknown object types. default: false
|
||||
* `replacer` optional function that replaces values before hashing. default: accept all values
|
||||
* `respectFunctionProperties` {true|false} Whether properties on functions are considered when hashing. default: true
|
||||
* `respectFunctionNames` {true|false} consider `name` property of functions for hashing. default: true
|
||||
* `respectType` {true|false} Whether special type attributes (`.prototype`, `.__proto__`, `.constructor`)
|
||||
are hashed. default: true
|
||||
* `unorderedArrays` {true|false} Sort all arrays before hashing. Note that this affects *all* collections,
|
||||
i.e. including typed arrays, Sets, Maps, etc. default: false
|
||||
* `unorderedSets` {true|false} Sort `Set` and `Map` instances before hashing, i.e. make
|
||||
`hash(new Set([1, 2])) == hash(new Set([2, 1]))` return `true`. default: true
|
||||
* `unorderedObjects` {true|false} Sort objects before hashing, i.e. make `hash({ x: 1, y: 2 }) === hash({ y: 2, x: 1 })`. default: true
|
||||
* `excludeKeys` optional function for excluding specific key(s) from hashing, if true is returned then exclude from hash. default: include all keys
|
||||
|
||||
## hash.sha1(value)
|
||||
|
||||
Hash using the sha1 algorithm.
|
||||
|
||||
Note that SHA-1 is not considered secure, and a stronger algorithm should be used if a cryptographical hash is desired.
|
||||
|
||||
*Sugar method, equivalent to* `hash(value, {algorithm: 'sha1'})`
|
||||
|
||||
## hash.keys(value)
|
||||
|
||||
Hash object keys using the sha1 algorithm, values ignored.
|
||||
|
||||
*Sugar method, equivalent to* `hash(value, {excludeValues: true})`
|
||||
|
||||
## hash.MD5(value)
|
||||
|
||||
Hash using the md5 algorithm.
|
||||
|
||||
Note that the MD5 algorithm is not considered secure, and a stronger algorithm should be used if a cryptographical hash is desired.
|
||||
|
||||
*Sugar method, equivalent to* `hash(value, {algorithm: 'md5'})`
|
||||
|
||||
## hash.keysMD5(value)
|
||||
|
||||
Hash object keys using the md5 algorithm, values ignored.
|
||||
|
||||
Note that the MD5 algorithm is not considered secure, and a stronger algorithm should be used if a cryptographical hash is desired.
|
||||
|
||||
*Sugar method, equivalent to* `hash(value, {algorithm: 'md5', excludeValues: true})`
|
||||
|
||||
## hash.writeToStream(value, [options,] stream)
|
||||
|
||||
Write the information that would otherwise have been hashed to a stream, e.g.:
|
||||
|
||||
```js
|
||||
hash.writeToStream({foo: 'bar', a: 42}, {respectType: false}, process.stdout)
|
||||
// => e.g. 'object:a:number:42foo:string:bar'
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
node:
|
||||
|
||||
```js
|
||||
npm install object-hash
|
||||
```
|
||||
|
||||
browser: */dist/object_hash.js*
|
||||
|
||||
```html
|
||||
<script src="object_hash.js" type="text/javascript"></script>
|
||||
|
||||
<script>
|
||||
var hash = objectHash.sha1({foo:'bar'});
|
||||
|
||||
console.log(hash); // e003c89cdf35cdf46d8239b4692436364b7259f9
|
||||
</script>
|
||||
```
|
||||
|
||||
## Example usage
|
||||
|
||||
```js
|
||||
var hash = require('object-hash');
|
||||
|
||||
var peter = { name: 'Peter', stapler: false, friends: ['Joanna', 'Michael', 'Samir'] };
|
||||
var michael = { name: 'Michael', stapler: false, friends: ['Peter', 'Samir'] };
|
||||
var bob = { name: 'Bob', stapler: true, friends: [] };
|
||||
|
||||
/***
|
||||
* sha1 hex encoding (default)
|
||||
*/
|
||||
hash(peter);
|
||||
// 14fa461bf4b98155e82adc86532938553b4d33a9
|
||||
hash(michael);
|
||||
// 4b2b30e27699979ce46714253bc2213010db039c
|
||||
hash(bob);
|
||||
// 38d96106bc8ef3d8bd369b99bb6972702c9826d5
|
||||
|
||||
/***
|
||||
* hash object keys, values ignored
|
||||
*/
|
||||
hash(peter, { excludeValues: true });
|
||||
// 48f370a772c7496f6c9d2e6d92e920c87dd00a5c
|
||||
hash(michael, { excludeValues: true });
|
||||
// 48f370a772c7496f6c9d2e6d92e920c87dd00a5c
|
||||
hash.keys(bob);
|
||||
// 48f370a772c7496f6c9d2e6d92e920c87dd00a5c
|
||||
|
||||
/***
|
||||
* hash object, ignore specific key(s)
|
||||
*/
|
||||
hash(peter, { excludeKeys: function(key) {
|
||||
if ( key === 'friends') {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
// 66b7d7e64871aa9fda1bdc8e88a28df797648d80
|
||||
|
||||
/***
|
||||
* md5 base64 encoding
|
||||
*/
|
||||
hash(peter, { algorithm: 'md5', encoding: 'base64' });
|
||||
// 6rkWaaDiG3NynWw4svGH7g==
|
||||
hash(michael, { algorithm: 'md5', encoding: 'base64' });
|
||||
// djXaWpuWVJeOF8Sb6SFFNg==
|
||||
hash(bob, { algorithm: 'md5', encoding: 'base64' });
|
||||
// lFzkw/IJ8/12jZI0rQeS3w==
|
||||
```
|
||||
|
||||
## Legacy Browser Support
|
||||
|
||||
IE <= 8 and Opera <= 11 support dropped in version 0.3.0. If you require
|
||||
legacy browser support you must either use an ES5 shim or use version 0.2.5
|
||||
of this module.
|
||||
|
||||
## Development
|
||||
|
||||
```sh-session
|
||||
git clone https://github.com/puleos/object-hash
|
||||
```
|
||||
|
||||
## Node Docker Wrapper
|
||||
|
||||
If you want to stand this up in a docker container, you should take at look
|
||||
at the [](https://github.com/bean5/node-object-hash) project.
|
||||
|
||||
### gulp tasks
|
||||
|
||||
* `gulp watch` (default) watch files, test and lint on change/add
|
||||
* `gulp test` unit tests
|
||||
* `gulp karma` browser unit tests
|
||||
* `gulp lint` jshint
|
||||
* `gulp dist` create browser version in /dist
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
## Changelog
|
||||
|
||||
### v2.0.0
|
||||
|
||||
Only Node.js versions `>= 6.0.0` are being tested in CI now.
|
||||
No other breaking changes were introduced.
|
||||
@@ -0,0 +1 @@
|
||||
module.exports = require('./zipObject');
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"extends": "./tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"downlevelIteration": true,
|
||||
"outDir": "../dist/cjs"
|
||||
},
|
||||
"exclude": ["./internal/umd.ts"]
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
import * as acorn from "./acorn";
|
||||
export = acorn;
|
||||
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
@see Simplify
|
||||
*/
|
||||
export interface SimplifyOptions {
|
||||
/**
|
||||
Do the simplification recursively.
|
||||
|
||||
@default false
|
||||
*/
|
||||
deep?: boolean;
|
||||
}
|
||||
|
||||
// Flatten a type without worrying about the result.
|
||||
type Flatten<
|
||||
AnyType,
|
||||
Options extends SimplifyOptions = {},
|
||||
> = Options['deep'] extends true
|
||||
? {[KeyType in keyof AnyType]: Simplify<AnyType[KeyType], Options>}
|
||||
: {[KeyType in keyof AnyType]: AnyType[KeyType]};
|
||||
|
||||
/**
|
||||
Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability.
|
||||
|
||||
@example
|
||||
```
|
||||
import type {Simplify} from 'type-fest';
|
||||
|
||||
type PositionProps = {
|
||||
top: number;
|
||||
left: number;
|
||||
};
|
||||
|
||||
type SizeProps = {
|
||||
width: number;
|
||||
height: number;
|
||||
};
|
||||
|
||||
// In your editor, hovering over `Props` will show a flattened object with all the properties.
|
||||
type Props = Simplify<PositionProps & SizeProps>;
|
||||
```
|
||||
|
||||
Sometimes it is desired to pass a value as a function argument that has a different type. At first inspection it may seem assignable, and then you discover it is not because the `value`'s type definition was defined as an interface. In the following example, `fn` requires an argument of type `Record<string, unknown>`. If the value is defined as a literal, then it is assignable. And if the `value` is defined as type using the `Simplify` utility the value is assignable. But if the `value` is defined as an interface, it is not assignable because the interface is not sealed and elsewhere a non-string property could be added to the interface.
|
||||
|
||||
If the type definition must be an interface (perhaps it was defined in a third-party npm package), then the `value` can be defined as `const value: Simplify<SomeInterface> = ...`. Then `value` will be assignable to the `fn` argument. Or the `value` can be cast as `Simplify<SomeInterface>` if you can't re-declare the `value`.
|
||||
|
||||
@example
|
||||
```
|
||||
import type {Simplify} from 'type-fest';
|
||||
|
||||
interface SomeInterface {
|
||||
foo: number;
|
||||
bar?: string;
|
||||
baz: number | undefined;
|
||||
}
|
||||
|
||||
type SomeType = {
|
||||
foo: number;
|
||||
bar?: string;
|
||||
baz: number | undefined;
|
||||
};
|
||||
|
||||
const literal = {foo: 123, bar: 'hello', baz: 456};
|
||||
const someType: SomeType = literal;
|
||||
const someInterface: SomeInterface = literal;
|
||||
|
||||
function fn(object: Record<string, unknown>): void {}
|
||||
|
||||
fn(literal); // Good: literal object type is sealed
|
||||
fn(someType); // Good: type is sealed
|
||||
fn(someInterface); // Error: Index signature for type 'string' is missing in type 'someInterface'. Because `interface` can be re-opened
|
||||
fn(someInterface as Simplify<SomeInterface>); // Good: transform an `interface` into a `type`
|
||||
```
|
||||
|
||||
@link https://github.com/microsoft/TypeScript/issues/15300
|
||||
|
||||
@category Object
|
||||
*/
|
||||
export type Simplify<
|
||||
AnyType,
|
||||
Options extends SimplifyOptions = {},
|
||||
> = Flatten<AnyType> extends AnyType
|
||||
? Flatten<AnyType, Options>
|
||||
: AnyType;
|
||||
@@ -0,0 +1,21 @@
|
||||
import Renderer from '../../Renderer';
|
||||
import Block from '../../Block';
|
||||
import { TemplateNode } from '../../../../interfaces';
|
||||
import { Identifier } from 'estree';
|
||||
export default class Wrapper {
|
||||
renderer: Renderer;
|
||||
parent: Wrapper;
|
||||
node: TemplateNode;
|
||||
prev: Wrapper | null;
|
||||
next: Wrapper | null;
|
||||
var: Identifier;
|
||||
can_use_innerhtml: boolean;
|
||||
is_static_content: boolean;
|
||||
constructor(renderer: Renderer, block: Block, parent: Wrapper, node: TemplateNode);
|
||||
cannot_use_innerhtml(): void;
|
||||
not_static_content(): void;
|
||||
get_or_create_anchor(block: Block, parent_node: Identifier, parent_nodes: Identifier): Identifier;
|
||||
get_update_mount_node(anchor: Identifier): Identifier;
|
||||
is_dom_node(): boolean;
|
||||
render(_block: Block, _parent_node: Identifier, _parent_nodes: Identifier): void;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"2":"J D E CC","8":"F","292":"A B"},B:{"1":"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H","292":"C K L G"},C:{"1":"UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB","2":"DC tB I v J D E F A B C K L G M N O EC FC","8":"0 1 2 3 4 5 6 7 8 9 w g x y z AB BB CB DB EB FB","584":"GB HB IB JB KB LB MB NB OB PB QB RB","1025":"SB TB"},D:{"1":"YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB GC","2":"0 I v J D E F A B C K L G M N O w g x y z","8":"1 2 3 4","200":"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB","1025":"XB"},E:{"1":"B C K L G 0B qB rB 1B MC NC 2B 3B 4B 5B sB 6B 7B 8B 9B OC","2":"I v HC zB IC","8":"J D E F A JC KC LC"},F:{"1":"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e","2":"0 1 2 3 F B C G M N O w g x y z PC QC RC SC qB AC TC rB","200":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB"},G:{"1":"cC dC eC fC gC hC iC jC kC lC mC nC 2B 3B 4B 5B sB 6B 7B 8B 9B","2":"zB UC BC VC","8":"E WC XC YC ZC aC bC"},H:{"2":"oC"},I:{"1":"f","2":"tB I pC qC rC sC","8":"BC tC uC"},J:{"2":"D A"},K:{"1":"h","2":"A B C qB AC rB"},L:{"1":"H"},M:{"1":"H"},N:{"292":"A B"},O:{"1":"vC"},P:{"1":"g xC yC zC 0C 0B 1C 2C 3C 4C 5C sB 6C 7C 8C","2":"wC","8":"I"},Q:{"1":"1B"},R:{"1":"9C"},S:{"1":"AD BD"}},B:4,C:"CSS Grid Layout (level 1)"};
|
||||
@@ -0,0 +1,666 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Code coverage report for csv2json/src/rowSplit.ts</title>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" href="../../prettify.css" />
|
||||
<link rel="stylesheet" href="../../base.css" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style type='text/css'>
|
||||
.coverage-summary .sorter {
|
||||
background-image: url(../../sort-arrow-sprite.png);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class='wrapper'>
|
||||
<div class='pad1'>
|
||||
<h1>
|
||||
<a href="../../index.html">All files</a> / <a href="index.html">csv2json/src</a> rowSplit.ts
|
||||
</h1>
|
||||
<div class='clearfix'>
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">95.08% </span>
|
||||
<span class="quiet">Statements</span>
|
||||
<span class='fraction'>116/122</span>
|
||||
</div>
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">94.55% </span>
|
||||
<span class="quiet">Branches</span>
|
||||
<span class='fraction'>52/55</span>
|
||||
</div>
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">91.67% </span>
|
||||
<span class="quiet">Functions</span>
|
||||
<span class='fraction'>11/12</span>
|
||||
</div>
|
||||
<div class='fl pad1y space-right2'>
|
||||
<span class="strong">95.04% </span>
|
||||
<span class="quiet">Lines</span>
|
||||
<span class='fraction'>115/121</span>
|
||||
</div>
|
||||
</div>
|
||||
<p class="quiet">
|
||||
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
||||
</p>
|
||||
</div>
|
||||
<div class='status-line high'></div>
|
||||
<pre><table class="coverage">
|
||||
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
||||
<a name='L2'></a><a href='#L2'>2</a>
|
||||
<a name='L3'></a><a href='#L3'>3</a>
|
||||
<a name='L4'></a><a href='#L4'>4</a>
|
||||
<a name='L5'></a><a href='#L5'>5</a>
|
||||
<a name='L6'></a><a href='#L6'>6</a>
|
||||
<a name='L7'></a><a href='#L7'>7</a>
|
||||
<a name='L8'></a><a href='#L8'>8</a>
|
||||
<a name='L9'></a><a href='#L9'>9</a>
|
||||
<a name='L10'></a><a href='#L10'>10</a>
|
||||
<a name='L11'></a><a href='#L11'>11</a>
|
||||
<a name='L12'></a><a href='#L12'>12</a>
|
||||
<a name='L13'></a><a href='#L13'>13</a>
|
||||
<a name='L14'></a><a href='#L14'>14</a>
|
||||
<a name='L15'></a><a href='#L15'>15</a>
|
||||
<a name='L16'></a><a href='#L16'>16</a>
|
||||
<a name='L17'></a><a href='#L17'>17</a>
|
||||
<a name='L18'></a><a href='#L18'>18</a>
|
||||
<a name='L19'></a><a href='#L19'>19</a>
|
||||
<a name='L20'></a><a href='#L20'>20</a>
|
||||
<a name='L21'></a><a href='#L21'>21</a>
|
||||
<a name='L22'></a><a href='#L22'>22</a>
|
||||
<a name='L23'></a><a href='#L23'>23</a>
|
||||
<a name='L24'></a><a href='#L24'>24</a>
|
||||
<a name='L25'></a><a href='#L25'>25</a>
|
||||
<a name='L26'></a><a href='#L26'>26</a>
|
||||
<a name='L27'></a><a href='#L27'>27</a>
|
||||
<a name='L28'></a><a href='#L28'>28</a>
|
||||
<a name='L29'></a><a href='#L29'>29</a>
|
||||
<a name='L30'></a><a href='#L30'>30</a>
|
||||
<a name='L31'></a><a href='#L31'>31</a>
|
||||
<a name='L32'></a><a href='#L32'>32</a>
|
||||
<a name='L33'></a><a href='#L33'>33</a>
|
||||
<a name='L34'></a><a href='#L34'>34</a>
|
||||
<a name='L35'></a><a href='#L35'>35</a>
|
||||
<a name='L36'></a><a href='#L36'>36</a>
|
||||
<a name='L37'></a><a href='#L37'>37</a>
|
||||
<a name='L38'></a><a href='#L38'>38</a>
|
||||
<a name='L39'></a><a href='#L39'>39</a>
|
||||
<a name='L40'></a><a href='#L40'>40</a>
|
||||
<a name='L41'></a><a href='#L41'>41</a>
|
||||
<a name='L42'></a><a href='#L42'>42</a>
|
||||
<a name='L43'></a><a href='#L43'>43</a>
|
||||
<a name='L44'></a><a href='#L44'>44</a>
|
||||
<a name='L45'></a><a href='#L45'>45</a>
|
||||
<a name='L46'></a><a href='#L46'>46</a>
|
||||
<a name='L47'></a><a href='#L47'>47</a>
|
||||
<a name='L48'></a><a href='#L48'>48</a>
|
||||
<a name='L49'></a><a href='#L49'>49</a>
|
||||
<a name='L50'></a><a href='#L50'>50</a>
|
||||
<a name='L51'></a><a href='#L51'>51</a>
|
||||
<a name='L52'></a><a href='#L52'>52</a>
|
||||
<a name='L53'></a><a href='#L53'>53</a>
|
||||
<a name='L54'></a><a href='#L54'>54</a>
|
||||
<a name='L55'></a><a href='#L55'>55</a>
|
||||
<a name='L56'></a><a href='#L56'>56</a>
|
||||
<a name='L57'></a><a href='#L57'>57</a>
|
||||
<a name='L58'></a><a href='#L58'>58</a>
|
||||
<a name='L59'></a><a href='#L59'>59</a>
|
||||
<a name='L60'></a><a href='#L60'>60</a>
|
||||
<a name='L61'></a><a href='#L61'>61</a>
|
||||
<a name='L62'></a><a href='#L62'>62</a>
|
||||
<a name='L63'></a><a href='#L63'>63</a>
|
||||
<a name='L64'></a><a href='#L64'>64</a>
|
||||
<a name='L65'></a><a href='#L65'>65</a>
|
||||
<a name='L66'></a><a href='#L66'>66</a>
|
||||
<a name='L67'></a><a href='#L67'>67</a>
|
||||
<a name='L68'></a><a href='#L68'>68</a>
|
||||
<a name='L69'></a><a href='#L69'>69</a>
|
||||
<a name='L70'></a><a href='#L70'>70</a>
|
||||
<a name='L71'></a><a href='#L71'>71</a>
|
||||
<a name='L72'></a><a href='#L72'>72</a>
|
||||
<a name='L73'></a><a href='#L73'>73</a>
|
||||
<a name='L74'></a><a href='#L74'>74</a>
|
||||
<a name='L75'></a><a href='#L75'>75</a>
|
||||
<a name='L76'></a><a href='#L76'>76</a>
|
||||
<a name='L77'></a><a href='#L77'>77</a>
|
||||
<a name='L78'></a><a href='#L78'>78</a>
|
||||
<a name='L79'></a><a href='#L79'>79</a>
|
||||
<a name='L80'></a><a href='#L80'>80</a>
|
||||
<a name='L81'></a><a href='#L81'>81</a>
|
||||
<a name='L82'></a><a href='#L82'>82</a>
|
||||
<a name='L83'></a><a href='#L83'>83</a>
|
||||
<a name='L84'></a><a href='#L84'>84</a>
|
||||
<a name='L85'></a><a href='#L85'>85</a>
|
||||
<a name='L86'></a><a href='#L86'>86</a>
|
||||
<a name='L87'></a><a href='#L87'>87</a>
|
||||
<a name='L88'></a><a href='#L88'>88</a>
|
||||
<a name='L89'></a><a href='#L89'>89</a>
|
||||
<a name='L90'></a><a href='#L90'>90</a>
|
||||
<a name='L91'></a><a href='#L91'>91</a>
|
||||
<a name='L92'></a><a href='#L92'>92</a>
|
||||
<a name='L93'></a><a href='#L93'>93</a>
|
||||
<a name='L94'></a><a href='#L94'>94</a>
|
||||
<a name='L95'></a><a href='#L95'>95</a>
|
||||
<a name='L96'></a><a href='#L96'>96</a>
|
||||
<a name='L97'></a><a href='#L97'>97</a>
|
||||
<a name='L98'></a><a href='#L98'>98</a>
|
||||
<a name='L99'></a><a href='#L99'>99</a>
|
||||
<a name='L100'></a><a href='#L100'>100</a>
|
||||
<a name='L101'></a><a href='#L101'>101</a>
|
||||
<a name='L102'></a><a href='#L102'>102</a>
|
||||
<a name='L103'></a><a href='#L103'>103</a>
|
||||
<a name='L104'></a><a href='#L104'>104</a>
|
||||
<a name='L105'></a><a href='#L105'>105</a>
|
||||
<a name='L106'></a><a href='#L106'>106</a>
|
||||
<a name='L107'></a><a href='#L107'>107</a>
|
||||
<a name='L108'></a><a href='#L108'>108</a>
|
||||
<a name='L109'></a><a href='#L109'>109</a>
|
||||
<a name='L110'></a><a href='#L110'>110</a>
|
||||
<a name='L111'></a><a href='#L111'>111</a>
|
||||
<a name='L112'></a><a href='#L112'>112</a>
|
||||
<a name='L113'></a><a href='#L113'>113</a>
|
||||
<a name='L114'></a><a href='#L114'>114</a>
|
||||
<a name='L115'></a><a href='#L115'>115</a>
|
||||
<a name='L116'></a><a href='#L116'>116</a>
|
||||
<a name='L117'></a><a href='#L117'>117</a>
|
||||
<a name='L118'></a><a href='#L118'>118</a>
|
||||
<a name='L119'></a><a href='#L119'>119</a>
|
||||
<a name='L120'></a><a href='#L120'>120</a>
|
||||
<a name='L121'></a><a href='#L121'>121</a>
|
||||
<a name='L122'></a><a href='#L122'>122</a>
|
||||
<a name='L123'></a><a href='#L123'>123</a>
|
||||
<a name='L124'></a><a href='#L124'>124</a>
|
||||
<a name='L125'></a><a href='#L125'>125</a>
|
||||
<a name='L126'></a><a href='#L126'>126</a>
|
||||
<a name='L127'></a><a href='#L127'>127</a>
|
||||
<a name='L128'></a><a href='#L128'>128</a>
|
||||
<a name='L129'></a><a href='#L129'>129</a>
|
||||
<a name='L130'></a><a href='#L130'>130</a>
|
||||
<a name='L131'></a><a href='#L131'>131</a>
|
||||
<a name='L132'></a><a href='#L132'>132</a>
|
||||
<a name='L133'></a><a href='#L133'>133</a>
|
||||
<a name='L134'></a><a href='#L134'>134</a>
|
||||
<a name='L135'></a><a href='#L135'>135</a>
|
||||
<a name='L136'></a><a href='#L136'>136</a>
|
||||
<a name='L137'></a><a href='#L137'>137</a>
|
||||
<a name='L138'></a><a href='#L138'>138</a>
|
||||
<a name='L139'></a><a href='#L139'>139</a>
|
||||
<a name='L140'></a><a href='#L140'>140</a>
|
||||
<a name='L141'></a><a href='#L141'>141</a>
|
||||
<a name='L142'></a><a href='#L142'>142</a>
|
||||
<a name='L143'></a><a href='#L143'>143</a>
|
||||
<a name='L144'></a><a href='#L144'>144</a>
|
||||
<a name='L145'></a><a href='#L145'>145</a>
|
||||
<a name='L146'></a><a href='#L146'>146</a>
|
||||
<a name='L147'></a><a href='#L147'>147</a>
|
||||
<a name='L148'></a><a href='#L148'>148</a>
|
||||
<a name='L149'></a><a href='#L149'>149</a>
|
||||
<a name='L150'></a><a href='#L150'>150</a>
|
||||
<a name='L151'></a><a href='#L151'>151</a>
|
||||
<a name='L152'></a><a href='#L152'>152</a>
|
||||
<a name='L153'></a><a href='#L153'>153</a>
|
||||
<a name='L154'></a><a href='#L154'>154</a>
|
||||
<a name='L155'></a><a href='#L155'>155</a>
|
||||
<a name='L156'></a><a href='#L156'>156</a>
|
||||
<a name='L157'></a><a href='#L157'>157</a>
|
||||
<a name='L158'></a><a href='#L158'>158</a>
|
||||
<a name='L159'></a><a href='#L159'>159</a>
|
||||
<a name='L160'></a><a href='#L160'>160</a>
|
||||
<a name='L161'></a><a href='#L161'>161</a>
|
||||
<a name='L162'></a><a href='#L162'>162</a>
|
||||
<a name='L163'></a><a href='#L163'>163</a>
|
||||
<a name='L164'></a><a href='#L164'>164</a>
|
||||
<a name='L165'></a><a href='#L165'>165</a>
|
||||
<a name='L166'></a><a href='#L166'>166</a>
|
||||
<a name='L167'></a><a href='#L167'>167</a>
|
||||
<a name='L168'></a><a href='#L168'>168</a>
|
||||
<a name='L169'></a><a href='#L169'>169</a>
|
||||
<a name='L170'></a><a href='#L170'>170</a>
|
||||
<a name='L171'></a><a href='#L171'>171</a>
|
||||
<a name='L172'></a><a href='#L172'>172</a>
|
||||
<a name='L173'></a><a href='#L173'>173</a>
|
||||
<a name='L174'></a><a href='#L174'>174</a>
|
||||
<a name='L175'></a><a href='#L175'>175</a>
|
||||
<a name='L176'></a><a href='#L176'>176</a>
|
||||
<a name='L177'></a><a href='#L177'>177</a>
|
||||
<a name='L178'></a><a href='#L178'>178</a>
|
||||
<a name='L179'></a><a href='#L179'>179</a>
|
||||
<a name='L180'></a><a href='#L180'>180</a>
|
||||
<a name='L181'></a><a href='#L181'>181</a>
|
||||
<a name='L182'></a><a href='#L182'>182</a>
|
||||
<a name='L183'></a><a href='#L183'>183</a>
|
||||
<a name='L184'></a><a href='#L184'>184</a>
|
||||
<a name='L185'></a><a href='#L185'>185</a>
|
||||
<a name='L186'></a><a href='#L186'>186</a>
|
||||
<a name='L187'></a><a href='#L187'>187</a>
|
||||
<a name='L188'></a><a href='#L188'>188</a>
|
||||
<a name='L189'></a><a href='#L189'>189</a>
|
||||
<a name='L190'></a><a href='#L190'>190</a>
|
||||
<a name='L191'></a><a href='#L191'>191</a>
|
||||
<a name='L192'></a><a href='#L192'>192</a>
|
||||
<a name='L193'></a><a href='#L193'>193</a>
|
||||
<a name='L194'></a><a href='#L194'>194</a>
|
||||
<a name='L195'></a><a href='#L195'>195</a>
|
||||
<a name='L196'></a><a href='#L196'>196</a>
|
||||
<a name='L197'></a><a href='#L197'>197</a>
|
||||
<a name='L198'></a><a href='#L198'>198</a>
|
||||
<a name='L199'></a><a href='#L199'>199</a>
|
||||
<a name='L200'></a><a href='#L200'>200</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">70x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-yes">77x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">32200x</span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">4x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-yes">66757x</span>
|
||||
<span class="cline-any cline-yes">66757x</span>
|
||||
<span class="cline-any cline-yes">66625x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">66757x</span>
|
||||
<span class="cline-any cline-yes">66757x</span>
|
||||
<span class="cline-any cline-yes">66643x</span>
|
||||
<span class="cline-any cline-yes">158x</span>
|
||||
<span class="cline-any cline-yes">158x</span>
|
||||
<span class="cline-any cline-yes">107x</span>
|
||||
<span class="cline-any cline-yes">107x</span>
|
||||
<span class="cline-any cline-yes">107x</span>
|
||||
<span class="cline-any cline-yes">107x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">51x</span>
|
||||
<span class="cline-any cline-yes">51x</span>
|
||||
<span class="cline-any cline-yes">51x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">66485x</span>
|
||||
<span class="cline-any cline-yes">66473x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">66485x</span>
|
||||
<span class="cline-any cline-yes">66485x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">114x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-yes">26x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">88x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">32192x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">8x</span>
|
||||
<span class="cline-any cline-yes">6x</span>
|
||||
<span class="cline-any cline-yes">2x</span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-yes">33x</span>
|
||||
<span class="cline-any cline-yes">33x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
<span class="cline-any cline-yes">13x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">7x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">66643x</span>
|
||||
<span class="cline-any cline-yes">66643x</span>
|
||||
<span class="cline-any cline-yes">66643x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">272x</span>
|
||||
<span class="cline-any cline-yes">272x</span>
|
||||
<span class="cline-any cline-yes">272x</span>
|
||||
<span class="cline-any cline-yes">266x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">272x</span>
|
||||
<span class="cline-any cline-yes">272x</span>
|
||||
<span class="cline-any cline-yes">272x</span>
|
||||
<span class="cline-any cline-yes">191x</span>
|
||||
<span class="cline-any cline-yes">191x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">272x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-no"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">133x</span>
|
||||
<span class="cline-any cline-yes">133x</span>
|
||||
<span class="cline-any cline-yes">25x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">133x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">133x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-yes">107x</span>
|
||||
<span class="cline-any cline-yes">107x</span>
|
||||
<span class="cline-any cline-yes">107x</span>
|
||||
<span class="cline-any cline-yes">32137x</span>
|
||||
<span class="cline-any cline-yes">32137x</span>
|
||||
<span class="cline-any cline-yes">32137x</span>
|
||||
<span class="cline-any cline-yes">32116x</span>
|
||||
<span class="cline-any cline-yes">18x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">32098x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">32116x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">21x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">107x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-yes">1x</span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span>
|
||||
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { CSVParseParam } from "./Parameters";
|
||||
import { Converter } from "./Converter";
|
||||
import { Fileline } from "./fileline";
|
||||
import getEol from "./getEol";
|
||||
import { filterArray } from "./util";
|
||||
|
||||
const defaulDelimiters = [",", "|", "\t", ";", ":"];
|
||||
export class RowSplit {
|
||||
private quote: string;
|
||||
private trim: boolean;
|
||||
private escape: string;
|
||||
private cachedRegExp: { [key: string]: RegExp } = {};
|
||||
private delimiterEmitted = false;
|
||||
private _needEmitDelimiter?: boolean = undefined;
|
||||
private get needEmitDelimiter() {
|
||||
if (this._needEmitDelimiter === undefined) {
|
||||
this._needEmitDelimiter = this.conv.listeners("delimiter").length > 0;
|
||||
}
|
||||
return this._needEmitDelimiter;
|
||||
}
|
||||
constructor(private conv: Converter) {
|
||||
this.quote = conv.parseParam.quote;
|
||||
this.trim = conv.parseParam.trim;
|
||||
this.escape = conv.parseParam.escape;
|
||||
}
|
||||
parse(fileline: Fileline): RowSplitResult {
|
||||
if (fileline === "") {
|
||||
return { cells: [], closed: true };
|
||||
}
|
||||
const quote = this.quote;
|
||||
const trim = this.trim;
|
||||
const escape = this.escape;
|
||||
if (this.conv.parseRuntime.delimiter instanceof Array || this.conv.parseRuntime.delimiter.toLowerCase() === "auto") {
|
||||
this.conv.parseRuntime.delimiter = this.getDelimiter(fileline);
|
||||
|
||||
}
|
||||
if (this.needEmitDelimiter && !this.delimiterEmitted) {
|
||||
this.conv.emit("delimiter", this.conv.parseRuntime.delimiter);
|
||||
this.delimiterEmitted = true;
|
||||
}
|
||||
const delimiter = this.conv.parseRuntime.delimiter;
|
||||
const rowArr = fileline.split(delimiter);
|
||||
<span class="missing-if-branch" title="if path not taken" >I</span>if (quote === "off") {
|
||||
<span class="cstat-no" title="statement not covered" > return { cells: rowArr, closed: true };</span>
|
||||
} else {
|
||||
return this.toCSVRow(rowArr, trim, quote, delimiter);
|
||||
}
|
||||
|
||||
}
|
||||
private toCSVRow(rowArr: string[], trim: boolean, quote: string, delimiter: string): RowSplitResult {
|
||||
const row: string[] = [];
|
||||
let inquote = false;
|
||||
let quoteBuff = '';
|
||||
for (let i = 0, rowLen = rowArr.length; i < rowLen; i++) {
|
||||
let e = rowArr[i];
|
||||
if (!inquote && trim) {
|
||||
e = e.trimLeft();
|
||||
}
|
||||
const len = e.length;
|
||||
if (!inquote) {
|
||||
if (this.isQuoteOpen(e)) { //quote open
|
||||
e = e.substr(1);
|
||||
if (this.isQuoteClose(e)) { //quote close
|
||||
e = e.substring(0, e.lastIndexOf(quote));
|
||||
e = this.escapeQuote(e);
|
||||
row.push(e);
|
||||
continue;
|
||||
} else {
|
||||
inquote = true;
|
||||
quoteBuff += e;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if (trim) {
|
||||
e = e.trimRight();
|
||||
}
|
||||
row.push(e);
|
||||
continue;
|
||||
}
|
||||
} else { //previous quote not closed
|
||||
if (this.isQuoteClose(e)) { //close double quote
|
||||
inquote = false;
|
||||
e = e.substr(0, len - 1);
|
||||
quoteBuff += delimiter + e;
|
||||
quoteBuff = this.escapeQuote(quoteBuff);
|
||||
<span class="missing-if-branch" title="else path not taken" >E</span>if (trim) {
|
||||
quoteBuff = quoteBuff.trimRight();
|
||||
}
|
||||
row.push(quoteBuff);
|
||||
quoteBuff = "";
|
||||
} else {
|
||||
quoteBuff += delimiter + e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if (!inquote && param._needFilterRow) {
|
||||
// row = filterRow(row, param);
|
||||
// }
|
||||
|
||||
return { cells: row, closed: !inquote };
|
||||
}
|
||||
private getDelimiter(fileline: Fileline): string {
|
||||
let checker;
|
||||
if (this.conv.parseParam.delimiter === "auto") {
|
||||
checker = defaulDelimiters;
|
||||
} else if (this.conv.parseParam.delimiter instanceof Array) {
|
||||
checker = this.conv.parseParam.delimiter;
|
||||
} else {
|
||||
return this.conv.parseParam.delimiter;
|
||||
}
|
||||
let count = 0;
|
||||
let rtn = ",";
|
||||
checker.forEach(function (delim) {
|
||||
const delimCount = fileline.split(delim).length;
|
||||
if (delimCount > count) {
|
||||
rtn = delim;
|
||||
count = delimCount;
|
||||
}
|
||||
});
|
||||
return rtn;
|
||||
}
|
||||
private isQuoteOpen(str: string): boolean {
|
||||
const quote = this.quote;
|
||||
const escape = this.escape;
|
||||
return str[0] === quote && (
|
||||
str[1] !== quote ||
|
||||
str[1] === escape && (str[2] === quote || str.length === 2));
|
||||
}
|
||||
private isQuoteClose(str: string): boolean {
|
||||
const quote = this.quote;
|
||||
const escape = this.escape;
|
||||
if (this.conv.parseParam.trim) {
|
||||
str = str.trimRight();
|
||||
}
|
||||
let count = 0;
|
||||
let idx = str.length - 1;
|
||||
while (str[idx] === quote || str[idx] === escape) {
|
||||
idx--;
|
||||
count++;
|
||||
}
|
||||
return count % 2 !== 0;
|
||||
}
|
||||
|
||||
<span class="fstat-no" title="function not covered" > private twoDoubleQuote(</span>str: string): string {
|
||||
var twoQuote = <span class="cstat-no" title="statement not covered" >this.quote + this.quote;</span>
|
||||
var curIndex = <span class="cstat-no" title="statement not covered" >-1;</span>
|
||||
<span class="cstat-no" title="statement not covered" > while ((curIndex = str.indexOf(twoQuote, curIndex)) > -1) {</span>
|
||||
<span class="cstat-no" title="statement not covered" > str = str.substring(0, curIndex) + str.substring(++curIndex);</span>
|
||||
}
|
||||
<span class="cstat-no" title="statement not covered" > return str;</span>
|
||||
}
|
||||
|
||||
|
||||
private escapeQuote(segment: string): string {
|
||||
const key = "es|" + this.quote + "|" + this.escape;
|
||||
if (this.cachedRegExp[key] === undefined) {
|
||||
this.cachedRegExp[key] = new RegExp('\\' + this.escape + '\\' + this.quote, 'g');
|
||||
}
|
||||
const regExp = this.cachedRegExp[key];
|
||||
// console.log(regExp,segment);
|
||||
return segment.replace(regExp, this.quote);
|
||||
}
|
||||
parseMultiLines(lines: Fileline[]): MultipleRowResult {
|
||||
const csvLines: string[][] = [];
|
||||
let left = "";
|
||||
while (lines.length) {
|
||||
const line = left + lines.shift();
|
||||
const row = this.parse(line);
|
||||
if (row.closed || this.conv.parseParam.alwaysSplitAtEOL) {
|
||||
if (this.conv.parseRuntime.selectedColumns) {
|
||||
csvLines.push(filterArray(row.cells, this.conv.parseRuntime.selectedColumns));
|
||||
} else {
|
||||
csvLines.push(row.cells);
|
||||
}
|
||||
|
||||
left = "";
|
||||
} else {
|
||||
left = line + (getEol(line, this.conv.parseRuntime) || <span class="branch-1 cbranch-no" title="branch not covered" >"\n")</span>;
|
||||
}
|
||||
}
|
||||
return { rowsCells: csvLines, partial: left };
|
||||
}
|
||||
}
|
||||
export interface MultipleRowResult {
|
||||
rowsCells: string[][];
|
||||
partial: string;
|
||||
}
|
||||
export interface RowSplitResult {
|
||||
/**
|
||||
* csv row array. ["a","b","c"]
|
||||
*/
|
||||
cells: string[],
|
||||
/**
|
||||
* if the passed fileline is a complete row
|
||||
*/
|
||||
closed: boolean
|
||||
}
|
||||
|
||||
</pre></td></tr>
|
||||
</table></pre>
|
||||
<div class='push'></div><!-- for sticky footer -->
|
||||
</div><!-- /wrapper -->
|
||||
<div class='footer quiet pad2 space-top1 center small'>
|
||||
Code coverage
|
||||
generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri May 11 2018 21:20:20 GMT+0100 (IST)
|
||||
</div>
|
||||
</div>
|
||||
<script src="../../prettify.js"></script>
|
||||
<script>
|
||||
window.onload = function () {
|
||||
if (typeof prettyPrint === 'function') {
|
||||
prettyPrint();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="../../sorter.js"></script>
|
||||
<script src="../../block-navigation.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
Copyright 2019 - 2020, rixo and the svelte-hmr contributors.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
@@ -0,0 +1,121 @@
|
||||
"use strict";
|
||||
|
||||
var Buffer = require("buffer").Buffer,
|
||||
Transform = require("stream").Transform;
|
||||
|
||||
|
||||
// == Exports ==================================================================
|
||||
module.exports = function(iconv) {
|
||||
|
||||
// Additional Public API.
|
||||
iconv.encodeStream = function encodeStream(encoding, options) {
|
||||
return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);
|
||||
}
|
||||
|
||||
iconv.decodeStream = function decodeStream(encoding, options) {
|
||||
return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);
|
||||
}
|
||||
|
||||
iconv.supportsStreams = true;
|
||||
|
||||
|
||||
// Not published yet.
|
||||
iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;
|
||||
iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;
|
||||
iconv._collect = IconvLiteDecoderStream.prototype.collect;
|
||||
};
|
||||
|
||||
|
||||
// == Encoder stream =======================================================
|
||||
function IconvLiteEncoderStream(conv, options) {
|
||||
this.conv = conv;
|
||||
options = options || {};
|
||||
options.decodeStrings = false; // We accept only strings, so we don't need to decode them.
|
||||
Transform.call(this, options);
|
||||
}
|
||||
|
||||
IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {
|
||||
constructor: { value: IconvLiteEncoderStream }
|
||||
});
|
||||
|
||||
IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {
|
||||
if (typeof chunk != 'string')
|
||||
return done(new Error("Iconv encoding stream needs strings as its input."));
|
||||
try {
|
||||
var res = this.conv.write(chunk);
|
||||
if (res && res.length) this.push(res);
|
||||
done();
|
||||
}
|
||||
catch (e) {
|
||||
done(e);
|
||||
}
|
||||
}
|
||||
|
||||
IconvLiteEncoderStream.prototype._flush = function(done) {
|
||||
try {
|
||||
var res = this.conv.end();
|
||||
if (res && res.length) this.push(res);
|
||||
done();
|
||||
}
|
||||
catch (e) {
|
||||
done(e);
|
||||
}
|
||||
}
|
||||
|
||||
IconvLiteEncoderStream.prototype.collect = function(cb) {
|
||||
var chunks = [];
|
||||
this.on('error', cb);
|
||||
this.on('data', function(chunk) { chunks.push(chunk); });
|
||||
this.on('end', function() {
|
||||
cb(null, Buffer.concat(chunks));
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
// == Decoder stream =======================================================
|
||||
function IconvLiteDecoderStream(conv, options) {
|
||||
this.conv = conv;
|
||||
options = options || {};
|
||||
options.encoding = this.encoding = 'utf8'; // We output strings.
|
||||
Transform.call(this, options);
|
||||
}
|
||||
|
||||
IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {
|
||||
constructor: { value: IconvLiteDecoderStream }
|
||||
});
|
||||
|
||||
IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {
|
||||
if (!Buffer.isBuffer(chunk))
|
||||
return done(new Error("Iconv decoding stream needs buffers as its input."));
|
||||
try {
|
||||
var res = this.conv.write(chunk);
|
||||
if (res && res.length) this.push(res, this.encoding);
|
||||
done();
|
||||
}
|
||||
catch (e) {
|
||||
done(e);
|
||||
}
|
||||
}
|
||||
|
||||
IconvLiteDecoderStream.prototype._flush = function(done) {
|
||||
try {
|
||||
var res = this.conv.end();
|
||||
if (res && res.length) this.push(res, this.encoding);
|
||||
done();
|
||||
}
|
||||
catch (e) {
|
||||
done(e);
|
||||
}
|
||||
}
|
||||
|
||||
IconvLiteDecoderStream.prototype.collect = function(cb) {
|
||||
var res = '';
|
||||
this.on('error', cb);
|
||||
this.on('data', function(chunk) { res += chunk; });
|
||||
this.on('end', function() {
|
||||
cb(null, res);
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
export default function newGithubReleaseUrl(options = {}) {
|
||||
let repoUrl;
|
||||
if (options.repoUrl) {
|
||||
repoUrl = options.repoUrl;
|
||||
} else if (options.user && options.repo) {
|
||||
repoUrl = `https://github.com/${options.user}/${options.repo}`;
|
||||
} else {
|
||||
throw new Error('You need to specify either the `repoUrl` option or both the `user` and `repo` options');
|
||||
}
|
||||
|
||||
const url = new URL(`${repoUrl}/releases/new`);
|
||||
|
||||
const types = [
|
||||
'tag',
|
||||
'target',
|
||||
'title',
|
||||
'body',
|
||||
'isPrerelease',
|
||||
];
|
||||
|
||||
for (let type of types) {
|
||||
const value = options[type];
|
||||
if (value === undefined) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (type === 'isPrerelease') {
|
||||
type = 'prerelease';
|
||||
}
|
||||
|
||||
url.searchParams.set(type, value);
|
||||
}
|
||||
|
||||
return url.toString();
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,35 @@
|
||||
'use strict';
|
||||
|
||||
var toStr = Object.prototype.toString;
|
||||
var hasSymbols = require('has-symbols')();
|
||||
|
||||
if (hasSymbols) {
|
||||
var symToStr = Symbol.prototype.toString;
|
||||
var symStringRegex = /^Symbol\(.*\)$/;
|
||||
var isSymbolObject = function isRealSymbolObject(value) {
|
||||
if (typeof value.valueOf() !== 'symbol') {
|
||||
return false;
|
||||
}
|
||||
return symStringRegex.test(symToStr.call(value));
|
||||
};
|
||||
|
||||
module.exports = function isSymbol(value) {
|
||||
if (typeof value === 'symbol') {
|
||||
return true;
|
||||
}
|
||||
if (toStr.call(value) !== '[object Symbol]') {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
return isSymbolObject(value);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
} else {
|
||||
|
||||
module.exports = function isSymbol(value) {
|
||||
// this environment does not support Symbols.
|
||||
return false && value;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
var LodashWrapper = require('./_LodashWrapper'),
|
||||
flatRest = require('./_flatRest'),
|
||||
getData = require('./_getData'),
|
||||
getFuncName = require('./_getFuncName'),
|
||||
isArray = require('./isArray'),
|
||||
isLaziable = require('./_isLaziable');
|
||||
|
||||
/** Error message constants. */
|
||||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var WRAP_CURRY_FLAG = 8,
|
||||
WRAP_PARTIAL_FLAG = 32,
|
||||
WRAP_ARY_FLAG = 128,
|
||||
WRAP_REARG_FLAG = 256;
|
||||
|
||||
/**
|
||||
* Creates a `_.flow` or `_.flowRight` function.
|
||||
*
|
||||
* @private
|
||||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||||
* @returns {Function} Returns the new flow function.
|
||||
*/
|
||||
function createFlow(fromRight) {
|
||||
return flatRest(function(funcs) {
|
||||
var length = funcs.length,
|
||||
index = length,
|
||||
prereq = LodashWrapper.prototype.thru;
|
||||
|
||||
if (fromRight) {
|
||||
funcs.reverse();
|
||||
}
|
||||
while (index--) {
|
||||
var func = funcs[index];
|
||||
if (typeof func != 'function') {
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
|
||||
var wrapper = new LodashWrapper([], true);
|
||||
}
|
||||
}
|
||||
index = wrapper ? index : length;
|
||||
while (++index < length) {
|
||||
func = funcs[index];
|
||||
|
||||
var funcName = getFuncName(func),
|
||||
data = funcName == 'wrapper' ? getData(func) : undefined;
|
||||
|
||||
if (data && isLaziable(data[0]) &&
|
||||
data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
|
||||
!data[4].length && data[9] == 1
|
||||
) {
|
||||
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
|
||||
} else {
|
||||
wrapper = (func.length == 1 && isLaziable(func))
|
||||
? wrapper[funcName]()
|
||||
: wrapper.thru(func);
|
||||
}
|
||||
}
|
||||
return function() {
|
||||
var args = arguments,
|
||||
value = args[0];
|
||||
|
||||
if (wrapper && args.length == 1 && isArray(value)) {
|
||||
return wrapper.plant(value).value();
|
||||
}
|
||||
var index = 0,
|
||||
result = length ? funcs[index].apply(this, args) : value;
|
||||
|
||||
while (++index < length) {
|
||||
result = funcs[index].call(this, result);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = createFlow;
|
||||
@@ -0,0 +1,9 @@
|
||||
# `globalThis` _(ext/global-this)_
|
||||
|
||||
Returns global object. Resolve native [globalThis](https://github.com/tc39/proposal-global) if implemented, otherwise fallback to internal resolution of a global object.
|
||||
|
||||
```javascript
|
||||
const globalThis = require("ext/global-this");
|
||||
|
||||
globalThis.Array === Array; // true
|
||||
```
|
||||
@@ -0,0 +1,22 @@
|
||||
import {Result} from "./Result";
|
||||
import { Converter } from "./Converter";
|
||||
import P from "bluebird";
|
||||
import {readFileSync} from "fs";
|
||||
import path from "path";
|
||||
import assert from "assert";
|
||||
import { JSONResult } from "./lineToJson";
|
||||
const dataDir=path.join(__dirname,"../test/data/");
|
||||
|
||||
describe("Result",()=>{
|
||||
it ("should return need push downstream based on needEmitAll parameter",function (){
|
||||
const conv=new Converter();
|
||||
const res=new Result(conv);
|
||||
assert.equal(res["needEmitAll"],false);
|
||||
conv.then();
|
||||
assert.equal(res["needEmitAll"],true);
|
||||
conv.parseParam.needEmitAll=false;
|
||||
assert.equal(res["needEmitAll"],false);
|
||||
});
|
||||
|
||||
})
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
let random = async bytes => crypto.getRandomValues(new Uint8Array(bytes))
|
||||
let customAlphabet = (alphabet, defaultSize = 21) => {
|
||||
let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
|
||||
let step = -~((1.6 * mask * defaultSize) / alphabet.length)
|
||||
return async (size = defaultSize) => {
|
||||
let id = ''
|
||||
while (true) {
|
||||
let bytes = crypto.getRandomValues(new Uint8Array(step))
|
||||
let i = step
|
||||
while (i--) {
|
||||
id += alphabet[bytes[i] & mask] || ''
|
||||
if (id.length === size) return id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
let nanoid = async (size = 21) => {
|
||||
let id = ''
|
||||
let bytes = crypto.getRandomValues(new Uint8Array(size))
|
||||
while (size--) {
|
||||
let byte = bytes[size] & 63
|
||||
if (byte < 36) {
|
||||
id += byte.toString(36)
|
||||
} else if (byte < 62) {
|
||||
id += (byte - 26).toString(36).toUpperCase()
|
||||
} else if (byte < 63) {
|
||||
id += '_'
|
||||
} else {
|
||||
id += '-'
|
||||
}
|
||||
}
|
||||
return id
|
||||
}
|
||||
module.exports = { nanoid, customAlphabet, random }
|
||||
@@ -0,0 +1,71 @@
|
||||
# http-error.js
|
||||
|
||||
> Error class for Octokit request errors
|
||||
|
||||
[](https://www.npmjs.com/package/@octokit/request-error)
|
||||
[](https://github.com/octokit/request-error.js/actions?query=workflow%3ATest)
|
||||
|
||||
## Usage
|
||||
|
||||
<table>
|
||||
<tbody valign=top align=left>
|
||||
<tr><th>
|
||||
Browsers
|
||||
</th><td width=100%>
|
||||
Load <code>@octokit/request-error</code> directly from <a href="https://cdn.skypack.dev">cdn.skypack.dev</a>
|
||||
|
||||
```html
|
||||
<script type="module">
|
||||
import { RequestError } from "https://cdn.skypack.dev/@octokit/request-error";
|
||||
</script>
|
||||
```
|
||||
|
||||
</td></tr>
|
||||
<tr><th>
|
||||
Node
|
||||
</th><td>
|
||||
|
||||
Install with <code>npm install @octokit/request-error</code>
|
||||
|
||||
```js
|
||||
const { RequestError } = require("@octokit/request-error");
|
||||
// or: import { RequestError } from "@octokit/request-error";
|
||||
```
|
||||
|
||||
</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
```js
|
||||
const error = new RequestError("Oops", 500, {
|
||||
request: {
|
||||
method: "POST",
|
||||
url: "https://api.github.com/foo",
|
||||
body: {
|
||||
bar: "baz",
|
||||
},
|
||||
headers: {
|
||||
authorization: "token secret123",
|
||||
},
|
||||
},
|
||||
response: {
|
||||
status: 500,
|
||||
url: "https://api.github.com/foo",
|
||||
headers: {
|
||||
"x-github-request-id": "1:2:3:4",
|
||||
},
|
||||
data: {
|
||||
foo: "bar",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
error.message; // Oops
|
||||
error.status; // 500
|
||||
error.request; // { method, url, headers, body }
|
||||
error.response; // { url, status, headers, data }
|
||||
```
|
||||
|
||||
## LICENSE
|
||||
|
||||
[MIT](LICENSE)
|
||||
@@ -0,0 +1,146 @@
|
||||
import { OperatorFunction, ObservableInput } from '../types';
|
||||
import { operate } from '../util/lift';
|
||||
import { createOperatorSubscriber } from './OperatorSubscriber';
|
||||
import { innerFrom } from '../observable/innerFrom';
|
||||
|
||||
/**
|
||||
* Compares all values of two observables in sequence using an optional comparator function
|
||||
* and returns an observable of a single boolean value representing whether or not the two sequences
|
||||
* are equal.
|
||||
*
|
||||
* <span class="informal">Checks to see of all values emitted by both observables are equal, in order.</span>
|
||||
*
|
||||
* 
|
||||
*
|
||||
* `sequenceEqual` subscribes to source observable and `compareTo` `ObservableInput` (that internally
|
||||
* gets converted to an observable) and buffers incoming values from each observable. Whenever either
|
||||
* observable emits a value, the value is buffered and the buffers are shifted and compared from the bottom
|
||||
* up; If any value pair doesn't match, the returned observable will emit `false` and complete. If one of the
|
||||
* observables completes, the operator will wait for the other observable to complete; If the other
|
||||
* observable emits before completing, the returned observable will emit `false` and complete. If one observable never
|
||||
* completes or emits after the other completes, the returned observable will never complete.
|
||||
*
|
||||
* ## Example
|
||||
*
|
||||
* Figure out if the Konami code matches
|
||||
*
|
||||
* ```ts
|
||||
* import { from, fromEvent, map, bufferCount, mergeMap, sequenceEqual } from 'rxjs';
|
||||
*
|
||||
* const codes = from([
|
||||
* 'ArrowUp',
|
||||
* 'ArrowUp',
|
||||
* 'ArrowDown',
|
||||
* 'ArrowDown',
|
||||
* 'ArrowLeft',
|
||||
* 'ArrowRight',
|
||||
* 'ArrowLeft',
|
||||
* 'ArrowRight',
|
||||
* 'KeyB',
|
||||
* 'KeyA',
|
||||
* 'Enter', // no start key, clearly.
|
||||
* ]);
|
||||
*
|
||||
* const keys = fromEvent<KeyboardEvent>(document, 'keyup').pipe(map(e => e.code));
|
||||
* const matches = keys.pipe(
|
||||
* bufferCount(11, 1),
|
||||
* mergeMap(last11 => from(last11).pipe(sequenceEqual(codes)))
|
||||
* );
|
||||
* matches.subscribe(matched => console.log('Successful cheat at Contra? ', matched));
|
||||
* ```
|
||||
*
|
||||
* @see {@link combineLatest}
|
||||
* @see {@link zip}
|
||||
* @see {@link withLatestFrom}
|
||||
*
|
||||
* @param compareTo The `ObservableInput` sequence to compare the source sequence to.
|
||||
* @param comparator An optional function to compare each value pair.
|
||||
*
|
||||
* @return A function that returns an Observable that emits a single boolean
|
||||
* value representing whether or not the values emitted by the source
|
||||
* Observable and provided `ObservableInput` were equal in sequence.
|
||||
*/
|
||||
export function sequenceEqual<T>(
|
||||
compareTo: ObservableInput<T>,
|
||||
comparator: (a: T, b: T) => boolean = (a, b) => a === b
|
||||
): OperatorFunction<T, boolean> {
|
||||
return operate((source, subscriber) => {
|
||||
// The state for the source observable
|
||||
const aState = createState<T>();
|
||||
// The state for the compareTo observable;
|
||||
const bState = createState<T>();
|
||||
|
||||
/** A utility to emit and complete */
|
||||
const emit = (isEqual: boolean) => {
|
||||
subscriber.next(isEqual);
|
||||
subscriber.complete();
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a subscriber that subscribes to one of the sources, and compares its collected
|
||||
* state -- `selfState` -- to the other source's collected state -- `otherState`. This
|
||||
* is used for both streams.
|
||||
*/
|
||||
const createSubscriber = (selfState: SequenceState<T>, otherState: SequenceState<T>) => {
|
||||
const sequenceEqualSubscriber = createOperatorSubscriber(
|
||||
subscriber,
|
||||
(a: T) => {
|
||||
const { buffer, complete } = otherState;
|
||||
if (buffer.length === 0) {
|
||||
// If there's no values in the other buffer
|
||||
// and the other stream is complete, we know
|
||||
// this isn't a match, because we got one more value.
|
||||
// Otherwise, we push onto our buffer, so when the other
|
||||
// stream emits, it can pull this value off our buffer and check it
|
||||
// at the appropriate time.
|
||||
complete ? emit(false) : selfState.buffer.push(a);
|
||||
} else {
|
||||
// If the other stream *does* have values in its buffer,
|
||||
// pull the oldest one off so we can compare it to what we
|
||||
// just got. If it wasn't a match, emit `false` and complete.
|
||||
!comparator(a, buffer.shift()!) && emit(false);
|
||||
}
|
||||
},
|
||||
() => {
|
||||
// Or observable completed
|
||||
selfState.complete = true;
|
||||
const { complete, buffer } = otherState;
|
||||
// If the other observable is also complete, and there's
|
||||
// still stuff left in their buffer, it doesn't match, if their
|
||||
// buffer is empty, then it does match. This is because we can't
|
||||
// possibly get more values here anymore.
|
||||
complete && emit(buffer.length === 0);
|
||||
// Be sure to clean up our stream as soon as possible if we can.
|
||||
sequenceEqualSubscriber?.unsubscribe();
|
||||
}
|
||||
);
|
||||
|
||||
return sequenceEqualSubscriber;
|
||||
};
|
||||
|
||||
// Subscribe to each source.
|
||||
source.subscribe(createSubscriber(aState, bState));
|
||||
innerFrom(compareTo).subscribe(createSubscriber(bState, aState));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* A simple structure for the data used to test each sequence
|
||||
*/
|
||||
interface SequenceState<T> {
|
||||
/** A temporary store for arrived values before they are checked */
|
||||
buffer: T[];
|
||||
/** Whether or not the sequence source has completed. */
|
||||
complete: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a simple structure that is used to represent
|
||||
* data used to test each sequence.
|
||||
*/
|
||||
function createState<T>(): SequenceState<T> {
|
||||
return {
|
||||
buffer: [],
|
||||
complete: false,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user