From 621fad87c109b2682034431d1937d1bf80fc25ae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 21 Aug 2021 01:46:10 +0200 Subject: [PATCH 01/14] chore(deps): update eslint-plugin-prettier -> ^3.4.1 - devdependencies (#290) Co-authored-by: Renovate Bot --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ea27f1158..5b196e84a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2275,9 +2275,9 @@ "dev": true }, "eslint-plugin-prettier": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", - "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" diff --git a/package.json b/package.json index 2ccb8af94..83928aca5 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-es5": "^1.5.0", - "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-prettier": "^3.4.1", "get-stream": "^6.0.1", "jest": "^27.0.6", "nodemon": "^2.0.12", From 5efac55681cc73aad18af66d1bd4fe6ba2f223ed Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Sun, 22 Aug 2021 00:29:02 +0200 Subject: [PATCH 02/14] chore(stryker): Switch to dashboard owned by org (#292) --- readme.md | 2 +- stryker.conf.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index d0dae54d5..3b9db80d0 100644 --- a/readme.md +++ b/readme.md @@ -4,7 +4,7 @@ [![npm](https://img.shields.io/npm/v/@xmldom/xmldom?style=flat-square)](https://www.npmjs.com/package/@xmldom/xmldom) [![bug issues](https://img.shields.io/github/issues/xmldom/xmldom/bug?color=red&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [!["help wanted" issues](https://img.shields.io/github/issues/xmldom/xmldom/help%20wanted?color=darkgreen&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) -[![Mutation report](https://camo.githubusercontent.com/ee312c4ebce7784ce9f785757eba5d6e33e6d950/68747470733a2f2f696d672e736869656c64732e696f2f656e64706f696e743f7374796c653d666c61742675726c3d687474707325334125324625324662616467652d6170692e737472796b65722d6d757461746f722e696f2532466769746875622e636f6d25324662726f647962697473253246786d6c646f6d2532466d6173746572)](https://dashboard.stryker-mutator.io/reports/github.com/brodybits/xmldom/master) +[![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fxmldom%2Fxmldom%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/xmldom/xmldom/master) **The currently active maintainers decided to publish this code as `@xmldom/xmldom` because [the npm library `xmldom` contains security issues but can currently not be published by us](https://github.com/xmldom/xmldom/issues/271).** diff --git a/stryker.conf.json b/stryker.conf.json index 5fcbb873e..640ea8df7 100644 --- a/stryker.conf.json +++ b/stryker.conf.json @@ -9,7 +9,7 @@ ], "testRunner": "command", "dashboard": { - "project": "github.com/brodybits/xmldom", + "project": "github.com/xmldom/xmldom", "version": "master" }, "coverageAnalysis": "off", From 6882d35d7c0f7942243d50ef680b7be1b7f900ea Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Mon, 23 Aug 2021 18:35:27 +0200 Subject: [PATCH 03/14] docs(readme): Improve wording and flow (#293) to make it easier to digest. I recently read some articles on how to structure a README and it became obvious that ours is currently hard to digest. I think I was able to reorder the headlines so that the most important things for our (potential and existing) users are on the top of the page without a lot of scrolling. There is still room for improvement, especially regarding splitting some docs into separate markdown files, but that is a slightly bigger topic. https://dev.to/healeycodes/how-to-write-an-awesome-github-readme-2ldc https://dev.to/jmfayard/how-to-write-a-good-readme-discuss-4hkl --- readme.md | 151 +++++++++++++++++++++++++++++------------------------- 1 file changed, 80 insertions(+), 71 deletions(-) diff --git a/readme.md b/readme.md index 3b9db80d0..e12f6392e 100644 --- a/readme.md +++ b/readme.md @@ -1,85 +1,36 @@ # @xmldom/xmldom +***Since version 0.7.0 this package is published to npm as [`@xmldom/xmldom`](https://www.npmjs.com/package/@xmldom/xmldom) and no longer as [`xmldom`](https://www.npmjs.com/package/xmldom), because [we are no longer able to publish `xmldom`](https://github.com/xmldom/xmldom/issues/271).*** +*For better readability in the docs we will continue to talk about this library as "xmldom".* + [![license](https://img.shields.io/npm/l/@xmldom/xmldom?color=blue&style=flat-square)](LICENSE) [![npm](https://img.shields.io/npm/v/@xmldom/xmldom?style=flat-square)](https://www.npmjs.com/package/@xmldom/xmldom) [![bug issues](https://img.shields.io/github/issues/xmldom/xmldom/bug?color=red&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [!["help wanted" issues](https://img.shields.io/github/issues/xmldom/xmldom/help%20wanted?color=darkgreen&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) [![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fxmldom%2Fxmldom%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/xmldom/xmldom/master) -**The currently active maintainers decided to publish this code as `@xmldom/xmldom` because [the npm library `xmldom` contains security issues but can currently not be published by us](https://github.com/xmldom/xmldom/issues/271).** - -*For better readability in the docs we will continue to talk about this library as "xmldom".* - -xmldom is a javascript [ponyfill](https://ponyfill.com/) for the following APIs supported in browsers: -- convert an XML string into a DOM tree (`new DOMParser().parseFromString(xml, mimeType)` => `Document`) -- create, access and modify a DOM tree (`new DOMImplementation().createDocument(...)` => `Document`, ) -- serialize a DOM tree back into an XML string (`new XMLSerializer().serializeToString(node)` => `string`) - -Note that this `xmldom` library is not required if your code targets a modern browser. But this library is recommended if your code needs to also work in other runtimes like NodeJS or Rhino. - -## Specs - -The implementation is based on several specifications: - -![Overview of related specifications and their relations](docs/specs.svg) +xmldom is a javascript [ponyfill](https://ponyfill.com/) to provide the following APIs [that are present in modern browsers](https://caniuse.com/xml-serializer) to other runtimes: +- convert an XML string into a DOM tree + ``` + new DOMParser().parseFromString(xml, mimeType) => Document + ``` +- create, access and modify a DOM tree + ``` + new DOMImplementation().createDocument(...) => Document + ``` +- serialize a DOM tree back into an XML string + ``` + new XMLSerializer().serializeToString(node) => string + ``` -### DOM Parsing and Serialization +The target runtimes `xmldom` supports are currently Node >= v10 (ES5) and Rhino ([not tested as part of CI](https://github.com/xmldom/xmldom/discussions/214)). -From the [W3C DOM Parsing and Serialization (WD 2016)](https://www.w3.org/TR/2016/WD-DOM-Parsing-20160517/) `xmldom` provides an implementation for the interfaces: -- `DOMParser` -- `XMLSerializer` - -Note that there are some known deviations between this implementation and the W3 specifications. - -Note: [The latest version of this spec](https://w3c.github.io/DOM-Parsing/) has the status "Editors Draft", since it is under active development. One major change is that [the definition of the `DOMParser` interface has been moved to the HTML spec](https://w3c.github.io/DOM-Parsing/#the-domparser-interface) - - -### DOM - -The original author claims that xmldom implements [DOM Level 2] in a "fully compatible" way and some parts of [DOM Level 3], but there are not enough tests to prove this. Both Specifications are now superseded by the [DOM Level 4 aka Living standard] wich has a much broader scope than xmldom. - -xmldom implements the following interfaces (most constructors are currently not exposed): -- `Attr` -- `CDATASection` -- `CharacterData` -- `Comment` -- `Document` -- `DocumentFragment` -- `DocumentType` -- `DOMException` (constructor exposed) -- `DOMImplementation` (constructor exposed) -- `Element` -- `Entity` -- `EntityReference` -- `LiveNodeList` -- `NamedNodeMap` -- `Node` (constructor exposed) -- `NodeList` -- `Notation` -- `ProcessingInstruction` -- `Text` - -more details are available in the (incomplete) [API Reference](#api-reference) section. - -### HTML - -xmldom does not have any goal of supporting the full spec, but it has some capability to parse, report and serialize things differently when "detecting HTML" (by checking the default namespace). -There is an upcoming change to better align the implementation with the latest specs, related to . - -### SAX, XML, XMLNS - -xmldom has an own SAX parser implementation to do the actual parsing, which implements some interfaces in alignment with the Java interfaces SAX defines: -- `XMLReader` -- `DOMHandler` - -There is an idea/proposal to make ti possible to replace it with something else in +When deciding how to fix bugs or implement features, `xmldom` tries to stay as close as possible to the various [related specifications/standards](#specs). +As indicated by the version starting with `0.`, this implementation is not feature complete and some implemented features differ from what the specifications describe. +**Issues and PRs for such differences are always welcome, even when they only provide a failing test case.** -## Forked - -**Original project location:** - -More details about the transition can be found in the [CHANGELOG](CHANGELOG.md#maintainer-changes) and in +This project was forked from it's [original source](https://github.com/jindw/xmldom) in 2019, more details about that transition can be found in the [CHANGELOG](CHANGELOG.md#maintainer-changes). ## Usage @@ -121,7 +72,7 @@ import { DOMParser } from '@xmldom/xmldom' ```javascript parseFromString(xmlsource,mimeType) ``` - * **options extension** _by xmldom_(not BOM standard!!) + * **options extension** _by xmldom_ (not DOM standard!!) ```javascript //added the options argument @@ -327,3 +278,61 @@ import { DOMParser } from '@xmldom/xmldom' lineNumber //Numbered starting from '1' columnNumber + +## Specs + +The implementation is based on several specifications: + + +![Overview of related specifications and their relations](docs/specs.svg) + +### DOM Parsing and Serialization + +From the [W3C DOM Parsing and Serialization (WD 2016)](https://www.w3.org/TR/2016/WD-DOM-Parsing-20160517/) `xmldom` provides an implementation for the interfaces: +- `DOMParser` +- `XMLSerializer` + +Note that there are some known deviations between this implementation and the W3 specifications. + +Note: [The latest version of this spec](https://w3c.github.io/DOM-Parsing/) has the status "Editors Draft", since it is under active development. One major change is that [the definition of the `DOMParser` interface has been moved to the HTML spec](https://w3c.github.io/DOM-Parsing/#the-domparser-interface) + + +### DOM + +The original author claims that xmldom implements [DOM Level 2] in a "fully compatible" way and some parts of [DOM Level 3], but there are not enough tests to prove this. Both Specifications are now superseded by the [DOM Level 4 aka Living standard] wich has a much broader scope than xmldom. + +xmldom implements the following interfaces (most constructors are currently not exposed): +- `Attr` +- `CDATASection` +- `CharacterData` +- `Comment` +- `Document` +- `DocumentFragment` +- `DocumentType` +- `DOMException` (constructor exposed) +- `DOMImplementation` (constructor exposed) +- `Element` +- `Entity` +- `EntityReference` +- `LiveNodeList` +- `NamedNodeMap` +- `Node` (constructor exposed) +- `NodeList` +- `Notation` +- `ProcessingInstruction` +- `Text` + +more details are available in the (incomplete) [API Reference](#api-reference) section. + +### HTML + +xmldom does not have any goal of supporting the full spec, but it has some capability to parse, report and serialize things differently when "detecting HTML" (by checking the default namespace). +There is an upcoming change to better align the implementation with the latest specs, related to . + +### SAX, XML, XMLNS + +xmldom has an own SAX parser implementation to do the actual parsing, which implements some interfaces in alignment with the Java interfaces SAX defines: +- `XMLReader` +- `DOMHandler` + +There is an idea/proposal to make ti possible to replace it with something else in From 42962ef9c6b4442e26b947534d2c3e830738bfdb Mon Sep 17 00:00:00 2001 From: Reuben Thomas Date: Mon, 23 Aug 2021 22:32:19 +0100 Subject: [PATCH 04/14] fix: Correct typo in error message (#294) --- lib/dom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dom.js b/lib/dom.js index aebcafb1c..00d9616be 100644 --- a/lib/dom.js +++ b/lib/dom.js @@ -81,7 +81,7 @@ function _extends(Class,Super){ } if(pt.constructor != Class){ if(typeof Class != 'function'){ - console.error("unknow Class:"+Class) + console.error("unknown Class:"+Class) } pt.constructor = Class } From b5cccf095c47923ddbea5bc0e73d2d86414ad529 Mon Sep 17 00:00:00 2001 From: Chris Brody Date: Tue, 24 Aug 2021 12:55:21 -0400 Subject: [PATCH 05/14] docs: fix Stryker badge (#298) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index e12f6392e..85a163645 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@ [![npm](https://img.shields.io/npm/v/@xmldom/xmldom?style=flat-square)](https://www.npmjs.com/package/@xmldom/xmldom) [![bug issues](https://img.shields.io/github/issues/xmldom/xmldom/bug?color=red&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3Abug) [!["help wanted" issues](https://img.shields.io/github/issues/xmldom/xmldom/help%20wanted?color=darkgreen&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) -[![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fxmldom%2Fxmldom%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/xmldom/xmldom/master) +[![Mutation report](https://img.shields.io/endpoint?style=flat-square&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fxmldom%2Fxmldom%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/xmldom/xmldom/master) xmldom is a javascript [ponyfill](https://ponyfill.com/) to provide the following APIs [that are present in modern browsers](https://caniuse.com/xml-serializer) to other runtimes: From 95a3824a49411521d553a0661acae0e8f22136b4 Mon Sep 17 00:00:00 2001 From: Chris Brody Date: Tue, 24 Aug 2021 13:16:23 -0400 Subject: [PATCH 06/14] docs: update link to help-wanted issues (#299) Co-authored-by: Christian Bewernitz --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 85a163645..b42479811 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,7 @@ [![license](https://img.shields.io/npm/l/@xmldom/xmldom?color=blue&style=flat-square)](LICENSE) [![npm](https://img.shields.io/npm/v/@xmldom/xmldom?style=flat-square)](https://www.npmjs.com/package/@xmldom/xmldom) [![bug issues](https://img.shields.io/github/issues/xmldom/xmldom/bug?color=red&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3Abug) -[!["help wanted" issues](https://img.shields.io/github/issues/xmldom/xmldom/help%20wanted?color=darkgreen&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) +[![help-wanted issues](https://img.shields.io/github/issues/xmldom/xmldom/help-wanted?color=darkgreen&style=flat-square)](https://github.com/xmldom/xmldom/issues?q=is%3Aissue+is%3Aopen+label%3Ahelp-wanted) [![Mutation report](https://img.shields.io/endpoint?style=flat-square&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fxmldom%2Fxmldom%2Fmaster)](https://dashboard.stryker-mutator.io/reports/github.com/xmldom/xmldom/master) From 6cc16a671eff7c0a1d6b5d36f898c09e285fe193 Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Tue, 24 Aug 2021 20:19:11 +0200 Subject: [PATCH 07/14] chore: Split test and lint scripts (#297) --- .github/workflows/test-node.js.yml | 4 +- package-lock.json | 436 ----------------------------- package.json | 10 +- 3 files changed, 6 insertions(+), 444 deletions(-) diff --git a/.github/workflows/test-node.js.yml b/.github/workflows/test-node.js.yml index 365cb2247..b1858e733 100644 --- a/.github/workflows/test-node.js.yml +++ b/.github/workflows/test-node.js.yml @@ -28,4 +28,6 @@ jobs: uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - - run: npm cit + - run: npm ci --no-audit + - run: npm run test + - run: npm run lint diff --git a/package-lock.json b/package-lock.json index 5b196e84a..8325ef9a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1922,15 +1922,6 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2026,50 +2017,6 @@ "ansi-colors": "^4.1.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2726,12 +2673,6 @@ "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2750,12 +2691,6 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -2958,18 +2893,6 @@ } } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "dev": true - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2979,21 +2902,6 @@ "binary-extensions": "^2.0.0" } }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -3012,12 +2920,6 @@ "has": "^1.0.3" } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3061,12 +2963,6 @@ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, "is-npm": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", @@ -3079,12 +2975,6 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true - }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -3103,37 +2993,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3845,12 +3710,6 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -3921,36 +3780,6 @@ "type-check": "~0.4.0" } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4052,12 +3881,6 @@ "tmpl": "1.0.x" } }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4169,12 +3992,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -4237,26 +4054,6 @@ "abbrev": "1" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4269,96 +4066,6 @@ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -4380,24 +4087,6 @@ "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4540,15 +4229,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -4561,18 +4241,6 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -4923,12 +4591,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -5019,38 +4681,6 @@ } } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -5114,37 +4744,6 @@ "strip-ansi": "^6.0.0" } }, - "string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5420,18 +5019,6 @@ "is-typedarray": "^1.0.0" } }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "undefsafe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", @@ -5592,16 +5179,6 @@ "source-map": "^0.7.3" } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -5685,19 +5262,6 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", diff --git a/package.json b/package.json index 83928aca5..0af6c9d74 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,10 @@ "lib" ], "scripts": { - "lint": "npm-run-all lint:eslint", - "lint:eslint": "eslint lib test", - "start": "nodemon --watch package.json --watch lib --watch test --exec 'npm --silent run test'", + "lint": "eslint lib test", + "start": "nodemon --watch package.json --watch lib --watch test --exec 'npm --silent run test && npm --silent run lint'", "stryker": "stryker run", - "test": "npm-run-all test:unit lint", - "test:unit": "npm-run-all test:jest", - "test:jest": "jest" + "test": "jest" }, "engines": { "node": ">=10.0.0" @@ -48,7 +45,6 @@ "get-stream": "^6.0.1", "jest": "^27.0.6", "nodemon": "^2.0.12", - "npm-run-all": "^4.1.5", "prettier": "^2.3.2", "xmltest": "^1.5.0", "yauzl": "^2.10.0" From 283355a3e75b671dbc5e73153196a340e3329298 Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Tue, 24 Aug 2021 21:50:33 +0200 Subject: [PATCH 08/14] test: Fix stryker config (#300) Co-authored-by: Chris Brody --- stryker.conf.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stryker.conf.json b/stryker.conf.json index 640ea8df7..93926b7f9 100644 --- a/stryker.conf.json +++ b/stryker.conf.json @@ -14,7 +14,7 @@ }, "coverageAnalysis": "off", "commandRunner": { - "command": "npm run test:jest -- --bail --no-cache --ci --maxWorkers=1" + "command": "npm test -- --bail --no-cache --ci --maxWorkers=1" }, "timeoutMS_comment": "When all tests pass (mutant survives) our tests need some time. So this is configured to prevent 'timeout's", "timeoutMS": 15000 From dc429ae2ebd09e2fa3380c4a9b292d1164898f02 Mon Sep 17 00:00:00 2001 From: Chris Brody Date: Tue, 24 Aug 2021 16:46:11 -0400 Subject: [PATCH 09/14] refactor: Improve exports & require statements (#233) --- lib/dom-parser.js | 26 +++++++++++++++++-------- lib/index.js | 4 ++++ package.json | 2 +- test/dom-parser.test.js | 2 +- test/dom/attr.test.js | 2 +- test/dom/clone.test.js | 2 +- test/dom/element.test.js | 6 +----- test/dom/fragment.test.js | 2 +- test/dom/ns-test.test.js | 2 +- test/dom/serializer.test.js | 3 +-- test/error/error-handler.test.js | 2 +- test/error/reported-levels.test.js | 2 +- test/parse/big-file-performance.test.js | 2 +- test/parse/file.test.js | 2 +- test/parse/locator.test.js | 2 +- test/parse/namespace.test.js | 2 +- test/parse/node.test.js | 2 +- test/parse/parse-element.test.js | 2 +- test/xss.test.js | 2 +- 19 files changed, 39 insertions(+), 30 deletions(-) create mode 100644 lib/index.js diff --git a/lib/dom-parser.js b/lib/dom-parser.js index 3c08501a3..47082dc7b 100644 --- a/lib/dom-parser.js +++ b/lib/dom-parser.js @@ -1,8 +1,15 @@ var conventions = require("./conventions"); +var dom = require('./dom') var entities = require('./entities'); +var sax = require('./sax'); + +var DOMImplementation = dom.DOMImplementation; var NAMESPACE = conventions.NAMESPACE; +var ParseError = sax.ParseError; +var XMLReader = sax.XMLReader; + function DOMParser(options){ this.options = options ||{locator:{}}; } @@ -246,12 +253,15 @@ function appendElement (hander,node) { } }//appendChild and setAttributeNS are preformance key -//if(typeof require == 'function'){ -var sax = require('./sax'); -var XMLReader = sax.XMLReader; -var ParseError = sax.ParseError; -var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation; -exports.XMLSerializer = require('./dom').XMLSerializer ; -exports.DOMParser = DOMParser; exports.__DOMHandler = DOMHandler; -//} +exports.DOMParser = DOMParser; + +/** + * @deprecated Import/require from main entry point instead + */ +exports.DOMImplementation = dom.DOMImplementation; + +/** + * @deprecated Import/require from main entry point instead + */ +exports.XMLSerializer = dom.XMLSerializer; diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 000000000..df827f6f8 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,4 @@ +var dom = require('./dom') +exports.DOMImplementation = dom.DOMImplementation +exports.XMLSerializer = dom.XMLSerializer +exports.DOMParser = require('./dom-parser').DOMParser diff --git a/package.json b/package.json index 0af6c9d74..85c132674 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "type": "git", "url": "git://github.com/xmldom/xmldom.git" }, - "main": "lib/dom-parser.js", + "main": "lib/index.js", "types": "index.d.ts", "files": [ "CHANGELOG.md", diff --git a/test/dom-parser.test.js b/test/dom-parser.test.js index e31aa185b..009929444 100644 --- a/test/dom-parser.test.js +++ b/test/dom-parser.test.js @@ -1,6 +1,6 @@ 'use strict' -const { DOMParser } = require('../lib/dom-parser') +const { DOMParser } = require('../lib') describe('DOMParser', () => { describe('constructor', () => { diff --git a/test/dom/attr.test.js b/test/dom/attr.test.js index 769ead578..d0c8e0cbf 100644 --- a/test/dom/attr.test.js +++ b/test/dom/attr.test.js @@ -1,5 +1,5 @@ 'use strict' -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') const { DOMException } = require('../../lib/dom') describe('XML attrs', () => { diff --git a/test/dom/clone.test.js b/test/dom/clone.test.js index 698e75674..9b0a32539 100644 --- a/test/dom/clone.test.js +++ b/test/dom/clone.test.js @@ -1,6 +1,6 @@ 'use strict' -const { DOMParser, XMLSerializer } = require('../../lib/dom-parser') +const { DOMParser, XMLSerializer } = require('../../lib') describe('XML Namespace Parse', () => { it('can properly set clone', () => { diff --git a/test/dom/element.test.js b/test/dom/element.test.js index 1663571bd..7e59b669f 100644 --- a/test/dom/element.test.js +++ b/test/dom/element.test.js @@ -1,10 +1,6 @@ 'use strict' -const { - DOMParser, - DOMImplementation, - XMLSerializer, -} = require('../../lib/dom-parser') +const { DOMParser, DOMImplementation, XMLSerializer } = require('../../lib') describe('Document', () => { // See: http://jsfiddle.net/bigeasy/ShcXP/1/ diff --git a/test/dom/fragment.test.js b/test/dom/fragment.test.js index d584fc7ce..a5463c137 100644 --- a/test/dom/fragment.test.js +++ b/test/dom/fragment.test.js @@ -1,6 +1,6 @@ 'use strict' -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') describe('DOM DocumentFragment', () => { // see: http://jsfiddle.net/9Wmh2/1/ diff --git a/test/dom/ns-test.test.js b/test/dom/ns-test.test.js index 5ad560e6d..5d973d04a 100644 --- a/test/dom/ns-test.test.js +++ b/test/dom/ns-test.test.js @@ -1,6 +1,6 @@ 'use strict' -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') // Create a Test Suite describe('XML Namespace Parse', () => { diff --git a/test/dom/serializer.test.js b/test/dom/serializer.test.js index 1e5e98f13..f9c47be44 100644 --- a/test/dom/serializer.test.js +++ b/test/dom/serializer.test.js @@ -1,7 +1,6 @@ 'use strict' -const { DOMParser } = require('../../lib/dom-parser') -const { XMLSerializer } = require('../../lib/dom') +const { DOMParser, XMLSerializer } = require('../../lib') const { MIME_TYPE } = require('../../lib/conventions') describe('XML Serializer', () => { diff --git a/test/error/error-handler.test.js b/test/error/error-handler.test.js index 8c4f50bfc..b30a4c285 100644 --- a/test/error/error-handler.test.js +++ b/test/error/error-handler.test.js @@ -1,6 +1,6 @@ 'use strict' -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') const { REPORTED } = require('./reported') describe('custom errorHandler', () => { diff --git a/test/error/reported-levels.test.js b/test/error/reported-levels.test.js index f15fdd6ec..ae712268e 100644 --- a/test/error/reported-levels.test.js +++ b/test/error/reported-levels.test.js @@ -3,7 +3,7 @@ const { LINE_TO_ERROR_INDEX, REPORTED } = require('./reported') const { getTestParser } = require('../get-test-parser') const { ParseError } = require('../../lib/sax') -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') describe.each(Object.entries(REPORTED))( '%s', diff --git a/test/parse/big-file-performance.test.js b/test/parse/big-file-performance.test.js index 22299eb5e..ee7cc76dd 100644 --- a/test/parse/big-file-performance.test.js +++ b/test/parse/big-file-performance.test.js @@ -1,6 +1,6 @@ /* eslint strict: off */ -const { XMLSerializer, DOMParser } = require('../../lib/dom-parser') +const { XMLSerializer, DOMParser } = require('../../lib') /* var DomJS = require('dom-js').DomJS try { diff --git a/test/parse/file.test.js b/test/parse/file.test.js index f04ece14e..2b787952e 100644 --- a/test/parse/file.test.js +++ b/test/parse/file.test.js @@ -2,7 +2,7 @@ const fs = require('fs') -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') describe('from file', () => { it('file-test1.xml', () => { diff --git a/test/parse/locator.test.js b/test/parse/locator.test.js index d15391b54..7d51ec35c 100644 --- a/test/parse/locator.test.js +++ b/test/parse/locator.test.js @@ -1,6 +1,6 @@ 'use strict' -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') const { getTestParser } = require('../get-test-parser') describe('DOMLocator', () => { diff --git a/test/parse/namespace.test.js b/test/parse/namespace.test.js index 48bc245e3..20f2b5f2a 100644 --- a/test/parse/namespace.test.js +++ b/test/parse/namespace.test.js @@ -1,6 +1,6 @@ 'use strict' -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') /** * Returns an array containing only one occurrence of every sting in `values` (like in a Set). diff --git a/test/parse/node.test.js b/test/parse/node.test.js index 9d7ff5796..1e70997cf 100644 --- a/test/parse/node.test.js +++ b/test/parse/node.test.js @@ -1,7 +1,7 @@ 'use strict' const { Node } = require('../../lib/dom') -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') const expectNeighbours = (first, second, ...nodes) => { expect(first.nextSibling).toStrictEqual(second) diff --git a/test/parse/parse-element.test.js b/test/parse/parse-element.test.js index f514a6e65..404b9cb7e 100644 --- a/test/parse/parse-element.test.js +++ b/test/parse/parse-element.test.js @@ -1,7 +1,7 @@ 'use strict' const { getTestParser } = require('../get-test-parser') -const { DOMParser } = require('../../lib/dom-parser') +const { DOMParser } = require('../../lib') describe('XML Node Parse', () => { describe('no attribute', () => { diff --git a/test/xss.test.js b/test/xss.test.js index e5fd71a25..e517e0383 100644 --- a/test/xss.test.js +++ b/test/xss.test.js @@ -1,6 +1,6 @@ 'use strict' -const { DOMParser } = require('../lib/dom-parser') +const { DOMParser } = require('../lib') const excludeTags = new RegExp( '^(?:' + From 566a8d43524565e85ce3ff34b77cca87f965e3aa Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Thu, 26 Aug 2021 06:09:24 +0200 Subject: [PATCH 10/14] fix: Add doctype when parsing from string (#301) * fix: Add doctype when parsing from string fixes https://github.com/xmldom/xmldom/issues/277 * Update test/parse/doctype.test.js Co-authored-by: Chris Brody * Update test/parse/doctype.test.js Co-authored-by: Chris Brody Co-authored-by: Chris Brody --- lib/dom-parser.js | 1 + lib/dom.js | 6 ++++++ test/dom/document.test.js | 12 ++++++++++++ test/dom/ns-test.test.js | 3 +-- test/parse/doctype.test.js | 27 +++++++++++++++++++++++++++ 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/lib/dom-parser.js b/lib/dom-parser.js index 47082dc7b..dfe635f57 100644 --- a/lib/dom-parser.js +++ b/lib/dom-parser.js @@ -177,6 +177,7 @@ DOMHandler.prototype = { var dt = impl.createDocumentType(name, publicId, systemId); this.locator && position(this.locator,dt) appendElement(this, dt); + this.doc.doctype = dt; } }, /** diff --git a/lib/dom.js b/lib/dom.js index 00d9616be..2ecfd432b 100644 --- a/lib/dom.js +++ b/lib/dom.js @@ -689,6 +689,12 @@ Document.prototype = { //implementation : null, nodeName : '#document', nodeType : DOCUMENT_NODE, + /** + * The DocumentType node of the document. + * + * @readonly + * @type DocumentType + */ doctype : null, documentElement : null, _inc : 1, diff --git a/test/dom/document.test.js b/test/dom/document.test.js index e25133760..58dd31636 100644 --- a/test/dom/document.test.js +++ b/test/dom/document.test.js @@ -1,6 +1,7 @@ 'use strict' const { getTestParser } = require('../get-test-parser') +const { DOMImplementation } = require('../../lib/dom') const INPUT = (first = '', second = '', third = '', fourth = '') => ` @@ -71,4 +72,15 @@ describe('Document.prototype', () => { }) }) }) + describe('doctype', () => { + it('should be added when passed to createDocument', () => { + const impl = new DOMImplementation() + const doctype = impl.createDocumentType('name') + const doc = impl.createDocument(null, undefined, doctype) + + expect(doc.doctype === doctype).toBe(true) + expect(doctype.ownerDocument === doc).toBe(true) + expect(doc.firstChild === doctype).toBe(true) + }) + }) }) diff --git a/test/dom/ns-test.test.js b/test/dom/ns-test.test.js index 5d973d04a..5cad635a8 100644 --- a/test/dom/ns-test.test.js +++ b/test/dom/ns-test.test.js @@ -21,8 +21,7 @@ describe('XML Namespace Parse', () => { ) }) - //ignore default prefix xml attribute - it('test', () => { + it('should ignore default prefix xml attribute', () => { const w3 = 'http://www.w3.org/1999/xhtml' const n1 = 'http://www.frankston.com/public' const n2 = 'http://rmf.vc/n2' diff --git a/test/parse/doctype.test.js b/test/parse/doctype.test.js index 70d81f475..ec11aceba 100644 --- a/test/parse/doctype.test.js +++ b/test/parse/doctype.test.js @@ -1,6 +1,8 @@ 'use strict' const { getTestParser } = require('../get-test-parser') +const { MIME_TYPE } = require('../../lib/conventions') + describe('doctype', () => { describe.each(['SYSTEM', 'PUBLIC'])('%s', (idType) => { test.each([ @@ -24,4 +26,29 @@ describe('doctype', () => { } ) }) + + describe('sets Document.doctype', () => { + it('should set it for XML documents', () => { + const { parser } = getTestParser() + const doc = parser.parseFromString('') + + expect(doc.doctype).toBeTruthy() + expect(doc.doctype.ownerDocument === doc).toBe(true) + expect(doc.firstChild === doc.doctype).toBe(true) + expect(doc.childNodes.length).toBe(2) + + }) + it('should set it for HTML documents', () => { + const { parser } = getTestParser() + const doc = parser.parseFromString( + '', + MIME_TYPE.HTML + ) + + expect(doc.doctype).toBeTruthy() + expect(doc.doctype.ownerDocument === doc).toBe(true) + expect(doc.firstChild === doc.doctype).toBe(true) + expect(doc.childNodes.length).toBe(2) + }) + }) }) From 64647d18ad1905206d3d68dba8a8f8a0b4af6089 Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Thu, 26 Aug 2021 07:29:03 +0200 Subject: [PATCH 11/14] style: Fix lint error --- test/parse/doctype.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/parse/doctype.test.js b/test/parse/doctype.test.js index ec11aceba..8dd4930eb 100644 --- a/test/parse/doctype.test.js +++ b/test/parse/doctype.test.js @@ -36,7 +36,6 @@ describe('doctype', () => { expect(doc.doctype.ownerDocument === doc).toBe(true) expect(doc.firstChild === doc.doctype).toBe(true) expect(doc.childNodes.length).toBe(2) - }) it('should set it for HTML documents', () => { const { parser } = getTestParser() From cc097e5774e6ab16709fd818c8c2af3cbc8cc5e8 Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Fri, 27 Aug 2021 22:52:54 +0200 Subject: [PATCH 12/14] ci: Execute stryker:dry-run on branches (#302) Dry run works by passing a glob that matches no file. Additionally we reduce the reporters since there is nothing to report anyways. We decided to go for a CLI approach instead of a separate config file, since there is no way to extend config files, and we would like to avoid any need to keep the two files in sync. https://github.com/stryker-mutator/stryker-js/issues/3088 Co-authored-by: Christian Bewernitz Co-authored-by: Christopher J. Brody --- .github/workflows/stryker.yml | 11 ++++++++++- package.json | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/stryker.yml b/.github/workflows/stryker.yml index c91f79332..b5f594d62 100644 --- a/.github/workflows/stryker.yml +++ b/.github/workflows/stryker.yml @@ -6,6 +6,8 @@ name: run Stryker - Node.js CI on: push: branches: [ master ] + pull_request: + branches: [ master ] jobs: build: @@ -23,6 +25,13 @@ jobs: with: node-version: ${{ matrix.node-version }} - run: npm ci - - run: npm run stryker + + - if: ${{ github.event_name == 'pull_request' }} + # on pr branches we only do a dry-run that doesn't mutate anything but checks the configuration works + run: npm run stryker:dry-run + + - if: ${{ github.event_name == 'push' }} + # on the default branch we run the full suite wich takes > 1 hour to run + run: npm run stryker env: STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} diff --git a/package.json b/package.json index 85c132674..097dd8e18 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "lint": "eslint lib test", "start": "nodemon --watch package.json --watch lib --watch test --exec 'npm --silent run test && npm --silent run lint'", "stryker": "stryker run", + "stryker:dry-run": "stryker run -m '' --reporters progress", "test": "jest" }, "engines": { From 5a8b1edc02d7429cb5bdbe5bb657beb46e7ad03b Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Sat, 28 Aug 2021 07:18:47 +0200 Subject: [PATCH 13/14] docs: Prepare CHANGELOG for 0.7.3 (#308) --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cdef06c8d..e4d5c0e23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,32 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.7.3 + +[Commits](https://github.com/xmldom/xmldom/compare/0.7.2...0.7.3) + +### Fixes: + +- Add doctype when parsing from string [`#277`](https://github.com/xmldom/xmldom/issues/277) / [`#301`](https://github.com/xmldom/xmldom/pull/301) +- Correct typo in error message [`#294`](https://github.com/xmldom/xmldom/pull/294) + Thank you [@rrthomas](https://github.com/rrthomas) + +### Refactor: + +- Improve exports & require statements, new main package entry [`#233`](https://github.com/xmldom/xmldom/pull/233) + +### Docs: + +- Fix Stryker badge [`#298`](https://github.com/xmldom/xmldom/pull/298) +- Fix link to help-wanted issues [`#299`](https://github.com/xmldom/xmldom/pull/299) + +### Chore: + +- Execute stryker:dry-run on branches [`#302`](https://github.com/xmldom/xmldom/pull/302) +- Fix stryker config [`#300`](https://github.com/xmldom/xmldom/pull/300) +- Split test and lint scripts [`#297`](https://github.com/xmldom/xmldom/pull/297) +- Switch to stryker dashboard owned by org [`#292`](https://github.com/xmldom/xmldom/pull/292) + ## 0.7.2 [Commits](https://github.com/xmldom/xmldom/compare/0.7.1...0.7.2) From 8333dfc82a6d782d691e927876aeac6fc5186977 Mon Sep 17 00:00:00 2001 From: Christian Bewernitz Date: Sat, 28 Aug 2021 07:23:13 +0200 Subject: [PATCH 14/14] 0.7.3 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8325ef9a6..377628807 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@xmldom/xmldom", - "version": "0.7.2", + "version": "0.7.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 097dd8e18..f684e342b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@xmldom/xmldom", - "version": "0.7.2", + "version": "0.7.3", "description": "A pure JavaScript W3C standard-based (XML DOM Level 2 Core) DOMParser and XMLSerializer module.", "keywords": [ "w3c",