Update Stylelint and Postcss
R=jacktfranklin@chromium.org
Bug: none
Change-Id: I961be18530d3ccbc4efed0c2cda9bd603b14e27b
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3372931
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
Commit-Queue: Tim Van der Lippe <tvanderlippe@chromium.org>
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
index 46cb43e..222ddce 100644
--- a/node_modules/.package-lock.json
+++ b/node_modules/.package-lock.json
@@ -1752,6 +1752,12 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
+ "node_modules/colord": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz",
+ "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
+ "dev": true
+ },
"node_modules/colorette": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
@@ -4553,9 +4559,9 @@
}
},
"node_modules/known-css-properties": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.23.0.tgz",
- "integrity": "sha512-h9ivI88e1lFNmTT4HovBN33Ysn0OIJG7IPG2mkpx2uniQXFWqo35QdiX7w0TovlUFXfW8aPFblP5/q0jlOr2sA==",
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz",
+ "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==",
"dev": true
},
"node_modules/levn": {
@@ -4625,12 +4631,6 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
- },
"node_modules/lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
@@ -5720,14 +5720,14 @@
}
},
"node_modules/postcss": {
- "version": "8.3.11",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz",
- "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==",
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
+ "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
"dev": true,
"dependencies": {
"nanoid": "^3.1.30",
"picocolors": "^1.0.0",
- "source-map-js": "^0.6.2"
+ "source-map-js": "^1.0.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -5766,9 +5766,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
- "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "version": "6.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz",
+ "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -6399,6 +6399,9 @@
},
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/slice-ansi/node_modules/ansi-styles": {
@@ -6411,6 +6414,9 @@
},
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/slice-ansi/node_modules/color-convert": {
@@ -6504,9 +6510,9 @@
}
},
"node_modules/source-map-js": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
- "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
+ "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -6754,14 +6760,15 @@
"dev": true
},
"node_modules/stylelint": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.0.1.tgz",
- "integrity": "sha512-ZcAkmFLVCultmwkQUjxKzxW/o5+CzNmDk6TPJj/d4Y7ipTGGrewIWmNm+InjdSr04PR5/yynsAJeYJY/wisdMg==",
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.2.0.tgz",
+ "integrity": "sha512-i0DrmDXFNpDsWiwx6SPRs4/pyw4kvZgqpDGvsTslQMY7hpUl6r33aQvNSn6cnTg2wtZ9rreFElI7XAKpOWi1vQ==",
"dev": true,
"dependencies": {
"balanced-match": "^2.0.0",
+ "colord": "^2.9.2",
"cosmiconfig": "^7.0.1",
- "debug": "^4.3.2",
+ "debug": "^4.3.3",
"execall": "^2.0.0",
"fast-glob": "^3.2.7",
"fastest-levenshtein": "^1.0.12",
@@ -6771,11 +6778,11 @@
"globby": "^11.0.4",
"globjoin": "^0.1.4",
"html-tags": "^3.1.0",
- "ignore": "^5.1.8",
+ "ignore": "^5.2.0",
"import-lazy": "^4.0.0",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.23.0",
+ "known-css-properties": "^0.24.0",
"mathml-tag-names": "^2.1.3",
"meow": "^9.0.0",
"micromatch": "^4.0.4",
@@ -6786,7 +6793,7 @@
"postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.0.6",
+ "postcss-selector-parser": "^6.0.7",
"postcss-value-parser": "^4.1.0",
"resolve-from": "^5.0.0",
"specificity": "^0.4.1",
@@ -6794,7 +6801,7 @@
"strip-ansi": "^6.0.1",
"style-search": "^0.1.0",
"svg-tags": "^1.0.0",
- "table": "^6.7.2",
+ "table": "^6.7.5",
"v8-compile-cache": "^2.3.0",
"write-file-atomic": "^3.0.3"
},
@@ -6819,9 +6826,9 @@
}
},
"node_modules/stylelint-config-standard": {
- "version": "23.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-23.0.0.tgz",
- "integrity": "sha512-8PDlk+nWuc1T66nVaODTdVodN0pjuE5TBlopi39Lt9EM36YJsRhqttMyUhnS78oc/59Q6n8iw2GJB4QcoFqtRg==",
+ "version": "24.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz",
+ "integrity": "sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw==",
"dev": true,
"dependencies": {
"stylelint-config-recommended": "^6.0.0"
@@ -7002,13 +7009,12 @@
}
},
"node_modules/table": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
- "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==",
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
+ "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
"dev": true,
"dependencies": {
"ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
"lodash.truncate": "^4.4.2",
"slice-ansi": "^4.0.0",
"string-width": "^4.2.3",
diff --git a/node_modules/colord/CHANGELOG.md b/node_modules/colord/CHANGELOG.md
new file mode 100644
index 0000000..d2c8c87
--- /dev/null
+++ b/node_modules/colord/CHANGELOG.md
@@ -0,0 +1,184 @@
+### 2.9.2
+
+- Fix: Add "package.json" to exports map
+
+### 2.9.1
+
+- Fix: Make minification lossless
+- Fix: Minify to name only if color is opaque
+
+### 2.9.0
+
+- New plugin: Color string minification 🗜
+
+### 2.8.0
+
+- New `delta` method to calculate the perceived color difference between two colors ❤️ [@EricRovell](https://github.com/EricRovell)
+
+### 2.7.0
+
+- Improve `mix` plugin by adding new `tints`, `tones` and `shades` methods ❤️ [@EricRovell](https://github.com/EricRovell)
+
+### 2.6.0
+
+- Support "double split complementary" color harmony generation ❤️ [@EricRovell](https://github.com/EricRovell) & [@lbragile](https://github.com/lbragile)
+
+### 2.5.0
+
+- New `closest` option of `toName` method allows you to find the closest color if there is no exact match
+
+### 2.4.0
+
+- New plugin: Color harmonies generator ❤️ [@EricRovell](https://github.com/EricRovell)
+
+### 2.3.0
+
+- Add new `isEqual` method ❤️ [@EricRovell](https://github.com/EricRovell)
+
+### 2.2.0
+
+- New plugin: CMYK color space ❤️ [@EricRovell](https://github.com/EricRovell)
+
+### 2.1.0
+
+- Add new `hue` and `rotate` methods
+
+### 2.0.1
+
+- Improve the precision of alpha values
+
+### 2.0.0
+
+- Strict string color parsing conforming to the CSS Color Level specifications
+
+### 1.7.2
+
+- Simplify package "exports" field to improve different environments support
+
+### 1.7.1
+
+- Parse a color name disregarding the case
+
+### 1.7.0
+
+- New `getFormat` utility
+- Support HWB color strings (CSS functional notation)
+- Clamp LAB values as defined in CSS Color Level 4 specs
+
+### 1.6.0
+
+- Improvement: You can now use every angle unit supported by CSS (`deg`, `rad`, `grad`, `turn`)
+
+### 1.5.0
+
+- New utility: Random color generation
+
+### 1.4.1
+
+- Mix colors through CIE LAB color space
+
+### 1.4.0
+
+- New plugin: Color mixing
+- Adjust XYZ, LAB and LCH conversions to the D50 white point ([according to the latest CSS specs](https://drafts.csswg.org/css-color-5/#color-spaces)).
+
+### 1.3.1
+
+- Support modern CSS notations of RGB, HSL and LCH color functions
+
+### 1.3.0
+
+- New plugin: CIE LCH color space
+
+### 1.2.1
+
+- Fix: Do not treat 7-digit hex as a valid color ❤️ [@subzey](https://github.com/subzey)
+- Parser update: Turn NaN input values into valid numbers ❤️ [@subzey](https://github.com/subzey)
+
+### 1.2.0
+
+- New plugin: CIE LAB color space
+
+### 1.1.1
+
+- Make bundle 1% lighter
+
+### 1.1.0
+
+- Add `isValid` method
+
+### 1.0
+
+- An official production-ready release
+
+### 0.10.2
+
+- Sort named colors dictionary for better compression ❤️ [@subzey](https://github.com/subzey)
+
+### 0.10.1
+
+- Ignore `null` input in the parsers
+
+### 0.10
+
+- Shorten conversion method names (`toRgba` to `toRgb`, etc)
+
+### 0.9.3
+
+- New plugin: HWB color model
+- More accurate HSL and HSV conversions
+
+### 0.9.2
+
+- Names plugin: Support "transparent" keyword
+
+### 0.9.1
+
+- Improve package exports
+
+### 0.9
+
+- Add CommonJS exports
+
+### 0.8
+
+- New plugin: a11y (Accessibility)
+
+### 0.7
+
+- New plugin: CIE XYZ color space
+
+### 0.6.2
+
+- 20% speed improvement ❤️ [@jeetiss](https://github.com/jeetiss)
+
+### 0.6.1
+
+- 100% code coverage
+
+### 0.6
+
+- Make plugin available in Parcel which doesn't support exports map yet
+- Fix names plugin TS declarations export
+- Documentation
+
+### 0.5
+
+- New plugin: CSS color names
+
+### 0.4
+
+- Make the library ESM-first
+- Add code coverage reports
+
+### 0.3
+
+- Implement Plugin API
+
+### 0.2
+
+- Support 4 and 8 digit Hex
+
+### 0.1
+
+- Basic API
diff --git a/node_modules/colord/LICENSE.md b/node_modules/colord/LICENSE.md
new file mode 100644
index 0000000..e437003
--- /dev/null
+++ b/node_modules/colord/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Vlad Shilov omgovich@ya.ru
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/colord/README.md b/node_modules/colord/README.md
new file mode 100644
index 0000000..db36c6a
--- /dev/null
+++ b/node_modules/colord/README.md
@@ -0,0 +1,1053 @@
+<div align="center">
+ <a href="https://colord.omgovich.ru/">
+ <img src="assets/logo.png" width="280" height="210" alt="colord" />
+ </a>
+</div>
+
+<div align="center">
+ <a href="https://npmjs.org/package/colord">
+ <img alt="npm" src="https://img.shields.io/npm/v/colord.svg?labelColor=dd3a5e&color=6ead0a" />
+ </a>
+ <a href="https://github.com/omgovich/colord/actions">
+ <img alt="build" src="https://img.shields.io/github/workflow/status/omgovich/colord/Node.js%20CI/master.svg?labelColor=dd3a5e&color=6ead0a" />
+ </a>
+ <a href="https://codecov.io/gh/omgovich/colord">
+ <img alt="coverage" src="https://img.shields.io/codecov/c/github/omgovich/colord.svg?labelColor=dd3a5e&color=6ead0a" />
+ </a>
+ <a href="https://npmjs.org/package/colord">
+ <img alt="no dependencies" src="https://badgen.net/bundlephobia/dependency-count/colord?labelColor=dd3a5e&color=6ead0a" />
+ </a>
+ <a href="https://npmjs.org/package/colord">
+ <img alt="types included" src="https://badgen.net/npm/types/colord?labelColor=dd3a5e&color=6ead0a" />
+ </a>
+</div>
+
+<div align="center">
+ <strong>Colord</strong> is a tiny yet powerful tool for high-performance color manipulations and conversions.
+</div>
+
+## Features
+
+- 📦 **Small**: Just **1.7 KB** gzipped ([3x+ lighter](#benchmarks) than **color** and **tinycolor2**)
+- 🚀 **Fast**: [3x+ faster](#benchmarks) than **color** and **tinycolor2**
+- 😍 **Simple**: Chainable API and familiar patterns
+- 💪 **Immutable**: No need to worry about data mutations
+- 🛡 **Bulletproof**: Written in strict TypeScript and has 100% test coverage
+- 🗂 **Typed**: Ships with [types included](#types)
+- 🏗 **Extendable**: Built-in [plugin system](#plugins) to add new functionality
+- 📚 **CSS-compliant**: Strictly follows CSS Color Level specifications
+- 👫 **Works everywhere**: Supports all browsers and Node.js
+- 💨 **Dependency-free**
+
+<div><img src="assets/divider.png" width="838" alt="---" /></div>
+
+## Benchmarks
+
+| Library | <nobr>Operations/sec</nobr> | Size<br /> (minified) | Size<br /> (gzipped) | Dependencies | Type declarations |
+| ----------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
+| <nobr><b>colord 👑</b></nobr> | <nobr><b>3,524,989</b></nobr> | [](https://bundlephobia.com/result?p=colord) | [](https://bundlephobia.com/result?p=colord) | [](https://bundlephobia.com/result?p=colord) | [](https://bundlephobia.com/result?p=colord) |
+| color | 744,263 | [](https://bundlephobia.com/result?p=color) | [](https://bundlephobia.com/result?p=color) | [](https://bundlephobia.com/result?p=color) | [](https://bundlephobia.com/result?p=color) |
+| tinycolor2 | 971,312 | [](https://bundlephobia.com/result?p=tinycolor2) | [](https://bundlephobia.com/result?p=tinycolor2) | [](https://bundlephobia.com/result?p=tinycolor2) | [](https://bundlephobia.com/result?p=tinycolor2) |
+| ac-colors | 660,722 | [](https://bundlephobia.com/result?p=ac-colors) | [](https://bundlephobia.com/result?p=ac-colors) | [](https://bundlephobia.com/result?p=ac-colors) | [](https://bundlephobia.com/result?p=ac-colors) |
+| chroma-js | 962,967 | [](https://bundlephobia.com/result?p=chroma-js) | [](https://bundlephobia.com/result?p=chroma-js) | [](https://bundlephobia.com/result?p=chroma-js) | [](https://bundlephobia.com/result?p=chroma-js) |
+
+The performance results were generated on a MBP 2019, 2,6 GHz Intel Core i7 by running `npm run benchmark` in the library folder. See [tests/benchmark.ts](https://github.com/omgovich/colord/blob/master/tests/benchmark.ts).
+
+<div><img src="assets/divider.png" width="838" alt="---" /></div>
+
+## Getting Started
+
+```
+npm i colord
+```
+
+```js
+import { colord } from "colord";
+
+colord("#ff0000").grayscale().alpha(0.25).toRgbString(); // "rgba(128, 128, 128, 0.25)"
+colord("rgb(192, 192, 192)").isLight(); // true
+colord("hsl(0, 50%, 50%)").darken(0.25).toHex(); // "#602020"
+```
+
+<div><img src="assets/divider.png" width="838" alt="---" /></div>
+
+## Supported Color Models
+
+- Hexadecimal strings (including 3, 4 and 8 digit notations)
+- RGB strings and objects
+- HSL strings and objects
+- HSV objects
+- Color names ([via plugin](#plugins))
+- HWB objects and strings ([via plugin](#plugins))
+- CMYK objects and strings ([via plugin](#plugins))
+- LCH objects and strings ([via plugin](#plugins))
+- LAB objects ([via plugin](#plugins))
+- XYZ objects ([via plugin](#plugins))
+
+<div><img src="assets/divider.png" width="838" alt="---" /></div>
+
+## API
+
+### Color parsing
+
+<details>
+ <summary><b><code>colord(input)</code></b></summary>
+
+Parses the given input and creates a new Colord instance. String parsing strictly conforms to [CSS Color Level Specifications](https://www.w3.org/TR/css-color-4/#color-type).
+
+```js
+import { colord } from "colord";
+
+// String input examples
+colord("#FFF");
+colord("#ffffff");
+colord("#ffffffff");
+colord("rgb(255, 255, 255)");
+colord("rgba(255, 255, 255, 0.5)");
+colord("rgba(100% 100% 100% / 50%)");
+colord("hsl(90, 100%, 100%)");
+colord("hsla(90, 100%, 100%, 0.5)");
+colord("hsla(90deg 100% 100% / 50%)");
+colord("tomato"); // requires "names" plugin
+
+// Object input examples
+colord({ r: 255, g: 255, b: 255 });
+colord({ r: 255, g: 255, b: 255, a: 1 });
+colord({ h: 360, s: 100, l: 100 });
+colord({ h: 360, s: 100, l: 100, a: 1 });
+colord({ h: 360, s: 100, v: 100 });
+colord({ h: 360, s: 100, v: 100, a: 1 });
+```
+
+Check out the ["Plugins"](#plugins) section for more input format examples.
+
+</details>
+
+<details>
+ <summary><b><code>getFormat(input)</code></b></summary>
+
+Returns a color model name for the input passed to the function. Uses the same parsing system as `colord` function.
+
+```js
+import { getFormat } from "colord";
+
+getFormat("#aabbcc"); // "hex"
+getFormat({ r: 13, g: 237, b: 162, a: 0.5 }); // "rgb"
+getFormat("hsl(180deg, 50%, 50%)"); // "hsl"
+getFormat("WUT?"); // undefined
+```
+
+</details>
+
+### Color conversion
+
+<details>
+ <summary><b><code>.toHex()</code></b></summary>
+
+Returns the [hexadecimal representation](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#rgb_colors) of a color. When the alpha channel value of the color is less than 1, it outputs `#rrggbbaa` format instead of `#rrggbb`.
+
+```js
+colord("rgb(0, 255, 0)").toHex(); // "#00ff00"
+colord({ h: 300, s: 100, l: 50 }).toHex(); // "#ff00ff"
+colord({ r: 255, g: 255, b: 255, a: 0 }).toHex(); // "#ffffff00"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toRgb()</code></b></summary>
+
+```js
+colord("#ff0000").toRgb(); // { r: 255, g: 0, b: 0, a: 1 }
+colord({ h: 180, s: 100, l: 50, a: 0.5 }).toRgb(); // { r: 0, g: 255, b: 255, a: 0.5 }
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toRgbString()</code></b></summary>
+
+```js
+colord("#ff0000").toRgbString(); // "rgb(255, 0, 0)"
+colord({ h: 180, s: 100, l: 50, a: 0.5 }).toRgbString(); // "rgba(0, 255, 255, 0.5)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toHsl()</code></b></summary>
+
+Converts a color to [HSL color space](https://en.wikipedia.org/wiki/HSL_and_HSV) and returns an object.
+
+```js
+colord("#ffff00").toHsl(); // { h: 60, s: 100, l: 50, a: 1 }
+colord("rgba(0, 0, 255, 0.5) ").toHsl(); // { h: 240, s: 100, l: 50, a: 0.5 }
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toHslString()</code></b></summary>
+
+Converts a color to [HSL color space](https://en.wikipedia.org/wiki/HSL_and_HSV) and expresses it through the [functional notation](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#hsl_colors).
+
+```js
+colord("#ffff00").toHslString(); // "hsl(60, 100%, 50%)"
+colord("rgba(0, 0, 255, 0.5)").toHslString(); // "hsla(240, 100%, 50%, 0.5)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toHsv()</code></b></summary>
+
+Converts a color to [HSV color space](https://en.wikipedia.org/wiki/HSL_and_HSV) and returns an object.
+
+```js
+colord("#ffff00").toHsv(); // { h: 60, s: 100, v: 100, a: 1 }
+colord("rgba(0, 255, 255, 0.5) ").toHsv(); // { h: 180, s: 100, v: 100, a: 1 }
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toName(options?)</code></b> (<b>names</b> plugin)</summary>
+
+Converts a color to a [CSS keyword](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#color_keywords). Returns `undefined` if the color is not specified in the specs.
+
+```js
+import { colord, extend } from "colord";
+import namesPlugin from "colord/plugins/names";
+
+extend([namesPlugin]);
+
+colord("#ff6347").toName(); // "tomato"
+colord("#00ffff").toName(); // "cyan"
+colord("rgba(0, 0, 0, 0)").toName(); // "transparent"
+
+colord("#fe0000").toName(); // undefined (the color is not specified in CSS specs)
+colord("#fe0000").toName({ closest: true }); // "red" (closest color available)
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toCmyk()</code></b> (<b>cmyk</b> plugin)</summary>
+
+Converts a color to [CMYK](https://en.wikipedia.org/wiki/CMYK_color_model) color space.
+
+```js
+import { colord, extend } from "colord";
+import cmykPlugin from "colord/plugins/cmyk";
+
+extend([cmykPlugin]);
+
+colord("#ffffff").toCmyk(); // { c: 0, m: 0, y: 0, k: 0, a: 1 }
+colord("#555aaa").toCmyk(); // { c: 50, m: 47, y: 0, k: 33, a: 1 }
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toCmykString()</code></b> (<b>cmyk</b> plugin)</summary>
+
+Converts a color to color space.
+
+Converts a color to [CMYK](https://en.wikipedia.org/wiki/CMYK_color_model) color space and expresses it through the [functional notation](https://www.w3.org/TR/css-color-4/#device-cmyk)
+
+```js
+import { colord, extend } from "colord";
+import cmykPlugin from "colord/plugins/cmyk";
+
+extend([cmykPlugin]);
+
+colord("#99ffff").toCmykString(); // "device-cmyk(40% 0% 0% 0%)"
+colord("#00336680").toCmykString(); // "device-cmyk(100% 50% 0% 60% / 0.5)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toHwb()</code></b> (<b>hwb</b> plugin)</summary>
+
+Converts a color to [HWB (Hue-Whiteness-Blackness)](https://en.wikipedia.org/wiki/HWB_color_model) color space.
+
+```js
+import { colord, extend } from "colord";
+import hwbPlugin from "colord/plugins/hwb";
+
+extend([hwbPlugin]);
+
+colord("#ffffff").toHwb(); // { h: 0, w: 100, b: 0, a: 1 }
+colord("#555aaa").toHwb(); // { h: 236, w: 33, b: 33, a: 1 }
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toHwbString()</code></b> (<b>hwb</b> plugin)</summary>
+
+Converts a color to [HWB (Hue-Whiteness-Blackness)](https://en.wikipedia.org/wiki/HWB_color_model) color space and expresses it through the [functional notation](https://www.w3.org/TR/css-color-4/#the-hwb-notation).
+
+```js
+import { colord, extend } from "colord";
+import hwbPlugin from "colord/plugins/hwb";
+
+extend([hwbPlugin]);
+
+colord("#999966").toHwbString(); // "hwb(60 40% 40%)"
+colord("#99ffff").toHwbString(); // "hwb(180 60% 0%)"
+colord("#003366").alpha(0.5).toHwbString(); // "hwb(210 0% 60% / 0.5)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toLab()</code></b> (<b>lab</b> plugin)</summary>
+
+Converts a color to [CIE LAB](https://en.wikipedia.org/wiki/CIELAB_color_space) color space. The conversion logic is ported from [CSS Color Module Level 4 Specification](https://www.w3.org/TR/css-color-4/#color-conversion-code).
+
+```js
+import { colord, extend } from "colord";
+import labPlugin from "colord/plugins/lab";
+
+extend([labPlugin]);
+
+colord("#ffffff").toLab(); // { l: 100, a: 0, b: 0, alpha: 1 }
+colord("#33221180").toLab(); // { l: 14.89, a: 5.77, b: 14.41, alpha: 0.5 }
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toLch()</code></b> (<b>lch</b> plugin)</summary>
+
+Converts a color to [CIE LCH](https://lea.verou.me/2020/04/lch-colors-in-css-what-why-and-how/) color space. The conversion logic is ported from [CSS Color Module Level 4 Specification](https://www.w3.org/TR/css-color-4/#color-conversion-code).
+
+```js
+import { colord, extend } from "colord";
+import lchPlugin from "colord/plugins/lch";
+
+extend([lchPlugin]);
+
+colord("#ffffff").toLch(); // { l: 100, c: 0, h: 0, a: 1 }
+colord("#213b0b").toLch(); // { l: 21.85, c: 31.95, h: 127.77, a: 1 }
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toLchString()</code></b> (<b>lch</b> plugin)</summary>
+
+Converts a color to [CIE LCH](https://lea.verou.me/2020/04/lch-colors-in-css-what-why-and-how/) color space and expresses it through the [functional notation](https://www.w3.org/TR/css-color-4/#specifying-lab-lch).
+
+```js
+import { colord, extend } from "colord";
+import lchPlugin from "colord/plugins/lch";
+
+extend([lchPlugin]);
+
+colord("#ffffff").toLchString(); // "lch(100% 0 0)"
+colord("#213b0b").alpha(0.5).toLchString(); // "lch(21.85% 31.95 127.77 / 0.5)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.toXyz()</code></b> (<b>xyz</b> plugin)</summary>
+
+Converts a color to [CIE XYZ](https://www.sttmedia.com/colormodel-xyz) color space. The conversion logic is ported from [CSS Color Module Level 4 Specification](https://www.w3.org/TR/css-color-4/#color-conversion-code).
+
+```js
+import { colord, extend } from "colord";
+import xyzPlugin from "colord/plugins/xyz";
+
+extend([xyzPlugin]);
+
+colord("#ffffff").toXyz(); // { x: 95.047, y: 100, z: 108.883, a: 1 }
+```
+
+</details>
+
+### Color manipulation
+
+<details>
+ <summary><b><code>.alpha(value)</code></b></summary>
+
+Changes the alpha channel value and returns a new `Colord` instance.
+
+```js
+colord("rgb(0, 0, 0)").alpha(0.5).toRgbString(); // "rgba(0, 0, 0, 0.5)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.invert()</code></b></summary>
+
+Creates a new `Colord` instance containing an inverted (opposite) version of the color.
+
+```js
+colord("#ffffff").invert().toHex(); // "#000000"
+colord("#aabbcc").invert().toHex(); // "#554433"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.saturate(amount = 0.1)</code></b></summary>
+
+Increases the [HSL saturation](https://en.wikipedia.org/wiki/HSL_and_HSV) of a color by the given amount.
+
+```js
+colord("#bf4040").saturate(0.25).toHex(); // "#df2020"
+colord("hsl(0, 50%, 50%)").saturate(0.5).toHslString(); // "hsl(0, 100%, 50%)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.desaturate(amount = 0.1)</code></b></summary>
+
+Decreases the [HSL saturation](https://en.wikipedia.org/wiki/HSL_and_HSV) of a color by the given amount.
+
+```js
+colord("#df2020").saturate(0.25).toHex(); // "#bf4040"
+colord("hsl(0, 100%, 50%)").saturate(0.5).toHslString(); // "hsl(0, 50%, 50%)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.grayscale()</code></b></summary>
+
+Makes a gray color with the same lightness as a source color. Same as calling `desaturate(1)`.
+
+```js
+colord("#bf4040").grayscale().toHex(); // "#808080"
+colord("hsl(0, 100%, 50%)").grayscale().toHslString(); // "hsl(0, 0%, 50%)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.lighten(amount = 0.1)</code></b></summary>
+
+Increases the [HSL lightness](https://en.wikipedia.org/wiki/HSL_and_HSV) of a color by the given amount.
+
+```js
+colord("#000000").lighten(0.5).toHex(); // "#808080"
+colord("#223344").lighten(0.3).toHex(); // "#5580aa"
+colord("hsl(0, 50%, 50%)").lighten(0.5).toHslString(); // "hsl(0, 50%, 100%)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.darken(amount = 0.1)</code></b></summary>
+
+Decreases the [HSL lightness](https://en.wikipedia.org/wiki/HSL_and_HSV) of a color by the given amount.
+
+```js
+colord("#ffffff").darken(0.5).toHex(); // "#808080"
+colord("#5580aa").darken(0.3).toHex(); // "#223344"
+colord("hsl(0, 50%, 100%)").lighten(0.5).toHslString(); // "hsl(0, 50%, 50%)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.hue(value)</code></b></summary>
+
+Changes the hue value and returns a new `Colord` instance.
+
+```js
+colord("hsl(90, 50%, 50%)").hue(180).toHslString(); // "hsl(180, 50%, 50%)"
+colord("hsl(90, 50%, 50%)").hue(370).toHslString(); // "hsl(10, 50%, 50%)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.rotate(amount = 15)</code></b></summary>
+
+Increases the [HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) hue value of a color by the given amount.
+
+```js
+colord("hsl(90, 50%, 50%)").rotate(90).toHslString(); // "hsl(180, 50%, 50%)"
+colord("hsl(90, 50%, 50%)").rotate(-180).toHslString(); // "hsl(270, 50%, 50%)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.mix(color2, ratio = 0.5)</code></b> (<b>mix</b> plugin)</summary>
+
+Produces a mixture of two colors and returns the result of mixing them (new Colord instance).
+
+In contrast to other libraries that perform RGB values mixing, Colord mixes colors through [LAB color space](https://en.wikipedia.org/wiki/CIELAB_color_space). This approach produces better results and doesn't have the drawbacks the legacy way has.
+
+→ [Online demo](https://3cg7o.csb.app/)
+
+```js
+import { colord, extend } from "colord";
+import mixPlugin from "colord/plugins/mix";
+
+extend([mixPlugin]);
+
+colord("#ffffff").mix("#000000").toHex(); // "#777777"
+colord("#800080").mix("#dda0dd").toHex(); // "#af5cae"
+colord("#cd853f").mix("#eee8aa", 0.6).toHex(); // "#e3c07e"
+colord("#008080").mix("#808000", 0.35).toHex(); // "#50805d"
+```
+
+</details>
+
+<details>
+ <summary><b><code>.tints(count = 5)</code></b> (<b>mix</b> plugin)</summary>
+
+Provides functionality to generate [tints](https://en.wikipedia.org/wiki/Tints_and_shades) of a color. Returns an array of `Colord` instances, including the original color.
+
+```js
+import { colord, extend } from "colord";
+import mixPlugin from "colord/plugins/mix";
+
+extend([mixPlugin]);
+
+const color = colord("#ff0000");
+color.tints(3).map((c) => c.toHex()); // ["#ff0000", "#ff9f80", "#ffffff"];
+```
+
+</details>
+
+<details>
+ <summary><b><code>.shades(count = 5)</code></b> (<b>mix</b> plugin)</summary>
+
+Provides functionality to generate [shades](https://en.wikipedia.org/wiki/Tints_and_shades) of a color. Returns an array of `Colord` instances, including the original color.
+
+```js
+import { colord, extend } from "colord";
+import mixPlugin from "colord/plugins/mix";
+
+extend([mixPlugin]);
+
+const color = colord("#ff0000");
+color.shades(3).map((c) => c.toHex()); // ["#ff0000", "#7a1b0b", "#000000"];
+```
+
+</details>
+
+<details>
+ <summary><b><code>.tones(count = 5)</code></b> (<b>mix</b> plugin)</summary>
+
+Provides functionality to generate [tones](https://en.wikipedia.org/wiki/Tints_and_shades) of a color. Returns an array of `Colord` instances, including the original color.
+
+```js
+import { colord, extend } from "colord";
+import mixPlugin from "colord/plugins/mix";
+
+extend([mixPlugin]);
+
+const color = colord("#ff0000");
+color.tones(3).map((c) => c.toHex()); // ["#ff0000", "#c86147", "#808080"];
+```
+
+</details>
+
+<details>
+ <summary><b><code>.harmonies(type = "complementary")</code></b> (<b>harmonies</b> plugin)</summary>
+
+Provides functionality to generate [harmony colors](<https://en.wikipedia.org/wiki/Harmony_(color)>). Returns an array of `Colord` instances.
+
+```js
+import { colord, extend } from "colord";
+import harmoniesPlugin from "colord/plugins/harmonies";
+
+extend([harmoniesPlugin]);
+
+const color = colord("#ff0000");
+color.harmonies("analogous").map((c) => c.toHex()); // ["#ff0080", "#ff0000", "#ff8000"]
+color.harmonies("complementary").map((c) => c.toHex()); // ["#ff0000", "#00ffff"]
+color.harmonies("double-split-complementary").map((c) => c.toHex()); // ["#ff0080", "#ff0000", "#ff8000", "#00ff80", "#0080ff"]
+color.harmonies("rectangle").map((c) => c.toHex()); // ["#ff0000", "#ffff00", "#00ffff", "#0000ff"]
+color.harmonies("split-complementary").map((c) => c.toHex()); // ["#ff0000", "#00ff80", "#0080ff"]
+color.harmonies("tetradic").map((c) => c.toHex()); // ["#ff0000", "#80ff00", "#00ffff", "#8000ff"]
+color.harmonies("triadic").map((c) => c.toHex()); // ["#ff0000", "#00ff00", "#0000ff"]
+```
+
+</details>
+
+### Color analysis
+
+<details>
+ <summary><b><code>.isValid()</code></b></summary>
+
+Returns a boolean indicating whether or not an input has been parsed successfully.
+Note: If parsing is unsuccessful, Colord defaults to black (does not throws an error).
+
+```js
+colord("#ffffff").isValid(); // true
+colord("#wwuutt").isValid(); // false
+colord("abracadabra").isValid(); // false
+colord({ r: 0, g: 0, b: 0 }).isValid(); // true
+colord({ r: 0, g: 0, v: 0 }).isValid(); // false
+```
+
+</details>
+
+<details>
+ <summary><b><code>.isEqual(color2)</code></b></summary>
+
+Determines whether two values are the same color.
+
+```js
+colord("#000000").isEqual("rgb(0, 0, 0)"); // true
+colord("#000000").isEqual("rgb(255, 255, 255)"); // false
+```
+
+</details>
+
+<details>
+ <summary><b><code>.alpha()</code></b></summary>
+
+```js
+colord("#ffffff").alpha(); // 1
+colord("rgba(50, 100, 150, 0.5)").alpha(); // 0.5
+```
+
+</details>
+
+<details>
+ <summary><b><code>.hue()</code></b></summary>
+
+```js
+colord("hsl(90, 50%, 50%)").hue(); // 90
+colord("hsl(-10, 50%, 50%)").hue(); // 350
+```
+
+</details>
+
+<details>
+ <summary><b><code>.brightness()</code></b></summary>
+
+Returns the brightness of a color (from 0 to 1). The calculation logic is modified from [Web Content Accessibility Guidelines](https://www.w3.org/TR/AERT/#color-contrast).
+
+```js
+colord("#000000").brightness(); // 0
+colord("#808080").brightness(); // 0.5
+colord("#ffffff").brightness(); // 1
+```
+
+</details>
+
+<details>
+ <summary><b><code>.isLight()</code></b></summary>
+
+Same as calling `brightness() >= 0.5`.
+
+```js
+colord("#111111").isLight(); // false
+colord("#aabbcc").isLight(); // true
+colord("#ffffff").isLight(); // true
+```
+
+</details>
+
+<details>
+ <summary><b><code>.isDark()</code></b></summary>
+
+Same as calling `brightness() < 0.5`.
+
+```js
+colord("#111111").isDark(); // true
+colord("#aabbcc").isDark(); // false
+colord("#ffffff").isDark(); // false
+```
+
+</details>
+
+<details>
+ <summary><b><code>.luminance()</code></b> (<b>a11y</b> plugin)</summary>
+
+Returns the relative luminance of a color, normalized to 0 for darkest black and 1 for lightest white as defined by [WCAG 2.0](https://www.w3.org/TR/WCAG20/#relativeluminancedef).
+
+```js
+colord("#000000").luminance(); // 0
+colord("#808080").luminance(); // 0.22
+colord("#ccddee").luminance(); // 0.71
+colord("#ffffff").luminance(); // 1
+```
+
+</details>
+
+<details>
+ <summary><b><code>.contrast(color2 = "#FFF")</code></b> (<b>a11y</b> plugin)</summary>
+
+Calculates a contrast ratio for a color pair. This luminance difference is expressed as a ratio ranging from 1 (e.g. white on white) to 21 (e.g., black on a white). [WCAG Accessibility Level AA requires](https://webaim.org/articles/contrast/) a ratio of at least 4.5 for normal text and 3 for large text.
+
+```js
+colord("#000000").contrast(); // 21 (black on white)
+colord("#ffffff").contrast("#000000"); // 21 (white on black)
+colord("#777777").contrast(); // 4.47 (gray on white)
+colord("#ff0000").contrast(); // 3.99 (red on white)
+colord("#0000ff").contrast("#ff000"); // 2.14 (blue on red)
+```
+
+</details>
+
+<details>
+ <summary><b><code>.isReadable(color2 = "#FFF", options?)</code></b> (<b>a11y</b> plugin)</summary>
+
+Checks that a background and text color pair is readable according to [WCAG 2.0 Contrast and Color Requirements](https://webaim.org/articles/contrast/).
+
+```js
+colord("#000000").isReadable(); // true (normal black text on white bg conforms to WCAG AA)
+colord("#777777").isReadable(); // false (normal gray text on white bg conforms to WCAG AA)
+colord("#ffffff").isReadable("#000000"); // true (normal white text on black bg conforms to WCAG AA)
+colord("#e60000").isReadable("#ffff47"); // true (normal red text on yellow bg conforms to WCAG AA)
+colord("#e60000").isReadable("#ffff47", { level: "AAA" }); // false (normal red text on yellow bg does not conform to WCAG AAA)
+colord("#e60000").isReadable("#ffff47", { level: "AAA", size: "large" }); // true (large red text on yellow bg conforms to WCAG AAA)
+```
+
+</details>
+
+<details>
+ <summary><b><code>.delta(color2 = "#FFF")</code></b> (<b>lab</b> plugin)</summary>
+
+Calculates the perceived color difference between two colors.
+The difference calculated according to [Delta E2000](https://en.wikipedia.org/wiki/Color_difference#CIEDE2000).
+The return value is `0` if the colors are equal, `1` if they are entirely different.
+
+```js
+colord("#3296fa").delta("#197dc8"); // 0.099
+colord("#faf0c8").delta("#ffffff"); // 0.148
+colord("#afafaf").delta("#b4b4b4"); // 0.014
+colord("#000000").delta("#ffffff"); // 1
+```
+
+</details>
+
+### Color utilities
+
+<details>
+ <summary><b><code>random()</code></b></summary>
+
+Returns a new Colord instance with a random color value inside.
+
+```js
+import { random } from "colord";
+
+random().toHex(); // "#01c8ec"
+random().alpha(0.5).toRgb(); // { r: 13, g: 237, b: 162, a: 0.5 }
+```
+
+</details>
+
+<details>
+ <summary><b><code>.minify(options?)</code></b></summary>
+
+Converts a color to its shortest string representation.
+
+```js
+import { colord, extend } from "colord";
+import minifyPlugin from "colord/plugins/minify";
+
+extend([minifyPlugin]);
+
+colord("black").minify(); // "#000"
+colord("#112233").minify(); // "#123"
+colord("darkgray").minify(); // "#a9a9a9"
+colord("rgba(170,170,170,0.4)").minify(); // "hsla(0,0%,67%,.4)"
+colord("rgba(170,170,170,0.4)").minify({ alphaHex: true }); // "#aaa6"
+```
+
+| Option | Default | Description |
+| ------------- | ------- | ------------------------------------------------------------ |
+| `hex` | `true` | Enable `#rrggbb` and `#rgb` notations |
+| `alphaHex` | `false` | Enable `#rrggbbaa` and `#rgba` notations |
+| `rgb` | `true` | Enable `rgb()` and `rgba()` functional notations |
+| `hsl` | `true` | Enable `hsl()` and `hsla()` functional notations |
+| `name` | `false` | Enable CSS color keywords. Requires `names` plugin installed |
+| `transparent` | `false` | Enable `"transparent"` color keyword |
+
+</details>
+
+<div><img src="assets/divider.png" width="838" alt="---" /></div>
+
+## Plugins
+
+**Colord** has a built-in plugin system that allows new features and functionality to be easily added.
+
+<details>
+ <summary><b><code>a11y</code> (Accessibility)</b> <i>0.38 KB</i></summary>
+
+Adds accessibility and color contrast utilities working according to [Web Content Accessibility Guidelines 2.0](https://www.w3.org/TR/WCAG20/).
+
+```js
+import { colord, extend } from "colord";
+import a11yPlugin from "colord/plugins/a11y";
+
+extend([a11yPlugin]);
+
+colord("#000000").luminance(); // 0
+colord("#ccddee").luminance(); // 0.71
+colord("#ffffff").luminance(); // 1
+
+colord("#000000").contrast(); // 21 (black on white)
+colord("#ffffff").contrast("#000000"); // 21 (white on black)
+colord("#0000ff").contrast("#ff000"); // 2.14 (blue on red)
+
+colord("#000000").isReadable(); // true (black on white)
+colord("#ffffff").isReadable("#000000"); // true (white on black)
+colord("#777777").isReadable(); // false (gray on white)
+colord("#e60000").isReadable("#ffff47"); // true (normal red text on yellow bg conforms to WCAG AA)
+colord("#e60000").isReadable("#ffff47", { level: "AAA" }); // false (normal red text on yellow bg does not conform to WCAG AAA)
+colord("#e60000").isReadable("#ffff47", { level: "AAA", size: "large" }); // true (large red text on yellow bg conforms to WCAG AAA)
+```
+
+</details>
+
+<details>
+ <summary><b><code>cmyk</code> (CMYK color space)</b> <i>0.6 KB</i></summary>
+
+Adds support of [CMYK](https://www.sttmedia.com/colormodel-cmyk) color model.
+
+```js
+import { colord, extend } from "colord";
+import cmykPlugin from "colord/plugins/cmyk";
+
+extend([cmykPlugin]);
+
+colord("#ffffff").toCmyk(); // { c: 0, m: 0, y: 0, k: 0, a: 1 }
+colord("#999966").toCmykString(); // "device-cmyk(0% 0% 33% 40%)"
+colord({ c: 0, m: 0, y: 0, k: 100, a: 1 }).toHex(); // "#000000"
+colord("device-cmyk(0% 61% 72% 0% / 50%)").toHex(); // "#ff634780"
+```
+
+</details>
+
+<details>
+ <summary><b><code>harmonies</code> (Color harmonies)</b> <i>0.15 KB</i></summary>
+
+Provides functionality to generate [harmony colors](<https://en.wikipedia.org/wiki/Harmony_(color)>).
+
+```js
+import { colord, extend } from "colord";
+import harmonies from "colord/plugins/harmonies";
+
+extend([harmonies]);
+
+const color = colord("#ff0000");
+color.harmonies("analogous").map((c) => c.toHex()); // ["#ff0080", "#ff0000", "#ff8000"]
+color.harmonies("complementary").map((c) => c.toHex()); // ["#ff0000", "#00ffff"]
+color.harmonies("double-split-complementary").map((c) => c.toHex()); // ["#ff0080", "#ff0000", "#ff8000", "#00ff80", "#0080ff"]
+color.harmonies("rectangle").map((c) => c.toHex()); // ["#ff0000", "#ffff00", "#00ffff", "#0000ff"]
+color.harmonies("split-complementary").map((c) => c.toHex()); // ["#ff0000", "#00ff80", "#0080ff"]
+color.harmonies("tetradic").map((c) => c.toHex()); // ["#ff0000", "#80ff00", "#00ffff", "#8000ff"]
+color.harmonies("triadic").map((c) => c.toHex()); // ["#ff0000", "#00ff00", "#0000ff"]
+```
+
+</details>
+
+<details>
+ <summary><b><code>hwb</code> (HWB color model)</b> <i>0.8 KB</i></summary>
+
+Adds support of [Hue-Whiteness-Blackness](https://en.wikipedia.org/wiki/HWB_color_model) color model.
+
+```js
+import { colord, extend } from "colord";
+import hwbPlugin from "colord/plugins/hwb";
+
+extend([hwbPlugin]);
+
+colord("#999966").toHwb(); // { h: 60, w: 40, b: 40, a: 1 }
+colord("#003366").toHwbString(); // "hwb(210 0% 60%)"
+
+colord({ h: 60, w: 40, b: 40 }).toHex(); // "#999966"
+colord("hwb(210 0% 60% / 50%)").toHex(); // "#00336680"
+```
+
+</details>
+
+<details>
+ <summary><b><code>lab</code> (CIE LAB color space)</b> <i>1.4 KB</i></summary>
+
+Adds support of [CIE LAB](https://en.wikipedia.org/wiki/CIELAB_color_space) color model. The conversion logic is ported from [CSS Color Module Level 4 Specification](https://www.w3.org/TR/css-color-4/#color-conversion-code).
+
+Also plugin provides `.delta` method for [perceived color difference calculations](https://en.wikipedia.org/wiki/Color_difference#CIEDE2000).
+
+```js
+import { colord, extend } from "colord";
+import labPlugin from "colord/plugins/lab";
+
+extend([labPlugin]);
+
+colord({ l: 53.24, a: 80.09, b: 67.2 }).toHex(); // "#ff0000"
+colord("#ffffff").toLab(); // { l: 100, a: 0, b: 0, alpha: 1 }
+
+colord("#afafaf").delta("#b4b4b4"); // 0.014
+colord("#000000").delta("#ffffff"); // 1
+```
+
+</details>
+
+<details>
+ <summary><b><code>lch</code> (CIE LCH color space)</b> <i>1.3 KB</i></summary>
+
+Adds support of [CIE LCH](https://lea.verou.me/2020/04/lch-colors-in-css-what-why-and-how/) color space. The conversion logic is ported from [CSS Color Module Level 4 Specification](https://www.w3.org/TR/css-color-4/#color-conversion-code).
+
+```js
+import { colord, extend } from "colord";
+import lchPlugin from "colord/plugins/lch";
+
+extend([lchPlugin]);
+
+colord({ l: 100, c: 0, h: 0 }).toHex(); // "#ffffff"
+colord("lch(48.25% 30.07 196.38)").toHex(); // "#008080"
+
+colord("#646464").toLch(); // { l: 42.37, c: 0, h: 0, a: 1 }
+colord("#646464").alpha(0.5).toLchString(); // "lch(42.37% 0 0 / 0.5)"
+```
+
+</details>
+
+<details>
+ <summary><b><code>minify</code> (Color string minification)</b> <i>0.5 KB</i></summary>
+
+A plugin adding color string minification utilities.
+
+```js
+import { colord, extend } from "colord";
+import minifyPlugin from "colord/plugins/minify";
+
+extend([minifyPlugin]);
+
+colord("black").minify(); // "#000"
+colord("#112233").minify(); // "#123"
+colord("darkgray").minify(); // "#a9a9a9"
+colord("rgba(170,170,170,0.4)").minify(); // "hsla(0,0%,67%,.4)"
+colord("rgba(170,170,170,0.4)").minify({ alphaHex: true }); // "#aaa6"
+```
+
+</details>
+
+<details>
+ <summary><b><code>mix</code> (Color mixing)</b> <i>0.96 KB</i></summary>
+
+A plugin adding color mixing utilities.
+
+In contrast to other libraries that perform RGB values mixing, Colord mixes colors through [LAB color space](https://en.wikipedia.org/wiki/CIELAB_color_space). This approach produces better results and doesn't have the drawbacks the legacy way has.
+
+→ [Online demo](https://3cg7o.csb.app/)
+
+```js
+import { colord, extend } from "colord";
+import mixPlugin from "colord/plugins/mix";
+
+extend([mixPlugin]);
+
+colord("#ffffff").mix("#000000").toHex(); // "#777777"
+colord("#800080").mix("#dda0dd").toHex(); // "#af5cae"
+colord("#cd853f").mix("#eee8aa", 0.6).toHex(); // "#e3c07e"
+colord("#008080").mix("#808000", 0.35).toHex(); // "#50805d"
+```
+
+Also, the plugin provides special mixtures such as [tints, shades, and tones](https://en.wikipedia.org/wiki/Tints_and_shades):
+
+<div align="center">
+<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Tint-tone-shade.svg/320px-Tint-tone-shade.svg.png" alt="tints, shades, and tones mixtures" />
+</div>
+
+```js
+const color = colord("#ff0000");
+color.tints(3).map((c) => c.toHex()); // ["#ff0000", "#ff9f80", "#ffffff"];
+color.shades(3).map((c) => c.toHex()); // ["#ff0000", "#7a1b0b", "#000000"];
+color.tones(3).map((c) => c.toHex()); // ["#ff0000", "#c86147", "#808080"];
+```
+
+</details>
+
+<details>
+ <summary><b><code>names</code> (CSS color keywords)</b> <i>1.45 KB</i></summary>
+
+Provides options to convert a color into a [CSS color keyword](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#color_keywords) and vice versa.
+
+```js
+import { colord, extend } from "colord";
+import namesPlugin from "colord/plugins/names";
+
+extend([namesPlugin]);
+
+colord("tomato").toHex(); // "#ff6347"
+colord("#00ffff").toName(); // "cyan"
+colord("rgba(0, 0, 0, 0)").toName(); // "transparent"
+colord("#fe0000").toName(); // undefined (the color is not specified in CSS specs)
+colord("#fe0000").toName({ closest: true }); // "red" (closest color)
+```
+
+</details>
+
+<details>
+ <summary><b><code>xyz</code> (CIE XYZ color space)</b> <i>0.7 KB</i></summary>
+
+Adds support of [CIE XYZ](https://www.sttmedia.com/colormodel-xyz) color model. The conversion logic is ported from [CSS Color Module Level 4 Specification](https://www.w3.org/TR/css-color-4/#color-conversion-code).
+
+```js
+import { colord, extend } from "colord";
+import xyzPlugin from "colord/plugins/xyz";
+
+extend([xyzPlugin]);
+
+colord("#ffffff").toXyz(); // { x: 95.047, y: 100, z: 108.883, a: 1 }
+colord({ x: 0, y: 0, z: 0 }).toHex(); // "#000000"
+```
+
+</details>
+
+<div><img src="assets/divider.png" width="838" alt="---" /></div>
+
+## Types
+
+**Colord** is written in strict TypeScript and ships with types in the library itself — no need for any other install. We provide everything you need in one tiny package.
+
+While not only typing its own functions and variables, **Colord** can also help you type yours. Depending on the color space you are using, you can also import and use the type that is associated with it.
+
+```ts
+import { RgbColor, RgbaColor, HslColor, HslaColor, HsvColor, HsvaColor } from "colord";
+
+const foo: HslColor = { h: 0, s: 0, l: 0 };
+const bar: RgbColor = { r: 0, g: 0, v: 0 }; // ERROR
+```
+
+<div><img src="assets/divider.png" width="838" alt="---" /></div>
+
+## Projects using Colord
+
+- [cssnano](https://github.com/cssnano/cssnano) — the most popular CSS minification tool
+- [Resume.io](https://resume.io/) — online resume builder with over 12,000,000 users worldwide
+- [Leva](https://github.com/pmndrs/leva) — open source extensible GUI panel made for React
+- [Qui Max](https://github.com/Qvant-lab/qui-max) — Vue.js design system and component library
+- and [thousands more](https://github.com/omgovich/colord/network/dependents)...
+
+<div><img src="assets/divider.png" width="838" alt="---" /></div>
+
+## Roadmap
+
+- [x] Parse and convert Hex, RGB(A), HSL(A), HSV(A)
+- [x] Saturate, desaturate, grayscale
+- [x] Trim an input value
+- [x] Clamp input numbers to resolve edge cases (e.g. `rgb(256, -1, 999, 2)`)
+- [x] `brightness`, `isDark`, `isLight`
+- [x] Set and get `alpha`
+- [x] Plugin API
+- [x] 4 and 8 digit Hex
+- [x] `lighten`, `darken`
+- [x] `invert`
+- [x] CSS color names (via plugin)
+- [x] A11y and contrast utils (via plugin)
+- [x] XYZ color space (via plugin)
+- [x] [HWB](https://drafts.csswg.org/css-color/#the-hwb-notation) color space (via plugin)
+- [x] [LAB](https://www.w3.org/TR/css-color-4/#resolving-lab-lch-values) color space (via plugin)
+- [x] [LCH](https://lea.verou.me/2020/04/lch-colors-in-css-what-why-and-how/) color space (via plugin)
+- [x] Mix colors (via plugin)
+- [x] CMYK color space (via plugin)
diff --git a/node_modules/colord/colord.d.ts b/node_modules/colord/colord.d.ts
new file mode 100644
index 0000000..bc96584
--- /dev/null
+++ b/node_modules/colord/colord.d.ts
@@ -0,0 +1,103 @@
+import { AnyColor, RgbaColor, HslaColor, HsvaColor } from "./types";
+export declare class Colord {
+ private readonly parsed;
+ readonly rgba: RgbaColor;
+ constructor(input: AnyColor);
+ /**
+ * Returns a boolean indicating whether or not an input has been parsed successfully.
+ * Note: If parsing is unsuccessful, Colord defaults to black (does not throws an error).
+ */
+ isValid(): boolean;
+ /**
+ * Returns the brightness of a color (from 0 to 1).
+ * The calculation logic is modified from WCAG.
+ * https://www.w3.org/TR/AERT/#color-contrast
+ */
+ brightness(): number;
+ /**
+ * Same as calling `brightness() < 0.5`.
+ */
+ isDark(): boolean;
+ /**
+ * Same as calling `brightness() >= 0.5`.
+ * */
+ isLight(): boolean;
+ /**
+ * Returns the hexadecimal representation of a color.
+ * When the alpha channel value of the color is less than 1,
+ * it outputs #rrggbbaa format instead of #rrggbb.
+ */
+ toHex(): string;
+ /**
+ * Converts a color to RGB color space and returns an object.
+ * Always includes an alpha value from 0 to 1.
+ */
+ toRgb(): RgbaColor;
+ /**
+ * Converts a color to RGB color space and returns a string representation.
+ * Outputs an alpha value only if it is less than 1.
+ */
+ toRgbString(): string;
+ /**
+ * Converts a color to HSL color space and returns an object.
+ * Always includes an alpha value from 0 to 1.
+ */
+ toHsl(): HslaColor;
+ /**
+ * Converts a color to HSL color space and returns a string representation.
+ * Always includes an alpha value from 0 to 1.
+ */
+ toHslString(): string;
+ /**
+ * Converts a color to HSV color space and returns an object.
+ * Always includes an alpha value from 0 to 1.
+ */
+ toHsv(): HsvaColor;
+ /**
+ * Creates a new instance containing an inverted (opposite) version of the color.
+ */
+ invert(): Colord;
+ /**
+ * Increases the HSL saturation of a color by the given amount.
+ */
+ saturate(amount?: number): Colord;
+ /**
+ * Decreases the HSL saturation of a color by the given amount.
+ */
+ desaturate(amount?: number): Colord;
+ /**
+ * Makes a gray color with the same lightness as a source color.
+ */
+ grayscale(): Colord;
+ /**
+ * Increases the HSL lightness of a color by the given amount.
+ */
+ lighten(amount?: number): Colord;
+ /**
+ * Increases the HSL lightness of a color by the given amount.
+ */
+ darken(amount?: number): Colord;
+ /**
+ * Changes the HSL hue of a color by the given amount.
+ */
+ rotate(amount?: number): Colord;
+ /**
+ * Allows to get or change an alpha channel value.
+ */
+ alpha(): number;
+ alpha(value: number): Colord;
+ /**
+ * Allows to get or change a hue value.
+ */
+ hue(): number;
+ hue(value: number): Colord;
+ /**
+ * Determines whether two values are the same color.
+ */
+ isEqual(color: AnyColor | Colord): boolean;
+}
+/**
+ * Parses the given input color and creates a new `Colord` instance.
+ * See accepted input formats: https://github.com/omgovich/colord#color-parsing
+ */
+export declare const colord: (input: AnyColor | Colord) => Colord;
diff --git a/node_modules/colord/constants.d.ts b/node_modules/colord/constants.d.ts
new file mode 100644
index 0000000..d4b42af
--- /dev/null
+++ b/node_modules/colord/constants.d.ts
@@ -0,0 +1,10 @@
+/**
+ * We used to work with 2 digits after the decimal point, but it wasn't accurate enough,
+ * so the library produced colors that were perceived differently.
+ */
+export declare const ALPHA_PRECISION = 3;
+/**
+ * Valid CSS <angle> units.
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/angle
+ */
+export declare const ANGLE_UNITS: Record<string, number>;
diff --git a/node_modules/colord/extend.d.ts b/node_modules/colord/extend.d.ts
new file mode 100644
index 0000000..0ce9a7c
--- /dev/null
+++ b/node_modules/colord/extend.d.ts
@@ -0,0 +1,4 @@
+import { Colord } from "./colord";
+import { Parsers } from "./types";
+export declare type Plugin = (ColordClass: typeof Colord, parsers: Parsers) => void;
+export declare const extend: (plugins: Plugin[]) => void;
diff --git a/node_modules/colord/helpers.d.ts b/node_modules/colord/helpers.d.ts
new file mode 100644
index 0000000..fd88be1
--- /dev/null
+++ b/node_modules/colord/helpers.d.ts
@@ -0,0 +1,20 @@
+export declare const isPresent: (value: unknown) => boolean;
+export declare const round: (number: number, digits?: number, base?: number) => number;
+export declare const floor: (number: number, digits?: number, base?: number) => number;
+/**
+ * Clamps a value between an upper and lower bound.
+ * We use ternary operators because it makes the minified code
+ * is 2 times shorter then `Math.min(Math.max(a,b),c)`
+ * NaN is clamped to the lower bound
+ */
+export declare const clamp: (number: number, min?: number, max?: number) => number;
+/**
+ * Processes and clamps a degree (angle) value properly.
+ * Any `NaN` or `Infinity` will be converted to `0`.
+ * Examples: -1 => 359, 361 => 1
+ */
+export declare const clampHue: (degrees: number) => number;
+/**
+ * Converts a hue value to degrees from 0 to 360 inclusive.
+ */
+export declare const parseHue: (value: string, unit?: string) => number;
diff --git a/node_modules/colord/index.d.ts b/node_modules/colord/index.d.ts
new file mode 100644
index 0000000..c4e61c1
--- /dev/null
+++ b/node_modules/colord/index.d.ts
@@ -0,0 +1,5 @@
+export { colord, Colord } from "./colord";
+export { extend, Plugin } from "./extend";
+export { getFormat } from "./parse";
+export { random } from "./random";
+export { HslColor, HslaColor, HsvColor, HsvaColor, HwbColor, HwbaColor, LabColor, LabaColor, LchColor, LchaColor, RgbColor, RgbaColor, XyzColor, XyzaColor, AnyColor, } from "./types";
diff --git a/node_modules/colord/index.js b/node_modules/colord/index.js
new file mode 100644
index 0000000..f7a26ef
--- /dev/null
+++ b/node_modules/colord/index.js
@@ -0,0 +1 @@
+Object.defineProperty(exports,"__esModule",{value:!0});var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},o=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},a=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},s=/^#([0-9a-f]{3,8})$/i,i=function(r){var t=r.toString(16);return t.length<2?"0"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,o=Math.max(t,n,e),a=o-Math.min(t,n,e),s=a?o===t?(n-e)/a:o===n?2+(e-t)/a:4+(t-n)/a:0;return{h:60*(s<0?s+6:s),s:o?a/o*100:0,v:o/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var o=Math.floor(t),a=e*(1-n),s=e*(1-(t-o)*n),i=e*(1-(1-t+o)*n),h=o%6;return{r:255*[e,s,a,a,i,e][h],g:255*[i,e,e,s,a,a][h],b:255*[a,a,i,e,e,s][h],a:u}},d=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},g=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},p=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,c=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,v=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,m=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,y={string:[[function(r){var t=s.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:o({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(t){var n=l.exec(t)||c.exec(t);if(!n)return null;var e,u,o=d({h:(e=n[1],u=n[2],void 0===u&&(u="deg"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(o)},"hsl"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,a=r.a,s=void 0===a?1:a;return t(n)&&t(e)&&t(u)?o({r:Number(n),g:Number(e),b:Number(u),a:Number(s)}):null},"rgb"],[function(r){var n=r.h,e=r.s,u=r.l,o=r.a,a=void 0===o?1:o;if(!t(n)||!t(e)||!t(u))return null;var s=d({h:Number(n),s:Number(e),l:Number(u),a:Number(a)});return f(s)},"hsl"],[function(r){var n=r.h,o=r.s,a=r.v,s=r.a,i=void 0===s?1:s;if(!t(n)||!t(o)||!t(a))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(o),v:Number(a),a:Number(i)});return b(h)},"hsv"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return"string"==typeof r?N(r.trim(),y.string):"object"==typeof r&&null!==r?N(r,y.object):[null,void 0]},M=function(r,t){var n=p(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},I=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},H=function(r,t){var n=p(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},$=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(I(this.rgba),2)},r.prototype.isDark=function(){return I(this.rgba)<.5},r.prototype.isLight=function(){return I(this.rgba)>=.5},r.prototype.toHex=function(){return r=a(this.rgba),t=r.r,e=r.g,u=r.b,s=(o=r.a)<1?i(n(255*o)):"","#"+i(t)+i(e)+i(u)+s;var r,t,e,u,o,s},r.prototype.toRgb=function(){return a(this.rgba)},r.prototype.toRgbString=function(){return r=a(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?"rgba("+t+", "+n+", "+e+", "+u+")":"rgb("+t+", "+n+", "+e+")";var r,t,n,e,u},r.prototype.toHsl=function(){return g(p(this.rgba))},r.prototype.toHslString=function(){return r=g(p(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?"hsla("+t+", "+n+"%, "+e+"%, "+u+")":"hsl("+t+", "+n+"%, "+e+"%)";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return j({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),j(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),j(M(this.rgba,-r))},r.prototype.grayscale=function(){return j(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),j(H(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),j(H(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return"number"==typeof r?j({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=p(this.rgba);return"number"==typeof r?j({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===j(r).toHex()},r}(),j=function(r){return r instanceof $?r:new $(r)},w=[];exports.Colord=$,exports.colord=j,exports.extend=function(r){r.forEach(function(r){w.indexOf(r)<0&&(r($,y),w.push(r))})},exports.getFormat=function(r){return x(r)[1]},exports.random=function(){return new $({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};
diff --git a/node_modules/colord/index.mjs b/node_modules/colord/index.mjs
new file mode 100644
index 0000000..73b6dee
--- /dev/null
+++ b/node_modules/colord/index.mjs
@@ -0,0 +1 @@
+var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?"0"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,p=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,v=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,m=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u="deg"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},"hsl"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},"rgb"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},"hsl"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},"hsv"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return"string"==typeof r?N(r.trim(),y.string):"object"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):"","#"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?"rgba("+t+", "+n+", "+e+", "+u+")":"rgb("+t+", "+n+", "+e+")";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?"hsla("+t+", "+n+"%, "+e+"%, "+u+")":"hsl("+t+", "+n+"%, "+e+"%)";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return"number"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return"number"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};
diff --git a/node_modules/colord/package.json b/node_modules/colord/package.json
new file mode 100644
index 0000000..8be0bca
--- /dev/null
+++ b/node_modules/colord/package.json
@@ -0,0 +1,199 @@
+{
+ "name": "colord",
+ "version": "2.9.2",
+ "description": "\ud83d\udc51 A tiny yet powerful tool for high-performance color manipulations and conversions",
+ "keywords": [
+ "color",
+ "parser",
+ "convert",
+ "tiny",
+ "hex",
+ "rgb",
+ "hsl",
+ "hsv",
+ "hwb",
+ "lab",
+ "lch",
+ "xyz",
+ "css",
+ "color-names",
+ "a11y",
+ "cmyk",
+ "mix",
+ "minify",
+ "harmonies"
+ ],
+ "repository": "omgovich/colord",
+ "author": "Vlad Shilov <omgovich@ya.ru>",
+ "license": "MIT",
+ "sideEffects": false,
+ "main": "./index.js",
+ "module": "./index.mjs",
+ "exports": {
+ ".": {
+ "import": "./index.mjs",
+ "require": "./index.js",
+ "default": "./index.mjs"
+ },
+ "./plugins/a11y": {
+ "import": "./plugins/a11y.mjs",
+ "require": "./plugins/a11y.js",
+ "default": "./plugins/a11y.mjs"
+ },
+ "./plugins/cmyk": {
+ "import": "./plugins/cmyk.mjs",
+ "require": "./plugins/cmyk.js",
+ "default": "./plugins/cmyk.mjs"
+ },
+ "./plugins/harmonies": {
+ "import": "./plugins/harmonies.mjs",
+ "require": "./plugins/harmonies.js",
+ "default": "./plugins/harmonies.mjs"
+ },
+ "./plugins/hwb": {
+ "import": "./plugins/hwb.mjs",
+ "require": "./plugins/hwb.js",
+ "default": "./plugins/hwb.mjs"
+ },
+ "./plugins/lab": {
+ "import": "./plugins/lab.mjs",
+ "require": "./plugins/lab.js",
+ "default": "./plugins/lab.mjs"
+ },
+ "./plugins/lch": {
+ "import": "./plugins/lch.mjs",
+ "require": "./plugins/lch.js",
+ "default": "./plugins/lch.mjs"
+ },
+ "./plugins/minify": {
+ "import": "./plugins/minify.mjs",
+ "require": "./plugins/minify.js",
+ "default": "./plugins/minify.mjs"
+ },
+ "./plugins/mix": {
+ "import": "./plugins/mix.mjs",
+ "require": "./plugins/mix.js",
+ "default": "./plugins/mix.mjs"
+ },
+ "./plugins/names": {
+ "import": "./plugins/names.mjs",
+ "require": "./plugins/names.js",
+ "default": "./plugins/names.mjs"
+ },
+ "./plugins/xyz": {
+ "import": "./plugins/xyz.mjs",
+ "require": "./plugins/xyz.js",
+ "default": "./plugins/xyz.mjs"
+ },
+ "./package.json": "./package.json"
+ },
+ "files": [
+ "*.{js,mjs,ts,map}",
+ "plugins/*.{js,mjs,ts,map}"
+ ],
+ "types": "index.d.ts",
+ "scripts": {
+ "lint": "eslint src/**/*.ts",
+ "size": "npm run build && size-limit",
+ "check-types": "tsc --noEmit true",
+ "test": "jest tests --coverage",
+ "benchmark": "tsc --outDir bench --skipLibCheck --esModuleInterop ./tests/benchmark.ts && node ./bench/tests/benchmark.js && rm -rf ./bench",
+ "build": "rm -rf ./dist/* && rollup --config",
+ "release": "npm run build && cp *.json dist && cp *.md dist && npm publish dist",
+ "check-release": "npm run release -- --dry-run"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "@size-limit/preset-small-lib": "^4.10.1",
+ "@types/jest": "^26.0.22",
+ "@typescript-eslint/eslint-plugin": "^4.19.0",
+ "@typescript-eslint/parser": "^4.19.0",
+ "ac-colors": "^1.4.2",
+ "benny": "^3.6.15",
+ "chroma-js": "^2.1.1",
+ "color": "^3.1.3",
+ "eslint": "^7.14.0",
+ "eslint-config-prettier": "^6.15.0",
+ "eslint-plugin-prettier": "^3.1.4",
+ "glob": "^7.1.6",
+ "jest": "^26.6.3",
+ "prettier": "^2.2.0",
+ "rollup": "^2.43.1",
+ "rollup-plugin-terser": "^7.0.2",
+ "rollup-plugin-typescript2": "^0.30.0",
+ "size-limit": "^4.10.1",
+ "tinycolor2": "^1.4.2",
+ "ts-jest": "^26.5.4",
+ "ts-node": "^9.1.1",
+ "tslib": "^2.1.0",
+ "typescript": "^4.2.3"
+ },
+ "jest": {
+ "verbose": true,
+ "transform": {
+ "^.+\\.ts$": "ts-jest"
+ }
+ },
+ "eslintConfig": {
+ "plugins": [
+ "prettier"
+ ],
+ "extends": [
+ "eslint:recommended",
+ "plugin:@typescript-eslint/eslint-recommended",
+ "plugin:@typescript-eslint/recommended",
+ "plugin:prettier/recommended",
+ "prettier/@typescript-eslint"
+ ]
+ },
+ "prettier": {
+ "printWidth": 100
+ },
+ "size-limit": [
+ {
+ "path": "dist/index.mjs",
+ "import": "{ colord }",
+ "limit": "2 KB"
+ },
+ {
+ "path": "dist/plugins/a11y.mjs",
+ "limit": "0.5 KB"
+ },
+ {
+ "path": "dist/plugins/cmyk.mjs",
+ "limit": "1 KB"
+ },
+ {
+ "path": "dist/plugins/harmonies.mjs",
+ "limit": "0.5 KB"
+ },
+ {
+ "path": "dist/plugins/hwb.mjs",
+ "limit": "1 KB"
+ },
+ {
+ "path": "dist/plugins/lab.mjs",
+ "limit": "1.5 KB"
+ },
+ {
+ "path": "dist/plugins/lch.mjs",
+ "limit": "1.5 KB"
+ },
+ {
+ "path": "dist/plugins/minify.mjs",
+ "limit": "0.6 KB"
+ },
+ {
+ "path": "dist/plugins/mix.mjs",
+ "limit": "1 KB"
+ },
+ {
+ "path": "dist/plugins/names.mjs",
+ "limit": "1.5 KB"
+ },
+ {
+ "path": "dist/plugins/xyz.mjs",
+ "limit": "1 KB"
+ }
+ ]
+}
diff --git a/node_modules/colord/parse.d.ts b/node_modules/colord/parse.d.ts
new file mode 100644
index 0000000..41e8a45
--- /dev/null
+++ b/node_modules/colord/parse.d.ts
@@ -0,0 +1,8 @@
+import { Parsers, ParseResult, Input, Format } from "./types";
+export declare const parsers: Parsers;
+/** Tries to convert an incoming value into RGBA color by going through all color model parsers */
+export declare const parse: (input: Input) => ParseResult | [null, undefined];
+/**
+ * Returns a color model name for the input passed to the function.
+ */
+export declare const getFormat: (input: Input) => Format | undefined;
diff --git a/node_modules/colord/plugins/a11y.d.ts b/node_modules/colord/plugins/a11y.d.ts
new file mode 100644
index 0000000..6ce2e8c
--- /dev/null
+++ b/node_modules/colord/plugins/a11y.d.ts
@@ -0,0 +1,38 @@
+import { AnyColor } from "../types";
+import { Plugin } from "../extend";
+interface ReadabilityOptions {
+ level?: "AA" | "AAA";
+ size?: "normal" | "large";
+}
+declare module "../colord" {
+ interface Colord {
+ /**
+ * Returns the relative luminance of a color,
+ * normalized to 0 for darkest black and 1 for lightest white.
+ * https://www.w3.org/TR/WCAG20/#relativeluminancedef
+ * https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_Colors_and_Luminance
+ */
+ luminance(): number;
+ /**
+ * Calculates a contrast ratio for a color pair.
+ * This luminance difference is expressed as a ratio ranging
+ * from 1 (e.g. white on white) to 21 (e.g., black on a white).
+ * WCAG requires a ratio of at least 4.5 for normal text and 3 for large text.
+ * https://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-contrast.html
+ * https://webaim.org/articles/contrast/
+ */
+ contrast(color2?: AnyColor | Colord): number;
+ /**
+ * Checks that a background and text color pair conforms to WCAG 2.0 requirements.
+ * https://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-contrast.html
+ */
+ isReadable(color2?: AnyColor | Colord, options?: ReadabilityOptions): boolean;
+ }
+}
+/**
+ * A plugin adding accessibility and color contrast utilities.
+ * Follows Web Content Accessibility Guidelines 2.0.
+ * https://www.w3.org/TR/WCAG20/
+ */
+declare const a11yPlugin: Plugin;
+export default a11yPlugin;
diff --git a/node_modules/colord/plugins/a11y.js b/node_modules/colord/plugins/a11y.js
new file mode 100644
index 0000000..d59f207
--- /dev/null
+++ b/node_modules/colord/plugins/a11y.js
@@ -0,0 +1 @@
+var o=function(o){var t=o/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},t=function(t){return.2126*o(t.r)+.7152*o(t.g)+.0722*o(t.b)};module.exports=function(o){o.prototype.luminance=function(){return o=t(this.rgba),void 0===(r=2)&&(r=0),void 0===n&&(n=Math.pow(10,r)),Math.round(n*o)/n+0;var o,r,n},o.prototype.contrast=function(r){void 0===r&&(r="#FFF");var n,i,a,e,v,u,d,c=r instanceof o?r:new o(r);return e=this.rgba,v=c.toRgb(),u=t(e),d=t(v),n=u>d?(u+.05)/(d+.05):(d+.05)/(u+.05),void 0===(i=2)&&(i=0),void 0===a&&(a=Math.pow(10,i)),Math.floor(a*n)/a+0},o.prototype.isReadable=function(o,t){return void 0===o&&(o="#FFF"),void 0===t&&(t={}),this.contrast(o)>=(e=void 0===(a=(r=t).size)?"normal":a,"AAA"===(i=void 0===(n=r.level)?"AA":n)&&"normal"===e?7:"AA"===i&&"large"===e?3:4.5);var r,n,i,a,e}};
diff --git a/node_modules/colord/plugins/a11y.mjs b/node_modules/colord/plugins/a11y.mjs
new file mode 100644
index 0000000..eef95c5
--- /dev/null
+++ b/node_modules/colord/plugins/a11y.mjs
@@ -0,0 +1 @@
+var o=function(o){var t=o/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},t=function(t){return.2126*o(t.r)+.7152*o(t.g)+.0722*o(t.b)};export default function(o){o.prototype.luminance=function(){return o=t(this.rgba),void 0===(r=2)&&(r=0),void 0===n&&(n=Math.pow(10,r)),Math.round(n*o)/n+0;var o,r,n},o.prototype.contrast=function(r){void 0===r&&(r="#FFF");var n,a,i,e,v,u,d,c=r instanceof o?r:new o(r);return e=this.rgba,v=c.toRgb(),u=t(e),d=t(v),n=u>d?(u+.05)/(d+.05):(d+.05)/(u+.05),void 0===(a=2)&&(a=0),void 0===i&&(i=Math.pow(10,a)),Math.floor(i*n)/i+0},o.prototype.isReadable=function(o,t){return void 0===o&&(o="#FFF"),void 0===t&&(t={}),this.contrast(o)>=(e=void 0===(i=(r=t).size)?"normal":i,"AAA"===(a=void 0===(n=r.level)?"AA":n)&&"normal"===e?7:"AA"===a&&"large"===e?3:4.5);var r,n,a,i,e}}
diff --git a/node_modules/colord/plugins/cmyk.d.ts b/node_modules/colord/plugins/cmyk.d.ts
new file mode 100644
index 0000000..c0c11f4
--- /dev/null
+++ b/node_modules/colord/plugins/cmyk.d.ts
@@ -0,0 +1,24 @@
+import { CmykaColor } from "../types";
+import { Plugin } from "../extend";
+declare module "../colord" {
+ interface Colord {
+ /**
+ * Converts a color to CMYK color space and returns an object.
+ * https://drafts.csswg.org/css-color/#cmyk-colors
+ * https://lea.verou.me/2009/03/cmyk-colors-in-css-useful-or-useless/
+ */
+ toCmyk(): CmykaColor;
+ /**
+ * Converts a color to CMYK color space and returns a string.
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/device-cmyk()
+ */
+ toCmykString(): string;
+ }
+}
+/**
+ * A plugin adding support for CMYK color space.
+ * https://lea.verou.me/2009/03/cmyk-colors-in-css-useful-or-useless/
+ * https://en.wikipedia.org/wiki/CMYK_color_model
+ */
+declare const cmykPlugin: Plugin;
+export default cmykPlugin;
diff --git a/node_modules/colord/plugins/cmyk.js b/node_modules/colord/plugins/cmyk.js
new file mode 100644
index 0000000..eb89c7b
--- /dev/null
+++ b/node_modules/colord/plugins/cmyk.js
@@ -0,0 +1 @@
+var r=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=Math.pow(10,n)),Math.round(t*r)/t+0},t=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=1),r>t?t:r>n?r:n},u=function(r){return{c:t(r.c,0,100),m:t(r.m,0,100),y:t(r.y,0,100),k:t(r.k,0,100),a:t(r.a)}},e=function(r){return{c:n(r.c,2),m:n(r.m,2),y:n(r.y,2),k:n(r.k,2),a:n(r.a,3)}};function c(r){return{r:n(255*(1-r.c/100)*(1-r.k/100)),g:n(255*(1-r.m/100)*(1-r.k/100)),b:n(255*(1-r.y/100)*(1-r.k/100)),a:r.a}}function o(r){var t=1-Math.max(r.r/255,r.g/255,r.b/255),u=(1-r.r/255-t)/(1-t),e=(1-r.g/255-t)/(1-t),c=(1-r.b/255-t)/(1-t);return{c:isNaN(u)?0:n(100*u),m:isNaN(e)?0:n(100*e),y:isNaN(c)?0:n(100*c),k:n(100*t),a:r.a}}function i(n){var t=n.c,e=n.m,o=n.y,i=n.k,m=n.a,a=void 0===m?1:m;return r(t)&&r(e)&&r(o)&&r(i)?c(u({c:Number(t),m:Number(e),y:Number(o),k:Number(i),a:Number(a)})):null}var m=/^device-cmyk\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,a=function(r){var n=m.exec(r);return n?c(u({c:Number(n[1])*(n[2]?1:100),m:Number(n[3])*(n[4]?1:100),y:Number(n[5])*(n[6]?1:100),k:Number(n[7])*(n[8]?1:100),a:void 0===n[9]?1:Number(n[9])/(n[10]?100:1)})):null};module.exports=function(r,n){r.prototype.toCmyk=function(){return e(o(this.rgba))},r.prototype.toCmykString=function(){return r=e(o(this.rgba)),n=r.c,t=r.m,u=r.y,c=r.k,(i=r.a)<1?"device-cmyk("+n+"% "+t+"% "+u+"% "+c+"% / "+i+")":"device-cmyk("+n+"% "+t+"% "+u+"% "+c+"%)";var r,n,t,u,c,i},n.object.push([i,"cmyk"]),n.string.push([a,"cmyk"])};
diff --git a/node_modules/colord/plugins/cmyk.mjs b/node_modules/colord/plugins/cmyk.mjs
new file mode 100644
index 0000000..febf50e
--- /dev/null
+++ b/node_modules/colord/plugins/cmyk.mjs
@@ -0,0 +1 @@
+var r=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=Math.pow(10,n)),Math.round(t*r)/t+0},t=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=1),r>t?t:r>n?r:n},u=function(r){return{c:t(r.c,0,100),m:t(r.m,0,100),y:t(r.y,0,100),k:t(r.k,0,100),a:t(r.a)}},e=function(r){return{c:n(r.c,2),m:n(r.m,2),y:n(r.y,2),k:n(r.k,2),a:n(r.a,3)}};function c(r){return{r:n(255*(1-r.c/100)*(1-r.k/100)),g:n(255*(1-r.m/100)*(1-r.k/100)),b:n(255*(1-r.y/100)*(1-r.k/100)),a:r.a}}function i(r){var t=1-Math.max(r.r/255,r.g/255,r.b/255),u=(1-r.r/255-t)/(1-t),e=(1-r.g/255-t)/(1-t),c=(1-r.b/255-t)/(1-t);return{c:isNaN(u)?0:n(100*u),m:isNaN(e)?0:n(100*e),y:isNaN(c)?0:n(100*c),k:n(100*t),a:r.a}}function o(n){var t=n.c,e=n.m,i=n.y,o=n.k,m=n.a,a=void 0===m?1:m;return r(t)&&r(e)&&r(i)&&r(o)?c(u({c:Number(t),m:Number(e),y:Number(i),k:Number(o),a:Number(a)})):null}var m=/^device-cmyk\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,a=function(r){var n=m.exec(r);return n?c(u({c:Number(n[1])*(n[2]?1:100),m:Number(n[3])*(n[4]?1:100),y:Number(n[5])*(n[6]?1:100),k:Number(n[7])*(n[8]?1:100),a:void 0===n[9]?1:Number(n[9])/(n[10]?100:1)})):null};export default function(r,n){r.prototype.toCmyk=function(){return e(i(this.rgba))},r.prototype.toCmykString=function(){return r=e(i(this.rgba)),n=r.c,t=r.m,u=r.y,c=r.k,(o=r.a)<1?"device-cmyk("+n+"% "+t+"% "+u+"% "+c+"% / "+o+")":"device-cmyk("+n+"% "+t+"% "+u+"% "+c+"%)";var r,n,t,u,c,o},n.object.push([o,"cmyk"]),n.string.push([a,"cmyk"])}
diff --git a/node_modules/colord/plugins/harmonies.d.ts b/node_modules/colord/plugins/harmonies.d.ts
new file mode 100644
index 0000000..f9a3f51
--- /dev/null
+++ b/node_modules/colord/plugins/harmonies.d.ts
@@ -0,0 +1,16 @@
+import { Plugin } from "../extend";
+export declare type HarmonyType = "analogous" | "complementary" | "double-split-complementary" | "rectangle" | "split-complementary" | "tetradic" | "triadic";
+declare module "../colord" {
+ interface Colord {
+ /**
+ * Returns an array of harmony colors as `Colord` instances.
+ */
+ harmonies(type?: HarmonyType): Colord[];
+ }
+}
+/**
+ * A plugin adding functionality to generate harmony colors.
+ * https://en.wikipedia.org/wiki/Harmony_(color)
+ */
+declare const harmoniesPlugin: Plugin;
+export default harmoniesPlugin;
diff --git a/node_modules/colord/plugins/harmonies.js b/node_modules/colord/plugins/harmonies.js
new file mode 100644
index 0000000..4087b16
--- /dev/null
+++ b/node_modules/colord/plugins/harmonies.js
@@ -0,0 +1 @@
+module.exports=function(t){var e={analogous:[-30,0,30],complementary:[0,180],"double-split-complementary":[-30,0,30,150,210],rectangle:[0,60,180,240],tetradic:[0,90,180,270],triadic:[0,120,240],"split-complementary":[0,150,210]};t.prototype.harmonies=function(t){var o=this;return void 0===t&&(t="complementary"),e[t].map(function(t){return o.rotate(t)})}};
diff --git a/node_modules/colord/plugins/harmonies.mjs b/node_modules/colord/plugins/harmonies.mjs
new file mode 100644
index 0000000..c9fe612
--- /dev/null
+++ b/node_modules/colord/plugins/harmonies.mjs
@@ -0,0 +1 @@
+export default function(t){var e={analogous:[-30,0,30],complementary:[0,180],"double-split-complementary":[-30,0,30,150,210],rectangle:[0,60,180,240],tetradic:[0,90,180,270],triadic:[0,120,240],"split-complementary":[0,150,210]};t.prototype.harmonies=function(t){var r=this;return void 0===t&&(t="complementary"),e[t].map(function(t){return r.rotate(t)})}}
diff --git a/node_modules/colord/plugins/hwb.d.ts b/node_modules/colord/plugins/hwb.d.ts
new file mode 100644
index 0000000..da14e98
--- /dev/null
+++ b/node_modules/colord/plugins/hwb.d.ts
@@ -0,0 +1,23 @@
+import { HwbaColor } from "../types";
+import { Plugin } from "../extend";
+declare module "../colord" {
+ interface Colord {
+ /**
+ * Converts a color to HWB (Hue-Whiteness-Blackness) color space and returns an object.
+ * https://en.wikipedia.org/wiki/HWB_color_model
+ */
+ toHwb(): HwbaColor;
+ /**
+ * Converts a color to HWB (Hue-Whiteness-Blackness) color space and returns a string.
+ * https://www.w3.org/TR/css-color-4/#the-hwb-notation
+ */
+ toHwbString(): string;
+ }
+}
+/**
+ * A plugin adding support for HWB (Hue-Whiteness-Blackness) color model.
+ * https://en.wikipedia.org/wiki/HWB_color_model
+ * https://www.w3.org/TR/css-color-4/#the-hwb-notation
+ */
+declare const hwbPlugin: Plugin;
+export default hwbPlugin;
diff --git a/node_modules/colord/plugins/hwb.js b/node_modules/colord/plugins/hwb.js
new file mode 100644
index 0000000..90d6529
--- /dev/null
+++ b/node_modules/colord/plugins/hwb.js
@@ -0,0 +1 @@
+var r={grad:.9,turn:360,rad:360/(2*Math.PI)},n=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},t=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=Math.pow(10,n)),Math.round(t*r)/t+0},u=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=1),r>t?t:r>n?r:n},a=function(r){return{h:(n=r.h,(n=isFinite(n)?n%360:0)>0?n:n+360),w:u(r.w,0,100),b:u(r.b,0,100),a:u(r.a)};var n},e=function(r){return{h:t(r.h),w:t(r.w),b:t(r.b),a:t(r.a,3)}},o=function(r){return{h:function(r){var n=r.r,t=r.g,u=r.b,a=r.a,e=Math.max(n,t,u),o=e-Math.min(n,t,u),b=o?e===n?(t-u)/o:e===t?2+(u-n)/o:4+(n-t)/o:0;return{h:60*(b<0?b+6:b),s:e?o/e*100:0,v:e/255*100,a:a}}(r).h,w:Math.min(r.r,r.g,r.b)/255*100,b:100-Math.max(r.r,r.g,r.b)/255*100,a:r.a}},b=function(r){return function(r){var n=r.h,t=r.s,u=r.v,a=r.a;n=n/360*6,t/=100,u/=100;var e=Math.floor(n),o=u*(1-t),b=u*(1-(n-e)*t),i=u*(1-(1-n+e)*t),h=e%6;return{r:255*[u,b,o,o,i,u][h],g:255*[i,u,u,b,o,o][h],b:255*[o,o,i,u,u,b][h],a:a}}({h:r.h,s:100===r.b?0:100-r.w/(100-r.b)*100,v:100-r.b,a:r.a})},i=function(r){var t=r.h,u=r.w,e=r.b,o=r.a,i=void 0===o?1:o;if(!n(t)||!n(u)||!n(e))return null;var h=a({h:Number(t),w:Number(u),b:Number(e),a:Number(i)});return b(h)},h=/^hwb\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,d=function(n){var t=h.exec(n);if(!t)return null;var u,e,o=a({h:(u=t[1],e=t[2],void 0===e&&(e="deg"),Number(u)*(r[e]||1)),w:Number(t[3]),b:Number(t[4]),a:void 0===t[5]?1:Number(t[5])/(t[6]?100:1)});return b(o)};module.exports=function(r,n){r.prototype.toHwb=function(){return e(o(this.rgba))},r.prototype.toHwbString=function(){return r=e(o(this.rgba)),n=r.h,t=r.w,u=r.b,(a=r.a)<1?"hwb("+n+" "+t+"% "+u+"% / "+a+")":"hwb("+n+" "+t+"% "+u+"%)";var r,n,t,u,a},n.string.push([d,"hwb"]),n.object.push([i,"hwb"])};
diff --git a/node_modules/colord/plugins/hwb.mjs b/node_modules/colord/plugins/hwb.mjs
new file mode 100644
index 0000000..292bd9f
--- /dev/null
+++ b/node_modules/colord/plugins/hwb.mjs
@@ -0,0 +1 @@
+var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},u=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},a=function(r){return{h:(t=r.h,(t=isFinite(t)?t%360:0)>0?t:t+360),w:u(r.w,0,100),b:u(r.b,0,100),a:u(r.a)};var t},e=function(r){return{h:n(r.h),w:n(r.w),b:n(r.b),a:n(r.a,3)}},b=function(r){return{h:function(r){var t=r.r,n=r.g,u=r.b,a=r.a,e=Math.max(t,n,u),b=e-Math.min(t,n,u),o=b?e===t?(n-u)/b:e===n?2+(u-t)/b:4+(t-n)/b:0;return{h:60*(o<0?o+6:o),s:e?b/e*100:0,v:e/255*100,a:a}}(r).h,w:Math.min(r.r,r.g,r.b)/255*100,b:100-Math.max(r.r,r.g,r.b)/255*100,a:r.a}},o=function(r){return function(r){var t=r.h,n=r.s,u=r.v,a=r.a;t=t/360*6,n/=100,u/=100;var e=Math.floor(t),b=u*(1-n),o=u*(1-(t-e)*n),i=u*(1-(1-t+e)*n),h=e%6;return{r:255*[u,o,b,b,i,u][h],g:255*[i,u,u,o,b,b][h],b:255*[b,b,i,u,u,o][h],a:a}}({h:r.h,s:100===r.b?0:100-r.w/(100-r.b)*100,v:100-r.b,a:r.a})},i=function(r){var n=r.h,u=r.w,e=r.b,b=r.a,i=void 0===b?1:b;if(!t(n)||!t(u)||!t(e))return null;var h=a({h:Number(n),w:Number(u),b:Number(e),a:Number(i)});return o(h)},h=/^hwb\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,d=function(t){var n=h.exec(t);if(!n)return null;var u,e,b=a({h:(u=n[1],e=n[2],void 0===e&&(e="deg"),Number(u)*(r[e]||1)),w:Number(n[3]),b:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return o(b)};export default function(r,t){r.prototype.toHwb=function(){return e(b(this.rgba))},r.prototype.toHwbString=function(){return r=e(b(this.rgba)),t=r.h,n=r.w,u=r.b,(a=r.a)<1?"hwb("+t+" "+n+"% "+u+"% / "+a+")":"hwb("+t+" "+n+"% "+u+"%)";var r,t,n,u,a},t.string.push([d,"hwb"]),t.object.push([i,"hwb"])}
diff --git a/node_modules/colord/plugins/lab.d.ts b/node_modules/colord/plugins/lab.d.ts
new file mode 100644
index 0000000..76c1f5f
--- /dev/null
+++ b/node_modules/colord/plugins/lab.d.ts
@@ -0,0 +1,23 @@
+import { LabaColor, AnyColor } from "../types";
+import { Plugin } from "../extend";
+declare module "../colord" {
+ interface Colord {
+ /**
+ * Converts a color to CIELAB color space and returns an object.
+ * The object always includes `alpha` value [0, 1].
+ */
+ toLab(): LabaColor;
+ /**
+ * Calculates the perceived color difference for two colors according to
+ * [Delta E2000](https://en.wikipedia.org/wiki/Color_difference#CIEDE2000).
+ * Returns a value in [0, 1] range.
+ */
+ delta(color?: AnyColor | Colord): number;
+ }
+}
+/**
+ * A plugin adding support for CIELAB color space.
+ * https://en.wikipedia.org/wiki/CIELAB_color_space
+ */
+declare const labPlugin: Plugin;
+export default labPlugin;
diff --git a/node_modules/colord/plugins/lab.js b/node_modules/colord/plugins/lab.js
new file mode 100644
index 0000000..267e6e0
--- /dev/null
+++ b/node_modules/colord/plugins/lab.js
@@ -0,0 +1 @@
+var a=function(a){return"string"==typeof a?a.length>0:"number"==typeof a},t=function(a,t,o){return void 0===t&&(t=0),void 0===o&&(o=Math.pow(10,t)),Math.round(o*a)/o+0},o=function(a,t,o){return void 0===t&&(t=0),void 0===o&&(o=1),a>o?o:a>t?a:t},r=function(a){var t=a/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},h=function(a){return 255*(a>.0031308?1.055*Math.pow(a,1/2.4)-.055:12.92*a)},n=96.422,p=100,M=82.521,u=function(a){var t,r,n={x:.9555766*(t=a).x+-.0230393*t.y+.0631636*t.z,y:-.0282895*t.x+1.0099416*t.y+.0210077*t.z,z:.0122982*t.x+-.020483*t.y+1.3299098*t.z};return r={r:h(.032404542*n.x-.015371385*n.y-.004985314*n.z),g:h(-.00969266*n.x+.018760108*n.y+41556e-8*n.z),b:h(556434e-9*n.x-.002040259*n.y+.010572252*n.z),a:a.a},{r:o(r.r,0,255),g:o(r.g,0,255),b:o(r.b,0,255),a:o(r.a)}},e=function(a){var t=r(a.r),h=r(a.g),u=r(a.b);return function(a){return{x:o(a.x,0,n),y:o(a.y,0,p),z:o(a.z,0,M),a:o(a.a)}}(function(a){return{x:1.0478112*a.x+.0228866*a.y+-.050127*a.z,y:.0295424*a.x+.9904844*a.y+-.0170491*a.z,z:-.0092345*a.x+.0150436*a.y+.7521316*a.z,a:a.a}}({x:100*(.4124564*t+.3575761*h+.1804375*u),y:100*(.2126729*t+.7151522*h+.072175*u),z:100*(.0193339*t+.119192*h+.9503041*u),a:a.a}))},w=216/24389,b=24389/27,i=function(t){var r=t.l,h=t.a,n=t.b,p=t.alpha,M=void 0===p?1:p;if(!a(r)||!a(h)||!a(n))return null;var u=function(a){return{l:o(a.l,0,400),a:a.a,b:a.b,alpha:o(a.alpha)}}({l:Number(r),a:Number(h),b:Number(n),alpha:Number(M)});return l(u)},l=function(a){var t=(a.l+16)/116,o=a.a/500+t,r=t-a.b/200;return u({x:(Math.pow(o,3)>w?Math.pow(o,3):(116*o-16)/b)*n,y:(a.l>8?Math.pow((a.l+16)/116,3):a.l/b)*p,z:(Math.pow(r,3)>w?Math.pow(r,3):(116*r-16)/b)*M,a:a.alpha})};module.exports=function(a,r){a.prototype.toLab=function(){return o=e(this.rgba),h=o.y/p,u=o.z/M,r=(r=o.x/n)>w?Math.cbrt(r):(b*r+16)/116,a={l:116*(h=h>w?Math.cbrt(h):(b*h+16)/116)-16,a:500*(r-h),b:200*(h-(u=u>w?Math.cbrt(u):(b*u+16)/116)),alpha:o.a},{l:t(a.l,2),a:t(a.a,2),b:t(a.b,2),alpha:t(a.alpha,3)};var a,o,r,h,u},a.prototype.delta=function(r){void 0===r&&(r="#FFF");var h=r instanceof a?r:new a(r),n=function(a,t){var o=a.l,r=a.a,h=a.b,n=t.l,p=t.a,M=t.b,u=180/Math.PI,e=Math.PI/180,w=Math.pow(Math.pow(r,2)+Math.pow(h,2),.5),b=Math.pow(Math.pow(p,2)+Math.pow(M,2),.5),i=(o+n)/2,l=Math.pow((w+b)/2,7),c=.5*(1-Math.pow(l/(l+Math.pow(25,7)),.5)),f=r*(1+c),y=p*(1+c),v=Math.pow(Math.pow(f,2)+Math.pow(h,2),.5),x=Math.pow(Math.pow(y,2)+Math.pow(M,2),.5),z=(v+x)/2,s=0===f&&0===h?0:Math.atan2(h,f)*u,d=0===y&&0===M?0:Math.atan2(M,y)*u;s<0&&(s+=360),d<0&&(d+=360);var g=d-s,m=Math.abs(d-s);m>180&&d<=s?g+=360:m>180&&d>s&&(g-=360);var N=s+d;m<=180?N/=2:N=(s+d<360?N+360:N-360)/2;var F=1-.17*Math.cos(e*(N-30))+.24*Math.cos(2*e*N)+.32*Math.cos(e*(3*N+6))-.2*Math.cos(e*(4*N-63)),L=n-o,I=x-v,P=2*Math.sin(e*g/2)*Math.pow(v*x,.5),j=1+.015*Math.pow(i-50,2)/Math.pow(20+Math.pow(i-50,2),.5),k=1+.045*z,q=1+.015*z*F,A=30*Math.exp(-1*Math.pow((N-275)/25,2)),B=-2*Math.pow(l/(l+Math.pow(25,7)),.5)*Math.sin(2*e*A);return Math.pow(Math.pow(L/1/j,2)+Math.pow(I/1/k,2)+Math.pow(P/1/q,2)+B*I*P/(1*k*1*q),.5)}(this.toLab(),h.toLab())/100;return o(t(n,3))},r.object.push([i,"lab"])};
diff --git a/node_modules/colord/plugins/lab.mjs b/node_modules/colord/plugins/lab.mjs
new file mode 100644
index 0000000..a852df3
--- /dev/null
+++ b/node_modules/colord/plugins/lab.mjs
@@ -0,0 +1 @@
+var a=function(a){return"string"==typeof a?a.length>0:"number"==typeof a},t=function(a,t,o){return void 0===t&&(t=0),void 0===o&&(o=Math.pow(10,t)),Math.round(o*a)/o+0},o=function(a,t,o){return void 0===t&&(t=0),void 0===o&&(o=1),a>o?o:a>t?a:t},r=function(a){var t=a/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},h=function(a){return 255*(a>.0031308?1.055*Math.pow(a,1/2.4)-.055:12.92*a)},n=96.422,p=100,M=82.521,u=function(a){var t,r,n={x:.9555766*(t=a).x+-.0230393*t.y+.0631636*t.z,y:-.0282895*t.x+1.0099416*t.y+.0210077*t.z,z:.0122982*t.x+-.020483*t.y+1.3299098*t.z};return r={r:h(.032404542*n.x-.015371385*n.y-.004985314*n.z),g:h(-.00969266*n.x+.018760108*n.y+41556e-8*n.z),b:h(556434e-9*n.x-.002040259*n.y+.010572252*n.z),a:a.a},{r:o(r.r,0,255),g:o(r.g,0,255),b:o(r.b,0,255),a:o(r.a)}},e=function(a){var t=r(a.r),h=r(a.g),u=r(a.b);return function(a){return{x:o(a.x,0,n),y:o(a.y,0,p),z:o(a.z,0,M),a:o(a.a)}}(function(a){return{x:1.0478112*a.x+.0228866*a.y+-.050127*a.z,y:.0295424*a.x+.9904844*a.y+-.0170491*a.z,z:-.0092345*a.x+.0150436*a.y+.7521316*a.z,a:a.a}}({x:100*(.4124564*t+.3575761*h+.1804375*u),y:100*(.2126729*t+.7151522*h+.072175*u),z:100*(.0193339*t+.119192*h+.9503041*u),a:a.a}))},w=216/24389,b=24389/27,i=function(t){var r=t.l,h=t.a,n=t.b,p=t.alpha,M=void 0===p?1:p;if(!a(r)||!a(h)||!a(n))return null;var u=function(a){return{l:o(a.l,0,400),a:a.a,b:a.b,alpha:o(a.alpha)}}({l:Number(r),a:Number(h),b:Number(n),alpha:Number(M)});return l(u)},l=function(a){var t=(a.l+16)/116,o=a.a/500+t,r=t-a.b/200;return u({x:(Math.pow(o,3)>w?Math.pow(o,3):(116*o-16)/b)*n,y:(a.l>8?Math.pow((a.l+16)/116,3):a.l/b)*p,z:(Math.pow(r,3)>w?Math.pow(r,3):(116*r-16)/b)*M,a:a.alpha})};export default function(a,r){a.prototype.toLab=function(){return o=e(this.rgba),h=o.y/p,u=o.z/M,r=(r=o.x/n)>w?Math.cbrt(r):(b*r+16)/116,a={l:116*(h=h>w?Math.cbrt(h):(b*h+16)/116)-16,a:500*(r-h),b:200*(h-(u=u>w?Math.cbrt(u):(b*u+16)/116)),alpha:o.a},{l:t(a.l,2),a:t(a.a,2),b:t(a.b,2),alpha:t(a.alpha,3)};var a,o,r,h,u},a.prototype.delta=function(r){void 0===r&&(r="#FFF");var h=r instanceof a?r:new a(r),n=function(a,t){var o=a.l,r=a.a,h=a.b,n=t.l,p=t.a,M=t.b,u=180/Math.PI,e=Math.PI/180,w=Math.pow(Math.pow(r,2)+Math.pow(h,2),.5),b=Math.pow(Math.pow(p,2)+Math.pow(M,2),.5),i=(o+n)/2,l=Math.pow((w+b)/2,7),c=.5*(1-Math.pow(l/(l+Math.pow(25,7)),.5)),f=r*(1+c),y=p*(1+c),v=Math.pow(Math.pow(f,2)+Math.pow(h,2),.5),x=Math.pow(Math.pow(y,2)+Math.pow(M,2),.5),z=(v+x)/2,s=0===f&&0===h?0:Math.atan2(h,f)*u,d=0===y&&0===M?0:Math.atan2(M,y)*u;s<0&&(s+=360),d<0&&(d+=360);var g=d-s,m=Math.abs(d-s);m>180&&d<=s?g+=360:m>180&&d>s&&(g-=360);var N=s+d;m<=180?N/=2:N=(s+d<360?N+360:N-360)/2;var F=1-.17*Math.cos(e*(N-30))+.24*Math.cos(2*e*N)+.32*Math.cos(e*(3*N+6))-.2*Math.cos(e*(4*N-63)),L=n-o,I=x-v,P=2*Math.sin(e*g/2)*Math.pow(v*x,.5),j=1+.015*Math.pow(i-50,2)/Math.pow(20+Math.pow(i-50,2),.5),k=1+.045*z,q=1+.015*z*F,A=30*Math.exp(-1*Math.pow((N-275)/25,2)),B=-2*Math.pow(l/(l+Math.pow(25,7)),.5)*Math.sin(2*e*A);return Math.pow(Math.pow(L/1/j,2)+Math.pow(I/1/k,2)+Math.pow(P/1/q,2)+B*I*P/(1*k*1*q),.5)}(this.toLab(),h.toLab())/100;return o(t(n,3))},r.object.push([i,"lab"])}
diff --git a/node_modules/colord/plugins/lch.d.ts b/node_modules/colord/plugins/lch.d.ts
new file mode 100644
index 0000000..34dcfcc
--- /dev/null
+++ b/node_modules/colord/plugins/lch.d.ts
@@ -0,0 +1,24 @@
+import { LchaColor } from "../types";
+import { Plugin } from "../extend";
+declare module "../colord" {
+ interface Colord {
+ /**
+ * Converts a color to CIELCH (Lightness-Chroma-Hue) color space and returns an object.
+ * https://lea.verou.me/2020/04/lch-colors-in-css-what-why-and-how/
+ * https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_model
+ */
+ toLch(): LchaColor;
+ /**
+ * Converts a color to CIELCH (Lightness-Chroma-Hue) color space and returns a string.
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/lch()
+ */
+ toLchString(): string;
+ }
+}
+/**
+ * A plugin adding support for CIELCH color space.
+ * https://lea.verou.me/2020/04/lch-colors-in-css-what-why-and-how/
+ * https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_model
+ */
+declare const lchPlugin: Plugin;
+export default lchPlugin;
diff --git a/node_modules/colord/plugins/lch.js b/node_modules/colord/plugins/lch.js
new file mode 100644
index 0000000..955a596
--- /dev/null
+++ b/node_modules/colord/plugins/lch.js
@@ -0,0 +1 @@
+var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},a=function(r,t,a){return void 0===t&&(t=0),void 0===a&&(a=Math.pow(10,t)),Math.round(a*r)/a+0},n=function(r,t,a){return void 0===t&&(t=0),void 0===a&&(a=1),r>a?a:r>t?r:t},u=function(r){var t=r/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},h=function(r){return 255*(r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r)},o=96.422,e=100,c=82.521,i=function(r){var t,a,u={x:.9555766*(t=r).x+-.0230393*t.y+.0631636*t.z,y:-.0282895*t.x+1.0099416*t.y+.0210077*t.z,z:.0122982*t.x+-.020483*t.y+1.3299098*t.z};return a={r:h(.032404542*u.x-.015371385*u.y-.004985314*u.z),g:h(-.00969266*u.x+.018760108*u.y+41556e-8*u.z),b:h(556434e-9*u.x-.002040259*u.y+.010572252*u.z),a:r.a},{r:n(a.r,0,255),g:n(a.g,0,255),b:n(a.b,0,255),a:n(a.a)}},l=function(r){var t=u(r.r),a=u(r.g),h=u(r.b);return function(r){return{x:n(r.x,0,o),y:n(r.y,0,e),z:n(r.z,0,c),a:n(r.a)}}(function(r){return{x:1.0478112*r.x+.0228866*r.y+-.050127*r.z,y:.0295424*r.x+.9904844*r.y+-.0170491*r.z,z:-.0092345*r.x+.0150436*r.y+.7521316*r.z,a:r.a}}({x:100*(.4124564*t+.3575761*a+.1804375*h),y:100*(.2126729*t+.7151522*a+.072175*h),z:100*(.0193339*t+.119192*a+.9503041*h),a:r.a}))},b=216/24389,d=24389/27,f=function(r){return{l:n(r.l,0,100),c:r.c,h:(t=r.h,(t=isFinite(t)?t%360:0)>0?t:t+360),a:r.a};var t},p=function(r){return{l:a(r.l,2),c:a(r.c,2),h:a(r.h,2),a:a(r.a,3)}},v=function(r){var a=r.l,n=r.c,u=r.h,h=r.a,o=void 0===h?1:h;if(!t(a)||!t(n)||!t(u))return null;var e=f({l:Number(a),c:Number(n),h:Number(u),a:Number(o)});return M(e)},y=function(r){var t=function(r){var t=l(r),a=t.x/o,n=t.y/e,u=t.z/c;return a=a>b?Math.cbrt(a):(d*a+16)/116,{l:116*(n=n>b?Math.cbrt(n):(d*n+16)/116)-16,a:500*(a-n),b:200*(n-(u=u>b?Math.cbrt(u):(d*u+16)/116)),alpha:t.a}}(r),n=a(t.a,3),u=a(t.b,3),h=Math.atan2(u,n)/Math.PI*180;return{l:t.l,c:Math.sqrt(n*n+u*u),h:h<0?h+360:h,a:t.alpha}},M=function(r){return t={l:r.l,a:r.c*Math.cos(r.h*Math.PI/180),b:r.c*Math.sin(r.h*Math.PI/180),alpha:r.a},n=t.a/500+(a=(t.l+16)/116),u=a-t.b/200,i({x:(Math.pow(n,3)>b?Math.pow(n,3):(116*n-16)/d)*o,y:(t.l>8?Math.pow((t.l+16)/116,3):t.l/d)*e,z:(Math.pow(u,3)>b?Math.pow(u,3):(116*u-16)/d)*c,a:t.alpha});var t,a,n,u},x=/^lch\(\s*([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,s=function(t){var a=x.exec(t);if(!a)return null;var n,u,h=f({l:Number(a[1]),c:Number(a[2]),h:(n=a[3],u=a[4],void 0===u&&(u="deg"),Number(n)*(r[u]||1)),a:void 0===a[5]?1:Number(a[5])/(a[6]?100:1)});return M(h)};module.exports=function(r,t){r.prototype.toLch=function(){return p(y(this.rgba))},r.prototype.toLchString=function(){return r=p(y(this.rgba)),t=r.l,a=r.c,n=r.h,(u=r.a)<1?"lch("+t+"% "+a+" "+n+" / "+u+")":"lch("+t+"% "+a+" "+n+")";var r,t,a,n,u},t.string.push([s,"lch"]),t.object.push([v,"lch"])};
diff --git a/node_modules/colord/plugins/lch.mjs b/node_modules/colord/plugins/lch.mjs
new file mode 100644
index 0000000..cd7624a
--- /dev/null
+++ b/node_modules/colord/plugins/lch.mjs
@@ -0,0 +1 @@
+var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},a=function(r,t,a){return void 0===t&&(t=0),void 0===a&&(a=Math.pow(10,t)),Math.round(a*r)/a+0},n=function(r,t,a){return void 0===t&&(t=0),void 0===a&&(a=1),r>a?a:r>t?r:t},u=function(r){var t=r/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},h=function(r){return 255*(r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r)},o=96.422,e=100,c=82.521,i=function(r){var t,a,u={x:.9555766*(t=r).x+-.0230393*t.y+.0631636*t.z,y:-.0282895*t.x+1.0099416*t.y+.0210077*t.z,z:.0122982*t.x+-.020483*t.y+1.3299098*t.z};return a={r:h(.032404542*u.x-.015371385*u.y-.004985314*u.z),g:h(-.00969266*u.x+.018760108*u.y+41556e-8*u.z),b:h(556434e-9*u.x-.002040259*u.y+.010572252*u.z),a:r.a},{r:n(a.r,0,255),g:n(a.g,0,255),b:n(a.b,0,255),a:n(a.a)}},l=function(r){var t=u(r.r),a=u(r.g),h=u(r.b);return function(r){return{x:n(r.x,0,o),y:n(r.y,0,e),z:n(r.z,0,c),a:n(r.a)}}(function(r){return{x:1.0478112*r.x+.0228866*r.y+-.050127*r.z,y:.0295424*r.x+.9904844*r.y+-.0170491*r.z,z:-.0092345*r.x+.0150436*r.y+.7521316*r.z,a:r.a}}({x:100*(.4124564*t+.3575761*a+.1804375*h),y:100*(.2126729*t+.7151522*a+.072175*h),z:100*(.0193339*t+.119192*a+.9503041*h),a:r.a}))},f=216/24389,b=24389/27,d=function(r){return{l:n(r.l,0,100),c:r.c,h:(t=r.h,(t=isFinite(t)?t%360:0)>0?t:t+360),a:r.a};var t},p=function(r){return{l:a(r.l,2),c:a(r.c,2),h:a(r.h,2),a:a(r.a,3)}},v=function(r){var a=r.l,n=r.c,u=r.h,h=r.a,o=void 0===h?1:h;if(!t(a)||!t(n)||!t(u))return null;var e=d({l:Number(a),c:Number(n),h:Number(u),a:Number(o)});return M(e)},y=function(r){var t=function(r){var t=l(r),a=t.x/o,n=t.y/e,u=t.z/c;return a=a>f?Math.cbrt(a):(b*a+16)/116,{l:116*(n=n>f?Math.cbrt(n):(b*n+16)/116)-16,a:500*(a-n),b:200*(n-(u=u>f?Math.cbrt(u):(b*u+16)/116)),alpha:t.a}}(r),n=a(t.a,3),u=a(t.b,3),h=Math.atan2(u,n)/Math.PI*180;return{l:t.l,c:Math.sqrt(n*n+u*u),h:h<0?h+360:h,a:t.alpha}},M=function(r){return t={l:r.l,a:r.c*Math.cos(r.h*Math.PI/180),b:r.c*Math.sin(r.h*Math.PI/180),alpha:r.a},n=t.a/500+(a=(t.l+16)/116),u=a-t.b/200,i({x:(Math.pow(n,3)>f?Math.pow(n,3):(116*n-16)/b)*o,y:(t.l>8?Math.pow((t.l+16)/116,3):t.l/b)*e,z:(Math.pow(u,3)>f?Math.pow(u,3):(116*u-16)/b)*c,a:t.alpha});var t,a,n,u},x=/^lch\(\s*([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,s=function(t){var a=x.exec(t);if(!a)return null;var n,u,h=d({l:Number(a[1]),c:Number(a[2]),h:(n=a[3],u=a[4],void 0===u&&(u="deg"),Number(n)*(r[u]||1)),a:void 0===a[5]?1:Number(a[5])/(a[6]?100:1)});return M(h)};export default function(r,t){r.prototype.toLch=function(){return p(y(this.rgba))},r.prototype.toLchString=function(){return r=p(y(this.rgba)),t=r.l,a=r.c,n=r.h,(u=r.a)<1?"lch("+t+"% "+a+" "+n+" / "+u+")":"lch("+t+"% "+a+" "+n+")";var r,t,a,n,u},t.string.push([s,"lch"]),t.object.push([v,"lch"])}
diff --git a/node_modules/colord/plugins/minify.d.ts b/node_modules/colord/plugins/minify.d.ts
new file mode 100644
index 0000000..d54d19d
--- /dev/null
+++ b/node_modules/colord/plugins/minify.d.ts
@@ -0,0 +1,20 @@
+import { Plugin } from "../extend";
+interface MinificationOptions {
+ hex?: boolean;
+ alphaHex?: boolean;
+ rgb?: boolean;
+ hsl?: boolean;
+ name?: boolean;
+ transparent?: boolean;
+}
+declare module "../colord" {
+ interface Colord {
+ /** Returns the shortest string representation of the color */
+ minify(options?: MinificationOptions): string;
+ }
+}
+/**
+ * A plugin adding a color minification utilities.
+ */
+declare const minifyPlugin: Plugin;
+export default minifyPlugin;
diff --git a/node_modules/colord/plugins/minify.js b/node_modules/colord/plugins/minify.js
new file mode 100644
index 0000000..30dfdec
--- /dev/null
+++ b/node_modules/colord/plugins/minify.js
@@ -0,0 +1 @@
+module.exports=function(t){var r=function(t){var r,n,e,i=t.toHex(),a=t.alpha(),h=i.split(""),s=h[1],o=h[2],u=h[3],l=h[4],p=h[5],f=h[6],g=h[7],v=h[8];if(a>0&&a<1&&(r=parseInt(g+v,16)/255,void 0===(n=2)&&(n=0),void 0===e&&(e=Math.pow(10,n)),Math.round(e*r)/e+0!==a))return null;if(s===o&&u===l&&p===f){if(1===a)return"#"+s+u+p;if(g===v)return"#"+s+u+p+g}return i},n=function(t){return t>0&&t<1?t.toString().replace("0.","."):t};t.prototype.minify=function(t){void 0===t&&(t={});var e=this.toRgb(),i=n(e.r),a=n(e.g),h=n(e.b),s=this.toHsl(),o=n(s.h),u=n(s.s),l=n(s.l),p=n(this.alpha()),f=Object.assign({hex:!0,rgb:!0,hsl:!0},t),g=[];if(f.hex&&(1===p||f.alphaHex)){var v=r(this);v&&g.push(v)}if(f.rgb&&g.push(1===p?"rgb("+i+","+a+","+h+")":"rgba("+i+","+a+","+h+","+p+")"),f.hsl&&g.push(1===p?"hsl("+o+","+u+"%,"+l+"%)":"hsla("+o+","+u+"%,"+l+"%,"+p+")"),f.transparent&&0===i&&0===a&&0===h&&0===p)g.push("transparent");else if(1===p&&f.name&&"function"==typeof this.toName){var c=this.toName();c&&g.push(c)}return function(t){for(var r=t[0],n=1;n<t.length;n++)t[n].length<r.length&&(r=t[n]);return r}(g)}};
diff --git a/node_modules/colord/plugins/minify.mjs b/node_modules/colord/plugins/minify.mjs
new file mode 100644
index 0000000..7d0061b
--- /dev/null
+++ b/node_modules/colord/plugins/minify.mjs
@@ -0,0 +1 @@
+export default function(t){var r=function(t){var r,n,e,a=t.toHex(),i=t.alpha(),h=a.split(""),s=h[1],o=h[2],u=h[3],l=h[4],p=h[5],f=h[6],g=h[7],v=h[8];if(i>0&&i<1&&(r=parseInt(g+v,16)/255,void 0===(n=2)&&(n=0),void 0===e&&(e=Math.pow(10,n)),Math.round(e*r)/e+0!==i))return null;if(s===o&&u===l&&p===f){if(1===i)return"#"+s+u+p;if(g===v)return"#"+s+u+p+g}return a},n=function(t){return t>0&&t<1?t.toString().replace("0.","."):t};t.prototype.minify=function(t){void 0===t&&(t={});var e=this.toRgb(),a=n(e.r),i=n(e.g),h=n(e.b),s=this.toHsl(),o=n(s.h),u=n(s.s),l=n(s.l),p=n(this.alpha()),f=Object.assign({hex:!0,rgb:!0,hsl:!0},t),g=[];if(f.hex&&(1===p||f.alphaHex)){var v=r(this);v&&g.push(v)}if(f.rgb&&g.push(1===p?"rgb("+a+","+i+","+h+")":"rgba("+a+","+i+","+h+","+p+")"),f.hsl&&g.push(1===p?"hsl("+o+","+u+"%,"+l+"%)":"hsla("+o+","+u+"%,"+l+"%,"+p+")"),f.transparent&&0===a&&0===i&&0===h&&0===p)g.push("transparent");else if(1===p&&f.name&&"function"==typeof this.toName){var c=this.toName();c&&g.push(c)}return function(t){for(var r=t[0],n=1;n<t.length;n++)t[n].length<r.length&&(r=t[n]);return r}(g)}}
diff --git a/node_modules/colord/plugins/mix.d.ts b/node_modules/colord/plugins/mix.d.ts
new file mode 100644
index 0000000..5aa1c90
--- /dev/null
+++ b/node_modules/colord/plugins/mix.d.ts
@@ -0,0 +1,27 @@
+import { AnyColor } from "../types";
+import { Plugin } from "../extend";
+declare module "../colord" {
+ interface Colord {
+ /**
+ * Produces a mixture of two colors through CIE LAB color space and returns a new Colord instance.
+ */
+ mix(color2: AnyColor | Colord, ratio?: number): Colord;
+ /**
+ * Generates a tints palette based on original color.
+ */
+ tints(count?: number): Colord[];
+ /**
+ * Generates a shades palette based on original color.
+ */
+ shades(count?: number): Colord[];
+ /**
+ * Generates a tones palette based on original color.
+ */
+ tones(count?: number): Colord[];
+ }
+}
+/**
+ * A plugin adding a color mixing utilities.
+ */
+declare const mixPlugin: Plugin;
+export default mixPlugin;
diff --git a/node_modules/colord/plugins/mix.js b/node_modules/colord/plugins/mix.js
new file mode 100644
index 0000000..d823d97
--- /dev/null
+++ b/node_modules/colord/plugins/mix.js
@@ -0,0 +1 @@
+var t=function(t,a,n){return void 0===a&&(a=0),void 0===n&&(n=1),t>n?n:t>a?t:a},a=function(t){var a=t/255;return a<.04045?a/12.92:Math.pow((a+.055)/1.055,2.4)},n=function(t){return 255*(t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t)},r=96.422,o=100,u=82.521,e=function(a){var r,o,u={x:.9555766*(r=a).x+-.0230393*r.y+.0631636*r.z,y:-.0282895*r.x+1.0099416*r.y+.0210077*r.z,z:.0122982*r.x+-.020483*r.y+1.3299098*r.z};return o={r:n(.032404542*u.x-.015371385*u.y-.004985314*u.z),g:n(-.00969266*u.x+.018760108*u.y+41556e-8*u.z),b:n(556434e-9*u.x-.002040259*u.y+.010572252*u.z),a:a.a},{r:t(o.r,0,255),g:t(o.g,0,255),b:t(o.b,0,255),a:t(o.a)}},i=function(n){var e=a(n.r),i=a(n.g),p=a(n.b);return function(a){return{x:t(a.x,0,r),y:t(a.y,0,o),z:t(a.z,0,u),a:t(a.a)}}(function(t){return{x:1.0478112*t.x+.0228866*t.y+-.050127*t.z,y:.0295424*t.x+.9904844*t.y+-.0170491*t.z,z:-.0092345*t.x+.0150436*t.y+.7521316*t.z,a:t.a}}({x:100*(.4124564*e+.3575761*i+.1804375*p),y:100*(.2126729*e+.7151522*i+.072175*p),z:100*(.0193339*e+.119192*i+.9503041*p),a:n.a}))},p=216/24389,h=24389/27,f=function(t){var a=i(t),n=a.x/r,e=a.y/o,f=a.z/u;return n=n>p?Math.cbrt(n):(h*n+16)/116,{l:116*(e=e>p?Math.cbrt(e):(h*e+16)/116)-16,a:500*(n-e),b:200*(e-(f=f>p?Math.cbrt(f):(h*f+16)/116)),alpha:a.a}},c=function(a,n,i){var c,y=f(a),x=f(n);return function(t){var a=(t.l+16)/116,n=t.a/500+a,i=a-t.b/200;return e({x:(Math.pow(n,3)>p?Math.pow(n,3):(116*n-16)/h)*r,y:(t.l>8?Math.pow((t.l+16)/116,3):t.l/h)*o,z:(Math.pow(i,3)>p?Math.pow(i,3):(116*i-16)/h)*u,a:t.alpha})}({l:t((c={l:y.l*(1-i)+x.l*i,a:y.a*(1-i)+x.a*i,b:y.b*(1-i)+x.b*i,alpha:y.alpha*(1-i)+x.alpha*i}).l,0,400),a:c.a,b:c.b,alpha:t(c.alpha)})};module.exports=function(t){function a(t,a,n){void 0===n&&(n=5);for(var r=[],o=1/(n-1),u=0;u<=n-1;u++)r.push(t.mix(a,o*u));return r}t.prototype.mix=function(a,n){void 0===n&&(n=.5);var r=a instanceof t?a:new t(a),o=c(this.toRgb(),r.toRgb(),n);return new t(o)},t.prototype.tints=function(t){return a(this,"#fff",t)},t.prototype.shades=function(t){return a(this,"#000",t)},t.prototype.tones=function(t){return a(this,"#808080",t)}};
diff --git a/node_modules/colord/plugins/mix.mjs b/node_modules/colord/plugins/mix.mjs
new file mode 100644
index 0000000..d8841cc
--- /dev/null
+++ b/node_modules/colord/plugins/mix.mjs
@@ -0,0 +1 @@
+var t=function(t,a,n){return void 0===a&&(a=0),void 0===n&&(n=1),t>n?n:t>a?t:a},a=function(t){var a=t/255;return a<.04045?a/12.92:Math.pow((a+.055)/1.055,2.4)},n=function(t){return 255*(t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t)},r=96.422,o=100,u=82.521,e=function(a){var r,o,u={x:.9555766*(r=a).x+-.0230393*r.y+.0631636*r.z,y:-.0282895*r.x+1.0099416*r.y+.0210077*r.z,z:.0122982*r.x+-.020483*r.y+1.3299098*r.z};return o={r:n(.032404542*u.x-.015371385*u.y-.004985314*u.z),g:n(-.00969266*u.x+.018760108*u.y+41556e-8*u.z),b:n(556434e-9*u.x-.002040259*u.y+.010572252*u.z),a:a.a},{r:t(o.r,0,255),g:t(o.g,0,255),b:t(o.b,0,255),a:t(o.a)}},i=function(n){var e=a(n.r),i=a(n.g),p=a(n.b);return function(a){return{x:t(a.x,0,r),y:t(a.y,0,o),z:t(a.z,0,u),a:t(a.a)}}(function(t){return{x:1.0478112*t.x+.0228866*t.y+-.050127*t.z,y:.0295424*t.x+.9904844*t.y+-.0170491*t.z,z:-.0092345*t.x+.0150436*t.y+.7521316*t.z,a:t.a}}({x:100*(.4124564*e+.3575761*i+.1804375*p),y:100*(.2126729*e+.7151522*i+.072175*p),z:100*(.0193339*e+.119192*i+.9503041*p),a:n.a}))},p=216/24389,h=24389/27,f=function(t){var a=i(t),n=a.x/r,e=a.y/o,f=a.z/u;return n=n>p?Math.cbrt(n):(h*n+16)/116,{l:116*(e=e>p?Math.cbrt(e):(h*e+16)/116)-16,a:500*(n-e),b:200*(e-(f=f>p?Math.cbrt(f):(h*f+16)/116)),alpha:a.a}},c=function(a,n,i){var c,y=f(a),x=f(n);return function(t){var a=(t.l+16)/116,n=t.a/500+a,i=a-t.b/200;return e({x:(Math.pow(n,3)>p?Math.pow(n,3):(116*n-16)/h)*r,y:(t.l>8?Math.pow((t.l+16)/116,3):t.l/h)*o,z:(Math.pow(i,3)>p?Math.pow(i,3):(116*i-16)/h)*u,a:t.alpha})}({l:t((c={l:y.l*(1-i)+x.l*i,a:y.a*(1-i)+x.a*i,b:y.b*(1-i)+x.b*i,alpha:y.alpha*(1-i)+x.alpha*i}).l,0,400),a:c.a,b:c.b,alpha:t(c.alpha)})};export default function(t){function a(t,a,n){void 0===n&&(n=5);for(var r=[],o=1/(n-1),u=0;u<=n-1;u++)r.push(t.mix(a,o*u));return r}t.prototype.mix=function(a,n){void 0===n&&(n=.5);var r=a instanceof t?a:new t(a),o=c(this.toRgb(),r.toRgb(),n);return new t(o)},t.prototype.tints=function(t){return a(this,"#fff",t)},t.prototype.shades=function(t){return a(this,"#000",t)},t.prototype.tones=function(t){return a(this,"#808080",t)}}
diff --git a/node_modules/colord/plugins/names.d.ts b/node_modules/colord/plugins/names.d.ts
new file mode 100644
index 0000000..81b865f
--- /dev/null
+++ b/node_modules/colord/plugins/names.d.ts
@@ -0,0 +1,19 @@
+import { Plugin } from "../extend";
+interface ConvertOptions {
+ closest?: boolean;
+}
+declare module "../colord" {
+ interface Colord {
+ /** Finds CSS color keyword that matches with the color value */
+ toName(options?: ConvertOptions): string | undefined;
+ }
+}
+/**
+ * Plugin to work with named colors.
+ * Adds a parser to read CSS color names and `toName` method.
+ * See https://www.w3.org/TR/css-color-4/#named-colors
+ * Supports 'transparent' string as defined in
+ * https://drafts.csswg.org/css-color/#transparent-color
+ */
+declare const namesPlugin: Plugin;
+export default namesPlugin;
diff --git a/node_modules/colord/plugins/names.js b/node_modules/colord/plugins/names.js
new file mode 100644
index 0000000..673b122
--- /dev/null
+++ b/node_modules/colord/plugins/names.js
@@ -0,0 +1 @@
+module.exports=function(e,f){var a={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},r={};for(var d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var d,i,o=r[this.toHex()];if(o)return o;if(null==f?void 0:f.closest){var n=this.toRgb(),t=1/0,b="black";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(var g in a){var u=(d=n,i=l[g],Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2));u<t&&(t=u,b=g)}return b}};f.string.push([function(f){var r=f.toLowerCase(),d="transparent"===r?"#0000":a[r];return d?new e(d).toRgb():null},"name"])};
diff --git a/node_modules/colord/plugins/names.mjs b/node_modules/colord/plugins/names.mjs
new file mode 100644
index 0000000..89cff85
--- /dev/null
+++ b/node_modules/colord/plugins/names.mjs
@@ -0,0 +1 @@
+export default function(e,f){var a={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},r={};for(var d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var d,i,n=r[this.toHex()];if(n)return n;if(null==f?void 0:f.closest){var o=this.toRgb(),t=1/0,b="black";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(var g in a){var u=(d=o,i=l[g],Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2));u<t&&(t=u,b=g)}return b}};f.string.push([function(f){var r=f.toLowerCase(),d="transparent"===r?"#0000":a[r];return d?new e(d).toRgb():null},"name"])}
diff --git a/node_modules/colord/plugins/xyz.d.ts b/node_modules/colord/plugins/xyz.d.ts
new file mode 100644
index 0000000..f2ff711
--- /dev/null
+++ b/node_modules/colord/plugins/xyz.d.ts
@@ -0,0 +1,14 @@
+import { XyzaColor } from "../types";
+import { Plugin } from "../extend";
+declare module "../colord" {
+ interface Colord {
+ toXyz(): XyzaColor;
+ }
+}
+/**
+ * A plugin adding support for CIE XYZ colorspace.
+ * Wikipedia: https://en.wikipedia.org/wiki/CIE_1931_color_space
+ * Helpful article: https://www.sttmedia.com/colormodel-xyz
+ */
+declare const xyzPlugin: Plugin;
+export default xyzPlugin;
diff --git a/node_modules/colord/plugins/xyz.js b/node_modules/colord/plugins/xyz.js
new file mode 100644
index 0000000..ffe0b96
--- /dev/null
+++ b/node_modules/colord/plugins/xyz.js
@@ -0,0 +1 @@
+var r=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=Math.pow(10,n)),Math.round(t*r)/t+0},t=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=1),r>t?t:r>n?r:n},u=function(r){var n=r/255;return n<.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)},o=function(r){return 255*(r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r)},a=96.422,e=100,y=82.521,x=function(r){return{x:t(r.x,0,a),y:t(r.y,0,e),z:t(r.z,0,y),a:t(r.a)}},z=function(n){var t=n.x,u=n.y,o=n.z,a=n.a,e=void 0===a?1:a;if(!r(t)||!r(u)||!r(o))return null;var y=x({x:Number(t),y:Number(u),z:Number(o),a:Number(e)});return i(y)},i=function(r){var n,u,a={x:.9555766*(n=r).x+-.0230393*n.y+.0631636*n.z,y:-.0282895*n.x+1.0099416*n.y+.0210077*n.z,z:.0122982*n.x+-.020483*n.y+1.3299098*n.z};return u={r:o(.032404542*a.x-.015371385*a.y-.004985314*a.z),g:o(-.00969266*a.x+.018760108*a.y+41556e-8*a.z),b:o(556434e-9*a.x-.002040259*a.y+.010572252*a.z),a:r.a},{r:t(u.r,0,255),g:t(u.g,0,255),b:t(u.b,0,255),a:t(u.a)}};module.exports=function(r,t){r.prototype.toXyz=function(){return function(r){return{x:n(r.x,2),y:n(r.y,2),z:n(r.z,2),a:n(r.a,3)}}((t=u((r=this.rgba).r),o=u(r.g),a=u(r.b),x({x:1.0478112*(e={x:100*(.4124564*t+.3575761*o+.1804375*a),y:100*(.2126729*t+.7151522*o+.072175*a),z:100*(.0193339*t+.119192*o+.9503041*a),a:r.a}).x+.0228866*e.y+-.050127*e.z,y:.0295424*e.x+.9904844*e.y+-.0170491*e.z,z:-.0092345*e.x+.0150436*e.y+.7521316*e.z,a:e.a})));var r,t,o,a,e},t.object.push([z,"xyz"])};
diff --git a/node_modules/colord/plugins/xyz.mjs b/node_modules/colord/plugins/xyz.mjs
new file mode 100644
index 0000000..0c60d65
--- /dev/null
+++ b/node_modules/colord/plugins/xyz.mjs
@@ -0,0 +1 @@
+var r=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=Math.pow(10,n)),Math.round(t*r)/t+0},t=function(r,n,t){return void 0===n&&(n=0),void 0===t&&(t=1),r>t?t:r>n?r:n},u=function(r){var n=r/255;return n<.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)},o=function(r){return 255*(r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r)},a=96.422,e=100,y=82.521,x=function(r){return{x:t(r.x,0,a),y:t(r.y,0,e),z:t(r.z,0,y),a:t(r.a)}},z=function(n){var t=n.x,u=n.y,o=n.z,a=n.a,e=void 0===a?1:a;if(!r(t)||!r(u)||!r(o))return null;var y=x({x:Number(t),y:Number(u),z:Number(o),a:Number(e)});return i(y)},i=function(r){var n,u,a={x:.9555766*(n=r).x+-.0230393*n.y+.0631636*n.z,y:-.0282895*n.x+1.0099416*n.y+.0210077*n.z,z:.0122982*n.x+-.020483*n.y+1.3299098*n.z};return u={r:o(.032404542*a.x-.015371385*a.y-.004985314*a.z),g:o(-.00969266*a.x+.018760108*a.y+41556e-8*a.z),b:o(556434e-9*a.x-.002040259*a.y+.010572252*a.z),a:r.a},{r:t(u.r,0,255),g:t(u.g,0,255),b:t(u.b,0,255),a:t(u.a)}};export default function(r,t){r.prototype.toXyz=function(){return function(r){return{x:n(r.x,2),y:n(r.y,2),z:n(r.z,2),a:n(r.a,3)}}((t=u((r=this.rgba).r),o=u(r.g),a=u(r.b),x({x:1.0478112*(e={x:100*(.4124564*t+.3575761*o+.1804375*a),y:100*(.2126729*t+.7151522*o+.072175*a),z:100*(.0193339*t+.119192*o+.9503041*a),a:r.a}).x+.0228866*e.y+-.050127*e.z,y:.0295424*e.x+.9904844*e.y+-.0170491*e.z,z:-.0092345*e.x+.0150436*e.y+.7521316*e.z,a:e.a})));var r,t,o,a,e},t.object.push([z,"xyz"])}
diff --git a/node_modules/colord/random.d.ts b/node_modules/colord/random.d.ts
new file mode 100644
index 0000000..646d5fd
--- /dev/null
+++ b/node_modules/colord/random.d.ts
@@ -0,0 +1,2 @@
+import { Colord } from "./colord";
+export declare const random: () => Colord;
diff --git a/node_modules/colord/types.d.ts b/node_modules/colord/types.d.ts
new file mode 100644
index 0000000..dbd6fed
--- /dev/null
+++ b/node_modules/colord/types.d.ts
@@ -0,0 +1,67 @@
+export declare type RgbColor = {
+ r: number;
+ g: number;
+ b: number;
+};
+export declare type HslColor = {
+ h: number;
+ s: number;
+ l: number;
+};
+export declare type HsvColor = {
+ h: number;
+ s: number;
+ v: number;
+};
+export declare type HwbColor = {
+ h: number;
+ w: number;
+ b: number;
+};
+export interface XyzColor {
+ x: number;
+ y: number;
+ z: number;
+}
+export interface LabColor {
+ l: number;
+ a: number;
+ b: number;
+}
+export interface LchColor {
+ l: number;
+ c: number;
+ h: number;
+}
+export interface CmykColor {
+ c: number;
+ m: number;
+ y: number;
+ k: number;
+}
+declare type WithAlpha<O> = O & {
+ a: number;
+};
+export declare type RgbaColor = WithAlpha<RgbColor>;
+export declare type HslaColor = WithAlpha<HslColor>;
+export declare type HsvaColor = WithAlpha<HsvColor>;
+export declare type HwbaColor = WithAlpha<HwbColor>;
+export declare type XyzaColor = WithAlpha<XyzColor>;
+export declare type LabaColor = LabColor & {
+ alpha: number;
+};
+export declare type LchaColor = WithAlpha<LchColor>;
+export declare type CmykaColor = WithAlpha<CmykColor>;
+export declare type ObjectColor = RgbColor | RgbaColor | HslColor | HslaColor | HsvColor | HsvaColor | HwbColor | HwbaColor | XyzColor | XyzaColor | LabColor | LabaColor | LchColor | LchaColor | CmykColor | CmykaColor;
+export declare type AnyColor = string | ObjectColor;
+export declare type InputObject = Record<string, unknown>;
+export declare type Format = "name" | "hex" | "rgb" | "hsl" | "hsv" | "hwb" | "xyz" | "lab" | "lch" | "cmyk";
+export declare type Input = string | InputObject;
+export declare type ParseResult = [RgbaColor, Format];
+export declare type ParseFunction<I extends Input> = (input: I) => RgbaColor | null;
+export declare type Parser<I extends Input> = [ParseFunction<I>, Format];
+export declare type Parsers = {
+ string: Array<Parser<string>>;
+ object: Array<Parser<InputObject>>;
+};
+export {};
diff --git a/node_modules/known-css-properties/README.md b/node_modules/known-css-properties/README.md
index bc6b0fb..fa9503a 100644
--- a/node_modules/known-css-properties/README.md
+++ b/node_modules/known-css-properties/README.md
@@ -19,23 +19,23 @@
| Name | Versions |
|---|--:|
-| Chrome | 14 - 91 |
-| Firefox | 6 - 89 |
+| Chrome | 14 - 96 |
+| Firefox | 6 - 95 |
| Edge | 13 - 18 |
-| Safari | 6, 6.2, 7 - 9, 9.1, 10.0, 11.0, 11.1, 12.0, 12.1, 13.0, 13.1, 14, 14.1 |
+| Safari | 6, 6.2, 7 - 9, 9.1, 10.0, 11.0, 11.1, 12.0, 12.1, 13.0, 13.1, 14, 14.1, 15.1 |
| Internet Explorer | 8 - 11 |
| Opera | 12.10, 12.14, 12.15, 12.16, 36 - 40, 45, 56, 58 |
### Mobile
| Name | Versions |
|---|--:|
-| iOS Safari | 6 - 8, 8.3, 9.0, 9.3, 10.0, 10.2, 10.3, 11.0, 11.2, 11.3, 11.4, 12.0 , 12.1, 13.1, 14, 14.1 |
-| Chrome for Android | 30, 35, 37, 44, 46, 51, 55 - 62, 64, 66 - 76, 78 - 79, 81, 83 |
-| Firefox for Android | 47, 52 - 54, 57, 58, 62 - 64, 66, 68, 81, 85 |
+| iOS Safari | 6 - 8, 8.3, 9.0, 9.3, 10.0, 10.2, 10.3, 11.0, 11.2, 11.3, 11.4, 12.0 , 12.1, 13.1, 14, 14.1, 15.1 |
+| Chrome for Android | 30, 35, 37, 44, 46, 51, 55 - 62, 64, 66 - 76, 78 - 79, 81, 83, 91, 94, 96 |
+| Firefox for Android | 47, 52 - 54, 57, 58, 62 - 64, 66, 68, 81, 85, 91 |
| IE mobile | 11 |
| Opera Mobile | 42.7, 43, 47.1 |
-| Samsung Internet | 4.0, 6.4, 7.4, 8.2 |
-| UC Browser for Android | 11.2, 12.9, 13.1 |
+| Samsung Internet | 4.0, 6.4, 7.4, 8.2, 9.0, 14.2 |
+| UC Browser for Android | 11.2, 12.9, 12.10, 13.1, 13.4 |
## JavaScript API
diff --git a/node_modules/known-css-properties/data/all.json b/node_modules/known-css-properties/data/all.json
index 6d37ccf..b29a57b 100644
--- a/node_modules/known-css-properties/data/all.json
+++ b/node_modules/known-css-properties/data/all.json
@@ -1,5 +1,16 @@
{
"properties": [
+ "-epub-caption-side",
+ "-epub-hyphens",
+ "-epub-text-combine",
+ "-epub-text-emphasis",
+ "-epub-text-emphasis-color",
+ "-epub-text-emphasis-style",
+ "-epub-text-orientation",
+ "-epub-text-transform",
+ "-epub-word-break",
+ "-epub-writing-mode",
+ "-internal-text-autosizing-status",
"accelerator",
"accent-color",
"-wap-accesskey",
@@ -51,6 +62,7 @@
"-webkit-animation-timing-function",
"-webkit-animation-trigger",
"-webkit-animation",
+ "app-region",
"-webkit-app-region",
"appearance",
"-moz-appearance",
@@ -264,6 +276,7 @@
"color",
"color-adjust",
"-webkit-color-correction",
+ "-apple-color-filter",
"color-interpolation",
"color-interpolation-filters",
"color-profile",
@@ -345,6 +358,16 @@
"elevation",
"empty-cells",
"enable-background",
+ "epub-caption-side",
+ "epub-hyphens",
+ "epub-text-combine",
+ "epub-text-emphasis",
+ "epub-text-emphasis-color",
+ "epub-text-emphasis-style",
+ "epub-text-orientation",
+ "epub-text-transform",
+ "epub-word-break",
+ "epub-writing-mode",
"fallback",
"fill",
"fill-break",
@@ -532,6 +555,7 @@
"justify-content",
"-webkit-justify-content",
"justify-items",
+ "-webkit-justify-items",
"justify-self",
"-webkit-justify-self",
"kerning",
@@ -766,6 +790,8 @@
"pause",
"pause-after",
"pause-before",
+ "-apple-pay-button-style",
+ "-apple-pay-button-type",
"pen-action",
"perspective",
"-moz-perspective",
@@ -897,6 +923,7 @@
"-webkit-shape-padding",
"shape-rendering",
"size",
+ "size-adjust",
"snap-height",
"solid-color",
"solid-opacity",
@@ -1043,6 +1070,7 @@
"-ms-touch-action",
"-webkit-touch-callout",
"-ms-touch-select",
+ "-apple-trailing-word",
"transform",
"transform-box",
"-moz-transform",
diff --git a/node_modules/known-css-properties/index.d.ts b/node_modules/known-css-properties/index.d.ts
new file mode 100644
index 0000000..f31ec7b
--- /dev/null
+++ b/node_modules/known-css-properties/index.d.ts
@@ -0,0 +1,3 @@
+declare module "known-css-properties" {
+ export const all: string[];
+}
diff --git a/node_modules/known-css-properties/package.json b/node_modules/known-css-properties/package.json
index 302071d..144f34e 100644
--- a/node_modules/known-css-properties/package.json
+++ b/node_modules/known-css-properties/package.json
@@ -1,6 +1,6 @@
{
"name": "known-css-properties",
- "version": "0.23.0",
+ "version": "0.24.0",
"description": "List of known CSS properties",
"repository": "known-css/known-css-properties",
"main": "index.js",
@@ -47,9 +47,9 @@
},
"homepage": "https://github.com/known-css/known-css-properties#readme",
"devDependencies": {
- "axios": "0.21.1",
- "eslint": "7.30.0",
- "globby": "11.0.4",
+ "axios": "0.21.2",
+ "eslint": "8.4.1",
+ "globby": "12.0.2",
"lodash.sortby": "4.7.0",
"lodash.uniq": "4.5.0"
}
diff --git a/node_modules/lodash.clonedeep/LICENSE b/node_modules/lodash.clonedeep/LICENSE
deleted file mode 100644
index e0c69d5..0000000
--- a/node_modules/lodash.clonedeep/LICENSE
+++ /dev/null
@@ -1,47 +0,0 @@
-Copyright jQuery Foundation and other contributors <https://jquery.org/>
-
-Based on Underscore.js, copyright Jeremy Ashkenas,
-DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
-
-This software consists of voluntary contributions made by many
-individuals. For exact contribution history, see the revision history
-available at https://github.com/lodash/lodash
-
-The following license applies to all parts of this software except as
-documented below:
-
-====
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-====
-
-Copyright and related rights for sample code are waived via CC0. Sample
-code is defined as all source code displayed within the prose of the
-documentation.
-
-CC0: http://creativecommons.org/publicdomain/zero/1.0/
-
-====
-
-Files located in the node_modules and vendor directories are externally
-maintained libraries used by this software which have their own
-licenses; we recommend you read them, as their terms may differ from the
-terms above.
diff --git a/node_modules/lodash.clonedeep/README.md b/node_modules/lodash.clonedeep/README.md
deleted file mode 100644
index fee48e4..0000000
--- a/node_modules/lodash.clonedeep/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# lodash.clonedeep v4.5.0
-
-The [lodash](https://lodash.com/) method `_.cloneDeep` exported as a [Node.js](https://nodejs.org/) module.
-
-## Installation
-
-Using npm:
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash.clonedeep
-```
-
-In Node.js:
-```js
-var cloneDeep = require('lodash.clonedeep');
-```
-
-See the [documentation](https://lodash.com/docs#cloneDeep) or [package source](https://github.com/lodash/lodash/blob/4.5.0-npm-packages/lodash.clonedeep) for more details.
diff --git a/node_modules/lodash.clonedeep/index.js b/node_modules/lodash.clonedeep/index.js
deleted file mode 100644
index 1b0e502..0000000
--- a/node_modules/lodash.clonedeep/index.js
+++ /dev/null
@@ -1,1748 +0,0 @@
-/**
- * lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright jQuery Foundation and other contributors <https://jquery.org/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/** Used as references for various `Number` constants. */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
- arrayTag = '[object Array]',
- boolTag = '[object Boolean]',
- dateTag = '[object Date]',
- errorTag = '[object Error]',
- funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]',
- mapTag = '[object Map]',
- numberTag = '[object Number]',
- objectTag = '[object Object]',
- promiseTag = '[object Promise]',
- regexpTag = '[object RegExp]',
- setTag = '[object Set]',
- stringTag = '[object String]',
- symbolTag = '[object Symbol]',
- weakMapTag = '[object WeakMap]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
- dataViewTag = '[object DataView]',
- float32Tag = '[object Float32Array]',
- float64Tag = '[object Float64Array]',
- int8Tag = '[object Int8Array]',
- int16Tag = '[object Int16Array]',
- int32Tag = '[object Int32Array]',
- uint8Tag = '[object Uint8Array]',
- uint8ClampedTag = '[object Uint8ClampedArray]',
- uint16Tag = '[object Uint16Array]',
- uint32Tag = '[object Uint32Array]';
-
-/**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
-var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
-
-/** Used to match `RegExp` flags from their coerced string values. */
-var reFlags = /\w*$/;
-
-/** Used to detect host constructors (Safari). */
-var reIsHostCtor = /^\[object .+?Constructor\]$/;
-
-/** Used to detect unsigned integer values. */
-var reIsUint = /^(?:0|[1-9]\d*)$/;
-
-/** Used to identify `toStringTag` values supported by `_.clone`. */
-var cloneableTags = {};
-cloneableTags[argsTag] = cloneableTags[arrayTag] =
-cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
-cloneableTags[boolTag] = cloneableTags[dateTag] =
-cloneableTags[float32Tag] = cloneableTags[float64Tag] =
-cloneableTags[int8Tag] = cloneableTags[int16Tag] =
-cloneableTags[int32Tag] = cloneableTags[mapTag] =
-cloneableTags[numberTag] = cloneableTags[objectTag] =
-cloneableTags[regexpTag] = cloneableTags[setTag] =
-cloneableTags[stringTag] = cloneableTags[symbolTag] =
-cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
-cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
-cloneableTags[errorTag] = cloneableTags[funcTag] =
-cloneableTags[weakMapTag] = false;
-
-/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
-
-/** Detect free variable `exports`. */
-var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
-
-/** Detect free variable `module`. */
-var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
-
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
-
-/**
- * Adds the key-value `pair` to `map`.
- *
- * @private
- * @param {Object} map The map to modify.
- * @param {Array} pair The key-value pair to add.
- * @returns {Object} Returns `map`.
- */
-function addMapEntry(map, pair) {
- // Don't return `map.set` because it's not chainable in IE 11.
- map.set(pair[0], pair[1]);
- return map;
-}
-
-/**
- * Adds `value` to `set`.
- *
- * @private
- * @param {Object} set The set to modify.
- * @param {*} value The value to add.
- * @returns {Object} Returns `set`.
- */
-function addSetEntry(set, value) {
- // Don't return `set.add` because it's not chainable in IE 11.
- set.add(value);
- return set;
-}
-
-/**
- * A specialized version of `_.forEach` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns `array`.
- */
-function arrayEach(array, iteratee) {
- var index = -1,
- length = array ? array.length : 0;
-
- while (++index < length) {
- if (iteratee(array[index], index, array) === false) {
- break;
- }
- }
- return array;
-}
-
-/**
- * Appends the elements of `values` to `array`.
- *
- * @private
- * @param {Array} array The array to modify.
- * @param {Array} values The values to append.
- * @returns {Array} Returns `array`.
- */
-function arrayPush(array, values) {
- var index = -1,
- length = values.length,
- offset = array.length;
-
- while (++index < length) {
- array[offset + index] = values[index];
- }
- return array;
-}
-
-/**
- * A specialized version of `_.reduce` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {*} [accumulator] The initial value.
- * @param {boolean} [initAccum] Specify using the first element of `array` as
- * the initial value.
- * @returns {*} Returns the accumulated value.
- */
-function arrayReduce(array, iteratee, accumulator, initAccum) {
- var index = -1,
- length = array ? array.length : 0;
-
- if (initAccum && length) {
- accumulator = array[++index];
- }
- while (++index < length) {
- accumulator = iteratee(accumulator, array[index], index, array);
- }
- return accumulator;
-}
-
-/**
- * The base implementation of `_.times` without support for iteratee shorthands
- * or max array length checks.
- *
- * @private
- * @param {number} n The number of times to invoke `iteratee`.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the array of results.
- */
-function baseTimes(n, iteratee) {
- var index = -1,
- result = Array(n);
-
- while (++index < n) {
- result[index] = iteratee(index);
- }
- return result;
-}
-
-/**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function getValue(object, key) {
- return object == null ? undefined : object[key];
-}
-
-/**
- * Checks if `value` is a host object in IE < 9.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
- */
-function isHostObject(value) {
- // Many host objects are `Object` objects that can coerce to strings
- // despite having improperly defined `toString` methods.
- var result = false;
- if (value != null && typeof value.toString != 'function') {
- try {
- result = !!(value + '');
- } catch (e) {}
- }
- return result;
-}
-
-/**
- * Converts `map` to its key-value pairs.
- *
- * @private
- * @param {Object} map The map to convert.
- * @returns {Array} Returns the key-value pairs.
- */
-function mapToArray(map) {
- var index = -1,
- result = Array(map.size);
-
- map.forEach(function(value, key) {
- result[++index] = [key, value];
- });
- return result;
-}
-
-/**
- * Creates a unary function that invokes `func` with its argument transformed.
- *
- * @private
- * @param {Function} func The function to wrap.
- * @param {Function} transform The argument transform.
- * @returns {Function} Returns the new function.
- */
-function overArg(func, transform) {
- return function(arg) {
- return func(transform(arg));
- };
-}
-
-/**
- * Converts `set` to an array of its values.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the values.
- */
-function setToArray(set) {
- var index = -1,
- result = Array(set.size);
-
- set.forEach(function(value) {
- result[++index] = value;
- });
- return result;
-}
-
-/** Used for built-in method references. */
-var arrayProto = Array.prototype,
- funcProto = Function.prototype,
- objectProto = Object.prototype;
-
-/** Used to detect overreaching core-js shims. */
-var coreJsData = root['__core-js_shared__'];
-
-/** Used to detect methods masquerading as native. */
-var maskSrcKey = (function() {
- var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
- return uid ? ('Symbol(src)_1.' + uid) : '';
-}());
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var objectToString = objectProto.toString;
-
-/** Used to detect if a method is native. */
-var reIsNative = RegExp('^' +
- funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
- .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-);
-
-/** Built-in value references. */
-var Buffer = moduleExports ? root.Buffer : undefined,
- Symbol = root.Symbol,
- Uint8Array = root.Uint8Array,
- getPrototype = overArg(Object.getPrototypeOf, Object),
- objectCreate = Object.create,
- propertyIsEnumerable = objectProto.propertyIsEnumerable,
- splice = arrayProto.splice;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeGetSymbols = Object.getOwnPropertySymbols,
- nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
- nativeKeys = overArg(Object.keys, Object);
-
-/* Built-in method references that are verified to be native. */
-var DataView = getNative(root, 'DataView'),
- Map = getNative(root, 'Map'),
- Promise = getNative(root, 'Promise'),
- Set = getNative(root, 'Set'),
- WeakMap = getNative(root, 'WeakMap'),
- nativeCreate = getNative(Object, 'create');
-
-/** Used to detect maps, sets, and weakmaps. */
-var dataViewCtorString = toSource(DataView),
- mapCtorString = toSource(Map),
- promiseCtorString = toSource(Promise),
- setCtorString = toSource(Set),
- weakMapCtorString = toSource(WeakMap);
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = Symbol ? Symbol.prototype : undefined,
- symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
-
-/**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Hash(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-/**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
-function hashClear() {
- this.__data__ = nativeCreate ? nativeCreate(null) : {};
-}
-
-/**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function hashDelete(key) {
- return this.has(key) && delete this.__data__[key];
-}
-
-/**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function hashGet(key) {
- var data = this.__data__;
- if (nativeCreate) {
- var result = data[key];
- return result === HASH_UNDEFINED ? undefined : result;
- }
- return hasOwnProperty.call(data, key) ? data[key] : undefined;
-}
-
-/**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function hashHas(key) {
- var data = this.__data__;
- return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
-}
-
-/**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
-function hashSet(key, value) {
- var data = this.__data__;
- data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
- return this;
-}
-
-// Add methods to `Hash`.
-Hash.prototype.clear = hashClear;
-Hash.prototype['delete'] = hashDelete;
-Hash.prototype.get = hashGet;
-Hash.prototype.has = hashHas;
-Hash.prototype.set = hashSet;
-
-/**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function ListCache(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-/**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
-function listCacheClear() {
- this.__data__ = [];
-}
-
-/**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function listCacheDelete(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- if (index < 0) {
- return false;
- }
- var lastIndex = data.length - 1;
- if (index == lastIndex) {
- data.pop();
- } else {
- splice.call(data, index, 1);
- }
- return true;
-}
-
-/**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function listCacheGet(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- return index < 0 ? undefined : data[index][1];
-}
-
-/**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function listCacheHas(key) {
- return assocIndexOf(this.__data__, key) > -1;
-}
-
-/**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
-function listCacheSet(key, value) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- if (index < 0) {
- data.push([key, value]);
- } else {
- data[index][1] = value;
- }
- return this;
-}
-
-// Add methods to `ListCache`.
-ListCache.prototype.clear = listCacheClear;
-ListCache.prototype['delete'] = listCacheDelete;
-ListCache.prototype.get = listCacheGet;
-ListCache.prototype.has = listCacheHas;
-ListCache.prototype.set = listCacheSet;
-
-/**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function MapCache(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-/**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
-function mapCacheClear() {
- this.__data__ = {
- 'hash': new Hash,
- 'map': new (Map || ListCache),
- 'string': new Hash
- };
-}
-
-/**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function mapCacheDelete(key) {
- return getMapData(this, key)['delete'](key);
-}
-
-/**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function mapCacheGet(key) {
- return getMapData(this, key).get(key);
-}
-
-/**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function mapCacheHas(key) {
- return getMapData(this, key).has(key);
-}
-
-/**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
-function mapCacheSet(key, value) {
- getMapData(this, key).set(key, value);
- return this;
-}
-
-// Add methods to `MapCache`.
-MapCache.prototype.clear = mapCacheClear;
-MapCache.prototype['delete'] = mapCacheDelete;
-MapCache.prototype.get = mapCacheGet;
-MapCache.prototype.has = mapCacheHas;
-MapCache.prototype.set = mapCacheSet;
-
-/**
- * Creates a stack cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Stack(entries) {
- this.__data__ = new ListCache(entries);
-}
-
-/**
- * Removes all key-value entries from the stack.
- *
- * @private
- * @name clear
- * @memberOf Stack
- */
-function stackClear() {
- this.__data__ = new ListCache;
-}
-
-/**
- * Removes `key` and its value from the stack.
- *
- * @private
- * @name delete
- * @memberOf Stack
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function stackDelete(key) {
- return this.__data__['delete'](key);
-}
-
-/**
- * Gets the stack value for `key`.
- *
- * @private
- * @name get
- * @memberOf Stack
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function stackGet(key) {
- return this.__data__.get(key);
-}
-
-/**
- * Checks if a stack value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Stack
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function stackHas(key) {
- return this.__data__.has(key);
-}
-
-/**
- * Sets the stack `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Stack
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the stack cache instance.
- */
-function stackSet(key, value) {
- var cache = this.__data__;
- if (cache instanceof ListCache) {
- var pairs = cache.__data__;
- if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
- pairs.push([key, value]);
- return this;
- }
- cache = this.__data__ = new MapCache(pairs);
- }
- cache.set(key, value);
- return this;
-}
-
-// Add methods to `Stack`.
-Stack.prototype.clear = stackClear;
-Stack.prototype['delete'] = stackDelete;
-Stack.prototype.get = stackGet;
-Stack.prototype.has = stackHas;
-Stack.prototype.set = stackSet;
-
-/**
- * Creates an array of the enumerable property names of the array-like `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @param {boolean} inherited Specify returning inherited property names.
- * @returns {Array} Returns the array of property names.
- */
-function arrayLikeKeys(value, inherited) {
- // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
- // Safari 9 makes `arguments.length` enumerable in strict mode.
- var result = (isArray(value) || isArguments(value))
- ? baseTimes(value.length, String)
- : [];
-
- var length = result.length,
- skipIndexes = !!length;
-
- for (var key in value) {
- if ((inherited || hasOwnProperty.call(value, key)) &&
- !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
- result.push(key);
- }
- }
- return result;
-}
-
-/**
- * Assigns `value` to `key` of `object` if the existing value is not equivalent
- * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function assignValue(object, key, value) {
- var objValue = object[key];
- if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
- (value === undefined && !(key in object))) {
- object[key] = value;
- }
-}
-
-/**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function assocIndexOf(array, key) {
- var length = array.length;
- while (length--) {
- if (eq(array[length][0], key)) {
- return length;
- }
- }
- return -1;
-}
-
-/**
- * The base implementation of `_.assign` without support for multiple sources
- * or `customizer` functions.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @returns {Object} Returns `object`.
- */
-function baseAssign(object, source) {
- return object && copyObject(source, keys(source), object);
-}
-
-/**
- * The base implementation of `_.clone` and `_.cloneDeep` which tracks
- * traversed objects.
- *
- * @private
- * @param {*} value The value to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @param {boolean} [isFull] Specify a clone including symbols.
- * @param {Function} [customizer] The function to customize cloning.
- * @param {string} [key] The key of `value`.
- * @param {Object} [object] The parent object of `value`.
- * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
- * @returns {*} Returns the cloned value.
- */
-function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
- var result;
- if (customizer) {
- result = object ? customizer(value, key, object, stack) : customizer(value);
- }
- if (result !== undefined) {
- return result;
- }
- if (!isObject(value)) {
- return value;
- }
- var isArr = isArray(value);
- if (isArr) {
- result = initCloneArray(value);
- if (!isDeep) {
- return copyArray(value, result);
- }
- } else {
- var tag = getTag(value),
- isFunc = tag == funcTag || tag == genTag;
-
- if (isBuffer(value)) {
- return cloneBuffer(value, isDeep);
- }
- if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
- if (isHostObject(value)) {
- return object ? value : {};
- }
- result = initCloneObject(isFunc ? {} : value);
- if (!isDeep) {
- return copySymbols(value, baseAssign(result, value));
- }
- } else {
- if (!cloneableTags[tag]) {
- return object ? value : {};
- }
- result = initCloneByTag(value, tag, baseClone, isDeep);
- }
- }
- // Check for circular references and return its corresponding clone.
- stack || (stack = new Stack);
- var stacked = stack.get(value);
- if (stacked) {
- return stacked;
- }
- stack.set(value, result);
-
- if (!isArr) {
- var props = isFull ? getAllKeys(value) : keys(value);
- }
- arrayEach(props || value, function(subValue, key) {
- if (props) {
- key = subValue;
- subValue = value[key];
- }
- // Recursively populate clone (susceptible to call stack limits).
- assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
- });
- return result;
-}
-
-/**
- * The base implementation of `_.create` without support for assigning
- * properties to the created object.
- *
- * @private
- * @param {Object} prototype The object to inherit from.
- * @returns {Object} Returns the new object.
- */
-function baseCreate(proto) {
- return isObject(proto) ? objectCreate(proto) : {};
-}
-
-/**
- * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
- * `keysFunc` and `symbolsFunc` to get the enumerable property names and
- * symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @param {Function} symbolsFunc The function to get the symbols of `object`.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function baseGetAllKeys(object, keysFunc, symbolsFunc) {
- var result = keysFunc(object);
- return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
-}
-
-/**
- * The base implementation of `getTag`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-function baseGetTag(value) {
- return objectToString.call(value);
-}
-
-/**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- * else `false`.
- */
-function baseIsNative(value) {
- if (!isObject(value) || isMasked(value)) {
- return false;
- }
- var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
- return pattern.test(toSource(value));
-}
-
-/**
- * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function baseKeys(object) {
- if (!isPrototype(object)) {
- return nativeKeys(object);
- }
- var result = [];
- for (var key in Object(object)) {
- if (hasOwnProperty.call(object, key) && key != 'constructor') {
- result.push(key);
- }
- }
- return result;
-}
-
-/**
- * Creates a clone of `buffer`.
- *
- * @private
- * @param {Buffer} buffer The buffer to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Buffer} Returns the cloned buffer.
- */
-function cloneBuffer(buffer, isDeep) {
- if (isDeep) {
- return buffer.slice();
- }
- var result = new buffer.constructor(buffer.length);
- buffer.copy(result);
- return result;
-}
-
-/**
- * Creates a clone of `arrayBuffer`.
- *
- * @private
- * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
- * @returns {ArrayBuffer} Returns the cloned array buffer.
- */
-function cloneArrayBuffer(arrayBuffer) {
- var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
- new Uint8Array(result).set(new Uint8Array(arrayBuffer));
- return result;
-}
-
-/**
- * Creates a clone of `dataView`.
- *
- * @private
- * @param {Object} dataView The data view to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the cloned data view.
- */
-function cloneDataView(dataView, isDeep) {
- var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
- return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
-}
-
-/**
- * Creates a clone of `map`.
- *
- * @private
- * @param {Object} map The map to clone.
- * @param {Function} cloneFunc The function to clone values.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the cloned map.
- */
-function cloneMap(map, isDeep, cloneFunc) {
- var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
- return arrayReduce(array, addMapEntry, new map.constructor);
-}
-
-/**
- * Creates a clone of `regexp`.
- *
- * @private
- * @param {Object} regexp The regexp to clone.
- * @returns {Object} Returns the cloned regexp.
- */
-function cloneRegExp(regexp) {
- var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
- result.lastIndex = regexp.lastIndex;
- return result;
-}
-
-/**
- * Creates a clone of `set`.
- *
- * @private
- * @param {Object} set The set to clone.
- * @param {Function} cloneFunc The function to clone values.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the cloned set.
- */
-function cloneSet(set, isDeep, cloneFunc) {
- var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
- return arrayReduce(array, addSetEntry, new set.constructor);
-}
-
-/**
- * Creates a clone of the `symbol` object.
- *
- * @private
- * @param {Object} symbol The symbol object to clone.
- * @returns {Object} Returns the cloned symbol object.
- */
-function cloneSymbol(symbol) {
- return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
-}
-
-/**
- * Creates a clone of `typedArray`.
- *
- * @private
- * @param {Object} typedArray The typed array to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the cloned typed array.
- */
-function cloneTypedArray(typedArray, isDeep) {
- var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
- return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
-}
-
-/**
- * Copies the values of `source` to `array`.
- *
- * @private
- * @param {Array} source The array to copy values from.
- * @param {Array} [array=[]] The array to copy values to.
- * @returns {Array} Returns `array`.
- */
-function copyArray(source, array) {
- var index = -1,
- length = source.length;
-
- array || (array = Array(length));
- while (++index < length) {
- array[index] = source[index];
- }
- return array;
-}
-
-/**
- * Copies properties of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy properties from.
- * @param {Array} props The property identifiers to copy.
- * @param {Object} [object={}] The object to copy properties to.
- * @param {Function} [customizer] The function to customize copied values.
- * @returns {Object} Returns `object`.
- */
-function copyObject(source, props, object, customizer) {
- object || (object = {});
-
- var index = -1,
- length = props.length;
-
- while (++index < length) {
- var key = props[index];
-
- var newValue = customizer
- ? customizer(object[key], source[key], key, object, source)
- : undefined;
-
- assignValue(object, key, newValue === undefined ? source[key] : newValue);
- }
- return object;
-}
-
-/**
- * Copies own symbol properties of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy symbols from.
- * @param {Object} [object={}] The object to copy symbols to.
- * @returns {Object} Returns `object`.
- */
-function copySymbols(source, object) {
- return copyObject(source, getSymbols(source), object);
-}
-
-/**
- * Creates an array of own enumerable property names and symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function getAllKeys(object) {
- return baseGetAllKeys(object, keys, getSymbols);
-}
-
-/**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
-function getMapData(map, key) {
- var data = map.__data__;
- return isKeyable(key)
- ? data[typeof key == 'string' ? 'string' : 'hash']
- : data.map;
-}
-
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
- var value = getValue(object, key);
- return baseIsNative(value) ? value : undefined;
-}
-
-/**
- * Creates an array of the own enumerable symbol properties of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of symbols.
- */
-var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
-
-/**
- * Gets the `toStringTag` of `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-var getTag = baseGetTag;
-
-// Fallback for data views, maps, sets, and weak maps in IE 11,
-// for data views in Edge < 14, and promises in Node.js.
-if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
- (Map && getTag(new Map) != mapTag) ||
- (Promise && getTag(Promise.resolve()) != promiseTag) ||
- (Set && getTag(new Set) != setTag) ||
- (WeakMap && getTag(new WeakMap) != weakMapTag)) {
- getTag = function(value) {
- var result = objectToString.call(value),
- Ctor = result == objectTag ? value.constructor : undefined,
- ctorString = Ctor ? toSource(Ctor) : undefined;
-
- if (ctorString) {
- switch (ctorString) {
- case dataViewCtorString: return dataViewTag;
- case mapCtorString: return mapTag;
- case promiseCtorString: return promiseTag;
- case setCtorString: return setTag;
- case weakMapCtorString: return weakMapTag;
- }
- }
- return result;
- };
-}
-
-/**
- * Initializes an array clone.
- *
- * @private
- * @param {Array} array The array to clone.
- * @returns {Array} Returns the initialized clone.
- */
-function initCloneArray(array) {
- var length = array.length,
- result = array.constructor(length);
-
- // Add properties assigned by `RegExp#exec`.
- if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
- result.index = array.index;
- result.input = array.input;
- }
- return result;
-}
-
-/**
- * Initializes an object clone.
- *
- * @private
- * @param {Object} object The object to clone.
- * @returns {Object} Returns the initialized clone.
- */
-function initCloneObject(object) {
- return (typeof object.constructor == 'function' && !isPrototype(object))
- ? baseCreate(getPrototype(object))
- : {};
-}
-
-/**
- * Initializes an object clone based on its `toStringTag`.
- *
- * **Note:** This function only supports cloning values with tags of
- * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
- *
- * @private
- * @param {Object} object The object to clone.
- * @param {string} tag The `toStringTag` of the object to clone.
- * @param {Function} cloneFunc The function to clone values.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the initialized clone.
- */
-function initCloneByTag(object, tag, cloneFunc, isDeep) {
- var Ctor = object.constructor;
- switch (tag) {
- case arrayBufferTag:
- return cloneArrayBuffer(object);
-
- case boolTag:
- case dateTag:
- return new Ctor(+object);
-
- case dataViewTag:
- return cloneDataView(object, isDeep);
-
- case float32Tag: case float64Tag:
- case int8Tag: case int16Tag: case int32Tag:
- case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
- return cloneTypedArray(object, isDeep);
-
- case mapTag:
- return cloneMap(object, isDeep, cloneFunc);
-
- case numberTag:
- case stringTag:
- return new Ctor(object);
-
- case regexpTag:
- return cloneRegExp(object);
-
- case setTag:
- return cloneSet(object, isDeep, cloneFunc);
-
- case symbolTag:
- return cloneSymbol(object);
- }
-}
-
-/**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
-function isIndex(value, length) {
- length = length == null ? MAX_SAFE_INTEGER : length;
- return !!length &&
- (typeof value == 'number' || reIsUint.test(value)) &&
- (value > -1 && value % 1 == 0 && value < length);
-}
-
-/**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
-function isKeyable(value) {
- var type = typeof value;
- return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
- ? (value !== '__proto__')
- : (value === null);
-}
-
-/**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
-function isMasked(func) {
- return !!maskSrcKey && (maskSrcKey in func);
-}
-
-/**
- * Checks if `value` is likely a prototype object.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
- */
-function isPrototype(value) {
- var Ctor = value && value.constructor,
- proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
-
- return value === proto;
-}
-
-/**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to process.
- * @returns {string} Returns the source code.
- */
-function toSource(func) {
- if (func != null) {
- try {
- return funcToString.call(func);
- } catch (e) {}
- try {
- return (func + '');
- } catch (e) {}
- }
- return '';
-}
-
-/**
- * This method is like `_.clone` except that it recursively clones `value`.
- *
- * @static
- * @memberOf _
- * @since 1.0.0
- * @category Lang
- * @param {*} value The value to recursively clone.
- * @returns {*} Returns the deep cloned value.
- * @see _.clone
- * @example
- *
- * var objects = [{ 'a': 1 }, { 'b': 2 }];
- *
- * var deep = _.cloneDeep(objects);
- * console.log(deep[0] === objects[0]);
- * // => false
- */
-function cloneDeep(value) {
- return baseClone(value, true, true);
-}
-
-/**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
-function eq(value, other) {
- return value === other || (value !== value && other !== other);
-}
-
-/**
- * Checks if `value` is likely an `arguments` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- * else `false`.
- * @example
- *
- * _.isArguments(function() { return arguments; }());
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-function isArguments(value) {
- // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
- return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
- (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
-}
-
-/**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
-var isArray = Array.isArray;
-
-/**
- * Checks if `value` is array-like. A value is considered array-like if it's
- * not a function and has a `value.length` that's an integer greater than or
- * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- * @example
- *
- * _.isArrayLike([1, 2, 3]);
- * // => true
- *
- * _.isArrayLike(document.body.children);
- * // => true
- *
- * _.isArrayLike('abc');
- * // => true
- *
- * _.isArrayLike(_.noop);
- * // => false
- */
-function isArrayLike(value) {
- return value != null && isLength(value.length) && !isFunction(value);
-}
-
-/**
- * This method is like `_.isArrayLike` except that it also checks if `value`
- * is an object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array-like object,
- * else `false`.
- * @example
- *
- * _.isArrayLikeObject([1, 2, 3]);
- * // => true
- *
- * _.isArrayLikeObject(document.body.children);
- * // => true
- *
- * _.isArrayLikeObject('abc');
- * // => false
- *
- * _.isArrayLikeObject(_.noop);
- * // => false
- */
-function isArrayLikeObject(value) {
- return isObjectLike(value) && isArrayLike(value);
-}
-
-/**
- * Checks if `value` is a buffer.
- *
- * @static
- * @memberOf _
- * @since 4.3.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
- * @example
- *
- * _.isBuffer(new Buffer(2));
- * // => true
- *
- * _.isBuffer(new Uint8Array(2));
- * // => false
- */
-var isBuffer = nativeIsBuffer || stubFalse;
-
-/**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
-function isFunction(value) {
- // The use of `Object#toString` avoids issues with the `typeof` operator
- // in Safari 8-9 which returns 'object' for typed array and other constructors.
- var tag = isObject(value) ? objectToString.call(value) : '';
- return tag == funcTag || tag == genTag;
-}
-
-/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This method is loosely based on
- * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- * @example
- *
- * _.isLength(3);
- * // => true
- *
- * _.isLength(Number.MIN_VALUE);
- * // => false
- *
- * _.isLength(Infinity);
- * // => false
- *
- * _.isLength('3');
- * // => false
- */
-function isLength(value) {
- return typeof value == 'number' &&
- value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-}
-
-/**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
-function isObject(value) {
- var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
-}
-
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
- return !!value && typeof value == 'object';
-}
-
-/**
- * Creates an array of the own enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects. See the
- * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * for more details.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- * @example
- *
- * function Foo() {
- * this.a = 1;
- * this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.keys(new Foo);
- * // => ['a', 'b'] (iteration order is not guaranteed)
- *
- * _.keys('hi');
- * // => ['0', '1']
- */
-function keys(object) {
- return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
-}
-
-/**
- * This method returns a new empty array.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {Array} Returns the new empty array.
- * @example
- *
- * var arrays = _.times(2, _.stubArray);
- *
- * console.log(arrays);
- * // => [[], []]
- *
- * console.log(arrays[0] === arrays[1]);
- * // => false
- */
-function stubArray() {
- return [];
-}
-
-/**
- * This method returns `false`.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {boolean} Returns `false`.
- * @example
- *
- * _.times(2, _.stubFalse);
- * // => [false, false]
- */
-function stubFalse() {
- return false;
-}
-
-module.exports = cloneDeep;
diff --git a/node_modules/lodash.clonedeep/package.json b/node_modules/lodash.clonedeep/package.json
deleted file mode 100644
index bc21c1c..0000000
--- a/node_modules/lodash.clonedeep/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "name": "lodash.clonedeep",
- "version": "4.5.0",
- "description": "The lodash method `_.cloneDeep` exported as a module.",
- "homepage": "https://lodash.com/",
- "icon": "https://lodash.com/icon.svg",
- "license": "MIT",
- "keywords": "lodash-modularized, clonedeep",
- "author": "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
- "contributors": [
- "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
- "Blaine Bublitz <blaine.bublitz@gmail.com> (https://github.com/phated)",
- "Mathias Bynens <mathias@qiwi.be> (https://mathiasbynens.be/)"
- ],
- "repository": "lodash/lodash",
- "scripts": {
- "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
- }
-}
diff --git a/node_modules/postcss-selector-parser/CHANGELOG.md b/node_modules/postcss-selector-parser/CHANGELOG.md
index b19edd8..b97f69a 100644
--- a/node_modules/postcss-selector-parser/CHANGELOG.md
+++ b/node_modules/postcss-selector-parser/CHANGELOG.md
@@ -1,3 +1,11 @@
+# 6.0.8
+
+- Fixed: reduced size
+
+# 6.0.7
+
+- Fixed: parse animation percents
+
# 6.0.6
- Fixed: parse quoted attributes containing a newline correctly
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/attributes.js b/node_modules/postcss-selector-parser/dist/__tests__/attributes.js
deleted file mode 100644
index 800a1a7..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/attributes.js
+++ /dev/null
@@ -1,489 +0,0 @@
-"use strict";
-
-var _process = _interopRequireDefault(require("process"));
-
-var _attribute = _interopRequireDefault(require("../selectors/attribute"));
-
-var _helpers = require("./util/helpers");
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-_process["default"].throwDeprecation = true;
-(0, _helpers.test)('attribute selector', '[href]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
- t.falsy(tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('attribute selector spaces (before)', '[ href]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
- t.falsy(tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('attribute selector spaces (after)', '[href ]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
- t.falsy(tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('attribute selector spaces with namespace (both)', '[ foo|bar ]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].ns, 'foo');
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'bar');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
- t.falsy(tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('attribute selector spaces (both)', '[ href ]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.attribute.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'attribute');
- t.falsy(tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('multiple attribute selectors', '[href][class][name]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[1].attribute, 'class');
- t.deepEqual(tree.nodes[0].nodes[2].attribute, 'name');
-});
-(0, _helpers.test)('select elements with or without a namespace', '[*|href]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, '*');
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
-});
-(0, _helpers.test)('namespace with escapes', '[\\31 \\#\\32 |href]', function (t, tree) {
- var attr = tree.nodes[0].nodes[0];
- t.deepEqual(attr.namespace, '1#2');
- t.deepEqual(attr.raws.namespace, '\\31 \\#\\32 ');
- attr.namespace = "foo";
- t.deepEqual(attr.namespace, 'foo');
- t.deepEqual(attr.raws.namespace, undefined);
- attr.namespace = "1";
- t.deepEqual(attr.namespace, '1');
- t.deepEqual(attr.raws.namespace, '\\31');
-});
-(0, _helpers.test)('attribute selector with a empty value', '[href=""]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, '');
- t["true"](tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('attribute selector with a value', '[name=james]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'name');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'james');
- t.falsy(tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('attribute selector with quoted value', '[name="james"]', function (t, tree) {
- var attr = tree.nodes[0].nodes[0];
- t.deepEqual(attr.attribute, 'name');
- t.deepEqual(attr.operator, '=');
- t.deepEqual(attr.value, 'james');
- t.deepEqual(attr.quoteMark, '"');
- t.truthy(attr.quoted);
- t.deepEqual(attr.getQuotedValue(), '"james"');
-});
-(0, _helpers.test)('attribute selector with escaped quote', '[title="Something \\"weird\\""]', function (t, tree) {
- var attr = tree.nodes[0].nodes[0];
- t.deepEqual(attr.value, 'Something "weird"');
- t.deepEqual(attr.getQuotedValue(), '\"Something \\"weird\\"\"');
- t.deepEqual(attr.getQuotedValue({
- smart: true
- }), '\'Something "weird"\'');
- t.deepEqual(attr.getQuotedValue({
- quoteMark: null
- }), 'Something\\ \\"weird\\"');
- t.deepEqual(attr.quoteMark, '"');
- t.truthy(attr.quoted);
- t.deepEqual(attr.raws.value, '"Something \\"weird\\""');
- t.deepEqual(tree.toString(), '[title="Something \\"weird\\""]');
-});
-(0, _helpers.test)('attribute selector with escaped colon', '[ng\\:cloak]', function (t, tree) {
- t.deepEqual(tree.toString(), '[ng\\:cloak]');
- var attr = tree.nodes[0].nodes[0];
- t.deepEqual(attr.raws.attribute, 'ng\\:cloak');
- t.deepEqual(attr.attribute, 'ng:cloak');
-});
-(0, _helpers.test)('attribute selector with short hex escape', '[ng\\3a cloak]', function (t, tree) {
- t.deepEqual(tree.toString(), '[ng\\3a cloak]');
- var attr = tree.nodes[0].nodes[0];
- t.deepEqual(attr.raws.attribute, 'ng\\3a cloak');
- t.deepEqual(attr.attribute, 'ng:cloak');
-});
-(0, _helpers.test)('attribute selector with hex escape', '[ng\\00003acloak]', function (t, tree) {
- t.deepEqual(tree.toString(), '[ng\\00003acloak]');
- var attr = tree.nodes[0].nodes[0];
- t.deepEqual(attr.raws.attribute, 'ng\\00003acloak');
- t.deepEqual(attr.attribute, 'ng:cloak');
-});
-(0, _helpers.test)('assign attribute name requiring escape', '[ng\\:cloak]', function (t, tree) {
- var attr = tree.nodes[0].nodes[0];
- attr.attribute = "ng:foo";
- t.deepEqual(attr.raws.attribute, 'ng\\:foo');
- t.deepEqual(attr.attribute, 'ng:foo');
- t.deepEqual(tree.toString(), '[ng\\:foo]');
-});
-(0, _helpers.test)('multiple attribute selectors + combinator', '[href][class][name] h1 > h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[2].attribute, 'name');
- t.deepEqual(tree.nodes[0].nodes[3].value, ' ');
- t.deepEqual(tree.nodes[0].nodes[5].value, '>');
- t.deepEqual(tree.nodes[0].nodes[6].value, 'h2');
-});
-(0, _helpers.test)('attribute, class, combinator', '[href] > h2.test', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[1].value, '>');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
- t.deepEqual(tree.nodes[0].nodes[3].value, 'test');
-});
-(0, _helpers.test)('attribute selector with quoted value & combinator', '[name="james"] > h1', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'james');
- t.deepEqual(tree.nodes[0].nodes[0].quoteMark, '"');
- t.deepEqual(tree.nodes[0].nodes[1].value, '>');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h1');
-});
-(0, _helpers.test)('multiple quoted attribute selectors', '[href*="test.com"][rel=\'external\'][id][class~="test"] > [name]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'test.com');
- t.is(tree.nodes[0].nodes[0].quoteMark, '"');
- t.deepEqual(tree.nodes[0].nodes[1].attribute, 'rel');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'external');
- t.is(tree.nodes[0].nodes[1].quoteMark, "'");
- t.deepEqual(tree.nodes[0].nodes[2].attribute, 'id');
- t.falsy(tree.nodes[0].nodes[2].value, 'should not have a value');
- t.is(tree.nodes[0].nodes[2].quoteMark, undefined, 'should not have a quoteMark set');
- t.deepEqual(tree.nodes[0].nodes[3].attribute, 'class');
- t.deepEqual(tree.nodes[0].nodes[3].value, 'test');
- t.deepEqual(tree.nodes[0].nodes[3].quoteMark, '"');
- t.deepEqual(tree.nodes[0].nodes[4].value, '>');
- t.deepEqual(tree.nodes[0].nodes[5].attribute, 'name');
- t.falsy(tree.nodes[0].nodes[5].value, 'should not have a value');
- t.is(tree.nodes[0].nodes[5].quoteMark, undefined, 'should not have a quoteMark set');
-});
-(0, _helpers.test)('more attribute operators', '[href*=test],[href^=test],[href$=test],[href|=test]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
- t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
- t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
- t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
-});
-(0, _helpers.test)('attribute selector with quoted value containing "="', '[data-weird-attr="Something=weird"]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'Something=weird');
- t.is(tree.nodes[0].nodes[0].quoteMark, '"');
- t.deepEqual(tree.nodes[0].nodes[0].getQuotedValue(), '"Something=weird"');
-});
-var selector = '[data-weird-attr*="Something=weird"],' + '[data-weird-attr^="Something=weird"],' + '[data-weird-attr$="Something=weird"],' + '[data-weird-attr|="Something=weird"]';
-(0, _helpers.test)('more attribute selector with quoted value containing "="', selector, function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'Something=weird');
- t.deepEqual(tree.nodes[1].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'Something=weird');
- t.deepEqual(tree.nodes[2].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
- t.deepEqual(tree.nodes[2].nodes[0].value, 'Something=weird');
- t.deepEqual(tree.nodes[3].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
- t.deepEqual(tree.nodes[3].nodes[0].value, 'Something=weird');
-});
-(0, _helpers.test)('attribute selector with quoted value containing multiple "="', '[data-weird-attr="Something=weird SomethingElse=weirder"]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'Something=weird SomethingElse=weirder');
-});
-selector = '[data-weird-attr*="Something=weird SomethingElse=weirder"],' + '[data-weird-attr^="Something=weird SomethingElse=weirder"],' + '[data-weird-attr$="Something=weird SomethingElse=weirder"],' + '[data-weird-attr|="Something=weird SomethingElse=weirder"]';
-(0, _helpers.test)('more attribute selector with quoted value containing multiple "="', selector, function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'Something=weird SomethingElse=weirder');
- t.deepEqual(tree.nodes[1].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'Something=weird SomethingElse=weirder');
- t.deepEqual(tree.nodes[2].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
- t.deepEqual(tree.nodes[2].nodes[0].value, 'Something=weird SomethingElse=weirder');
- t.deepEqual(tree.nodes[3].nodes[0].attribute, 'data-weird-attr');
- t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
- t.deepEqual(tree.nodes[3].nodes[0].value, 'Something=weird SomethingElse=weirder');
-});
-(0, _helpers.test)('multiple attribute selectors with quoted value containing "="', '[data-weird-foo="foo=weird"][data-weird-bar="bar=weird"]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo=weird');
- t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[0].nodes[1].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'bar=weird');
-});
-(0, _helpers.test)('multiple attribute selectors with value containing escaped "="', '[data-weird-foo=foo\\=weird][data-weird-bar=bar\\3d weird]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo=weird');
- t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[0].nodes[1].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'bar=weird');
-});
-selector = '[data-weird-foo*="foo2=weirder"][data-weird-bar*="bar2=weirder"],' + '[data-weird-foo^="foo2=weirder"][data-weird-bar^="bar2=weirder"],' + '[data-weird-foo$="foo2=weirder"][data-weird-bar$="bar2=weirder"],' + '[data-weird-foo|="foo2=weirder"][data-weird-bar|="bar2=weirder"]';
-(0, _helpers.test)('more multiple attribute selectors with quoted value containing "="', selector, function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo2=weirder');
- t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[0].nodes[1].operator, '*=');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'bar2=weirder');
- t.deepEqual(tree.nodes[1].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'foo2=weirder');
- t.deepEqual(tree.nodes[1].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[1].nodes[1].operator, '^=');
- t.deepEqual(tree.nodes[1].nodes[1].value, 'bar2=weirder');
- t.deepEqual(tree.nodes[2].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
- t.deepEqual(tree.nodes[2].nodes[0].value, 'foo2=weirder');
- t.deepEqual(tree.nodes[2].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[2].nodes[1].operator, '$=');
- t.deepEqual(tree.nodes[2].nodes[1].value, 'bar2=weirder');
- t.deepEqual(tree.nodes[3].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
- t.deepEqual(tree.nodes[3].nodes[0].value, 'foo2=weirder');
- t.deepEqual(tree.nodes[3].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[3].nodes[1].operator, '|=');
- t.deepEqual(tree.nodes[3].nodes[1].value, 'bar2=weirder');
-});
-(0, _helpers.test)('multiple attribute selectors with quoted value containing multiple "="', '[data-weird-foo="foo1=weirder foo2=weirder"][data-weird-bar="bar1=weirder bar2=weirder"]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo1=weirder foo2=weirder');
- t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[0].nodes[1].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'bar1=weirder bar2=weirder');
-});
-selector = '[data-weird-foo*="foo1=weirder foo2=weirder"][data-weird-bar*="bar1=weirder bar2=weirder"],' + '[data-weird-foo^="foo1=weirder foo2=weirder"][data-weird-bar^="bar1=weirder bar2=weirder"],' + '[data-weird-foo$="foo1=weirder foo2=weirder"][data-weird-bar$="bar1=weirder bar2=weirder"],' + '[data-weird-foo|="foo1=weirder foo2=weirder"][data-weird-bar|="bar1=weirder bar2=weirder"]';
-(0, _helpers.test)('more multiple attribute selectors with quoted value containing multiple "="', selector, function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '*=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo1=weirder foo2=weirder');
- t.deepEqual(tree.nodes[0].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[0].nodes[1].operator, '*=');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'bar1=weirder bar2=weirder');
- t.deepEqual(tree.nodes[1].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[1].nodes[0].operator, '^=');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'foo1=weirder foo2=weirder');
- t.deepEqual(tree.nodes[1].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[1].nodes[1].operator, '^=');
- t.deepEqual(tree.nodes[1].nodes[1].value, 'bar1=weirder bar2=weirder');
- t.deepEqual(tree.nodes[2].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[2].nodes[0].operator, '$=');
- t.deepEqual(tree.nodes[2].nodes[0].value, 'foo1=weirder foo2=weirder');
- t.deepEqual(tree.nodes[2].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[2].nodes[1].operator, '$=');
- t.deepEqual(tree.nodes[2].nodes[1].value, 'bar1=weirder bar2=weirder');
- t.deepEqual(tree.nodes[3].nodes[0].attribute, 'data-weird-foo');
- t.deepEqual(tree.nodes[3].nodes[0].operator, '|=');
- t.deepEqual(tree.nodes[3].nodes[0].value, 'foo1=weirder foo2=weirder');
- t.deepEqual(tree.nodes[3].nodes[1].attribute, 'data-weird-bar');
- t.deepEqual(tree.nodes[3].nodes[1].operator, '|=');
- t.deepEqual(tree.nodes[3].nodes[1].value, 'bar1=weirder bar2=weirder');
-});
-(0, _helpers.test)('spaces in attribute selectors', 'h1[ href *= "test" ]', function (t, tree) {
- var attr = tree.nodes[0].nodes[1];
- t.deepEqual(attr.attribute, 'href');
- t.deepEqual(attr.spaces.attribute.before, ' ');
- t.deepEqual(attr.spaces.attribute.after, ' ');
- t.deepEqual(attr.operator, '*=');
- t.deepEqual(attr.spaces.operator.after, ' ');
- t.deepEqual(attr.value, 'test');
- t.deepEqual(attr.spaces.value.after, ' ');
- t.truthy(tree.nodes[0].nodes[1].quoted);
-});
-(0, _helpers.test)('insensitive attribute selector 1', '[href="test" i]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
- t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
- t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
-});
-(0, _helpers.test)('insensitive attribute selector with a empty value', '[href="" i]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, '');
- t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
- t["true"](tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('insensitive attribute selector 2', '[href=TEsT i ]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'TEsT');
- t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
- t.deepEqual(tree.nodes[0].nodes[0].spaces.value.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.insensitive.after, ' ');
-});
-(0, _helpers.test)('insensitive attribute selector 3', '[href=test i]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
- t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
-});
-(0, _helpers.test)('capitalized insensitive attribute selector 3', '[href=test I]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
- t.deepEqual(tree.nodes[0].nodes[0].insensitive, true);
-});
-(0, _helpers.test)('extraneous non-combinating whitespace', ' [href] , [class] ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.after, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].attribute, 'class');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.after, ' ');
-});
-(0, _helpers.test)('newline in attribute selector', '[class="woop \\\nwoop woop"]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'woop \nwoop woop');
- t["true"](tree.nodes[0].nodes[0].quoted);
-});
-(0, _helpers.test)('comments within attribute selectors', '[href/* wow */=/* wow */test]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
- t.deepEqual(tree.nodes[0].nodes[0].raws.attribute, 'href/* wow */');
- t.deepEqual(tree.nodes[0].nodes[0].raws.operator, '=/* wow */');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
-});
-(0, _helpers.test)('comments within attribute selectors (2)', '[/* wow */href=test/* wow */]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
- t.deepEqual(tree.nodes[0].nodes[0].raws.spaces.attribute.before, '/* wow */');
- t.deepEqual(tree.nodes[0].nodes[0].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'test/* wow */');
-});
-(0, _helpers.test)('comments within attribute selectors (3)', '[href=test/* wow */i]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'testi');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'test/* wow */i');
- t.falsy(tree.nodes[0].nodes[0].insensitive);
-});
-(0, _helpers.test)('comments within attribute selectors (4)', '[ /*before*/ href /* after-attr */ = /* after-operator */ te/*inside-value*/st/* wow */ /*omg*/i/*bbq*/ /*whodoesthis*/]', function (t, tree) {
- var attr = tree.nodes[0].nodes[0];
- t.deepEqual(attr.attribute, 'href');
- t.deepEqual(attr.value, 'test');
- t.deepEqual(attr.getQuotedValue(), 'test');
- t.deepEqual(attr.raws.value, 'te/*inside-value*/st');
- t.deepEqual(attr.raws.spaces.value.after, '/* wow */ /*omg*/');
- t.truthy(attr.insensitive);
- t.deepEqual(attr.offsetOf("attribute"), 13);
- t.deepEqual(attr.offsetOf("operator"), 35);
- t.deepEqual(attr.offsetOf("insensitive"), 95);
- t.deepEqual(attr.raws.spaces.insensitive.after, '/*bbq*/ /*whodoesthis*/');
- attr.value = "foo";
- t.is(attr.raws.value, undefined);
-});
-(0, _helpers.test)('non standard modifiers', '[href="foo" y]', function (t, tree) {
- var attr = tree.atPosition(1, 13);
- t.deepEqual(attr.insensitive, false);
- t.deepEqual(attr.insensitiveFlag, '');
- t.deepEqual(attr.raws.insensitiveFlag, 'y');
- t.deepEqual(tree.toString(), '[href="foo" y]');
-});
-(0, _helpers.test)('comment after insensitive(non space)', '[href="foo" i/**/]', function (t, tree) {
- // https://github.com/postcss/postcss-selector-parser/issues/150
- var attr = tree.atPosition(1, 13);
- t.deepEqual(attr.insensitive, true);
- t.deepEqual(attr.insensitiveFlag, 'i');
- t.is(attr.raws.insensitiveFlag, undefined);
- t.deepEqual(attr.raws.spaces.insensitive.after, '/**/');
- t.deepEqual(tree.toString(), '[href="foo" i/**/]');
-});
-(0, _helpers.test)('comment after insensitive(space after)', '[href="foo" i/**/ ]', function (t, tree) {
- var attr = tree.atPosition(1, 13);
- t.deepEqual(attr.insensitive, true);
- t.deepEqual(attr.insensitiveFlag, 'i');
- t.deepEqual(attr.raws.spaces.insensitive.after, '/**/ ');
- t.deepEqual(tree.toString(), '[href="foo" i/**/ ]');
-});
-(0, _helpers.test)('comment after insensitive(space before)', '[href="foo" i /**/]', function (t, tree) {
- var attr = tree.atPosition(1, 13);
- t.deepEqual(attr.insensitive, true);
- t.deepEqual(attr.insensitiveFlag, 'i');
- t.deepEqual(attr.raws.spaces.insensitive.after, ' /**/');
- t.deepEqual(tree.toString(), '[href="foo" i /**/]');
-});
-var testDeprecation = (0, _helpers.nodeVersionAtLeast)('7.0.0') || (0, _helpers.nodeVersionBefore)('6.0.0') ? _helpers.test : _helpers.test.skip;
-testDeprecation('deprecated constructor', '', function (t) {
- t["throws"](function () {
- return new _attribute["default"]({
- value: '"foo"',
- attribute: "data-bar"
- });
- }, {
- message: "Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now."
- });
-});
-testDeprecation('deprecated get of raws.unquoted ', '', function (t) {
- t["throws"](function () {
- var attr = new _attribute["default"]({
- value: 'foo',
- quoteMark: '"',
- attribute: "data-bar"
- });
- return attr.raws.unquoted;
- }, {
- message: "attr.raws.unquoted is deprecated. Call attr.value instead."
- });
-});
-testDeprecation('deprecated set of raws.unquoted ', '', function (t) {
- t["throws"](function () {
- var attr = new _attribute["default"]({
- value: 'foo',
- quoteMark: '"',
- attribute: "data-bar"
- });
- attr.raws.unquoted = 'fooooo';
- }, {
- message: "Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now."
- });
-});
-testDeprecation('smart quotes', '[data-foo=bar]', function (t, tree) {
- var attr = tree.nodes[0].nodes[0];
- attr.setValue('changed', {
- quoteMark: '"'
- });
- t.deepEqual(attr.toString(), '[data-foo="changed"]');
- attr.setValue('changed again', {
- quoteMark: "'",
- preferCurrentQuoteMark: true
- });
- t.deepEqual(attr.toString(), '[data-foo="changed again"]');
- attr.setValue('smart-ident', {
- smart: true
- });
- t.deepEqual(attr.toString(), '[data-foo=smart-ident]');
- attr.setValue('smart quoted', {
- smart: true
- });
- t.deepEqual(attr.toString(), '[data-foo=smart\\ quoted]');
- attr.setValue('smart quoted three spaces', {
- smart: true
- });
- t.deepEqual(attr.toString(), '[data-foo="smart quoted three spaces"]');
- attr.setValue('smart quoted three spaces', {
- smart: true,
- quoteMark: "'"
- });
- t.deepEqual(attr.toString(), "[data-foo='smart quoted three spaces']");
- attr.setValue("smart with 'single quotes'", {
- smart: true
- });
- t.deepEqual(attr.toString(), "[data-foo=\"smart with 'single quotes'\"]");
- attr.setValue('smart with "double quotes"', {
- smart: true
- });
- t.deepEqual(attr.toString(), "[data-foo='smart with \"double quotes\"']");
-});
-testDeprecation('set Attribute#quoteMark', '[data-foo=bar]', function (t, tree) {
- var attr = tree.nodes[0].nodes[0];
- attr.quoteMark = '"';
- t.deepEqual(attr.toString(), '[data-foo="bar"]');
- attr.quoteMark = "'";
- t.deepEqual(attr.toString(), "[data-foo='bar']");
- attr.quoteMark = null;
- t.deepEqual(attr.toString(), "[data-foo=bar]");
- attr.value = "has space";
- t.deepEqual(attr.toString(), "[data-foo=has\\ space]");
- attr.quoteMark = '"';
- t.deepEqual(attr.toString(), '[data-foo="has space"]');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/classes.js b/node_modules/postcss-selector-parser/dist/__tests__/classes.js
deleted file mode 100644
index 28526a5..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/classes.js
+++ /dev/null
@@ -1,226 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('class name', '.one', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'one');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('multiple class names', '.one.two.three', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'one');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'two');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'three');
-});
-(0, _helpers.test)('qualified class', 'button.btn-primary', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'class');
-});
-(0, _helpers.test)('escaped numbers in class name', '.\\31\\ 0', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].value, '1 0');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\31\\ 0');
-});
-(0, _helpers.test)('extraneous non-combinating whitespace', ' .h1 , .h2 ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.after, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'h2');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.after, ' ');
-});
-(0, _helpers.test)('Less interpolation within a class', '.foo@{bar}', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes.length, 1);
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo@{bar}');
-});
-(0, _helpers.test)('ClassName#set value', ".fo\\o", function (t, selectors) {
- var className = selectors.first.first;
- t.deepEqual(className.raws, {
- value: "fo\\o"
- });
- className.value = "bar";
- t.deepEqual(className.raws, {});
-});
-(0, _helpers.test)('escaped dot in class name', '.foo\\.bar', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo.bar');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'foo\\.bar');
-});
-(0, _helpers.test)('class selector with escaping', '.♥', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '♥');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('class selector with escaping (1)', '.©', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '©');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('class selector with escaping (2)', '.“‘’”', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '“‘’”');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('class selector with escaping (3)', '.☺☃', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '☺☃');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('class selector with escaping (4)', '.⌘⌥', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '⌘⌥');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('class selector with escaping (5)', '.𝄞♪♩♫♬', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '𝄞♪♩♫♬');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('class selector with escaping (6)', '.💩', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '💩');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('class selector with escaping (7)', '.\\?', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '?');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\?');
-});
-(0, _helpers.test)('class selector with escaping (8)', '.\\@', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '@');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\@');
-});
-(0, _helpers.test)('class selector with escaping (9)', '.\\.', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '.');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\.');
-});
-(0, _helpers.test)('class selector with escaping (10)', '.\\3A \\)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':)');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A \\)');
-});
-(0, _helpers.test)('class selector with escaping (11)', '.\\3A \\`\\(', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':`(');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A \\`\\(');
-});
-(0, _helpers.test)('class selector with escaping (12)', '.\\31 23', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '123');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\31 23');
-});
-(0, _helpers.test)('class selector with escaping (13)', '.\\31 a2b3c', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '1a2b3c');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\31 a2b3c');
-});
-(0, _helpers.test)('class selector with escaping (14)', '.\\<p\\>', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '<p>');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\<p\\>');
-});
-(0, _helpers.test)('class selector with escaping (15)', '.\\<\\>\\<\\<\\<\\>\\>\\<\\>', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '<><<<>><>');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\<\\>\\<\\<\\<\\>\\>\\<\\>');
-});
-(0, _helpers.test)('class selector with escaping (16)', '.\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\[\\>\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\>\\+\\<\\<\\<\\<\\-\\]\\>\\+\\+\\.\\>\\+\\.\\+\\+\\+\\+\\+\\+\\+\\.\\.\\+\\+\\+\\.\\>\\+\\+\\.\\<\\<\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\.\\>\\.\\+\\+\\+\\.\\-\\-\\-\\-\\-\\-\\.\\-\\-\\-\\-\\-\\-\\-\\-\\.\\>\\+\\.\\>\\.', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\[\\>\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\>\\+\\<\\<\\<\\<\\-\\]\\>\\+\\+\\.\\>\\+\\.\\+\\+\\+\\+\\+\\+\\+\\.\\.\\+\\+\\+\\.\\>\\+\\+\\.\\<\\<\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\.\\>\\.\\+\\+\\+\\.\\-\\-\\-\\-\\-\\-\\.\\-\\-\\-\\-\\-\\-\\-\\-\\.\\>\\+\\.\\>\\.');
-});
-(0, _helpers.test)('class selector with escaping (17)', '.\\#', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '#');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#');
-});
-(0, _helpers.test)('class selector with escaping (18)', '.\\#\\#', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '##');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#\\#');
-});
-(0, _helpers.test)('class selector with escaping (19)', '.\\#\\.\\#\\.\\#', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '#.#.#');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#\\.\\#\\.\\#');
-});
-(0, _helpers.test)('class selector with escaping (20)', '.\\_', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '_');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\_');
-});
-(0, _helpers.test)('class selector with escaping (21)', '.\\{\\}', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '{}');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\{\\}');
-});
-(0, _helpers.test)('class selector with escaping (22)', '.\\#fake\\-id', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '#fake-id');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#fake\\-id');
-});
-(0, _helpers.test)('class selector with escaping (23)', '.foo\\.bar', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo.bar');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'foo\\.bar');
-});
-(0, _helpers.test)('class selector with escaping (24)', '.\\3A hover', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':hover');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A hover');
-});
-(0, _helpers.test)('class selector with escaping (25)', '.\\3A hover\\3A focus\\3A active', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':hover:focus:active');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A hover\\3A focus\\3A active');
-});
-(0, _helpers.test)('class selector with escaping (26)', '.\\[attr\\=value\\]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '[attr=value]');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\[attr\\=value\\]');
-});
-(0, _helpers.test)('class selector with escaping (27)', '.f\\/o\\/o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f/o/o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\/o\\/o');
-});
-(0, _helpers.test)('class selector with escaping (28)', '.f\\\\o\\\\o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f\\o\\o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\\\o\\\\o');
-});
-(0, _helpers.test)('class selector with escaping (29)', '.f\\*o\\*o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f*o*o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\*o\\*o');
-});
-(0, _helpers.test)('class selector with escaping (30)', '.f\\!o\\!o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f!o!o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\!o\\!o');
-});
-(0, _helpers.test)('class selector with escaping (31)', '.f\\\'o\\\'o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f\'o\'o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\\'o\\\'o');
-});
-(0, _helpers.test)('class selector with escaping (32)', '.f\\~o\\~o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f~o~o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\~o\\~o');
-});
-(0, _helpers.test)('class selector with escaping (33)', '.f\\+o\\+o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f+o+o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\+o\\+o');
-});
-(0, _helpers.test)('class selector with escaping (34)', '.\\1D306', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '𝌆');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\1D306');
-});
-(0, _helpers.test)('class selector with escaping (35)', '.not-pseudo\\:focus', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'not-pseudo:focus');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'not-pseudo\\:focus');
-});
-(0, _helpers.test)('class selector with escaping (36)', '.not-pseudo\\:\\:focus', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'not-pseudo::focus');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'not-pseudo\\:\\:focus');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/combinators.js b/node_modules/postcss-selector-parser/dist/__tests__/combinators.js
deleted file mode 100644
index 93de971..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/combinators.js
+++ /dev/null
@@ -1,148 +0,0 @@
-"use strict";
-
-var _types = require("../selectors/types");
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('multiple combinating spaces', 'h1 h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[1].value, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].toString(), ' ');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
-});
-(0, _helpers.test)('column combinator', '.selected||td', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'selected');
- t.deepEqual(tree.nodes[0].nodes[1].value, '||');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'td');
-});
-(0, _helpers.test)('column combinator (2)', '.selected || td', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'selected');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].value, '||');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'td');
-});
-(0, _helpers.test)('descendant combinator', 'h1 h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[1].value, ' ');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
-});
-(0, _helpers.test)('multiple descendant combinators', 'h1 h2 h3 h4', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, ' ', 'should have a combinator');
- t.deepEqual(tree.nodes[0].nodes[3].value, ' ', 'should have a combinator');
- t.deepEqual(tree.nodes[0].nodes[5].value, ' ', 'should have a combinator');
-});
-(0, _helpers.test)('adjacent sibling combinator', 'h1~h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[1].value, '~');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
-});
-(0, _helpers.test)('adjacent sibling combinator (2)', 'h1 ~h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].value, '~');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
-});
-(0, _helpers.test)('adjacent sibling combinator (3)', 'h1~ h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[1].value, '~');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
-});
-(0, _helpers.test)('adjacent sibling combinator (4)', 'h1 ~ h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].value, '~');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
-});
-(0, _helpers.test)('adjacent sibling combinator (5)', 'h1~h2~h3', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[1].value, '~');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'h2');
- t.deepEqual(tree.nodes[0].nodes[3].value, '~');
- t.deepEqual(tree.nodes[0].nodes[4].value, 'h3');
-});
-(0, _helpers.test)('piercing combinator', '.a >>> .b', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'a');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].value, '>>>');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'b');
-});
-(0, _helpers.test)('named combinators', 'a /deep/ b', function (t, tree) {
- var nodes = tree.nodes[0].nodes;
- t.deepEqual(nodes[0].value, 'a');
- t.deepEqual(nodes[1].type, _types.COMBINATOR);
- t.deepEqual(nodes[1].toString(), ' /deep/ ');
- t.deepEqual(nodes[1].value, '/deep/');
- t.deepEqual(nodes[2].value, 'b');
-});
-(0, _helpers.test)('named combinators with escapes', 'a /dee\\p/ b', function (t, tree) {
- var nodes = tree.nodes[0].nodes;
- t.deepEqual(nodes[0].value, 'a');
- t.deepEqual(nodes[1].type, _types.COMBINATOR);
- t.deepEqual(nodes[1].toString(), ' /dee\\p/ ');
- t.deepEqual(nodes[1].value, '/deep/');
- t.deepEqual(nodes[2].value, 'b');
-});
-(0, _helpers.test)('named combinators with escapes and uppercase', 'a /DeE\\p/ b', function (t, tree) {
- var nodes = tree.nodes[0].nodes;
- t.deepEqual(nodes[0].value, 'a');
- t.deepEqual(nodes[1].type, _types.COMBINATOR);
- t.deepEqual(nodes[1].toString(), ' /DeE\\p/ ');
- t.deepEqual(nodes[1].value, '/deep/');
- t.deepEqual(nodes[2].value, 'b');
-});
-(0, _helpers.test)('multiple combinators', 'h1~h2>h3', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, '~', 'should have a combinator');
- t.deepEqual(tree.nodes[0].nodes[3].value, '>', 'should have a combinator');
-});
-(0, _helpers.test)('multiple combinators with whitespaces', 'h1 + h2 > h3', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, '+', 'should have a combinator');
- t.deepEqual(tree.nodes[0].nodes[3].value, '>', 'should have a combinator');
-});
-(0, _helpers.test)('multiple combinators with whitespaces (2)', 'h1+ h2 >h3', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, '+', 'should have a combinator');
- t.deepEqual(tree.nodes[0].nodes[3].value, '>', 'should have a combinator');
-});
-(0, _helpers.test)('trailing combinator & spaces', 'p + ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'p', 'should be a paragraph');
- t.deepEqual(tree.nodes[0].nodes[1].value, '+', 'should have a combinator');
-});
-(0, _helpers.test)('trailing sibling combinator', 'p ~', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'p', 'should be a paragraph');
- t.deepEqual(tree.nodes[0].nodes[1].value, '~', 'should have a combinator');
-});
-(0, _helpers.test)('ending in comment has no trailing combinator', ".bar /* comment 3 */", function (t, tree) {
- var nodeTypes = tree.nodes[0].map(function (n) {
- return n.type;
- });
- t.deepEqual(nodeTypes, ["class"]);
-});
-(0, _helpers.test)('The combinating space is not a space character', ".bar\n.baz", function (t, tree) {
- var nodeTypes = tree.nodes[0].map(function (n) {
- return n.type;
- });
- t.deepEqual(nodeTypes, ["class", "combinator", "class"]);
- t.deepEqual(tree.nodes[0].nodes[1].value, ' ', 'should have a combinator');
- t.deepEqual(tree.nodes[0].nodes[1].raws.value, '\n', 'should have a raw combinator value');
-});
-(0, _helpers.test)('with spaces and a comment has only one combinator', ".bar /* comment 3 */ > .foo", function (t, tree) {
- var nodeTypes = tree.nodes[0].map(function (n) {
- return n.type;
- });
- t.deepEqual(nodeTypes, ["class", "combinator", "class"]);
-});
-(0, _helpers.test)('with a meaningful comment in the middle of a compound selector', "div/* wtf */.foo", function (t, tree) {
- var nodeTypes = tree.nodes[0].map(function (n) {
- return n.type;
- });
- t.deepEqual(nodeTypes, ["tag", "comment", "class"]);
-});
-(0, _helpers.test)('with a comment in the middle of a descendant selector', "div/* wtf */ .foo", function (t, tree) {
- var nodeTypes = tree.nodes[0].map(function (n) {
- return n.type;
- });
- t.deepEqual(nodeTypes, ["tag", "comment", "combinator", "class"]);
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/comments.js b/node_modules/postcss-selector-parser/dist/__tests__/comments.js
deleted file mode 100644
index d317e8a..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/comments.js
+++ /dev/null
@@ -1,81 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('comments', '/*test comment*/h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '/*test comment*/');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'h2');
-});
-(0, _helpers.test)('comments (2)', '.a /*test comment*/label', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
- t.deepEqual(tree.nodes[0].nodes[1].value, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].rawSpaceAfter, ' /*test comment*/');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'tag');
-});
-(0, _helpers.test)('comments (3)', '.a /*test comment*/ label', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
- t.deepEqual(tree.nodes[0].nodes[1].value, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].rawSpaceBefore, ' /*test comment*/ ');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'tag');
-});
-(0, _helpers.test)('multiple comments and other things', 'h1/*test*/h2/*test*/.test/*test*/', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag', 'should have a tag');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'comment', 'should have a comment');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'tag', 'should have a tag');
- t.deepEqual(tree.nodes[0].nodes[3].type, 'comment', 'should have a comment');
- t.deepEqual(tree.nodes[0].nodes[4].type, 'class', 'should have a class name');
- t.deepEqual(tree.nodes[0].nodes[5].type, 'comment', 'should have a comment');
-});
-(0, _helpers.test)('ending in comment', ".bar /* comment 3 */", function (t, tree) {
- var classname = tree.nodes[0].nodes[0];
- t.deepEqual(classname.type, 'class', 'should have a tag');
- t.deepEqual(classname.spaces.after, ' ');
- t.deepEqual(classname.raws.spaces.after, ' /* comment 3 */');
-});
-(0, _helpers.test)('comments in selector list', 'h2, /*test*/ h4', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h2');
- t.deepEqual(tree.nodes[1].nodes[0].rawSpaceBefore, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].type, 'comment');
- t.deepEqual(tree.nodes[1].nodes[0].value, '/*test*/');
- t.deepEqual(tree.nodes[1].nodes[1].rawSpaceBefore, ' ');
- t.deepEqual(tree.nodes[1].nodes[1].type, 'tag');
- t.deepEqual(tree.nodes[1].nodes[1].value, 'h4');
-});
-(0, _helpers.test)('comments in selector list (2)', 'h2,/*test*/h4', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h2');
- t.deepEqual(tree.nodes[1].nodes[0].rawSpaceBefore, '');
- t.deepEqual(tree.nodes[1].nodes[0].type, 'comment');
- t.deepEqual(tree.nodes[1].nodes[0].value, '/*test*/');
- t.deepEqual(tree.nodes[1].nodes[1].type, 'tag');
- t.deepEqual(tree.nodes[1].nodes[1].value, 'h4');
- t.deepEqual(tree.nodes[1].nodes[1].rawSpaceBefore, '');
-});
-(0, _helpers.test)('comments in selector list (3)', 'h2/*test*/, h4', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h2');
- t.deepEqual(tree.nodes[0].nodes[1].rawSpaceBefore, '');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'comment');
- t.deepEqual(tree.nodes[0].nodes[1].value, '/*test*/');
- t.deepEqual(tree.nodes[1].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'h4');
- t.deepEqual(tree.nodes[1].nodes[0].rawSpaceBefore, ' ');
-});
-(0, _helpers.test)('comments in selector list (4)', 'h2, /*test*/ /*test*/ h4', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h2');
- t.deepEqual(tree.nodes[1].nodes[0].rawSpaceBefore, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].type, 'comment');
- t.deepEqual(tree.nodes[1].nodes[0].value, '/*test*/');
- t.deepEqual(tree.nodes[1].nodes[1].rawSpaceBefore, ' ');
- t.deepEqual(tree.nodes[1].nodes[1].type, 'comment');
- t.deepEqual(tree.nodes[1].nodes[1].value, '/*test*/');
- t.deepEqual(tree.nodes[1].nodes[2].rawSpaceBefore, ' ');
- t.deepEqual(tree.nodes[1].nodes[2].type, 'tag');
- t.deepEqual(tree.nodes[1].nodes[2].value, 'h4');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/container.js b/node_modules/postcss-selector-parser/dist/__tests__/container.js
deleted file mode 100644
index 6a99e9c..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/container.js
+++ /dev/null
@@ -1,393 +0,0 @@
-"use strict";
-
-var _ava = _interopRequireDefault(require("ava"));
-
-var _ = _interopRequireDefault(require(".."));
-
-var _helpers = require("./util/helpers");
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-(0, _ava["default"])('container#append', function (t) {
- var out = (0, _helpers.parse)('h1', function (selectors) {
- var selector = selectors.first;
- var clone = selector.first.clone({
- value: 'h2'
- });
- selectors.append(clone);
- });
- t.deepEqual(out, 'h1,h2');
-});
-(0, _ava["default"])('container#prepend', function (t) {
- var out = (0, _helpers.parse)('h2', function (selectors) {
- var selector = selectors.first;
- var clone = selector.first.clone({
- value: 'h1'
- });
- selectors.prepend(clone);
- });
- t.deepEqual(out, 'h1,h2');
-});
-(0, _ava["default"])('container#each', function (t) {
- var str = '';
- (0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
- selectors.each(function (selector) {
- if (selector.first.type === 'tag') {
- str += selector.first.value;
- }
- });
- });
- t.deepEqual(str, 'h1h2');
-});
-(0, _ava["default"])('container#each (safe iteration)', function (t) {
- var out = (0, _helpers.parse)('.x, .y', function (selectors) {
- selectors.each(function (selector) {
- selector.parent.insertBefore(selector, _["default"].className({
- value: 'b'
- }));
- selector.parent.insertAfter(selector, _["default"].className({
- value: 'a'
- }));
- });
- });
- t.deepEqual(out, '.b,.x,.a,.b, .y,.a');
-});
-(0, _ava["default"])('container#each (early exit)', function (t) {
- var str = '';
- (0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
- var eachReturn = selectors.each(function (selector) {
- var tag = selector.first.value;
- str += tag;
- return tag !== 'h2';
- });
- t["false"](eachReturn);
- });
- t.deepEqual(str, 'h1h2');
-});
-(0, _ava["default"])('container#walk', function (t) {
- var str = '';
- (0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
- selectors.walk(function (selector) {
- if (selector.type === 'tag') {
- str += selector.value;
- }
- });
- });
- t.deepEqual(str, 'h1h2h3h4');
-});
-(0, _ava["default"])('container#walk (safe iteration)', function (t) {
- var out = (0, _helpers.parse)('[class] + *[href] *:not(*.green)', function (selectors) {
- selectors.walkUniversals(function (selector) {
- var next = selector.next();
-
- if (next && next.type !== 'combinator') {
- selector.remove();
- }
- });
- });
- t.deepEqual(out, '[class] + [href] :not(.green)');
-});
-(0, _ava["default"])('container#walk (early exit)', function (t) {
- var str = '';
- (0, _helpers.parse)('h1, h2:not(h3, h4)', function (selectors) {
- var walkReturn = selectors.walk(function (selector) {
- if (selector.type === 'tag') {
- var tag = selector.value;
- str += tag;
- return tag !== 'h3';
- }
- });
- t["false"](walkReturn);
- });
- t.deepEqual(str, 'h1h2h3');
-});
-(0, _ava["default"])('container#walkAttribute', function (t) {
- var out = (0, _helpers.parse)('[href][class].class', function (selectors) {
- selectors.walkAttributes(function (attr) {
- if (attr.attribute === 'class') {
- attr.remove();
- }
- });
- });
- t.deepEqual(out, '[href].class');
-});
-(0, _ava["default"])('container#walkClass', function (t) {
- var out = (0, _helpers.parse)('.one, .two, .three:not(.four, .five)', function (selectors) {
- selectors.walkClasses(function (className) {
- className.value = className.value.slice(0, 1);
- });
- });
- t.deepEqual(out, '.o, .t, .t:not(.f, .f)');
-});
-(0, _ava["default"])('container#walkCombinator', function (t) {
- var out = (0, _helpers.parse)('h1 h2 h3 h4', function (selectors) {
- selectors.walkCombinators(function (comment) {
- comment.remove();
- });
- });
- t.deepEqual(out, 'h1h2h3h4');
-});
-(0, _ava["default"])('container#walkComment', function (t) {
- var out = (0, _helpers.parse)('.one/*test*/.two', function (selectors) {
- selectors.walkComments(function (comment) {
- comment.remove();
- });
- });
- t.deepEqual(out, '.one.two');
-});
-(0, _ava["default"])('container#walkId', function (t) {
- var out = (0, _helpers.parse)('h1#one, h2#two', function (selectors) {
- selectors.walkIds(function (id) {
- id.value = id.value.slice(0, 1);
- });
- });
- t.deepEqual(out, 'h1#o, h2#t');
-});
-(0, _ava["default"])('container#walkNesting', function (t) {
- var out = (0, _helpers.parse)('& h1', function (selectors) {
- selectors.walkNesting(function (node) {
- node.replaceWith(_["default"].tag({
- value: 'body'
- }));
- });
- });
- t.deepEqual(out, 'body h1');
-});
-(0, _ava["default"])('container#walkPseudo', function (t) {
- var out = (0, _helpers.parse)('a:before, a:after', function (selectors) {
- selectors.walkPseudos(function (pseudo) {
- pseudo.value = pseudo.value.slice(0, 2);
- });
- });
- t.deepEqual(out, 'a:b, a:a');
-});
-(0, _ava["default"])('container#walkTag', function (t) {
- var out = (0, _helpers.parse)('1 2 3', function (selectors) {
- selectors.walkTags(function (tag) {
- tag.value = 'h' + tag.value;
- });
- });
- t.deepEqual(out, 'h1 h2 h3');
-});
-(0, _ava["default"])('container#walkUniversal', function (t) {
- var out = (0, _helpers.parse)('*.class,*.class,*.class', function (selectors) {
- selectors.walkUniversals(function (universal) {
- universal.remove();
- });
- });
- t.deepEqual(out, '.class,.class,.class');
-});
-(0, _ava["default"])('container#map', function (t) {
- (0, _helpers.parse)('1 2 3', function (selectors) {
- var arr = selectors.first.map(function (selector) {
- if (/[0-9]/.test(selector.value)) {
- return 'h' + selector.value;
- }
-
- return selector.value;
- });
- t.deepEqual(arr, ['h1', ' ', 'h2', ' ', 'h3']);
- });
-});
-(0, _ava["default"])('container#every', function (t) {
- (0, _helpers.parse)('.one.two.three', function (selectors) {
- var allClasses = selectors.first.every(function (selector) {
- return selector.type === 'class';
- });
- t.truthy(allClasses);
- });
-});
-(0, _ava["default"])('container#some', function (t) {
- (0, _helpers.parse)('one#two.three', function (selectors) {
- var someClasses = selectors.first.some(function (selector) {
- return selector.type === 'class';
- });
- t.truthy(someClasses);
- });
-});
-(0, _ava["default"])('container#reduce', function (t) {
- (0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
- var str = selectors.reduce(function (memo, selector) {
- if (selector.first.type === 'tag') {
- memo += selector.first.value;
- }
-
- return memo;
- }, '');
- t.deepEqual(str, 'h1h2h3h4');
- });
-});
-(0, _ava["default"])('container#filter', function (t) {
- (0, _helpers.parse)('h1, h2, c1, c2', function (selectors) {
- var ast = selectors.filter(function (selector) {
- return ~selector.first.value.indexOf('h');
- });
- t.deepEqual(String(ast), 'h1, h2');
- });
-});
-(0, _ava["default"])('container#split', function (t) {
- (0, _helpers.parse)('h1 h2 >> h3', function (selectors) {
- var list = selectors.first.split(function (selector) {
- return selector.value === '>>';
- }).map(function (group) {
- return group.map(String);
- });
- t.deepEqual(list, [['h1', ' ', 'h2', ' >> '], ['h3']]);
- t.deepEqual(list.length, 2);
- });
-});
-(0, _ava["default"])('container#sort', function (t) {
- var out = (0, _helpers.parse)('h2,h3,h1,h4', function (selectors) {
- selectors.sort(function (a, b) {
- return a.first.value.slice(-1) - b.first.value.slice(-1);
- });
- });
- t.deepEqual(out, 'h1,h2,h3,h4');
-});
-(0, _ava["default"])('container#at', function (t) {
- (0, _helpers.parse)('h1, h2, h3', function (selectors) {
- t.deepEqual(selectors.at(1).first.value, 'h2');
- });
-});
-(0, _ava["default"])('container#first, container#last', function (t) {
- (0, _helpers.parse)('h1, h2, h3, h4', function (selectors) {
- t.deepEqual(selectors.first.first.value, 'h1');
- t.deepEqual(selectors.last.last.value, 'h4');
- });
-});
-(0, _ava["default"])('container#index', function (t) {
- (0, _helpers.parse)('h1 h2 h3', function (selectors) {
- var middle = selectors.first.at(1);
- t.deepEqual(selectors.first.index(middle), 1);
- });
-});
-(0, _ava["default"])('container#length', function (t) {
- (0, _helpers.parse)('h1, h2, h3', function (selectors) {
- t.deepEqual(selectors.length, 3);
- });
-});
-(0, _ava["default"])('container#removeChild', function (t) {
- var out = (0, _helpers.parse)('h1.class h2.class h3.class', function (selectors) {
- selectors.walk(function (selector) {
- if (selector.type === 'class') {
- selector.parent.removeChild(selector);
- }
- });
- });
- t.deepEqual(out, 'h1 h2 h3');
-});
-(0, _ava["default"])('container#removeAll, container#empty', function (t) {
- var wipe = function wipe(method) {
- return function (selectors) {
- return selectors[method]();
- };
- };
-
- var out1 = (0, _helpers.parse)('h1 h2, h2 h3, h3 h4', wipe('empty'));
- var out2 = (0, _helpers.parse)('h1 h2, h2 h3, h3 h4', wipe('removeAll'));
- t.deepEqual(out1, '');
- t.deepEqual(out2, '');
-});
-(0, _ava["default"])('container#insertBefore', function (t) {
- var out = (0, _helpers.parse)('h2', function (selectors) {
- var selector = selectors.first;
- var clone = selector.first.clone({
- value: 'h1'
- });
- selectors.insertBefore(selector, clone);
- });
- t.deepEqual(out, 'h1,h2');
-});
-(0, _ava["default"])('container#insertBefore and node#remove', function (t) {
- var out = (0, _helpers.parse)('h2', function (selectors) {
- var selector = selectors.first;
-
- var newSel = _["default"].tag({
- value: 'h1'
- });
-
- selectors.insertBefore(selector, newSel);
- newSel.remove();
- });
- t.deepEqual(out, 'h2');
-});
-(0, _ava["default"])('container#insertAfter', function (t) {
- var out = (0, _helpers.parse)('h1', function (selectors) {
- var selector = selectors.first;
- var clone = selector.first.clone({
- value: 'h2'
- });
- selectors.insertAfter(selector, clone);
- });
- t.deepEqual(out, 'h1,h2');
-});
-(0, _ava["default"])('container#insertAfter and node#remove', function (t) {
- var out = (0, _helpers.parse)('h2', function (selectors) {
- var selector = selectors.first;
-
- var newSel = _["default"].tag({
- value: 'h1'
- });
-
- selectors.insertAfter(selector, newSel);
- newSel.remove();
- });
- t.deepEqual(out, 'h2');
-});
-(0, _ava["default"])('container#insertAfter (during iteration)', function (t) {
- var out = (0, _helpers.parse)('h1, h2, h3', function (selectors) {
- selectors.walkTags(function (selector) {
- var attribute = _["default"].attribute({
- attribute: 'class'
- });
-
- selector.parent.insertAfter(selector, attribute);
- });
- });
- t.deepEqual(out, 'h1[class], h2[class], h3[class]');
-});
-(0, _ava["default"])('Container#atPosition first pseudo', function (t) {
- (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
- var node = root.atPosition(1, 1);
- t.deepEqual(node.type, "pseudo");
- t.deepEqual(node.toString(), ":not(.foo)");
- });
-});
-(0, _ava["default"])('Container#atPosition class in pseudo', function (t) {
- (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
- var node = root.atPosition(1, 6);
- t.deepEqual(node.type, "class");
- t.deepEqual(node.toString(), ".foo");
- });
-});
-(0, _ava["default"])('Container#atPosition id in second selector', function (t) {
- (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
- var node = root.atPosition(2, 1);
- t.deepEqual(node.type, "id");
- t.deepEqual(node.toString(), "\n#foo");
- });
-});
-(0, _ava["default"])('Container#atPosition combinator in second selector', function (t) {
- (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
- var node = root.atPosition(2, 6);
- t.deepEqual(node.type, "combinator");
- t.deepEqual(node.toString(), " > ");
- var nodeSpace = root.atPosition(2, 5);
- t.deepEqual(nodeSpace.type, "selector");
- t.deepEqual(nodeSpace.toString(), "\n#foo > :matches(ol, ul)");
- });
-});
-(0, _ava["default"])('Container#atPosition tag in second selector pseudo', function (t) {
- (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
- var node = root.atPosition(2, 17);
- t.deepEqual(node.type, "tag");
- t.deepEqual(node.toString(), "ol");
- });
-});
-(0, _ava["default"])('Container#atPosition comma in second selector pseudo', function (t) {
- (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
- var node = root.atPosition(2, 19);
- t.deepEqual(node.type, "pseudo");
- t.deepEqual(node.toString(), ":matches(ol, ul)");
- });
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/escapes.js b/node_modules/postcss-selector-parser/dist/__tests__/escapes.js
deleted file mode 100644
index cebabd9..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/escapes.js
+++ /dev/null
@@ -1,19 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('escaped semicolon in class', '.\\;', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ';');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\;');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
-});
-(0, _helpers.test)('escaped semicolon in id', '#\\;', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ';');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\;');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-}); // This is a side-effect of allowing media queries to be parsed. Not sure it shouldn't just be an error.
-
-(0, _helpers.test)('bare parens capture contents as a string', '(h1)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '(h1)');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'string');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/exceptions.js b/node_modules/postcss-selector-parser/dist/__tests__/exceptions.js
deleted file mode 100644
index 85c3f83..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/exceptions.js
+++ /dev/null
@@ -1,24 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-// Unclosed elements
-(0, _helpers["throws"])('unclosed string', 'a[href="wow]');
-(0, _helpers["throws"])('unclosed comment', '/* oops');
-(0, _helpers["throws"])('unclosed pseudo element', 'button::');
-(0, _helpers["throws"])('unclosed pseudo class', 'a:');
-(0, _helpers["throws"])('unclosed attribute selector', '[name="james"][href');
-(0, _helpers["throws"])('no opening parenthesis', ')');
-(0, _helpers["throws"])('no opening parenthesis (2)', ':global.foo)');
-(0, _helpers["throws"])('no opening parenthesis (3)', 'h1:not(h2:not(h3)))');
-(0, _helpers["throws"])('no opening square bracket', ']');
-(0, _helpers["throws"])('no opening square bracket (2)', ':global.foo]');
-(0, _helpers["throws"])('no opening square bracket (3)', '[global]]');
-(0, _helpers["throws"])('bad pseudo element', 'button::"after"');
-(0, _helpers["throws"])('missing closing parenthesis in pseudo', ':not([attr="test"]:not([attr="test"])');
-(0, _helpers["throws"])('bad syntax', '-moz-osx-font-smoothing: grayscale');
-(0, _helpers["throws"])('bad syntax (2)', '! .body');
-(0, _helpers["throws"])('missing backslash for semicolon', '.;');
-(0, _helpers["throws"])('missing backslash for semicolon (2)', '.\;');
-(0, _helpers["throws"])('unexpected / foo', '-Option\/root', "Unexpected '/'. Escaping special characters with \\ may help.");
-(0, _helpers["throws"])('bang in selector', '.foo !optional', "Unexpected '!'. Escaping special characters with \\ may help.");
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/guards.js b/node_modules/postcss-selector-parser/dist/__tests__/guards.js
deleted file mode 100644
index 7cdec58..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/guards.js
+++ /dev/null
@@ -1,127 +0,0 @@
-"use strict";
-
-var _ = _interopRequireDefault(require("../"));
-
-var _helpers = require("./util/helpers");
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-var node = function node(tree, n) {
- if (n === void 0) {
- n = 0;
- }
-
- return tree.nodes[0].nodes[n];
-};
-
-(0, _helpers.test)('attribute guard', '[foo]', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isAttribute(undefined));
- t["true"](_["default"].isAttribute(n));
- t["false"](_["default"].isContainer(n));
- t["true"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('className guard', '.foo', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isClassName(undefined));
- t["true"](_["default"].isClassName(n));
- t["false"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('combinator guard', '.foo > .bar', function (t, tree) {
- var n = node(tree, 1);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isCombinator(undefined));
- t["true"](_["default"].isCombinator(n));
- t["false"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('comment guard', '/* foo */.foo > .bar', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isComment(undefined));
- t["true"](_["default"].isComment(n));
- t["false"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('id guard', '#ident', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isIdentifier(undefined));
- t["true"](_["default"].isIdentifier(n));
- t["false"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('nesting guard', '&.foo', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isNesting(undefined));
- t["true"](_["default"].isNesting(n));
- t["false"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('pseudo class guard', ':hover', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isPseudo(undefined));
- t["true"](_["default"].isPseudo(n));
- t["true"](_["default"].isPseudoClass(n));
- t["false"](_["default"].isPseudoElement(n));
- t["true"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('pseudo element guard', '::first-line', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isPseudo(undefined));
- t["true"](_["default"].isPseudo(n));
- t["false"](_["default"].isPseudoClass(n));
- t["true"](_["default"].isPseudoElement(n));
- t["true"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('special pseudo element guard', ':before:after', function (t, tree) {
- [node(tree), node(tree, 1)].forEach(function (n) {
- t["true"](_["default"].isPseudo(n));
- t["false"](_["default"].isPseudoClass(n));
- t["true"](_["default"].isPseudoElement(n));
- t["true"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
- });
-});
-(0, _helpers.test)('special pseudo element guard (uppercase)', ':BEFORE:AFTER', function (t, tree) {
- [node(tree), node(tree, 1)].forEach(function (n) {
- t["true"](_["default"].isPseudo(n));
- t["false"](_["default"].isPseudoClass(n));
- t["true"](_["default"].isPseudoElement(n));
- t["true"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
- });
-});
-(0, _helpers.test)('string guard', '"string"', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isString(undefined));
- t["true"](_["default"].isString(n));
- t["false"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('tag guard', 'h1', function (t, tree) {
- var n = node(tree);
- t["false"](_["default"].isNode(undefined));
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isTag(undefined));
- t["true"](_["default"].isTag(n));
- t["false"](_["default"].isContainer(n));
- t["true"](_["default"].isNamespace(n));
-});
-(0, _helpers.test)('universal guard', '*', function (t, tree) {
- var n = node(tree);
- t["true"](_["default"].isNode(n));
- t["false"](_["default"].isUniversal(undefined));
- t["true"](_["default"].isUniversal(n));
- t["false"](_["default"].isContainer(n));
- t["false"](_["default"].isNamespace(n));
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/id.js b/node_modules/postcss-selector-parser/dist/__tests__/id.js
deleted file mode 100644
index 87dc746..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/id.js
+++ /dev/null
@@ -1,235 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('id selector', '#one', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'one');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with universal', '*#z98y ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'z98y');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
-});
-(0, _helpers.test)('id hack', '#one#two', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
-});
-(0, _helpers.test)('id and class names mixed', '#one.two.three', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'one');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'two');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'three');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'class');
-});
-(0, _helpers.test)('qualified id', 'button#one', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
-});
-(0, _helpers.test)('qualified id & class name', 'h1#one.two', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'class');
-});
-(0, _helpers.test)('extraneous non-combinating whitespace', ' #h1 , #h2 ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.after, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'h2');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.after, ' ');
-});
-(0, _helpers.test)('Sass interpolation within a class', '.#{foo}', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes.length, 1);
- t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[0].value, '#{foo}');
-});
-(0, _helpers.test)('Sass interpolation within an id', '#foo#{bar}', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes.length, 1);
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo#{bar}');
-});
-(0, _helpers.test)('Less interpolation within an id', '#foo@{bar}', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes.length, 1);
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo@{bar}');
-});
-(0, _helpers.test)('id selector with escaping', '#\\#test', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '#test');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#test');
-});
-(0, _helpers.test)('id selector with escaping (2)', '#-a-b-c-', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '-a-b-c-');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with escaping (3)', '#u-m\\00002b', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'u-m+');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'u-m\\00002b');
-});
-(0, _helpers.test)('id selector with escaping (4)', '#♥', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '♥');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with escaping (5)', '#©', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '©');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with escaping (6)', '#“‘’”', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '“‘’”');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with escaping (7)', '#☺☃', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '☺☃');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with escaping (8)', '#⌘⌥', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '⌘⌥');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with escaping (9)', '#𝄞♪♩♫♬', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '𝄞♪♩♫♬');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with escaping (10)', '#💩', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '💩');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
-});
-(0, _helpers.test)('id selector with escaping (11)', '#\\?', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '?');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\?');
-});
-(0, _helpers.test)('id selector with escaping (12)', '#\\@', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '@');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\@');
-});
-(0, _helpers.test)('id selector with escaping (13)', '#\\.', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '.');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\.');
-});
-(0, _helpers.test)('id selector with escaping (14)', '#\\3A \\)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':)');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A \\)');
-});
-(0, _helpers.test)('id selector with escaping (15)', '#\\3A \\`\\(', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':`(');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A \\`\\(');
-});
-(0, _helpers.test)('id selector with escaping (16)', '#\\31 23', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '123');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\31 23');
-});
-(0, _helpers.test)('id selector with escaping (17)', '#\\31 a2b3c', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '1a2b3c');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\31 a2b3c');
-});
-(0, _helpers.test)('id selector with escaping (18)', '#\\<p\\>', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '<p>');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\<p\\>');
-});
-(0, _helpers.test)('id selector with escaping (19)', '#\\<\\>\\<\\<\\<\\>\\>\\<\\>', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '<><<<>><>');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\<\\>\\<\\<\\<\\>\\>\\<\\>');
-});
-(0, _helpers.test)('id selector with escaping (20)', '#\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\[\\>\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\>\\+\\<\\<\\<\\<\\-\\]\\>\\+\\+\\.\\>\\+\\.\\+\\+\\+\\+\\+\\+\\+\\.\\.\\+\\+\\+\\.\\>\\+\\+\\.\\<\\<\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\.\\>\\.\\+\\+\\+\\.\\-\\-\\-\\-\\-\\-\\.\\-\\-\\-\\-\\-\\-\\-\\-\\.\\>\\+\\.\\>\\.', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\[\\>\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\>\\+\\<\\<\\<\\<\\-\\]\\>\\+\\+\\.\\>\\+\\.\\+\\+\\+\\+\\+\\+\\+\\.\\.\\+\\+\\+\\.\\>\\+\\+\\.\\<\\<\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\.\\>\\.\\+\\+\\+\\.\\-\\-\\-\\-\\-\\-\\.\\-\\-\\-\\-\\-\\-\\-\\-\\.\\>\\+\\.\\>\\.');
-});
-(0, _helpers.test)('id selector with escaping (21)', '#\\#', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '#');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#');
-});
-(0, _helpers.test)('id selector with escaping (22)', '#\\#\\#', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '##');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#\\#');
-});
-(0, _helpers.test)('id selector with escaping (23)', '#\\#\\.\\#\\.\\#', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '#.#.#');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#\\.\\#\\.\\#');
-});
-(0, _helpers.test)('id selector with escaping (24)', '#\\_', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '_');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\_');
-});
-(0, _helpers.test)('id selector with escaping (25)', '#\\{\\}', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '{}');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\{\\}');
-});
-(0, _helpers.test)('id selector with escaping (26)', '#\\.fake\\-class', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '.fake-class');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\.fake\\-class');
-});
-(0, _helpers.test)('id selector with escaping (27)', '#foo\\.bar', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo.bar');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'foo\\.bar');
-});
-(0, _helpers.test)('id selector with escaping (28)', '#\\3A hover', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':hover');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A hover');
-});
-(0, _helpers.test)('id selector with escaping (29)', '#\\3A hover\\3A focus\\3A active', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':hover:focus:active');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A hover\\3A focus\\3A active');
-});
-(0, _helpers.test)('id selector with escaping (30)', '#\\[attr\\=value\\]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '[attr=value]');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\[attr\\=value\\]');
-});
-(0, _helpers.test)('id selector with escaping (31)', '#f\\/o\\/o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f/o/o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\/o\\/o');
-});
-(0, _helpers.test)('id selector with escaping (32)', '#f\\\\o\\\\o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f\\o\\o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\\\o\\\\o');
-});
-(0, _helpers.test)('id selector with escaping (33)', '#f\\*o\\*o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f*o*o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\*o\\*o');
-});
-(0, _helpers.test)('id selector with escaping (34)', '#f\\!o\\!o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f!o!o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\!o\\!o');
-});
-(0, _helpers.test)('id selector with escaping (35)', '#f\\\'o\\\'o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f\'o\'o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\\'o\\\'o');
-});
-(0, _helpers.test)('id selector with escaping (36)', '#f\\~o\\~o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f~o~o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\~o\\~o');
-});
-(0, _helpers.test)('id selector with escaping (37)', '#f\\+o\\+o', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'f+o+o');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
- t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\+o\\+o');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/lossy.js b/node_modules/postcss-selector-parser/dist/__tests__/lossy.js
deleted file mode 100644
index a59a93a..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/lossy.js
+++ /dev/null
@@ -1,88 +0,0 @@
-"use strict";
-
-exports.__esModule = true;
-exports.testLossy = exports.parse = void 0;
-
-var _ava = _interopRequireDefault(require("ava"));
-
-var _index = _interopRequireDefault(require("../index"));
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-var parse = function parse(input, options, transform) {
- return (0, _index["default"])(transform).processSync(input, options);
-};
-
-exports.parse = parse;
-
-var testLossy = function testLossy(t, input, expected) {
- var result = parse(input, {
- lossless: false
- });
- t.deepEqual(result, expected);
-};
-
-exports.testLossy = testLossy;
-(0, _ava["default"])('combinator, descendant - single', testLossy, '.one .two', '.one .two');
-(0, _ava["default"])('combinator, descendant - multiple', testLossy, '.one .two', '.one .two');
-(0, _ava["default"])('combinator, child - space before', testLossy, '.one >.two', '.one>.two');
-(0, _ava["default"])('combinator, child - space after', testLossy, '.one> .two', '.one>.two');
-(0, _ava["default"])('combinator, sibling - space before', testLossy, '.one ~.two', '.one~.two');
-(0, _ava["default"])('combinator, sibling - space after', testLossy, '.one~ .two', '.one~.two');
-(0, _ava["default"])('combinator, adj sibling - space before', testLossy, '.one +.two', '.one+.two');
-(0, _ava["default"])('combinator, adj sibling - space after', testLossy, '.one+ .two', '.one+.two');
-(0, _ava["default"])('classes, extraneous spaces', testLossy, ' .h1 , .h2 ', '.h1,.h2');
-(0, _ava["default"])('ids, extraneous spaces', testLossy, ' #h1 , #h2 ', '#h1,#h2');
-(0, _ava["default"])('attribute, spaces in selector', testLossy, 'h1[ href *= "test" ]', 'h1[href*="test"]');
-(0, _ava["default"])('attribute, insensitive flag 1', testLossy, '[href="test" i ]', '[href="test"i]');
-(0, _ava["default"])('attribute, insensitive flag 2', testLossy, '[href=TEsT i ]', '[href=TEsT i]');
-(0, _ava["default"])('attribute, insensitive flag 3', testLossy, '[href=test i ]', '[href=test i]');
-(0, _ava["default"])('attribute, extreneous whitespace', testLossy, ' [href] , [class] ', '[href],[class]');
-(0, _ava["default"])('namespace, space before', testLossy, ' postcss|button', 'postcss|button');
-(0, _ava["default"])('namespace, space after', testLossy, 'postcss|button ', 'postcss|button');
-(0, _ava["default"])('namespace - all elements, space before', testLossy, ' postcss|*', 'postcss|*');
-(0, _ava["default"])('namespace - all elements, space after', testLossy, 'postcss|* ', 'postcss|*');
-(0, _ava["default"])('namespace - all namespaces, space before', testLossy, ' *|button', '*|button');
-(0, _ava["default"])('namespace - all namespaces, space after', testLossy, '*|button ', '*|button');
-(0, _ava["default"])('namespace - all elements in all namespaces, space before', testLossy, ' *|*', '*|*');
-(0, _ava["default"])('namespace - all elements in all namespaces, space after', testLossy, '*|* ', '*|*');
-(0, _ava["default"])('namespace - all elements without namespace, space before', testLossy, ' |*', '|*');
-(0, _ava["default"])('namespace - all elements without namespace, space after', testLossy, '|* ', '|*');
-(0, _ava["default"])('namespace - tag with no namespace, space before', testLossy, ' |button', '|button');
-(0, _ava["default"])('namespace - tag with no namespace, space after', testLossy, '|button ', '|button');
-(0, _ava["default"])('namespace - inside attribute, space before', testLossy, ' [ postcss|href=test]', '[postcss|href=test]');
-(0, _ava["default"])('namespace - inside attribute, space after', testLossy, '[postcss|href= test ] ', '[postcss|href=test]');
-(0, _ava["default"])('namespace - inside attribute (2), space before', testLossy, ' [ postcss|href]', '[postcss|href]');
-(0, _ava["default"])('namespace - inside attribute (2), space after', testLossy, '[postcss|href ] ', '[postcss|href]');
-(0, _ava["default"])('namespace - inside attribute (3), space before', testLossy, ' [ *|href=test]', '[*|href=test]');
-(0, _ava["default"])('namespace - inside attribute (3), space after', testLossy, '[*|href= test ] ', '[*|href=test]');
-(0, _ava["default"])('namespace - inside attribute (4), space after', testLossy, '[|href= test ] ', '[|href=test]');
-(0, _ava["default"])('tag - extraneous whitespace', testLossy, ' h1 , h2 ', 'h1,h2');
-(0, _ava["default"])('tag - trailing comma', testLossy, 'h1, ', 'h1,');
-(0, _ava["default"])('tag - trailing comma (1)', testLossy, 'h1,', 'h1,');
-(0, _ava["default"])('tag - trailing comma (2)', testLossy, 'h1', 'h1');
-(0, _ava["default"])('tag - trailing slash (1)', testLossy, 'h1\\ ', 'h1\\ ');
-(0, _ava["default"])('tag - trailing slash (2)', testLossy, 'h1\\ h2\\', 'h1\\ h2\\');
-(0, _ava["default"])('universal - combinator', testLossy, ' * + * ', '*+*');
-(0, _ava["default"])('universal - extraneous whitespace', testLossy, ' * , * ', '*,*');
-(0, _ava["default"])('universal - qualified universal selector', testLossy, '*[href] *:not(*.green)', '*[href] *:not(*.green)');
-(0, _ava["default"])('nesting - spacing before', testLossy, ' &.class', '&.class');
-(0, _ava["default"])('nesting - spacing after', testLossy, '&.class ', '&.class');
-(0, _ava["default"])('nesting - spacing between', testLossy, '& .class ', '& .class');
-(0, _ava["default"])('pseudo (single) - spacing before', testLossy, ' :after', ':after');
-(0, _ava["default"])('pseudo (single) - spacing after', testLossy, ':after ', ':after');
-(0, _ava["default"])('pseudo (double) - spacing before', testLossy, ' ::after', '::after');
-(0, _ava["default"])('pseudo (double) - spacing after', testLossy, '::after ', '::after');
-(0, _ava["default"])('pseudo - multiple', testLossy, ' *:target::before , a:after ', '*:target::before,a:after');
-(0, _ava["default"])('pseudo - negated', testLossy, 'h1:not( .heading )', 'h1:not(.heading)');
-(0, _ava["default"])('pseudo - negated with combinators (1)', testLossy, 'h1:not(.heading > .title) > h1', 'h1:not(.heading>.title)>h1');
-(0, _ava["default"])('pseudo - negated with combinators (2)', testLossy, '.foo:nth-child(2n + 1)', '.foo:nth-child(2n+1)');
-(0, _ava["default"])('pseudo - extra whitespace', testLossy, 'a:not( h2 )', 'a:not(h2)');
-(0, _ava["default"])('comments - comment inside descendant selector', testLossy, "div /* wtf */.foo", "div /* wtf */.foo");
-(0, _ava["default"])('comments - comment inside complex selector', testLossy, "div /* wtf */ > .foo", "div/* wtf */>.foo");
-(0, _ava["default"])('comments - comment inside compound selector with space', testLossy, "div /* wtf */ .foo", "div /* wtf */.foo");
-(0, _ava["default"])('@words - space before', testLossy, ' @media', '@media');
-(0, _ava["default"])('@words - space after', testLossy, '@media ', '@media');
-(0, _ava["default"])('@words - maintains space between', testLossy, '@media (min-width: 700px) and (orientation: landscape)', '@media (min-width: 700px) and (orientation: landscape)');
-(0, _ava["default"])('@words - extraneous space between', testLossy, '@media (min-width: 700px) and (orientation: landscape)', '@media (min-width: 700px) and (orientation: landscape)');
-(0, _ava["default"])('@words - multiple', testLossy, '@media (min-width: 700px), (min-height: 400px)', '@media (min-width: 700px),(min-height: 400px)');
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/namespaces.js b/node_modules/postcss-selector-parser/dist/__tests__/namespaces.js
deleted file mode 100644
index 15333e6..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/namespaces.js
+++ /dev/null
@@ -1,66 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('match tags in the postcss namespace', 'postcss|button', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, 'postcss');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'button');
-});
-(0, _helpers.test)('match everything in the postcss namespace', 'postcss|*', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, 'postcss');
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
-});
-(0, _helpers.test)('match any namespace', '*|button', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, '*');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'button');
-});
-(0, _helpers.test)('match all elements within the postcss namespace', 'postcss|*', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, 'postcss');
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
-});
-(0, _helpers.test)('match all elements in all namespaces', '*|*', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, '*');
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
-});
-(0, _helpers.test)('match all elements without a namespace', '|*', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, true);
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
-});
-(0, _helpers.test)('match tags with no namespace', '|button', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, true);
- t.deepEqual(tree.nodes[0].nodes[0].value, 'button');
-});
-(0, _helpers.test)('match namespace inside attribute selector', '[postcss|href=test]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, 'postcss');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'test');
-});
-(0, _helpers.test)('match namespace inside attribute selector (2)', '[postcss|href]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, 'postcss');
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
-});
-(0, _helpers.test)('match namespace inside attribute selector (3)', '[*|href]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, '*');
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
-});
-(0, _helpers.test)('match default namespace inside attribute selector', '[|href]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, true);
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
-});
-(0, _helpers.test)('match default namespace inside attribute selector with spaces', '[ |href ]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, true);
- t.deepEqual(tree.nodes[0].nodes[0].attribute, 'href');
-});
-(0, _helpers.test)('namespace with qualified id selector', 'ns|h1#foo', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, 'ns');
-});
-(0, _helpers.test)('namespace with qualified class selector', 'ns|h1.foo', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].namespace, 'ns');
-});
-(0, _helpers.test)('ns alias for namespace', 'f\\oo|h1.foo', function (t, tree) {
- var tag = tree.nodes[0].nodes[0];
- t.deepEqual(tag.namespace, 'foo');
- t.deepEqual(tag.ns, 'foo');
- tag.ns = "bar";
- t.deepEqual(tag.namespace, 'bar');
- t.deepEqual(tag.ns, 'bar');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/nesting.js b/node_modules/postcss-selector-parser/dist/__tests__/nesting.js
deleted file mode 100644
index e3c164a..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/nesting.js
+++ /dev/null
@@ -1,40 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('nesting selector', '&', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '&');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'nesting');
-});
-(0, _helpers.test)('nesting selector followed by a class', '& .class', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '&');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'nesting');
- t.deepEqual(tree.nodes[0].nodes[1].value, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'class');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'class');
-});
-(0, _helpers.test)('&foo', '&foo', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '&');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'nesting');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'foo');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'tag');
-});
-(0, _helpers.test)('&-foo', '&-foo', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '&');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'nesting');
- t.deepEqual(tree.nodes[0].nodes[1].value, '-foo');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'tag');
-});
-(0, _helpers.test)('&_foo', '&_foo', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '&');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'nesting');
- t.deepEqual(tree.nodes[0].nodes[1].value, '_foo');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'tag');
-});
-(0, _helpers.test)('&|foo', '&|foo', function (t, tree) {
- var element = tree.nodes[0].nodes[0];
- t.deepEqual(element.value, 'foo');
- t.deepEqual(element.type, 'tag');
- t.deepEqual(element.namespace, '&');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/node.js b/node_modules/postcss-selector-parser/dist/__tests__/node.js
deleted file mode 100644
index 7ed1fcc..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/node.js
+++ /dev/null
@@ -1,139 +0,0 @@
-"use strict";
-
-var _ava = _interopRequireDefault(require("ava"));
-
-var _ = _interopRequireDefault(require(".."));
-
-var _helpers = require("./util/helpers");
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-(0, _ava["default"])('node#clone', function (t) {
- (0, _helpers.parse)('[href="test"]', function (selectors) {
- var selector = selectors.first.first;
- var clone = selector.clone();
- delete selector.parent;
- t.deepEqual(clone, selectors.first.first);
- });
-});
-(0, _ava["default"])('node#clone of attribute', function (t) {
- (0, _helpers.parse)('[href=test]', function (selectors) {
- var selector = selectors.first.first;
- var clone = selector.clone();
- delete selector.parent;
- t.deepEqual(clone, selectors.first.first);
- });
-});
-(0, _ava["default"])('node#replaceWith', function (t) {
- var out = (0, _helpers.parse)('[href="test"]', function (selectors) {
- var attr = selectors.first.first;
-
- var id = _["default"].id({
- value: 'test'
- });
-
- var className = _["default"].className({
- value: 'test'
- });
-
- attr.replaceWith(id, className);
- });
- t.deepEqual(out, '#test.test');
-});
-(0, _ava["default"])('Node#appendToPropertyAndEscape', function (t) {
- var out = (0, _helpers.parse)('.fo\\o', function (selectors) {
- var className = selectors.first.first;
- t.deepEqual(className.raws, {
- value: "fo\\o"
- });
- className.appendToPropertyAndEscape("value", "bar", "ba\\r");
- t.deepEqual(className.raws, {
- value: "fo\\oba\\r"
- });
- });
- t.deepEqual(out, '.fo\\oba\\r');
-});
-(0, _ava["default"])('Node#setPropertyAndEscape with existing raws', function (t) {
- var out = (0, _helpers.parse)('.fo\\o', function (selectors) {
- var className = selectors.first.first;
- t.deepEqual(className.raws, {
- value: "fo\\o"
- });
- className.setPropertyAndEscape("value", "bar", "ba\\r");
- t.deepEqual(className.raws, {
- value: "ba\\r"
- });
- });
- t.deepEqual(out, '.ba\\r');
-});
-(0, _ava["default"])('Node#setPropertyAndEscape without existing raws', function (t) {
- var out = (0, _helpers.parse)('.foo', function (selectors) {
- var className = selectors.first.first;
- t.deepEqual(className.raws, undefined);
- className.setPropertyAndEscape("value", "bar", "ba\\r");
- t.deepEqual(className.raws, {
- value: "ba\\r"
- });
- });
- t.deepEqual(out, '.ba\\r');
-});
-(0, _ava["default"])('Node#setPropertyWithoutEscape with existing raws', function (t) {
- var out = (0, _helpers.parse)('.fo\\o', function (selectors) {
- var className = selectors.first.first;
- t.deepEqual(className.raws, {
- value: "fo\\o"
- });
- className.setPropertyWithoutEscape("value", "w+t+f");
- t.deepEqual(className.raws, {});
- });
- t.deepEqual(out, '.w+t+f');
-});
-(0, _ava["default"])('Node#setPropertyWithoutEscape without existing raws', function (t) {
- var out = (0, _helpers.parse)('.foo', function (selectors) {
- var className = selectors.first.first;
- t.deepEqual(className.raws, undefined);
- className.setPropertyWithoutEscape("value", "w+t+f");
- t.deepEqual(className.raws, {});
- t.deepEqual(className.value, "w+t+f");
- });
- t.deepEqual(out, '.w+t+f');
-});
-(0, _ava["default"])('Node#isAtPosition', function (t) {
- (0, _helpers.parse)(':not(.foo),\n#foo > :matches(ol, ul)', function (root) {
- t.deepEqual(root.isAtPosition(1, 1), true);
- t.deepEqual(root.isAtPosition(1, 10), true);
- t.deepEqual(root.isAtPosition(2, 23), true);
- t.deepEqual(root.isAtPosition(2, 24), false);
- var selector = root.first;
- t.deepEqual(selector.isAtPosition(1, 1), true);
- t.deepEqual(selector.isAtPosition(1, 10), true);
- t.deepEqual(selector.isAtPosition(1, 11), false);
- var pseudoNot = selector.first;
- t.deepEqual(pseudoNot.isAtPosition(1, 1), true);
- t.deepEqual(pseudoNot.isAtPosition(1, 7), true);
- t.deepEqual(pseudoNot.isAtPosition(1, 10), true);
- t.deepEqual(pseudoNot.isAtPosition(1, 11), false);
- var notSelector = pseudoNot.first;
- t.deepEqual(notSelector.isAtPosition(1, 1), false);
- t.deepEqual(notSelector.isAtPosition(1, 4), false);
- t.deepEqual(notSelector.isAtPosition(1, 5), true);
- t.deepEqual(notSelector.isAtPosition(1, 6), true);
- t.deepEqual(notSelector.isAtPosition(1, 9), true);
- t.deepEqual(notSelector.isAtPosition(1, 10), true);
- t.deepEqual(notSelector.isAtPosition(1, 11), false);
- var notClass = notSelector.first;
- t.deepEqual(notClass.isAtPosition(1, 5), false);
- t.deepEqual(notClass.isAtPosition(1, 6), true);
- t.deepEqual(notClass.isAtPosition(1, 9), true);
- t.deepEqual(notClass.isAtPosition(1, 10), false);
- var secondSel = root.at(1);
- t.deepEqual(secondSel.isAtPosition(1, 11), false);
- t.deepEqual(secondSel.isAtPosition(2, 1), true);
- t.deepEqual(secondSel.isAtPosition(2, 23), true);
- t.deepEqual(secondSel.isAtPosition(2, 24), false);
- var combinator = secondSel.at(1);
- t.deepEqual(combinator.isAtPosition(2, 5), false);
- t.deepEqual(combinator.isAtPosition(2, 6), true);
- t.deepEqual(combinator.isAtPosition(2, 7), false);
- });
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/nonstandard.js b/node_modules/postcss-selector-parser/dist/__tests__/nonstandard.js
deleted file mode 100644
index d9786f2..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/nonstandard.js
+++ /dev/null
@@ -1,46 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('non-standard selector', '.icon.is-$(network)', function (t, tree) {
- var class1 = tree.nodes[0].nodes[0];
- t.deepEqual(class1.value, 'icon');
- t.deepEqual(class1.type, 'class');
- var class2 = tree.nodes[0].nodes[1];
- t.deepEqual(class2.value, 'is-$(network)');
- t.deepEqual(class2.type, 'class');
-});
-(0, _helpers.test)('at word in selector', 'em@il.com', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'em@il');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'com');
-});
-(0, _helpers.test)('leading combinator', '> *', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '>');
- t.deepEqual(tree.nodes[0].nodes[1].value, '*');
-});
-(0, _helpers.test)('sass escapes', '.#{$classname}', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, "class");
- t.deepEqual(tree.nodes[0].nodes[0].value, "#{$classname}");
-});
-(0, _helpers.test)('sass escapes (2)', '[lang=#{$locale}]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, "attribute");
- t.deepEqual(tree.nodes[0].nodes[0].attribute, "lang");
- t.deepEqual(tree.nodes[0].nodes[0].operator, "=");
- t.deepEqual(tree.nodes[0].nodes[0].value, "#{$locale}");
-});
-(0, _helpers.test)('placeholder', '%foo', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, "tag");
- t.deepEqual(tree.nodes[0].nodes[0].value, "%foo");
-});
-(0, _helpers.test)('styled selector', '${Step}', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, "tag");
- t.deepEqual(tree.nodes[0].nodes[0].value, "${Step}");
-});
-(0, _helpers.test)('styled selector (2)', '${Step}:nth-child(odd)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, "tag");
- t.deepEqual(tree.nodes[0].nodes[0].value, "${Step}");
- t.deepEqual(tree.nodes[0].nodes[1].type, "pseudo");
- t.deepEqual(tree.nodes[0].nodes[1].value, ":nth-child");
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, "tag");
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, "odd");
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/parser.js b/node_modules/postcss-selector-parser/dist/__tests__/parser.js
deleted file mode 100644
index a0dd84d..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/parser.js
+++ /dev/null
@@ -1,259 +0,0 @@
-"use strict";
-
-var _ava = _interopRequireDefault(require("ava"));
-
-var _index = _interopRequireDefault(require("../index"));
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-// Node creation
-var nodeTypes = [['attribute', '[href]', {
- attribute: 'href'
-}], ['className', '.classy', {
- value: 'classy'
-}], ['combinator', ' >> ', {
- value: '>>',
- spaces: {
- before: ' ',
- after: ' '
- }
-}], ['comment', '/* comment */', {
- value: '/* comment */'
-}], ['id', '#test', {
- value: 'test'
-}], ['nesting', '&'], ['pseudo', '::before', {
- value: '::before'
-}], ['string', '"wow"', {
- value: '"wow"'
-}], ['tag', 'button', {
- value: 'button'
-}], ['universal', '*']];
-nodeTypes.forEach(function (type) {
- (0, _ava["default"])("parser#" + type[0], function (t) {
- var node = _index["default"][type[0]](type[2] || {});
-
- t.deepEqual(String(node), type[1]);
- });
-});
-(0, _ava["default"])('string constants', function (t) {
- t.truthy(_index["default"].TAG);
- t.truthy(_index["default"].STRING);
- t.truthy(_index["default"].SELECTOR);
- t.truthy(_index["default"].ROOT);
- t.truthy(_index["default"].PSEUDO);
- t.truthy(_index["default"].NESTING);
- t.truthy(_index["default"].ID);
- t.truthy(_index["default"].COMMENT);
- t.truthy(_index["default"].COMBINATOR);
- t.truthy(_index["default"].CLASS);
- t.truthy(_index["default"].ATTRIBUTE);
- t.truthy(_index["default"].UNIVERSAL);
-});
-(0, _ava["default"])('construct a whole tree', function (t) {
- var root = _index["default"].root();
-
- var selector = _index["default"].selector();
-
- selector.append(_index["default"].id({
- value: 'tree'
- }));
- root.append(selector);
- t.deepEqual(String(root), '#tree');
-});
-(0, _ava["default"])('no operation', function (t) {
- t.notThrows(function () {
- return (0, _index["default"])().processSync('h1 h2 h3');
- });
-});
-(0, _ava["default"])('empty selector string', function (t) {
- t.notThrows(function () {
- return (0, _index["default"])(function (selectors) {
- selectors.walk(function (selector) {
- selector.type = 'tag';
- });
- }).processSync('');
- });
-});
-(0, _ava["default"])('async parser', function (t) {
- return (0, _index["default"])(function (selectors) {
- return new Promise(function (res) {
- setTimeout(function () {
- selectors.first.nodes[0].value = 'bar';
- res();
- }, 1);
- });
- }).process('foo').then(function (result) {
- t.deepEqual(result, 'bar');
- });
-});
-(0, _ava["default"])('parse errors with the async parser', function (t) {
- return (0, _index["default"])(function (selectors) {
- return new Promise(function (res) {
- setTimeout(function () {
- selectors.first.nodes[0].value = 'bar';
- res();
- }, 1);
- });
- }).process('a b: c')["catch"](function (err) {
- return t.truthy(err);
- });
-});
-(0, _ava["default"])('parse errors within the async processor', function (t) {
- return (0, _index["default"])(function (selectors) {
- return new Promise(function (res, rej) {
- setTimeout(function () {
- rej(selectors.error("async error"));
- }, 1);
- });
- }).process('.foo')["catch"](function (err) {
- return t.truthy(err);
- });
-});
-(0, _ava["default"])('parse errors within the async processor before the promise returns', function (t) {
- return (0, _index["default"])(function (selectors) {
- throw selectors.error("async error");
- }).process('.foo')["catch"](function (err) {
- return t.truthy(err);
- });
-});
-(0, _ava["default"])('returning a promise to the sync processor fails', function (t) {
- t["throws"](function () {
- return (0, _index["default"])(function () {
- return new Promise(function (res) {
- setTimeout(function () {
- res();
- }, 1);
- });
- }).processSync('.foo');
- });
-});
-(0, _ava["default"])('Passing a rule works async', function (t) {
- var rule = {
- selector: '.foo'
- };
- return (0, _index["default"])(function (root) {
- return new Promise(function (res) {
- setTimeout(function () {
- root.walkClasses(function (node) {
- node.value = "bar";
- });
- res();
- }, 1);
- });
- }).process(rule).then(function (newSel) {
- t.deepEqual(newSel, ".bar");
- t.deepEqual(rule.selector, ".bar");
- });
-});
-(0, _ava["default"])('Passing a rule with mutation disabled works async', function (t) {
- var rule = {
- selector: '.foo'
- };
- return (0, _index["default"])(function (root) {
- return new Promise(function (res) {
- setTimeout(function () {
- root.walkClasses(function (node) {
- node.value = "bar";
- });
- res();
- }, 1);
- });
- }).process(rule, {
- updateSelector: false
- }).then(function (newSel) {
- t.deepEqual(newSel, ".bar");
- t.deepEqual(rule.selector, ".foo");
- });
-});
-(0, _ava["default"])('Passing a rule with mutation works sync', function (t) {
- var rule = {
- selector: '.foo'
- };
- var newSel = (0, _index["default"])(function (root) {
- root.walkClasses(function (node) {
- node.value = "bar";
- });
- }).processSync(rule, {
- updateSelector: true
- });
- t.deepEqual(newSel, ".bar");
- t.deepEqual(rule.selector, ".bar");
-});
-(0, _ava["default"])('Transform a selector synchronously', function (t) {
- var rule = {
- selector: '.foo'
- };
- var count = (0, _index["default"])(function (root) {
- var classCount = 0;
- root.walkClasses(function (node) {
- classCount++;
- node.value = "bar";
- });
- return classCount;
- }).transformSync(rule, {
- updateSelector: true
- });
- t.deepEqual(count, 1);
- t.deepEqual(rule.selector, ".bar");
-});
-(0, _ava["default"])('Transform a selector asynchronously', function (t) {
- var rule = {
- selector: '.foo'
- };
- return (0, _index["default"])(function (root) {
- return new Promise(function (res) {
- setTimeout(function () {
- var classCount = 0;
- root.walkClasses(function (node) {
- classCount++;
- node.value = "bar";
- });
- res(classCount);
- }, 1);
- });
- }).transform(rule, {
- updateSelector: true
- }).then(function (count) {
- t.deepEqual(count, 1);
- t.deepEqual(rule.selector, ".bar");
- });
-});
-(0, _ava["default"])('get AST of a selector synchronously', function (t) {
- var rule = {
- selector: '.foo'
- };
- var ast = (0, _index["default"])(function (root) {
- var classCount = 0;
- root.walkClasses(function (node) {
- classCount++;
- node.value = "bar";
- });
- return classCount;
- }).astSync(rule, {
- updateSelector: true
- });
- t.deepEqual(ast.nodes[0].nodes[0].value, "bar");
- t.deepEqual(rule.selector, ".bar");
-});
-(0, _ava["default"])('get AST a selector asynchronously', function (t) {
- var rule = {
- selector: '.foo'
- };
- return (0, _index["default"])(function (root) {
- return new Promise(function (res) {
- setTimeout(function () {
- var classCount = 0;
- root.walkClasses(function (node) {
- classCount++;
- node.value = "bar";
- });
- res(classCount);
- }, 1);
- });
- }).ast(rule, {
- updateSelector: true
- }).then(function (ast) {
- t.deepEqual(ast.nodes[0].nodes[0].value, "bar");
- t.deepEqual(rule.selector, ".bar");
- });
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/postcss.js b/node_modules/postcss-selector-parser/dist/__tests__/postcss.js
deleted file mode 100644
index 4c5bc4f..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/postcss.js
+++ /dev/null
@@ -1,46 +0,0 @@
-"use strict";
-
-var _ava = _interopRequireDefault(require("ava"));
-
-var _postcss = _interopRequireDefault(require("postcss"));
-
-var _helpers = require("./util/helpers");
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-var cse = 'CssSyntaxError';
-
-function showCode(t, selector) {
- var rule = _postcss["default"].parse(selector).first;
-
- try {
- (0, _helpers.parse)(rule);
- } catch (e) {
- if (e.name !== cse) {
- return;
- } // Removes ANSI codes from snapshot tests as it makes them illegible.
- // The formatting of this error is otherwise identical to e.toString()
-
-
- t.snapshot(cse + ": " + e.message + "\n\n" + e.showSourceCode(false) + "\n");
- }
-}
-
-(0, _ava["default"])('missing open square bracket', showCode, 'a b c] {}');
-(0, _ava["default"])('missing open parenthesis', showCode, 'a b c) {}');
-(0, _ava["default"])('missing pseudo class or pseudo element', showCode, 'a b c: {}');
-(0, _ava["default"])('space in between colon and word (incorrect pseudo)', showCode, 'a b: c {}');
-(0, _ava["default"])('string after colon (incorrect pseudo)', showCode, 'a b:"wow" {}'); // attribute selectors
-
-(0, _ava["default"])('bad string attribute', showCode, '["hello"] {}');
-(0, _ava["default"])('bad string attribute with value', showCode, '["foo"=bar] {}');
-(0, _ava["default"])('bad parentheses', showCode, '[foo=(bar)] {}');
-(0, _ava["default"])('bad lonely asterisk', showCode, '[*] {}');
-(0, _ava["default"])('bad lonely pipe', showCode, '[|] {}');
-(0, _ava["default"])('bad lonely caret', showCode, '[^] {}');
-(0, _ava["default"])('bad lonely dollar', showCode, '[$] {}');
-(0, _ava["default"])('bad lonely tilde', showCode, '[~] {}');
-(0, _ava["default"])('bad lonely equals', showCode, '[=] {}');
-(0, _ava["default"])('bad lonely operator', showCode, '[*=] {}');
-(0, _ava["default"])('bad lonely operator (2)', showCode, '[|=] {}');
-(0, _ava["default"])('bad doubled operator', showCode, '[href=foo=bar] {}');
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/pseudos.js b/node_modules/postcss-selector-parser/dist/__tests__/pseudos.js
deleted file mode 100644
index 2dd64b1..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/pseudos.js
+++ /dev/null
@@ -1,165 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('pseudo element (single colon)', 'h1:after', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].value, ':after');
-});
-(0, _helpers.test)('pseudo element (double colon)', 'h1::after', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].value, '::after');
-});
-(0, _helpers.test)('multiple pseudo elements', '*:target::before, a:after', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
- t.deepEqual(tree.nodes[0].nodes[1].value, ':target');
- t.deepEqual(tree.nodes[0].nodes[2].value, '::before');
- t.deepEqual(tree.nodes[1].nodes[1].value, ':after');
-});
-(0, _helpers.test)('negation pseudo element', 'h1:not(.heading)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, ':not');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, 'heading');
-});
-(0, _helpers.test)('negation pseudo element (2)', 'h1:not(.heading, .title, .content)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, ':not');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, 'heading');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].value, 'title');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[2].nodes[0].value, 'content');
-});
-(0, _helpers.test)('negation pseudo element (3)', 'h1:not(.heading > .title) > h1', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, 'heading');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[1].value, '>');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[2].value, 'title');
- t.deepEqual(tree.nodes[0].nodes[2].value, '>');
- t.deepEqual(tree.nodes[0].nodes[3].value, 'h1');
-});
-(0, _helpers.test)('negation pseudo element (4)', 'h1:not(h2:not(h3))', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[1].nodes[0].nodes[0].value, 'h3');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[1].nodes[0].nodes[0].parent.type, 'selector');
-});
-(0, _helpers.test)('pseudo class in the middle of a selector', 'a:link.external', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'a');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].value, ':link');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[2].value, 'external');
-});
-(0, _helpers.test)('extra whitespace inside parentheses', 'a:not( h2 )', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, 'h2');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].spaces.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].spaces.before, ' ');
-});
-(0, _helpers.test)('escaped numbers in class name with pseudo', 'a:before.\\31\\ 0', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[2].type, 'class');
- t.deepEqual(tree.nodes[0].nodes[2].value, '1 0');
- t.deepEqual(tree.nodes[0].nodes[2].raws.value, '\\31\\ 0');
-});
-(0, _helpers.test)('nested pseudo', '.btn-group>.btn:last-child:not(:first-child)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[4].value, ':not');
-});
-(0, _helpers.test)('extraneous non-combinating whitespace', ' h1:after , h2:after ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[1].value, ':after');
- t.deepEqual(tree.nodes[0].nodes[1].spaces.after, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[1].nodes[1].value, ':after');
- t.deepEqual(tree.nodes[1].nodes[1].spaces.after, ' ');
-});
-(0, _helpers.test)('negation pseudo element with quotes', 'h1:not(".heading")', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, ':not');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, '".heading"');
-});
-(0, _helpers.test)('negation pseudo element with single quotes', "h1:not('.heading')", function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, ':not');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, "'.heading'");
-});
-(0, _helpers.test)('Issue #116', "svg:not(:root)", function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].value, ':not');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, ':root');
-});
-(0, _helpers.test)('alone pseudo class', ':root', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[0].value, ':root');
-});
-(0, _helpers.test)('non standard pseudo (@custom-selector)', ":--foobar, a", function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, ':--foobar');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'a');
- t.deepEqual(tree.nodes[1].nodes[0].type, 'tag');
-});
-(0, _helpers.test)('non standard pseudo (@custom-selector) (1)', "a, :--foobar", function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'a');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[1].nodes[0].value, ':--foobar');
- t.deepEqual(tree.nodes[1].nodes[0].type, 'pseudo');
-});
-(0, _helpers.test)('current pseudo class', ':current(p, li, dt, dd)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[0].value, ':current');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[0].nodes[0].value, 'p');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[1].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[1].nodes[0].value, 'li');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[2].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[2].nodes[0].value, 'dt');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[3].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[3].nodes[0].value, 'dd');
-});
-(0, _helpers.test)('is pseudo class', ':is(p, li, dt, dd)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[0].value, ':is');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[0].nodes[0].value, 'p');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[1].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[1].nodes[0].value, 'li');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[2].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[2].nodes[0].value, 'dt');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[3].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].nodes[3].nodes[0].value, 'dd');
-});
-(0, _helpers.test)('is pseudo class with namespace', '*|*:is(:hover, :focus) ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
- t.deepEqual(tree.nodes[0].nodes[0].namespace, '*');
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].value, ':is');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, ':hover');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].value, ':focus');
-});
-(0, _helpers.test)('has pseudo class', 'a:has(> img)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'a');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].value, ':has');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, 'combinator');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, '>');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[1].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[1].value, 'img');
-});
-(0, _helpers.test)('where pseudo class', 'a:where(:not(:hover))', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'a');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].value, ':where');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, ':not');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[0].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[0].nodes[0].value, ':hover');
-});
-(0, _helpers.test)('nested pseudo classes', "section:not( :has(h1, h2 ) )", function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[0].value, 'section');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].value, ':not');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, 'pseudo');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, ':has');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[1].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[1].nodes[0].value, 'h2');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/sourceIndex.js b/node_modules/postcss-selector-parser/dist/__tests__/sourceIndex.js
deleted file mode 100644
index 766d59f..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/sourceIndex.js
+++ /dev/null
@@ -1,229 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('universal selector', '*', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
-});
-(0, _helpers.test)('lobotomized owl selector', ' * + * ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 2);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 2);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 1);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 4);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 4);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 3);
- t.deepEqual(tree.nodes[0].nodes[2].source.start.column, 6);
- t.deepEqual(tree.nodes[0].nodes[2].source.end.column, 6);
- t.deepEqual(tree.nodes[0].nodes[2].sourceIndex, 5);
-});
-(0, _helpers.test)('comment', '/**\n * Hello!\n */', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 3);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
-});
-(0, _helpers.test)('comment & universal selectors', '*/*test*/*', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 2);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 9);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 1);
- t.deepEqual(tree.nodes[0].nodes[2].source.start.column, 10);
- t.deepEqual(tree.nodes[0].nodes[2].source.end.column, 10);
- t.deepEqual(tree.nodes[0].nodes[2].sourceIndex, 9);
-});
-(0, _helpers.test)('tag selector', 'h1', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 2);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
-});
-(0, _helpers.test)('id selector', '#id', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 3);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
-});
-(0, _helpers.test)('tag selector followed by id selector', 'h1, #id', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 2);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
- t.deepEqual(tree.nodes[1].nodes[0].source.start.column, 5);
- t.deepEqual(tree.nodes[1].nodes[0].source.end.column, 7);
- t.deepEqual(tree.nodes[1].nodes[0].sourceIndex, 4);
-});
-(0, _helpers.test)('multiple id selectors', '#one#two', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 4);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 5);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 8);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 4);
-});
-(0, _helpers.test)('multiple id selectors (2)', '#one#two#three#four', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[2].source.start.column, 9);
- t.deepEqual(tree.nodes[0].nodes[2].source.end.column, 14);
- t.deepEqual(tree.nodes[0].nodes[2].sourceIndex, 8);
- t.deepEqual(tree.nodes[0].nodes[3].source.start.column, 15);
- t.deepEqual(tree.nodes[0].nodes[3].source.end.column, 19);
- t.deepEqual(tree.nodes[0].nodes[3].sourceIndex, 14);
-});
-(0, _helpers.test)('multiple id selectors (3)', '#one#two,#three#four', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 5);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 8);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 4);
- t.deepEqual(tree.nodes[1].nodes[1].source.start.column, 16);
- t.deepEqual(tree.nodes[1].nodes[1].source.end.column, 20);
- t.deepEqual(tree.nodes[1].nodes[1].sourceIndex, 15);
-});
-(0, _helpers.test)('multiple class selectors', '.one.two,.three.four', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 5);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 8);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 4);
- t.deepEqual(tree.nodes[1].nodes[1].source.start.column, 16);
- t.deepEqual(tree.nodes[1].nodes[1].source.end.column, 20);
- t.deepEqual(tree.nodes[1].nodes[1].sourceIndex, 15);
-});
-(0, _helpers.test)('attribute selector', '[name="james"]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 14);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
-});
-(0, _helpers.test)('multiple attribute selectors', '[name="james"][name="ed"],[name="snakeman"][name="a"]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.line, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 14);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 15);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.line, 1);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 25);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 14);
- t.deepEqual(tree.nodes[1].nodes[0].source.start.line, 1);
- t.deepEqual(tree.nodes[1].nodes[0].source.start.column, 27);
- t.deepEqual(tree.nodes[1].nodes[0].source.end.line, 1);
- t.deepEqual(tree.nodes[1].nodes[0].source.end.column, 43);
- t.deepEqual(tree.nodes[1].nodes[0].sourceIndex, 26);
- t.deepEqual(tree.nodes[1].nodes[1].source.start.line, 1);
- t.deepEqual(tree.nodes[1].nodes[1].source.start.column, 44);
- t.deepEqual(tree.nodes[1].nodes[1].source.end.line, 1);
- t.deepEqual(tree.nodes[1].nodes[1].source.end.column, 53);
- t.deepEqual(tree.nodes[1].nodes[1].sourceIndex, 43);
-});
-(0, _helpers.test)('pseudo-class', 'h1:first-child', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 3);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 14);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 2);
-});
-(0, _helpers.test)('pseudo-class with argument', 'h1:not(.strudel, .food)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 3);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 23);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 2);
-});
-(0, _helpers.test)('pseudo-element', 'h1::before', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 3);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 10);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 2);
-});
-(0, _helpers.test)('multiple pseudos', 'h1:not(.food)::before, a:first-child', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 3);
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 13);
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 2);
- t.deepEqual(tree.nodes[0].nodes[2].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[2].source.start.column, 14);
- t.deepEqual(tree.nodes[0].nodes[2].source.end.column, 21);
- t.deepEqual(tree.nodes[0].nodes[2].sourceIndex, 13);
- t.deepEqual(tree.nodes[1].nodes[1].source.start.line, 1);
- t.deepEqual(tree.nodes[1].nodes[1].source.start.column, 25);
- t.deepEqual(tree.nodes[1].nodes[1].source.end.column, 36);
- t.deepEqual(tree.nodes[1].nodes[1].sourceIndex, 24);
-});
-(0, _helpers.test)('combinators', 'div > h1 span', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.line, 1, "> start line");
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 5, "> start column");
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 5, "> end column");
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 4, "> sourceIndex");
- t.deepEqual(tree.nodes[0].nodes[3].source.start.line, 1, "' ' start line");
- t.deepEqual(tree.nodes[0].nodes[3].source.start.column, 9, "' ' start column");
- t.deepEqual(tree.nodes[0].nodes[3].source.end.column, 9, "' ' end column");
- t.deepEqual(tree.nodes[0].nodes[3].sourceIndex, 8, "' ' sourceIndex");
-});
-(0, _helpers.test)('combinators surrounded by superfluous spaces', 'div > h1 ~ span a', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.line, 1, "> start line");
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 7, "> start column");
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 7, "> end column");
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 6, "> sourceIndex");
- t.deepEqual(tree.nodes[0].nodes[3].source.start.line, 1, "~ start line");
- t.deepEqual(tree.nodes[0].nodes[3].source.start.column, 13, "~ start column");
- t.deepEqual(tree.nodes[0].nodes[3].source.end.column, 13, "~ end column");
- t.deepEqual(tree.nodes[0].nodes[3].sourceIndex, 12, "~ sourceIndex");
- t.deepEqual(tree.nodes[0].nodes[5].source.start.line, 1, "' ' start line");
- t.deepEqual(tree.nodes[0].nodes[5].source.start.column, 21, "' ' start column");
- t.deepEqual(tree.nodes[0].nodes[5].source.end.column, 23, "' ' end column");
- t.deepEqual(tree.nodes[0].nodes[5].sourceIndex, 20, "' ' sourceIndex");
-});
-(0, _helpers.test)('multiple id selectors on different lines', '#one,\n#two', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.line, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 4);
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0);
- t.deepEqual(tree.nodes[1].nodes[0].source.start.line, 2);
- t.deepEqual(tree.nodes[1].nodes[0].source.start.column, 1);
- t.deepEqual(tree.nodes[1].nodes[0].source.end.column, 4);
- t.deepEqual(tree.nodes[1].nodes[0].sourceIndex, 6);
-});
-(0, _helpers.test)('multiple id selectors on different CRLF lines', '#one,\r\n#two,\r\n#three', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.line, 1, '#one start line');
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 1, '#one start column');
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 4, '#one end column');
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 0, '#one sourceIndex');
- t.deepEqual(tree.nodes[1].nodes[0].source.start.line, 2, '#two start line');
- t.deepEqual(tree.nodes[1].nodes[0].source.start.column, 1, '#two start column');
- t.deepEqual(tree.nodes[1].nodes[0].source.end.column, 4, '#two end column');
- t.deepEqual(tree.nodes[1].nodes[0].sourceIndex, 7, '#two sourceIndex');
- t.deepEqual(tree.nodes[2].nodes[0].source.start.line, 3, '#three start line');
- t.deepEqual(tree.nodes[2].nodes[0].source.start.column, 1, '#three start column');
- t.deepEqual(tree.nodes[2].nodes[0].source.end.column, 6, '#three end column');
- t.deepEqual(tree.nodes[2].nodes[0].sourceIndex, 14, '#three sourceIndex');
-});
-(0, _helpers.test)('id, tag, pseudo, and class selectors on different lines with indentation', '\t#one,\n\th1:after,\n\t\t.two', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].source.start.line, 1, '#one start line');
- t.deepEqual(tree.nodes[0].nodes[0].source.start.column, 2, '#one start column');
- t.deepEqual(tree.nodes[0].nodes[0].source.end.column, 5, '#one end column');
- t.deepEqual(tree.nodes[0].nodes[0].sourceIndex, 1, '#one sourceIndex');
- t.deepEqual(tree.nodes[1].nodes[0].source.start.line, 2, 'h1 start line');
- t.deepEqual(tree.nodes[1].nodes[0].source.start.column, 2, 'h1 start column');
- t.deepEqual(tree.nodes[1].nodes[0].source.end.column, 3, 'h1 end column');
- t.deepEqual(tree.nodes[1].nodes[0].sourceIndex, 8, 'h1 sourceIndex');
- t.deepEqual(tree.nodes[1].nodes[1].source.start.line, 2, ':after start line');
- t.deepEqual(tree.nodes[1].nodes[1].source.start.column, 4, ':after start column');
- t.deepEqual(tree.nodes[1].nodes[1].source.end.column, 9, ':after end column');
- t.deepEqual(tree.nodes[1].nodes[1].sourceIndex, 10, ':after sourceIndex');
- t.deepEqual(tree.nodes[2].nodes[0].source.start.line, 3, '.two start line');
- t.deepEqual(tree.nodes[2].nodes[0].source.start.column, 3, '.two start column');
- t.deepEqual(tree.nodes[2].nodes[0].source.end.column, 6, '.two end column');
- t.deepEqual(tree.nodes[2].nodes[0].sourceIndex, 20, '.two sourceIndex');
-});
-(0, _helpers.test)('pseudo with arguments spanning multiple lines', 'h1:not(\n\t.one,\n\t.two\n)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[1].source.start.line, 1, ':not start line');
- t.deepEqual(tree.nodes[0].nodes[1].source.start.column, 3, ':not start column');
- t.deepEqual(tree.nodes[0].nodes[1].source.end.line, 4, ':not end line');
- t.deepEqual(tree.nodes[0].nodes[1].source.end.column, 1, ':not end column');
- t.deepEqual(tree.nodes[0].nodes[1].sourceIndex, 2, ':not sourceIndex');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].source.start.line, 2, '.one start line');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].source.start.column, 2, '.one start column');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].source.end.line, 2, '.one end line');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].source.end.column, 5, '.one end column');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].sourceIndex, 9, '.one sourceIndex');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].source.start.line, 3, '.two start line');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].source.start.column, 2, '.two start column');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].source.end.line, 3, '.two end line');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].source.end.column, 5, '.two end column');
- t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].sourceIndex, 16, '.two sourceIndex');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/stripComments.js b/node_modules/postcss-selector-parser/dist/__tests__/stripComments.js
deleted file mode 100644
index b7f315b..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/stripComments.js
+++ /dev/null
@@ -1,17 +0,0 @@
-"use strict";
-
-var _ava = _interopRequireDefault(require("ava"));
-
-var _stripComments = _interopRequireDefault(require("../../src/util/stripComments"));
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-(0, _ava["default"])("stripComments()", function (t) {
- t.deepEqual((0, _stripComments["default"])("aaa/**/bbb"), "aaabbb");
- t.deepEqual((0, _stripComments["default"])("aaa/*bbb"), "aaa");
- t.deepEqual((0, _stripComments["default"])("aaa/*xxx*/bbb"), "aaabbb");
- t.deepEqual((0, _stripComments["default"])("aaa/*/xxx/*/bbb"), "aaabbb");
- t.deepEqual((0, _stripComments["default"])("aaa/*x*/bbb/**/"), "aaabbb");
- t.deepEqual((0, _stripComments["default"])("/**/aaa/*x*/bbb/**/"), "aaabbb");
- t.deepEqual((0, _stripComments["default"])("/**/"), "");
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/tags.js b/node_modules/postcss-selector-parser/dist/__tests__/tags.js
deleted file mode 100644
index b6f5aa4..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/tags.js
+++ /dev/null
@@ -1,35 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('tag selector', 'h1', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
-});
-(0, _helpers.test)('multiple tag selectors', 'h1, h2', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'h2');
-});
-(0, _helpers.test)('extraneous non-combinating whitespace', ' h1 , h2 ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.after, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].value, 'h2');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.after, ' ');
-});
-(0, _helpers.test)('tag with trailing comma', 'h1,', function (t, tree) {
- t.deepEqual(tree.trailingComma, true);
-});
-(0, _helpers.test)('tag with trailing slash', 'h1\\', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'h1\\');
-});
-(0, _helpers.test)('tag with attribute', 'label[for="email"]', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'label');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
- t.deepEqual(tree.nodes[0].nodes[1].value, 'email');
- t.deepEqual(tree.nodes[0].nodes[1].attribute, 'for');
- t.deepEqual(tree.nodes[0].nodes[1].operator, '=');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'attribute');
- t.deepEqual(tree.nodes[0].nodes[1].quoteMark, '"');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/universal.js b/node_modules/postcss-selector-parser/dist/__tests__/universal.js
deleted file mode 100644
index c1d39b0..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/universal.js
+++ /dev/null
@@ -1,42 +0,0 @@
-"use strict";
-
-var _helpers = require("./util/helpers");
-
-(0, _helpers.test)('universal selector', '*', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
-});
-(0, _helpers.test)('lobotomized owl', '* + *', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'universal');
-});
-(0, _helpers.test)('universal selector with descendant combinator', '* *', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'universal');
-});
-(0, _helpers.test)('universal selector with descendant combinator and extraneous non-combinating whitespace', '* *', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
- t.deepEqual(tree.nodes[0].nodes[2].type, 'universal');
-});
-(0, _helpers.test)('extraneous non-combinating whitespace', ' * , * ', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[0].nodes[0].spaces.after, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].value, '*');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.before, ' ');
- t.deepEqual(tree.nodes[1].nodes[0].spaces.after, ' ');
-});
-(0, _helpers.test)('qualified universal selector', '*[href] *:not(*.green)', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
- t.deepEqual(tree.nodes[0].nodes[3].value, '*');
- t.deepEqual(tree.nodes[0].nodes[4].nodes[0].nodes[0].value, '*');
-});
-(0, _helpers.test)('universal selector with pseudo', '*::--webkit-media-controls-play-button', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '*');
- t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
- t.deepEqual(tree.nodes[0].nodes[1].value, '::--webkit-media-controls-play-button');
- t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/util/helpers.js b/node_modules/postcss-selector-parser/dist/__tests__/util/helpers.js
deleted file mode 100644
index 5bf0301..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/util/helpers.js
+++ /dev/null
@@ -1,94 +0,0 @@
-"use strict";
-
-exports.__esModule = true;
-exports.test = test;
-exports.nodeVersionAtLeast = nodeVersionAtLeast;
-exports.nodeVersionBefore = nodeVersionBefore;
-exports["throws"] = exports.parse = void 0;
-
-var _process = _interopRequireDefault(require("process"));
-
-var _util = _interopRequireDefault(require("util"));
-
-var _ava = _interopRequireDefault(require("ava"));
-
-var _semver = _interopRequireDefault(require("semver"));
-
-var _index = _interopRequireDefault(require("../../index"));
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
-
-var parse = function parse(input, transform) {
- return (0, _index["default"])(transform).processSync(input);
-};
-
-exports.parse = parse;
-
-function test(spec, input, callback, only, disabled, serial) {
- var _this = this;
-
- if (only === void 0) {
- only = false;
- }
-
- if (disabled === void 0) {
- disabled = false;
- }
-
- if (serial === void 0) {
- serial = false;
- }
-
- var tester = only ? _ava["default"].only : _ava["default"];
- tester = disabled ? tester.skip : tester;
- tester = serial ? tester.serial : tester;
-
- if (callback) {
- tester(spec + " (tree)", function (t) {
- var tree = (0, _index["default"])().astSync(input);
-
- var debug = _util["default"].inspect(tree, false, null);
-
- return callback.call(_this, t, tree, debug);
- });
- }
-
- tester(spec + " (toString)", function (t) {
- var result = (0, _index["default"])().processSync(input);
- t.deepEqual(result, input);
- });
-}
-
-test.only = function (spec, input, callback) {
- return test(spec, input, callback, true);
-};
-
-test.skip = function (spec, input, callback) {
- return test(spec, input, callback, false, true);
-};
-
-test.serial = function (spec, input, callback) {
- return test(spec, input, callback, false, false, true);
-};
-
-var _throws = function _throws(spec, input, validator) {
- (0, _ava["default"])(spec + " (throws)", function (t) {
- t["throws"](function () {
- return (0, _index["default"])().processSync(input);
- }, validator ? {
- message: validator
- } : {
- instanceOf: Error
- });
- });
-};
-
-exports["throws"] = _throws;
-
-function nodeVersionAtLeast(version) {
- return _semver["default"].gte(_process["default"].versions.node, version);
-}
-
-function nodeVersionBefore(version) {
- return _semver["default"].lt(_process["default"].versions.node, version);
-}
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/util/unesc.js b/node_modules/postcss-selector-parser/dist/__tests__/util/unesc.js
deleted file mode 100644
index 779348a..0000000
--- a/node_modules/postcss-selector-parser/dist/__tests__/util/unesc.js
+++ /dev/null
@@ -1,50 +0,0 @@
-"use strict";
-
-var _helpers = require("../util/helpers");
-
-(0, _helpers.test)('id selector', '#foo', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo');
-});
-(0, _helpers.test)('escaped special char', '#w\\+', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'w+');
-});
-(0, _helpers.test)('tailing escape', '#foo\\', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'foo\\');
-});
-(0, _helpers.test)('double escape', '#wow\\\\k', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'wow\\k');
-});
-(0, _helpers.test)('leading numeric', '.\\31 23', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '123');
-});
-(0, _helpers.test)('emoji', '.\\🐐', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '🐐');
-}); // https://www.w3.org/International/questions/qa-escapes#cssescapes
-
-(0, _helpers.test)('hex escape', '.\\E9motion', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'émotion');
-});
-(0, _helpers.test)('hex escape with space', '.\\E9 dition', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'édition');
-});
-(0, _helpers.test)('hex escape with hex number', '.\\0000E9dition', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'édition');
-});
-(0, _helpers.test)('class selector with escaping', '.\\1D306', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '𝌆');
-});
-(0, _helpers.test)('class selector with escaping with more chars', '.\\1D306k', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, '𝌆k');
-});
-(0, _helpers.test)('class selector with escaping with more chars with whitespace', '.wow\\1D306 k', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, 'wow𝌆k');
-});
-(0, _helpers.test)('handles 0 value hex', '\\0', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, String.fromCodePoint(0xFFFD));
-});
-(0, _helpers.test)('handles lone surrogate value hex', '\\DBFF', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, String.fromCodePoint(0xFFFD));
-});
-(0, _helpers.test)('handles out of bound values', '\\110000', function (t, tree) {
- t.deepEqual(tree.nodes[0].nodes[0].value, String.fromCodePoint(0xFFFD));
-});
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/parser.js b/node_modules/postcss-selector-parser/dist/parser.js
index c0af9b6..e0451de 100644
--- a/node_modules/postcss-selector-parser/dist/parser.js
+++ b/node_modules/postcss-selector-parser/dist/parser.js
@@ -963,7 +963,11 @@
}
var hasClass = indexesOf(word, '.').filter(function (i) {
- return word[i - 1] !== '\\';
+ // Allow escaped dot within class name
+ var escapedDot = word[i - 1] === '\\'; // Allow decimal numbers percent in @keyframes
+
+ var isKeyframesPercent = /^\d+\.\d+%$/.test(word);
+ return !escapedDot && !isKeyframesPercent;
});
var hasId = indexesOf(word, '#').filter(function (i) {
return word[i - 1] !== '\\';
diff --git a/node_modules/postcss-selector-parser/package.json b/node_modules/postcss-selector-parser/package.json
index fe1f1cd..59b630d 100644
--- a/node_modules/postcss-selector-parser/package.json
+++ b/node_modules/postcss-selector-parser/package.json
@@ -1,6 +1,6 @@
{
"name": "postcss-selector-parser",
- "version": "6.0.6",
+ "version": "6.0.8",
"devDependencies": {
"@babel/cli": "^7.11.6",
"@babel/core": "^7.11.6",
@@ -29,7 +29,8 @@
"CHANGELOG.md",
"LICENSE-MIT",
"dist",
- "postcss-selector-parser.d.ts"
+ "postcss-selector-parser.d.ts",
+ "!**/__tests__"
],
"scripts": {
"pretest": "eslint src && tsc --noEmit postcss-selector-parser.d.ts",
diff --git a/node_modules/postcss/lib/at-rule.d.ts b/node_modules/postcss/lib/at-rule.d.ts
index 09e1f17..7a39b2f 100644
--- a/node_modules/postcss/lib/at-rule.d.ts
+++ b/node_modules/postcss/lib/at-rule.d.ts
@@ -1,6 +1,6 @@
import Container, { ContainerProps } from './container.js'
-interface AtRuleRaws {
+interface AtRuleRaws extends Record<string, unknown> {
/**
* The space symbols before the node. It also stores `*`
* and `_` symbols before the declaration (IE hack).
diff --git a/node_modules/postcss/lib/comment.d.ts b/node_modules/postcss/lib/comment.d.ts
index 1d4fd45..8eaf3a2 100644
--- a/node_modules/postcss/lib/comment.d.ts
+++ b/node_modules/postcss/lib/comment.d.ts
@@ -1,7 +1,7 @@
import Container from './container.js'
import Node, { NodeProps } from './node.js'
-interface CommentRaws {
+interface CommentRaws extends Record<string, unknown> {
/**
* The space symbols before the node.
*/
diff --git a/node_modules/postcss/lib/container.d.ts b/node_modules/postcss/lib/container.d.ts
index 3005a16..2b75e37 100644
--- a/node_modules/postcss/lib/container.d.ts
+++ b/node_modules/postcss/lib/container.d.ts
@@ -181,10 +181,10 @@
*/
walkRules(
selectorFilter: string | RegExp,
- callback: (atRule: Rule, index: number) => false | void
+ callback: (rule: Rule, index: number) => false | void
): false | undefined
walkRules(
- callback: (atRule: Rule, index: number) => false | void
+ callback: (rule: Rule, index: number) => false | void
): false | undefined
/**
diff --git a/node_modules/postcss/lib/container.js b/node_modules/postcss/lib/container.js
index 8b1d0f8..a511a82 100644
--- a/node_modules/postcss/lib/container.js
+++ b/node_modules/postcss/lib/container.js
@@ -316,7 +316,7 @@
}
let processed = nodes.map(i => {
- // istanbul ignore next
+ /* c8 ignore next */
if (!i[my]) Container.rebuild(i)
i = i.proxyOf
if (i.parent) i.parent.removeChild(i)
@@ -410,7 +410,7 @@
module.exports = Container
Container.default = Container
-// istanbul ignore next
+/* c8 ignore start */
Container.rebuild = node => {
if (node.type === 'atrule') {
Object.setPrototypeOf(node, AtRule.prototype)
@@ -430,3 +430,4 @@
})
}
}
+/* c8 ignore stop */
diff --git a/node_modules/postcss/lib/css-syntax-error.d.ts b/node_modules/postcss/lib/css-syntax-error.d.ts
index 76d099a..3fd0555 100644
--- a/node_modules/postcss/lib/css-syntax-error.d.ts
+++ b/node_modules/postcss/lib/css-syntax-error.d.ts
@@ -1,6 +1,21 @@
import { FilePosition } from './input.js'
/**
+ * A position that is part of a range.
+ */
+export interface RangePosition {
+ /**
+ * The line number in the input.
+ */
+ line: number
+
+ /**
+ * The column number in the input.
+ */
+ column: number
+}
+
+/**
* The CSS parser throws this error for broken CSS.
*
* Custom parsers can throw this error for broken custom syntax using
@@ -31,17 +46,21 @@
*/
export default class CssSyntaxError {
/**
- * @param message Error message.
- * @param line Source line of the error.
- * @param column Source column of the error.
- * @param source Source code of the broken file.
- * @param file Absolute path to the broken file.
- * @param plugin PostCSS plugin name, if error came from plugin.
+ * Instantiates a CSS syntax error. Can be instantiated for a single position
+ * or for a range.
+ * @param message Error message.
+ * @param lineOrStartPos If for a single position, the line number, or if for
+ * a range, the inclusive start position of the error.
+ * @param columnOrEndPos If for a single position, the column number, or if for
+ * a range, the exclusive end position of the error.
+ * @param source Source code of the broken file.
+ * @param file Absolute path to the broken file.
+ * @param plugin PostCSS plugin name, if error came from plugin.
*/
constructor(
message: string,
- line?: number,
- column?: number,
+ lineOrStartPos?: number | RangePosition,
+ columnOrEndPos?: number | RangePosition,
source?: string,
file?: string,
plugin?: string
@@ -122,6 +141,34 @@
column?: number
/**
+ * Source line of the error's end, exclusive. Provided if the error pertains
+ * to a range.
+ *
+ * ```js
+ * error.endLine //=> 3
+ * error.input.endLine //=> 4
+ * ```
+ *
+ * PostCSS will use the input source map to detect the original location.
+ * If you need the position in the PostCSS input, use `error.input.endLine`.
+ */
+ endLine?: number
+
+ /**
+ * Source column of the error's end, exclusive. Provided if the error pertains
+ * to a range.
+ *
+ * ```js
+ * error.endColumn //=> 1
+ * error.input.endColumn //=> 4
+ * ```
+ *
+ * PostCSS will use the input source map to detect the original location.
+ * If you need the position in the PostCSS input, use `error.input.endColumn`.
+ */
+ endColumn?: number
+
+ /**
* Source code of the broken file.
*
* ```js
diff --git a/node_modules/postcss/lib/css-syntax-error.js b/node_modules/postcss/lib/css-syntax-error.js
index 3161f21..d6b369b 100644
--- a/node_modules/postcss/lib/css-syntax-error.js
+++ b/node_modules/postcss/lib/css-syntax-error.js
@@ -20,8 +20,15 @@
this.plugin = plugin
}
if (typeof line !== 'undefined' && typeof column !== 'undefined') {
- this.line = line
- this.column = column
+ if (typeof line === 'number') {
+ this.line = line
+ this.column = column
+ } else {
+ this.line = line.line
+ this.column = line.column
+ this.endLine = column.line
+ this.endColumn = column.column
+ }
}
this.setMessage()
diff --git a/node_modules/postcss/lib/declaration.d.ts b/node_modules/postcss/lib/declaration.d.ts
index 56cfb46..4e92c90 100644
--- a/node_modules/postcss/lib/declaration.d.ts
+++ b/node_modules/postcss/lib/declaration.d.ts
@@ -1,7 +1,7 @@
import Container from './container.js'
import Node from './node.js'
-interface DeclarationRaws {
+interface DeclarationRaws extends Record<string, unknown> {
/**
* The space symbols before the node. It also stores `*`
* and `_` symbols before the declaration (IE hack).
diff --git a/node_modules/postcss/lib/input.d.ts b/node_modules/postcss/lib/input.d.ts
index 399f434..357910b 100644
--- a/node_modules/postcss/lib/input.d.ts
+++ b/node_modules/postcss/lib/input.d.ts
@@ -13,16 +13,26 @@
file?: string
/**
- * Line in source file.
+ * Line of inclusive start position in source file.
*/
line: number
/**
- * Column in source file.
+ * Column of inclusive start position in source file.
*/
column: number
/**
+ * Line of exclusive end position in source file.
+ */
+ endLine?: number
+
+ /**
+ * Column of exclusive end position in source file.
+ */
+ endColumn?: number
+
+ /**
* Source code.
*/
source?: string
@@ -108,18 +118,28 @@
/**
* Reads the input source map and returns a symbol position
* in the input source (e.g., in a Sass file that was compiled
- * to CSS before being passed to PostCSS).
+ * to CSS before being passed to PostCSS). Optionally takes an
+ * end position, exclusive.
*
* ```js
* root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }
+ * root.source.input.origin(1, 1, 1, 4)
+ * //=> { file: 'a.css', line: 3, column: 1, endLine: 3, endColumn: 4 }
* ```
*
- * @param line Line in input CSS.
- * @param column Column in input CSS.
+ * @param line Line for inclusive start position in input CSS.
+ * @param column Column for inclusive start position in input CSS.
+ * @param endLine Line for exclusive end position in input CSS.
+ * @param endColumn Column for exclusive end position in input CSS.
*
* @return Position in input source.
*/
- origin(line: number, column: number): FilePosition | false
+ origin(
+ line: number,
+ column: number,
+ endLine?: number,
+ endColumn?: number
+ ): FilePosition | false
/**
* Converts source offset to line and column.
diff --git a/node_modules/postcss/lib/input.js b/node_modules/postcss/lib/input.js
index 2a1d26b..0415b59 100644
--- a/node_modules/postcss/lib/input.js
+++ b/node_modules/postcss/lib/input.js
@@ -103,18 +103,43 @@
}
error(message, line, column, opts = {}) {
- let result
- if (!column) {
+ let result, endLine, endColumn
+
+ if (line && typeof line === 'object') {
+ let start = line
+ let end = column
+ if (typeof line.offset === 'number') {
+ let pos = this.fromOffset(start.offset)
+ line = pos.line
+ column = pos.col
+ } else {
+ line = start.line
+ column = start.column
+ }
+ if (typeof end.offset === 'number') {
+ let pos = this.fromOffset(end.offset)
+ endLine = pos.line
+ endColumn = pos.col
+ } else {
+ endLine = end.line
+ endColumn = end.column
+ }
+ } else if (!column) {
let pos = this.fromOffset(line)
line = pos.line
column = pos.col
}
- let origin = this.origin(line, column)
+
+ let origin = this.origin(line, column, endLine, endColumn)
if (origin) {
result = new CssSyntaxError(
message,
- origin.line,
- origin.column,
+ origin.endLine === undefined
+ ? origin.line
+ : { line: origin.line, column: origin.column },
+ origin.endLine === undefined
+ ? origin.column
+ : { line: origin.endLine, column: origin.endColumn },
origin.source,
origin.file,
opts.plugin
@@ -122,15 +147,15 @@
} else {
result = new CssSyntaxError(
message,
- line,
- column,
+ endLine === undefined ? line : { line, column },
+ endLine === undefined ? column : { line: endLine, column: endColumn },
this.css,
this.file,
opts.plugin
)
}
- result.input = { line, column, source: this.css }
+ result.input = { line, column, endLine, endColumn, source: this.css }
if (this.file) {
if (pathToFileURL) {
result.input.url = pathToFileURL(this.file).toString()
@@ -141,13 +166,18 @@
return result
}
- origin(line, column) {
+ origin(line, column, endLine, endColumn) {
if (!this.map) return false
let consumer = this.map.consumer()
let from = consumer.originalPositionFor({ line, column })
if (!from.source) return false
+ let to
+ if (typeof endLine === 'number') {
+ to = consumer.originalPositionFor({ line: endLine, column: endColumn })
+ }
+
let fromUrl
if (isAbsolute(from.source)) {
@@ -162,14 +192,16 @@
let result = {
url: fromUrl.toString(),
line: from.line,
- column: from.column
+ column: from.column,
+ endLine: to && to.line,
+ endColumn: to && to.column
}
if (fromUrl.protocol === 'file:') {
if (fileURLToPath) {
result.file = fileURLToPath(fromUrl)
} else {
- // istanbul ignore next
+ /* c8 ignore next 2 */
throw new Error(`file: protocol is not available in this PostCSS build`)
}
}
diff --git a/node_modules/postcss/lib/lazy-result.d.ts b/node_modules/postcss/lib/lazy-result.d.ts
index 9da0fb5..a514234 100644
--- a/node_modules/postcss/lib/lazy-result.d.ts
+++ b/node_modules/postcss/lib/lazy-result.d.ts
@@ -89,8 +89,9 @@
*
* This property will only work with synchronous plugins.
* If the processor contains any asynchronous plugins
- * it will throw an error. This is why this method is only
- * for debug purpose, you should always use `LazyResult#then`.
+ * it will throw an error.
+ *
+ * PostCSS runners should always use `LazyResult#then`.
*/
get css(): string
@@ -100,8 +101,9 @@
*
* This property will only work with synchronous plugins.
* If the processor contains any asynchronous plugins
- * it will throw an error. This is why this method is only
- * for debug purpose, you should always use `LazyResult#then`.
+ * it will throw an error.
+ *
+ * PostCSS runners should always use `LazyResult#then`.
*/
get content(): string
@@ -111,8 +113,9 @@
*
* This property will only work with synchronous plugins.
* If the processor contains any asynchronous plugins
- * it will throw an error. This is why this method is only
- * for debug purpose, you should always use `LazyResult#then`.
+ * it will throw an error.
+ *
+ * PostCSS runners should always use `LazyResult#then`.
*/
get map(): SourceMap
@@ -123,8 +126,7 @@
* This property will only work with synchronous plugins. If the processor
* contains any asynchronous plugins it will throw an error.
*
- * This is why this method is only for debug purpose,
- * you should always use `LazyResult#then`.
+ * PostCSS runners should always use `LazyResult#then`.
*/
get root(): Root
@@ -135,8 +137,7 @@
* This property will only work with synchronous plugins. If the processor
* contains any asynchronous plugins it will throw an error.
*
- * This is why this method is only for debug purpose,
- * you should always use `LazyResult#then`.
+ * PostCSS runners should always use `LazyResult#then`.
*/
get messages(): Message[]
diff --git a/node_modules/postcss/lib/lazy-result.js b/node_modules/postcss/lib/lazy-result.js
index 6069ba6..584a95d 100644
--- a/node_modules/postcss/lib/lazy-result.js
+++ b/node_modules/postcss/lib/lazy-result.js
@@ -137,7 +137,7 @@
}
if (root && !root[my]) {
- // istanbul ignore next
+ /* c8 ignore next 2 */
Container.rebuild(root)
}
}
@@ -364,6 +364,7 @@
let b = runtimeVer.split('.')
if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
+ // eslint-disable-next-line no-console
console.error(
'Unknown error from PostCSS plugin. Your current PostCSS ' +
'version is ' +
@@ -378,7 +379,8 @@
}
}
} catch (err) {
- // istanbul ignore next
+ /* c8 ignore next 3 */
+ // eslint-disable-next-line no-console
if (console && console.error) console.error(err)
}
return error
diff --git a/node_modules/postcss/lib/map-generator.js b/node_modules/postcss/lib/map-generator.js
index a86cc67..49d638a 100644
--- a/node_modules/postcss/lib/map-generator.js
+++ b/node_modules/postcss/lib/map-generator.js
@@ -4,15 +4,18 @@
let { dirname, resolve, relative, sep } = require('path')
let { pathToFileURL } = require('url')
+let Input = require('./input')
+
let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)
let pathAvailable = Boolean(dirname && resolve && relative && sep)
class MapGenerator {
- constructor(stringify, root, opts) {
+ constructor(stringify, root, opts, cssString) {
this.stringify = stringify
this.mapOpts = opts.map || {}
this.root = root
this.opts = opts
+ this.css = cssString
}
isMap() {
@@ -25,14 +28,19 @@
previous() {
if (!this.previousMaps) {
this.previousMaps = []
- this.root.walk(node => {
- if (node.source && node.source.input.map) {
- let map = node.source.input.map
- if (!this.previousMaps.includes(map)) {
- this.previousMaps.push(map)
+ if (this.root) {
+ this.root.walk(node => {
+ if (node.source && node.source.input.map) {
+ let map = node.source.input.map
+ if (!this.previousMaps.includes(map)) {
+ this.previousMaps.push(map)
+ }
}
- }
- })
+ })
+ } else {
+ let input = new Input(this.css, this.opts)
+ if (input.map) this.previousMaps.push(input.map)
+ }
}
return this.previousMaps
@@ -67,30 +75,41 @@
clearAnnotation() {
if (this.mapOpts.annotation === false) return
- let node
- for (let i = this.root.nodes.length - 1; i >= 0; i--) {
- node = this.root.nodes[i]
- if (node.type !== 'comment') continue
- if (node.text.indexOf('# sourceMappingURL=') === 0) {
- this.root.removeChild(i)
+ if (this.root) {
+ let node
+ for (let i = this.root.nodes.length - 1; i >= 0; i--) {
+ node = this.root.nodes[i]
+ if (node.type !== 'comment') continue
+ if (node.text.indexOf('# sourceMappingURL=') === 0) {
+ this.root.removeChild(i)
+ }
}
+ } else if (this.css) {
+ this.css = this.css.replace(/(\n)?\/\*#[\S\s]*?\*\/$/gm, '')
}
}
setSourcesContent() {
let already = {}
- this.root.walk(node => {
- if (node.source) {
- let from = node.source.input.from
- if (from && !already[from]) {
- already[from] = true
- this.map.setSourceContent(
- this.toUrl(this.path(from)),
- node.source.input.css
- )
+ if (this.root) {
+ this.root.walk(node => {
+ if (node.source) {
+ let from = node.source.input.from
+ if (from && !already[from]) {
+ already[from] = true
+ this.map.setSourceContent(
+ this.toUrl(this.path(from)),
+ node.source.input.css
+ )
+ }
}
- }
- })
+ })
+ } else if (this.css) {
+ let from = this.opts.from
+ ? this.toUrl(this.path(this.opts.from))
+ : '<no source>'
+ this.map.setSourceContent(from, this.css)
+ }
}
applyPrevMaps() {
@@ -129,7 +148,6 @@
if (Buffer) {
return Buffer.from(str).toString('base64')
} else {
- // istanbul ignore next
return window.btoa(unescape(encodeURIComponent(str)))
}
}
@@ -147,7 +165,6 @@
} else {
content = this.outputFile() + '.map'
}
-
let eol = '\n'
if (this.css.includes('\r\n')) eol = '\r\n'
@@ -157,23 +174,40 @@
outputFile() {
if (this.opts.to) {
return this.path(this.opts.to)
- }
- if (this.opts.from) {
+ } else if (this.opts.from) {
return this.path(this.opts.from)
+ } else {
+ return 'to.css'
}
- return 'to.css'
}
generateMap() {
- this.generateString()
+ if (this.root) {
+ this.generateString()
+ } else if (this.previous().length === 1) {
+ let prev = this.previous()[0].consumer()
+ prev.file = this.outputFile()
+ this.map = SourceMapGenerator.fromSourceMap(prev)
+ } else {
+ this.map = new SourceMapGenerator({ file: this.outputFile() })
+ this.map.addMapping({
+ source: this.opts.from
+ ? this.toUrl(this.path(this.opts.from))
+ : '<no source>',
+ generated: { line: 1, column: 0 },
+ original: { line: 1, column: 0 }
+ })
+ }
+
if (this.isSourcesContent()) this.setSourcesContent()
- if (this.previous().length > 0) this.applyPrevMaps()
+ if (this.root && this.previous().length > 0) this.applyPrevMaps()
if (this.isAnnotation()) this.addAnnotation()
if (this.isInline()) {
return [this.css]
+ } else {
+ return [this.css, this.map]
}
- return [this.css, this.map]
}
path(file) {
@@ -193,7 +227,6 @@
toUrl(path) {
if (sep === '\\') {
- // istanbul ignore next
path = path.replace(/\\/g, '/')
}
return encodeURI(path).replace(/[#?]/g, encodeURIComponent)
@@ -206,7 +239,6 @@
if (pathToFileURL) {
return pathToFileURL(node.source.input.from).toString()
} else {
- // istanbul ignore next
throw new Error(
'`map.absolute` option is not available in this PostCSS build'
)
@@ -284,16 +316,15 @@
generate() {
this.clearAnnotation()
-
if (pathAvailable && sourceMapAvailable && this.isMap()) {
return this.generateMap()
+ } else {
+ let result = ''
+ this.stringify(this.root, i => {
+ result += i
+ })
+ return [result]
}
-
- let result = ''
- this.stringify(this.root, i => {
- result += i
- })
- return [result]
}
}
diff --git a/node_modules/postcss/lib/no-work-result.d.ts b/node_modules/postcss/lib/no-work-result.d.ts
new file mode 100644
index 0000000..7ba1462
--- /dev/null
+++ b/node_modules/postcss/lib/no-work-result.d.ts
@@ -0,0 +1,37 @@
+import Result, { Message, ResultOptions } from './result.js'
+import { SourceMap } from './postcss.js'
+import Processor from './processor.js'
+import Warning from './warning.js'
+import Root from './root.js'
+import LazyResult from './lazy-result.js'
+
+/**
+ * A Promise proxy for the result of PostCSS transformations.
+ * This lazy result instance doesn't parse css unless `NoWorkResult#root` or `Result#root`
+ * are accessed. See the example below for details.
+ * A `NoWork` instance is returned by `Processor#process` ONLY when no plugins defined.
+ *
+ * ```js
+ * const noWorkResult = postcss().process(css) // No plugins are defined.
+ * // CSS is not parsed
+ * let root = noWorkResult.root // now css is parsed because we accessed the root
+ * ```
+ */
+export default class NoWorkResult implements LazyResult {
+ then: Promise<Result>['then']
+ catch: Promise<Result>['catch']
+ finally: Promise<Result>['finally']
+ constructor(processor: Processor, css: string, opts: ResultOptions)
+ get [Symbol.toStringTag](): string
+ get processor(): Processor
+ get opts(): ResultOptions
+ get css(): string
+ get content(): string
+ get map(): SourceMap
+ get root(): Root
+ get messages(): Message[]
+ warnings(): Warning[]
+ toString(): string
+ sync(): Result
+ async(): Promise<Result>
+}
diff --git a/node_modules/postcss/lib/no-work-result.js b/node_modules/postcss/lib/no-work-result.js
new file mode 100644
index 0000000..3dacb3a
--- /dev/null
+++ b/node_modules/postcss/lib/no-work-result.js
@@ -0,0 +1,132 @@
+'use strict'
+
+let MapGenerator = require('./map-generator')
+let stringify = require('./stringify')
+let warnOnce = require('./warn-once')
+let parse = require('./parse')
+const Result = require('./result')
+
+class NoWorkResult {
+ constructor(processor, css, opts) {
+ css = css.toString()
+ this.stringified = false
+
+ this._processor = processor
+ this._css = css
+ this._opts = opts
+ this._map = undefined
+ let root
+
+ let str = stringify
+ this.result = new Result(this._processor, root, this._opts)
+ this.result.css = css
+
+ let self = this
+ Object.defineProperty(this.result, 'root', {
+ get() {
+ return self.root
+ }
+ })
+
+ let map = new MapGenerator(str, root, this._opts, css)
+ if (map.isMap()) {
+ let [generatedCSS, generatedMap] = map.generate()
+ if (generatedCSS) {
+ this.result.css = generatedCSS
+ }
+ if (generatedMap) {
+ this.result.map = generatedMap
+ }
+ }
+ }
+
+ get [Symbol.toStringTag]() {
+ return 'NoWorkResult'
+ }
+
+ get processor() {
+ return this.result.processor
+ }
+
+ get opts() {
+ return this.result.opts
+ }
+
+ get css() {
+ return this.result.css
+ }
+
+ get content() {
+ return this.result.css
+ }
+
+ get map() {
+ return this.result.map
+ }
+
+ get root() {
+ if (this._root) {
+ return this._root
+ }
+
+ let root
+ let parser = parse
+
+ try {
+ root = parser(this._css, this._opts)
+ } catch (error) {
+ this.error = error
+ }
+
+ this._root = root
+
+ return root
+ }
+
+ get messages() {
+ return []
+ }
+
+ warnings() {
+ return []
+ }
+
+ toString() {
+ return this._css
+ }
+
+ then(onFulfilled, onRejected) {
+ if (process.env.NODE_ENV !== 'production') {
+ if (!('from' in this._opts)) {
+ warnOnce(
+ 'Without `from` option PostCSS could generate wrong source map ' +
+ 'and will not find Browserslist config. Set it to CSS file path ' +
+ 'or to `undefined` to prevent this warning.'
+ )
+ }
+ }
+
+ return this.async().then(onFulfilled, onRejected)
+ }
+
+ catch(onRejected) {
+ return this.async().catch(onRejected)
+ }
+
+ finally(onFinally) {
+ return this.async().then(onFinally, onFinally)
+ }
+
+ async() {
+ if (this.error) return Promise.reject(this.error)
+ return Promise.resolve(this.result)
+ }
+
+ sync() {
+ if (this.error) throw this.error
+ return this.result
+ }
+}
+
+module.exports = NoWorkResult
+NoWorkResult.default = NoWorkResult
diff --git a/node_modules/postcss/lib/node.d.ts b/node_modules/postcss/lib/node.d.ts
index 9e46e87..ded2dc0 100644
--- a/node_modules/postcss/lib/node.d.ts
+++ b/node_modules/postcss/lib/node.d.ts
@@ -38,17 +38,29 @@
line: number
}
+export interface Range {
+ /**
+ * Start position, inclusive.
+ */
+ start: Position
+
+ /**
+ * End position, exclusive.
+ */
+ end: Position
+}
+
export interface Source {
/**
* The file source of the node.
*/
input: Input
/**
- * The starting position of the node’s source.
+ * The inclusive starting position of the node’s source.
*/
start?: Position
/**
- * The ending position of the node's source.
+ * The inclusive ending position of the node's source.
*/
end?: Position
}
@@ -72,6 +84,11 @@
* of error.
*/
index?: number
+ /**
+ * An ending index inside a node's string that should be highlighted as
+ * source of error.
+ */
+ endIndex?: number
}
/**
@@ -441,4 +458,21 @@
* @return Symbol position in file.
*/
positionInside(index: number): Position
+
+ /**
+ * Get the position for a word or an index inside the node.
+ *
+ * @param opts Options.
+ * @return Position.
+ */
+ positionBy(opts?: Pick<WarningOptions, 'word' | 'index'>): Position
+
+ /**
+ * Get the range for a word or start and end index inside the node.
+ * The start index is inclusive; the end index is exclusive.
+ *
+ * @param opts Options.
+ * @return Range.
+ */
+ rangeBy(opts?: Pick<WarningOptions, 'word' | 'index' | 'endIndex'>): Range
}
diff --git a/node_modules/postcss/lib/node.js b/node_modules/postcss/lib/node.js
index d26ef1f..bdcbac0 100644
--- a/node_modules/postcss/lib/node.js
+++ b/node_modules/postcss/lib/node.js
@@ -10,7 +10,7 @@
for (let i in obj) {
if (!Object.prototype.hasOwnProperty.call(obj, i)) {
- // istanbul ignore next
+ /* c8 ignore next 2 */
continue
}
if (i === 'proxyCache') continue
@@ -56,8 +56,13 @@
error(message, opts = {}) {
if (this.source) {
- let pos = this.positionBy(opts)
- return this.source.input.error(message, pos.line, pos.column, opts)
+ let { start, end } = this.rangeBy(opts)
+ return this.source.input.error(
+ message,
+ { line: start.line, column: start.column },
+ { line: end.line, column: end.column },
+ opts
+ )
}
return new CssSyntaxError(message)
}
@@ -184,7 +189,7 @@
for (let name in this) {
if (!Object.prototype.hasOwnProperty.call(this, name)) {
- // istanbul ignore next
+ /* c8 ignore next 2 */
continue
}
if (name === 'parent' || name === 'proxyCache') continue
@@ -252,6 +257,59 @@
return pos
}
+ rangeBy(opts) {
+ let start = {
+ line: this.source.start.line,
+ column: this.source.start.column
+ }
+ let end = this.source.end
+ ? {
+ line: this.source.end.line,
+ column: this.source.end.column + 1
+ }
+ : {
+ line: start.line,
+ column: start.column + 1
+ }
+
+ if (opts.word) {
+ let index = this.toString().indexOf(opts.word)
+ if (index !== -1) {
+ start = this.positionInside(index)
+ end = this.positionInside(index + opts.word.length)
+ }
+ } else {
+ if (opts.start) {
+ start = {
+ line: opts.start.line,
+ column: opts.start.column
+ }
+ } else if (opts.index) {
+ start = this.positionInside(opts.index)
+ }
+
+ if (opts.end) {
+ end = {
+ line: opts.end.line,
+ column: opts.end.column
+ }
+ } else if (opts.endIndex) {
+ end = this.positionInside(opts.endIndex)
+ } else if (opts.index) {
+ end = this.positionInside(opts.index + 1)
+ }
+ }
+
+ if (
+ end.line < start.line ||
+ (end.line === start.line && end.column <= start.column)
+ ) {
+ end = { line: start.line, column: start.column + 1 }
+ }
+
+ return { start, end }
+ }
+
getProxyProcessor() {
return {
set(node, prop, value) {
@@ -263,6 +321,7 @@
prop === 'name' ||
prop === 'params' ||
prop === 'important' ||
+ /* c8 ignore next */
prop === 'text'
) {
node.markDirty()
diff --git a/node_modules/postcss/lib/parser.js b/node_modules/postcss/lib/parser.js
index 4144cc9..eb8fc41 100644
--- a/node_modules/postcss/lib/parser.js
+++ b/node_modules/postcss/lib/parser.js
@@ -511,15 +511,27 @@
// Errors
unclosedBracket(bracket) {
- throw this.input.error('Unclosed bracket', bracket[2])
+ throw this.input.error(
+ 'Unclosed bracket',
+ { offset: bracket[2] },
+ { offset: bracket[2] + 1 }
+ )
}
unknownWord(tokens) {
- throw this.input.error('Unknown word', tokens[0][2])
+ throw this.input.error(
+ 'Unknown word',
+ { offset: tokens[0][2] },
+ { offset: tokens[0][2] + tokens[0][1].length }
+ )
}
unexpectedClose(token) {
- throw this.input.error('Unexpected }', token[2])
+ throw this.input.error(
+ 'Unexpected }',
+ { offset: token[2] },
+ { offset: token[2] + 1 }
+ )
}
unclosedBlock() {
@@ -528,11 +540,19 @@
}
doubleColon(token) {
- throw this.input.error('Double colon', token[2])
+ throw this.input.error(
+ 'Double colon',
+ { offset: token[2] },
+ { offset: token[2] + token[1].length }
+ )
}
unnamedAtrule(node, token) {
- throw this.input.error('At-rule without name', token[2])
+ throw this.input.error(
+ 'At-rule without name',
+ { offset: token[2] },
+ { offset: token[2] + token[1].length }
+ )
}
precheckMissedSemicolon(/* tokens */) {
diff --git a/node_modules/postcss/lib/postcss.d.ts b/node_modules/postcss/lib/postcss.d.ts
index 4458806..30a0d08 100644
--- a/node_modules/postcss/lib/postcss.d.ts
+++ b/node_modules/postcss/lib/postcss.d.ts
@@ -10,52 +10,53 @@
AnyNode
} from './node.js'
import Declaration, { DeclarationProps } from './declaration.js'
-import Root, { RootProps } from './root.js'
+import Container, { ContainerProps } from './container.js'
import Document, { DocumentProps } from './document.js'
+import Warning, { WarningOptions } from './warning.js'
import Comment, { CommentProps } from './comment.js'
import AtRule, { AtRuleProps } from './at-rule.js'
-import Result, { Message } from './result.js'
-import LazyResult from './lazy-result.js'
-import Rule, { RuleProps } from './rule.js'
-import Container, { ContainerProps } from './container.js'
-import Warning, { WarningOptions } from './warning.js'
import Input, { FilePosition } from './input.js'
+import Result, { Message } from './result.js'
+import Root, { RootProps } from './root.js'
+import Rule, { RuleProps } from './rule.js'
import CssSyntaxError from './css-syntax-error.js'
import list, { List } from './list.js'
+import LazyResult from './lazy-result.js'
import Processor from './processor.js'
export {
- WarningOptions,
- FilePosition,
- Position,
- Source,
- ChildNode,
- AnyNode,
- Message,
NodeErrorOptions,
- NodeProps,
DeclarationProps,
- ContainerProps,
- CommentProps,
- RuleProps,
- ChildProps,
- AtRuleProps,
- RootProps,
- DocumentProps,
- Warning,
CssSyntaxError,
- Node,
- Container,
- list,
+ ContainerProps,
+ WarningOptions,
+ DocumentProps,
+ FilePosition,
+ CommentProps,
+ AtRuleProps,
Declaration,
- Comment,
- AtRule,
- Rule,
- Root,
- Document,
- Result,
+ ChildProps,
LazyResult,
- Input
+ ChildNode,
+ NodeProps,
+ Processor,
+ RuleProps,
+ RootProps,
+ Container,
+ Position,
+ Document,
+ AnyNode,
+ Warning,
+ Message,
+ Comment,
+ Source,
+ AtRule,
+ Result,
+ Input,
+ Node,
+ list,
+ Rule,
+ Root
}
export type SourceMap = SourceMapGenerator & {
@@ -221,7 +222,7 @@
}
| Processor
-export interface Parser<RootNode = Root> {
+export interface Parser<RootNode = Root | Document> {
(
css: string | { toString(): string },
opts?: Pick<ProcessOptions, 'map' | 'from'>
@@ -245,7 +246,7 @@
/**
* Function to generate AST by string.
*/
- parse?: Parser<Root | Document>
+ parse?: Parser
/**
* Class to generate string by AST.
@@ -378,7 +379,7 @@
* root1.append(root2).toResult().css
* ```
*/
- parse: Parser
+ parse: Parser<Root>
/**
* Rehydrate a JSON AST (from `Node#toJSON`) back into the AST classes.
@@ -458,7 +459,7 @@
}
export const stringify: Stringifier
-export const parse: Parser
+export const parse: Parser<Root>
export const fromJSON: JSONHydrator
export const comment: Postcss['comment']
diff --git a/node_modules/postcss/lib/postcss.js b/node_modules/postcss/lib/postcss.js
index b03bb18..d3f640e 100644
--- a/node_modules/postcss/lib/postcss.js
+++ b/node_modules/postcss/lib/postcss.js
@@ -27,14 +27,17 @@
}
postcss.plugin = function plugin(name, initializer) {
+ // eslint-disable-next-line no-console
if (console && console.warn) {
+ // eslint-disable-next-line no-console
console.warn(
name +
': postcss.plugin was deprecated. Migration guide:\n' +
'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
)
if (process.env.LANG && process.env.LANG.startsWith('cn')) {
- // istanbul ignore next
+ /* c8 ignore next 7 */
+ // eslint-disable-next-line no-console
console.warn(
name +
': 里面 postcss.plugin 被弃用. 迁移指南:\n' +
@@ -79,6 +82,7 @@
postcss.CssSyntaxError = CssSyntaxError
postcss.Declaration = Declaration
postcss.Container = Container
+postcss.Processor = Processor
postcss.Document = Document
postcss.Comment = Comment
postcss.Warning = Warning
diff --git a/node_modules/postcss/lib/postcss.mjs b/node_modules/postcss/lib/postcss.mjs
index 6ba7d11..3507598 100644
--- a/node_modules/postcss/lib/postcss.mjs
+++ b/node_modules/postcss/lib/postcss.mjs
@@ -18,6 +18,7 @@
export const CssSyntaxError = postcss.CssSyntaxError
export const Declaration = postcss.Declaration
export const Container = postcss.Container
+export const Processor = postcss.Processor
export const Document = postcss.Document
export const Comment = postcss.Comment
export const Warning = postcss.Warning
diff --git a/node_modules/postcss/lib/previous-map.js b/node_modules/postcss/lib/previous-map.js
index bcc378d..d13a93a 100644
--- a/node_modules/postcss/lib/previous-map.js
+++ b/node_modules/postcss/lib/previous-map.js
@@ -8,7 +8,7 @@
if (Buffer) {
return Buffer.from(str, 'base64').toString()
} else {
- // istanbul ignore next
+ /* c8 ignore next 2 */
return window.atob(str)
}
}
diff --git a/node_modules/postcss/lib/processor.d.ts b/node_modules/postcss/lib/processor.d.ts
index 1511f01..e1affa4 100644
--- a/node_modules/postcss/lib/processor.d.ts
+++ b/node_modules/postcss/lib/processor.d.ts
@@ -8,13 +8,14 @@
import LazyResult from './lazy-result.js'
import Result from './result.js'
import Root from './root.js'
+import NoWorkResult from './no-work-result.js'
/**
* Contains plugins to process CSS. Create one `Processor` instance,
* initialize its plugins, and then use that instance on numerous CSS files.
*
* ```js
- * const processor = postcss([autoprefixer, precss])
+ * const processor = postcss([autoprefixer, postcssNested])
* processor.process(css1).then(result => console.log(result.css))
* processor.process(css2).then(result => console.log(result.css))
* ```
@@ -35,7 +36,7 @@
* Plugins added to this processor.
*
* ```js
- * const processor = postcss([autoprefixer, precss])
+ * const processor = postcss([autoprefixer, postcssNested])
* processor.plugins.length //=> 2
* ```
*/
@@ -67,7 +68,7 @@
* ```js
* const processor = postcss()
* .use(autoprefixer)
- * .use(precss)
+ * .use(postcssNested)
* ```
*
* @param plugin PostCSS plugin or `Processor` with plugins.
@@ -97,5 +98,5 @@
process(
css: string | { toString(): string } | Result | LazyResult | Root,
options?: ProcessOptions
- ): LazyResult
+ ): LazyResult | NoWorkResult
}
diff --git a/node_modules/postcss/lib/processor.js b/node_modules/postcss/lib/processor.js
index e3e3bbe..82430a4 100644
--- a/node_modules/postcss/lib/processor.js
+++ b/node_modules/postcss/lib/processor.js
@@ -1,12 +1,13 @@
'use strict'
+let NoWorkResult = require('./no-work-result')
let LazyResult = require('./lazy-result')
let Document = require('./document')
let Root = require('./root')
class Processor {
constructor(plugins = []) {
- this.version = '8.3.11'
+ this.version = '8.4.5'
this.plugins = this.normalize(plugins)
}
@@ -20,20 +21,12 @@
this.plugins.length === 0 &&
typeof opts.parser === 'undefined' &&
typeof opts.stringifier === 'undefined' &&
- typeof opts.syntax === 'undefined' &&
- !opts.hideNothingWarning
+ typeof opts.syntax === 'undefined'
) {
- if (process.env.NODE_ENV !== 'production') {
- if (typeof console !== 'undefined' && console.warn) {
- console.warn(
- 'You did not set any plugins, parser, or stringifier. ' +
- 'Right now, PostCSS does nothing. Pick plugins for your case ' +
- 'on https://www.postcss.parts/ and use them in postcss.config.js.'
- )
- }
- }
+ return new NoWorkResult(this, css, opts)
+ } else {
+ return new LazyResult(this, css, opts)
}
- return new LazyResult(this, css, opts)
}
normalize(plugins) {
diff --git a/node_modules/postcss/lib/result.d.ts b/node_modules/postcss/lib/result.d.ts
index 11e7bf4..8a582b6 100644
--- a/node_modules/postcss/lib/result.d.ts
+++ b/node_modules/postcss/lib/result.d.ts
@@ -4,6 +4,7 @@
SourceMap,
TransformCallback,
Root,
+ Document,
Node,
Warning,
WarningOptions
@@ -94,7 +95,7 @@
* root.toResult().root === root
* ```
*/
- root: Root
+ root: Root | Document
/**
* Options from the `Processor#process` or `Root#toResult` call
@@ -141,7 +142,7 @@
* @param root Root node after all transformations.
* @param opts Options from the `Processor#process` or `Root#toResult`.
*/
- constructor(processor: Processor, root: Root, opts: ResultOptions)
+ constructor(processor: Processor, root: Root | Document, opts: ResultOptions)
/**
* An alias for the `Result#css` property.
diff --git a/node_modules/postcss/lib/rule.d.ts b/node_modules/postcss/lib/rule.d.ts
index 75ddf31..ad6abb5 100644
--- a/node_modules/postcss/lib/rule.d.ts
+++ b/node_modules/postcss/lib/rule.d.ts
@@ -1,6 +1,6 @@
import Container, { ContainerProps } from './container.js'
-interface RuleRaws {
+interface RuleRaws extends Record<string, unknown> {
/**
* The space symbols before the node. It also stores `*`
* and `_` symbols before the declaration (IE hack).
diff --git a/node_modules/postcss/lib/stringifier.d.ts b/node_modules/postcss/lib/stringifier.d.ts
new file mode 100644
index 0000000..23289df
--- /dev/null
+++ b/node_modules/postcss/lib/stringifier.d.ts
@@ -0,0 +1,37 @@
+import {
+ Document,
+ Root,
+ Comment,
+ Declaration,
+ Builder,
+ AnyNode,
+ Rule,
+ AtRule,
+ Container
+} from './postcss.js'
+
+export default class Stringifier {
+ builder: Builder
+ constructor(builder: Builder)
+ stringify(node: AnyNode, semicolon?: boolean): void
+ document(node: Document): void
+ root(node: Root): void
+ comment(node: Comment): void
+ decl(node: Declaration, semicolon?: boolean): void
+ rule(node: Rule): void
+ atrule(node: AtRule, semicolon?: boolean): void
+ body(node: Container): void
+ block(node: AnyNode, start: string): void
+ raw(node: AnyNode, own: string | null, detect?: string): string
+ rawSemicolon(root: Root): boolean | undefined
+ rawEmptyBody(root: Root): string | undefined
+ rawIndent(root: Root): string | undefined
+ rawBeforeComment(root: Root, node: Comment): string | undefined
+ rawBeforeDecl(root: Root, node: Declaration): string | undefined
+ rawBeforeRule(root: Root): string | undefined
+ rawBeforeClose(root: Root): string | undefined
+ rawBeforeOpen(root: Root): string | undefined
+ rawColon(root: Root): string | undefined
+ beforeAfter(node: AnyNode, detect: 'before' | 'after'): string
+ rawValue(node: AnyNode, prop: string): string
+}
diff --git a/node_modules/postcss/lib/stringifier.js b/node_modules/postcss/lib/stringifier.js
index 81e1251..4065c47 100644
--- a/node_modules/postcss/lib/stringifier.js
+++ b/node_modules/postcss/lib/stringifier.js
@@ -25,7 +25,7 @@
}
stringify(node, semicolon) {
- /* istanbul ignore if */
+ /* c8 ignore start */
if (!this[node.type]) {
throw new Error(
'Unknown AST node type ' +
@@ -34,6 +34,7 @@
'Maybe you need to change PostCSS stringifier.'
)
}
+ /* c8 ignore stop */
this[node.type](node, semicolon)
}
@@ -349,3 +350,4 @@
}
module.exports = Stringifier
+Stringifier.default = Stringifier
diff --git a/node_modules/postcss/lib/warn-once.js b/node_modules/postcss/lib/warn-once.js
index 6896b75..316e1cf 100644
--- a/node_modules/postcss/lib/warn-once.js
+++ b/node_modules/postcss/lib/warn-once.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
'use strict'
let printed = {}
diff --git a/node_modules/postcss/lib/warning.d.ts b/node_modules/postcss/lib/warning.d.ts
index a285367..838bef1 100644
--- a/node_modules/postcss/lib/warning.d.ts
+++ b/node_modules/postcss/lib/warning.d.ts
@@ -1,3 +1,4 @@
+import { RangePosition } from './css-syntax-error.js'
import Node from './node.js'
export interface WarningOptions {
@@ -12,11 +13,26 @@
word?: string
/**
- * Index in CSS node string that caused the warning.
+ * Start index, inclusive, in CSS node string that caused the warning.
*/
index?: number
/**
+ * End index, exclusive, in CSS node string that caused the warning.
+ */
+ endIndex?: number
+
+ /**
+ * Start position, inclusive, in CSS node string that caused the warning.
+ */
+ start?: RangePosition
+
+ /**
+ * End position, exclusive, in CSS node string that caused the warning.
+ */
+ end?: RangePosition
+
+ /**
* Name of the plugin that created this warning. `Result#warn` fills
* this property automatically.
*/
@@ -68,7 +84,7 @@
node: Node
/**
- * Line in the input file with this warning’s source.
+ * Line for inclusive start position in the input file with this warning’s source.
*
* ```js
* warning.line //=> 5
@@ -77,7 +93,7 @@
line: number
/**
- * Column in the input file with this warning’s source.
+ * Column for inclusive start position in the input file with this warning’s source.
*
* ```js
* warning.column //=> 6
@@ -86,6 +102,24 @@
column: number
/**
+ * Line for exclusive end position in the input file with this warning’s source.
+ *
+ * ```js
+ * warning.endLine //=> 6
+ * ```
+ */
+ endLine?: number
+
+ /**
+ * Column for exclusive end position in the input file with this warning’s source.
+ *
+ * ```js
+ * warning.endColumn //=> 4
+ * ```
+ */
+ endColumn?: number
+
+ /**
* @param text Warning message.
* @param opts Warning options.
*/
diff --git a/node_modules/postcss/lib/warning.js b/node_modules/postcss/lib/warning.js
index cdb0281..65aa525 100644
--- a/node_modules/postcss/lib/warning.js
+++ b/node_modules/postcss/lib/warning.js
@@ -6,9 +6,11 @@
this.text = text
if (opts.node && opts.node.source) {
- let pos = opts.node.positionBy(opts)
- this.line = pos.line
- this.column = pos.column
+ let range = opts.node.rangeBy(opts)
+ this.line = range.start.line
+ this.column = range.start.column
+ this.endLine = range.end.line
+ this.endColumn = range.end.column
}
for (let opt in opts) this[opt] = opts[opt]
diff --git a/node_modules/postcss/package.json b/node_modules/postcss/package.json
old mode 100644
new mode 100755
index 042665a..3adefb3
--- a/node_modules/postcss/package.json
+++ b/node_modules/postcss/package.json
@@ -1,6 +1,6 @@
{
"name": "postcss",
- "version": "8.3.11",
+ "version": "8.4.5",
"description": "Tool for transforming styles with JS plugins",
"engines": {
"node": "^10 || ^12 || >=14"
@@ -19,6 +19,7 @@
"./lib/fromJSON": "./lib/fromJSON.js",
"./lib/input": "./lib/input.js",
"./lib/lazy-result": "./lib/lazy-result.js",
+ "./lib/no-work-result": "./lib/no-work-result.js",
"./lib/list": "./lib/list.js",
"./lib/map-generator": "./lib/map-generator.js",
"./lib/node": "./lib/node.js",
@@ -66,7 +67,7 @@
"dependencies": {
"nanoid": "^3.1.30",
"picocolors": "^1.0.0",
- "source-map-js": "^0.6.2"
+ "source-map-js": "^1.0.1"
},
"browser": {
"./lib/terminal-highlight": false,
diff --git a/node_modules/source-map-js/CHANGELOG.md b/node_modules/source-map-js/CHANGELOG.md
deleted file mode 100644
index 3a8c066..0000000
--- a/node_modules/source-map-js/CHANGELOG.md
+++ /dev/null
@@ -1,301 +0,0 @@
-# Change Log
-
-## 0.5.6
-
-* Fix for regression when people were using numbers as names in source maps. See
- #236.
-
-## 0.5.5
-
-* Fix "regression" of unsupported, implementation behavior that half the world
- happens to have come to depend on. See #235.
-
-* Fix regression involving function hoisting in SpiderMonkey. See #233.
-
-## 0.5.4
-
-* Large performance improvements to source-map serialization. See #228 and #229.
-
-## 0.5.3
-
-* Do not include unnecessary distribution files. See
- commit ef7006f8d1647e0a83fdc60f04f5a7ca54886f86.
-
-## 0.5.2
-
-* Include browser distributions of the library in package.json's `files`. See
- issue #212.
-
-## 0.5.1
-
-* Fix latent bugs in IndexedSourceMapConsumer.prototype._parseMappings. See
- ff05274becc9e6e1295ed60f3ea090d31d843379.
-
-## 0.5.0
-
-* Node 0.8 is no longer supported.
-
-* Use webpack instead of dryice for bundling.
-
-* Big speedups serializing source maps. See pull request #203.
-
-* Fix a bug with `SourceMapConsumer.prototype.sourceContentFor` and sources that
- explicitly start with the source root. See issue #199.
-
-## 0.4.4
-
-* Fix an issue where using a `SourceMapGenerator` after having created a
- `SourceMapConsumer` from it via `SourceMapConsumer.fromSourceMap` failed. See
- issue #191.
-
-* Fix an issue with where `SourceMapGenerator` would mistakenly consider
- different mappings as duplicates of each other and avoid generating them. See
- issue #192.
-
-## 0.4.3
-
-* A very large number of performance improvements, particularly when parsing
- source maps. Collectively about 75% of time shaved off of the source map
- parsing benchmark!
-
-* Fix a bug in `SourceMapConsumer.prototype.allGeneratedPositionsFor` and fuzzy
- searching in the presence of a column option. See issue #177.
-
-* Fix a bug with joining a source and its source root when the source is above
- the root. See issue #182.
-
-* Add the `SourceMapConsumer.prototype.hasContentsOfAllSources` method to
- determine when all sources' contents are inlined into the source map. See
- issue #190.
-
-## 0.4.2
-
-* Add an `.npmignore` file so that the benchmarks aren't pulled down by
- dependent projects. Issue #169.
-
-* Add an optional `column` argument to
- `SourceMapConsumer.prototype.allGeneratedPositionsFor` and better handle lines
- with no mappings. Issues #172 and #173.
-
-## 0.4.1
-
-* Fix accidentally defining a global variable. #170.
-
-## 0.4.0
-
-* The default direction for fuzzy searching was changed back to its original
- direction. See #164.
-
-* There is now a `bias` option you can supply to `SourceMapConsumer` to control
- the fuzzy searching direction. See #167.
-
-* About an 8% speed up in parsing source maps. See #159.
-
-* Added a benchmark for parsing and generating source maps.
-
-## 0.3.0
-
-* Change the default direction that searching for positions fuzzes when there is
- not an exact match. See #154.
-
-* Support for environments using json2.js for JSON serialization. See #156.
-
-## 0.2.0
-
-* Support for consuming "indexed" source maps which do not have any remote
- sections. See pull request #127. This introduces a minor backwards
- incompatibility if you are monkey patching `SourceMapConsumer.prototype`
- methods.
-
-## 0.1.43
-
-* Performance improvements for `SourceMapGenerator` and `SourceNode`. See issue
- #148 for some discussion and issues #150, #151, and #152 for implementations.
-
-## 0.1.42
-
-* Fix an issue where `SourceNode`s from different versions of the source-map
- library couldn't be used in conjunction with each other. See issue #142.
-
-## 0.1.41
-
-* Fix a bug with getting the source content of relative sources with a "./"
- prefix. See issue #145 and [Bug 1090768](bugzil.la/1090768).
-
-* Add the `SourceMapConsumer.prototype.computeColumnSpans` method to compute the
- column span of each mapping.
-
-* Add the `SourceMapConsumer.prototype.allGeneratedPositionsFor` method to find
- all generated positions associated with a given original source and line.
-
-## 0.1.40
-
-* Performance improvements for parsing source maps in SourceMapConsumer.
-
-## 0.1.39
-
-* Fix a bug where setting a source's contents to null before any source content
- had been set before threw a TypeError. See issue #131.
-
-## 0.1.38
-
-* Fix a bug where finding relative paths from an empty path were creating
- absolute paths. See issue #129.
-
-## 0.1.37
-
-* Fix a bug where if the source root was an empty string, relative source paths
- would turn into absolute source paths. Issue #124.
-
-## 0.1.36
-
-* Allow the `names` mapping property to be an empty string. Issue #121.
-
-## 0.1.35
-
-* A third optional parameter was added to `SourceNode.fromStringWithSourceMap`
- to specify a path that relative sources in the second parameter should be
- relative to. Issue #105.
-
-* If no file property is given to a `SourceMapGenerator`, then the resulting
- source map will no longer have a `null` file property. The property will
- simply not exist. Issue #104.
-
-* Fixed a bug where consecutive newlines were ignored in `SourceNode`s.
- Issue #116.
-
-## 0.1.34
-
-* Make `SourceNode` work with windows style ("\r\n") newlines. Issue #103.
-
-* Fix bug involving source contents and the
- `SourceMapGenerator.prototype.applySourceMap`. Issue #100.
-
-## 0.1.33
-
-* Fix some edge cases surrounding path joining and URL resolution.
-
-* Add a third parameter for relative path to
- `SourceMapGenerator.prototype.applySourceMap`.
-
-* Fix issues with mappings and EOLs.
-
-## 0.1.32
-
-* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns
- (issue 92).
-
-* Fixed test runner to actually report number of failed tests as its process
- exit code.
-
-* Fixed a typo when reporting bad mappings (issue 87).
-
-## 0.1.31
-
-* Delay parsing the mappings in SourceMapConsumer until queried for a source
- location.
-
-* Support Sass source maps (which at the time of writing deviate from the spec
- in small ways) in SourceMapConsumer.
-
-## 0.1.30
-
-* Do not join source root with a source, when the source is a data URI.
-
-* Extend the test runner to allow running single specific test files at a time.
-
-* Performance improvements in `SourceNode.prototype.walk` and
- `SourceMapConsumer.prototype.eachMapping`.
-
-* Source map browser builds will now work inside Workers.
-
-* Better error messages when attempting to add an invalid mapping to a
- `SourceMapGenerator`.
-
-## 0.1.29
-
-* Allow duplicate entries in the `names` and `sources` arrays of source maps
- (usually from TypeScript) we are parsing. Fixes github issue 72.
-
-## 0.1.28
-
-* Skip duplicate mappings when creating source maps from SourceNode; github
- issue 75.
-
-## 0.1.27
-
-* Don't throw an error when the `file` property is missing in SourceMapConsumer,
- we don't use it anyway.
-
-## 0.1.26
-
-* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70.
-
-## 0.1.25
-
-* Make compatible with browserify
-
-## 0.1.24
-
-* Fix issue with absolute paths and `file://` URIs. See
- https://bugzilla.mozilla.org/show_bug.cgi?id=885597
-
-## 0.1.23
-
-* Fix issue with absolute paths and sourcesContent, github issue 64.
-
-## 0.1.22
-
-* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21.
-
-## 0.1.21
-
-* Fixed handling of sources that start with a slash so that they are relative to
- the source root's host.
-
-## 0.1.20
-
-* Fixed github issue #43: absolute URLs aren't joined with the source root
- anymore.
-
-## 0.1.19
-
-* Using Travis CI to run tests.
-
-## 0.1.18
-
-* Fixed a bug in the handling of sourceRoot.
-
-## 0.1.17
-
-* Added SourceNode.fromStringWithSourceMap.
-
-## 0.1.16
-
-* Added missing documentation.
-
-* Fixed the generating of empty mappings in SourceNode.
-
-## 0.1.15
-
-* Added SourceMapGenerator.applySourceMap.
-
-## 0.1.14
-
-* The sourceRoot is now handled consistently.
-
-## 0.1.13
-
-* Added SourceMapGenerator.fromSourceMap.
-
-## 0.1.12
-
-* SourceNode now generates empty mappings too.
-
-## 0.1.11
-
-* Added name support to SourceNode.
-
-## 0.1.10
-
-* Added sourcesContent support to the customer and generator.
diff --git a/node_modules/source-map-js/README.md b/node_modules/source-map-js/README.md
index 1605d1e..ba200e6 100644
--- a/node_modules/source-map-js/README.md
+++ b/node_modules/source-map-js/README.md
@@ -1,10 +1,8 @@
# Source Map JS
-<!-- [](https://travis-ci.org/mozilla/source-map) -->
-
[](https://www.npmjs.com/package/source-map-js)
-## Difference between original [source-map](https://github.com/mozilla/source-map)
+Difference between original [source-map](https://github.com/mozilla/source-map):
> TL,DR: it's fork of original source-map@0.6, but with perfomance optimizations.
@@ -27,734 +25,5 @@
[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
-## Use with Node
-
- $ npm install source-map-js
-
-<!-- ## Use on the Web
-
- <script src="https://raw.githubusercontent.com/mozilla/source-map/master/dist/source-map.min.js" defer></script> -->
-
---------------------------------------------------------------------------------
-
-<!-- `npm run toc` to regenerate the Table of Contents -->
-
-<!-- START doctoc generated TOC please keep comment here to allow auto update -->
-<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
-## Table of Contents
-
-- [Examples](#examples)
- - [Consuming a source map](#consuming-a-source-map)
- - [Generating a source map](#generating-a-source-map)
- - [With SourceNode (high level API)](#with-sourcenode-high-level-api)
- - [With SourceMapGenerator (low level API)](#with-sourcemapgenerator-low-level-api)
-- [API](#api)
- - [SourceMapConsumer](#sourcemapconsumer)
- - [new SourceMapConsumer(rawSourceMap)](#new-sourcemapconsumerrawsourcemap)
- - [SourceMapConsumer.prototype.computeColumnSpans()](#sourcemapconsumerprototypecomputecolumnspans)
- - [SourceMapConsumer.prototype.originalPositionFor(generatedPosition)](#sourcemapconsumerprototypeoriginalpositionforgeneratedposition)
- - [SourceMapConsumer.prototype.generatedPositionFor(originalPosition)](#sourcemapconsumerprototypegeneratedpositionfororiginalposition)
- - [SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)](#sourcemapconsumerprototypeallgeneratedpositionsfororiginalposition)
- - [SourceMapConsumer.prototype.hasContentsOfAllSources()](#sourcemapconsumerprototypehascontentsofallsources)
- - [SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])](#sourcemapconsumerprototypesourcecontentforsource-returnnullonmissing)
- - [SourceMapConsumer.prototype.eachMapping(callback, context, order)](#sourcemapconsumerprototypeeachmappingcallback-context-order)
- - [SourceMapGenerator](#sourcemapgenerator)
- - [new SourceMapGenerator([startOfSourceMap])](#new-sourcemapgeneratorstartofsourcemap)
- - [SourceMapGenerator.fromSourceMap(sourceMapConsumer)](#sourcemapgeneratorfromsourcemapsourcemapconsumer)
- - [SourceMapGenerator.prototype.addMapping(mapping)](#sourcemapgeneratorprototypeaddmappingmapping)
- - [SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)](#sourcemapgeneratorprototypesetsourcecontentsourcefile-sourcecontent)
- - [SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])](#sourcemapgeneratorprototypeapplysourcemapsourcemapconsumer-sourcefile-sourcemappath)
- - [SourceMapGenerator.prototype.toString()](#sourcemapgeneratorprototypetostring)
- - [SourceNode](#sourcenode)
- - [new SourceNode([line, column, source[, chunk[, name]]])](#new-sourcenodeline-column-source-chunk-name)
- - [SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])](#sourcenodefromstringwithsourcemapcode-sourcemapconsumer-relativepath)
- - [SourceNode.prototype.add(chunk)](#sourcenodeprototypeaddchunk)
- - [SourceNode.prototype.prepend(chunk)](#sourcenodeprototypeprependchunk)
- - [SourceNode.prototype.setSourceContent(sourceFile, sourceContent)](#sourcenodeprototypesetsourcecontentsourcefile-sourcecontent)
- - [SourceNode.prototype.walk(fn)](#sourcenodeprototypewalkfn)
- - [SourceNode.prototype.walkSourceContents(fn)](#sourcenodeprototypewalksourcecontentsfn)
- - [SourceNode.prototype.join(sep)](#sourcenodeprototypejoinsep)
- - [SourceNode.prototype.replaceRight(pattern, replacement)](#sourcenodeprototypereplacerightpattern-replacement)
- - [SourceNode.prototype.toString()](#sourcenodeprototypetostring)
- - [SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])](#sourcenodeprototypetostringwithsourcemapstartofsourcemap)
-
-<!-- END doctoc generated TOC please keep comment here to allow auto update -->
-
-## Examples
-
-### Consuming a source map
-
-```js
-var rawSourceMap = {
- version: 3,
- file: 'min.js',
- names: ['bar', 'baz', 'n'],
- sources: ['one.js', 'two.js'],
- sourceRoot: 'http://example.com/www/js/',
- mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
-};
-
-var smc = new SourceMapConsumer(rawSourceMap);
-
-console.log(smc.sources);
-// [ 'http://example.com/www/js/one.js',
-// 'http://example.com/www/js/two.js' ]
-
-console.log(smc.originalPositionFor({
- line: 2,
- column: 28
-}));
-// { source: 'http://example.com/www/js/two.js',
-// line: 2,
-// column: 10,
-// name: 'n' }
-
-console.log(smc.generatedPositionFor({
- source: 'http://example.com/www/js/two.js',
- line: 2,
- column: 10
-}));
-// { line: 2, column: 28 }
-
-smc.eachMapping(function (m) {
- // ...
-});
-```
-
-### Generating a source map
-
-In depth guide:
-[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
-
-#### With SourceNode (high level API)
-
-```js
-function compile(ast) {
- switch (ast.type) {
- case 'BinaryExpression':
- return new SourceNode(
- ast.location.line,
- ast.location.column,
- ast.location.source,
- [compile(ast.left), " + ", compile(ast.right)]
- );
- case 'Literal':
- return new SourceNode(
- ast.location.line,
- ast.location.column,
- ast.location.source,
- String(ast.value)
- );
- // ...
- default:
- throw new Error("Bad AST");
- }
-}
-
-var ast = parse("40 + 2", "add.js");
-console.log(compile(ast).toStringWithSourceMap({
- file: 'add.js'
-}));
-// { code: '40 + 2',
-// map: [object SourceMapGenerator] }
-```
-
-#### With SourceMapGenerator (low level API)
-
-```js
-var map = new SourceMapGenerator({
- file: "source-mapped.js"
-});
-
-map.addMapping({
- generated: {
- line: 10,
- column: 35
- },
- source: "foo.js",
- original: {
- line: 33,
- column: 2
- },
- name: "christopher"
-});
-
-console.log(map.toString());
-// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
-```
-
-## API
-
-Get a reference to the module:
-
-```js
-// Node.js
-var sourceMap = require('source-map');
-
-// Browser builds
-var sourceMap = window.sourceMap;
-
-// Inside Firefox
-const sourceMap = require("devtools/toolkit/sourcemap/source-map.js");
-```
-
-### SourceMapConsumer
-
-A SourceMapConsumer instance represents a parsed source map which we can query
-for information about the original file positions by giving it a file position
-in the generated source.
-
-#### new SourceMapConsumer(rawSourceMap)
-
-The only parameter is the raw source map (either as a string which can be
-`JSON.parse`'d, or an object). According to the spec, source maps have the
-following attributes:
-
-* `version`: Which version of the source map spec this map is following.
-
-* `sources`: An array of URLs to the original source files.
-
-* `names`: An array of identifiers which can be referenced by individual
- mappings.
-
-* `sourceRoot`: Optional. The URL root from which all sources are relative.
-
-* `sourcesContent`: Optional. An array of contents of the original source files.
-
-* `mappings`: A string of base64 VLQs which contain the actual mappings.
-
-* `file`: Optional. The generated filename this source map is associated with.
-
-```js
-var consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData);
-```
-
-#### SourceMapConsumer.prototype.computeColumnSpans()
-
-Compute the last column for each generated mapping. The last column is
-inclusive.
-
-```js
-// Before:
-consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
-// [ { line: 2,
-// column: 1 },
-// { line: 2,
-// column: 10 },
-// { line: 2,
-// column: 20 } ]
-
-consumer.computeColumnSpans();
-
-// After:
-consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" })
-// [ { line: 2,
-// column: 1,
-// lastColumn: 9 },
-// { line: 2,
-// column: 10,
-// lastColumn: 19 },
-// { line: 2,
-// column: 20,
-// lastColumn: Infinity } ]
-
-```
-
-#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
-
-Returns the original source, line, and column information for the generated
-source's line and column positions provided. The only argument is an object with
-the following properties:
-
-* `line`: The line number in the generated source. Line numbers in
- this library are 1-based (note that the underlying source map
- specification uses 0-based line numbers -- this library handles the
- translation).
-
-* `column`: The column number in the generated source. Column numbers
- in this library are 0-based.
-
-* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or
- `SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest
- element that is smaller than or greater than the one we are searching for,
- respectively, if the exact element cannot be found. Defaults to
- `SourceMapConsumer.GREATEST_LOWER_BOUND`.
-
-and an object is returned with the following properties:
-
-* `source`: The original source file, or null if this information is not
- available.
-
-* `line`: The line number in the original source, or null if this information is
- not available. The line number is 1-based.
-
-* `column`: The column number in the original source, or null if this
- information is not available. The column number is 0-based.
-
-* `name`: The original identifier, or null if this information is not available.
-
-```js
-consumer.originalPositionFor({ line: 2, column: 10 })
-// { source: 'foo.coffee',
-// line: 2,
-// column: 2,
-// name: null }
-
-consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 })
-// { source: null,
-// line: null,
-// column: null,
-// name: null }
-```
-
-#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
-
-Returns the generated line and column information for the original source,
-line, and column positions provided. The only argument is an object with
-the following properties:
-
-* `source`: The filename of the original source.
-
-* `line`: The line number in the original source. The line number is
- 1-based.
-
-* `column`: The column number in the original source. The column
- number is 0-based.
-
-and an object is returned with the following properties:
-
-* `line`: The line number in the generated source, or null. The line
- number is 1-based.
-
-* `column`: The column number in the generated source, or null. The
- column number is 0-based.
-
-```js
-consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 })
-// { line: 1,
-// column: 56 }
-```
-
-#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
-
-Returns all generated line and column information for the original source, line,
-and column provided. If no column is provided, returns all mappings
-corresponding to a either the line we are searching for or the next closest line
-that has any mappings. Otherwise, returns all mappings corresponding to the
-given line and either the column we are searching for or the next closest column
-that has any offsets.
-
-The only argument is an object with the following properties:
-
-* `source`: The filename of the original source.
-
-* `line`: The line number in the original source. The line number is
- 1-based.
-
-* `column`: Optional. The column number in the original source. The
- column number is 0-based.
-
-and an array of objects is returned, each with the following properties:
-
-* `line`: The line number in the generated source, or null. The line
- number is 1-based.
-
-* `column`: The column number in the generated source, or null. The
- column number is 0-based.
-
-```js
-consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" })
-// [ { line: 2,
-// column: 1 },
-// { line: 2,
-// column: 10 },
-// { line: 2,
-// column: 20 } ]
-```
-
-#### SourceMapConsumer.prototype.hasContentsOfAllSources()
-
-Return true if we have the embedded source content for every source listed in
-the source map, false otherwise.
-
-In other words, if this method returns `true`, then
-`consumer.sourceContentFor(s)` will succeed for every source `s` in
-`consumer.sources`.
-
-```js
-// ...
-if (consumer.hasContentsOfAllSources()) {
- consumerReadyCallback(consumer);
-} else {
- fetchSources(consumer, consumerReadyCallback);
-}
-// ...
-```
-
-#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
-
-Returns the original source content for the source provided. The only
-argument is the URL of the original source file.
-
-If the source content for the given source is not found, then an error is
-thrown. Optionally, pass `true` as the second param to have `null` returned
-instead.
-
-```js
-consumer.sources
-// [ "my-cool-lib.clj" ]
-
-consumer.sourceContentFor("my-cool-lib.clj")
-// "..."
-
-consumer.sourceContentFor("this is not in the source map");
-// Error: "this is not in the source map" is not in the source map
-
-consumer.sourceContentFor("this is not in the source map", true);
-// null
-```
-
-#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
-
-Iterate over each mapping between an original source/line/column and a
-generated line/column in this source map.
-
-* `callback`: The function that is called with each mapping. Mappings have the
- form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
- name }`
-
-* `context`: Optional. If specified, this object will be the value of `this`
- every time that `callback` is called.
-
-* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or
- `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over
- the mappings sorted by the generated file's line/column order or the
- original's source/line/column order, respectively. Defaults to
- `SourceMapConsumer.GENERATED_ORDER`.
-
-```js
-consumer.eachMapping(function (m) { console.log(m); })
-// ...
-// { source: 'illmatic.js',
-// generatedLine: 1,
-// generatedColumn: 0,
-// originalLine: 1,
-// originalColumn: 0,
-// name: null }
-// { source: 'illmatic.js',
-// generatedLine: 2,
-// generatedColumn: 0,
-// originalLine: 2,
-// originalColumn: 0,
-// name: null }
-// ...
-```
-### SourceMapGenerator
-
-An instance of the SourceMapGenerator represents a source map which is being
-built incrementally.
-
-#### new SourceMapGenerator([startOfSourceMap])
-
-You may pass an object with the following properties:
-
-* `file`: The filename of the generated source that this source map is
- associated with.
-
-* `sourceRoot`: A root for all relative URLs in this source map.
-
-* `skipValidation`: Optional. When `true`, disables validation of mappings as
- they are added. This can improve performance but should be used with
- discretion, as a last resort. Even then, one should avoid using this flag when
- running tests, if possible.
-
-```js
-var generator = new sourceMap.SourceMapGenerator({
- file: "my-generated-javascript-file.js",
- sourceRoot: "http://example.com/app/js/"
-});
-```
-
-#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)
-
-Creates a new `SourceMapGenerator` from an existing `SourceMapConsumer` instance.
-
-* `sourceMapConsumer` The SourceMap.
-
-```js
-var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer);
-```
-
-#### SourceMapGenerator.prototype.addMapping(mapping)
-
-Add a single mapping from original source line and column to the generated
-source's line and column for this source map being created. The mapping object
-should have the following properties:
-
-* `generated`: An object with the generated line and column positions.
-
-* `original`: An object with the original line and column positions.
-
-* `source`: The original source file (relative to the sourceRoot).
-
-* `name`: An optional original token name for this mapping.
-
-```js
-generator.addMapping({
- source: "module-one.scm",
- original: { line: 128, column: 0 },
- generated: { line: 3, column: 456 }
-})
-```
-
-#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
-
-Set the source content for an original source file.
-
-* `sourceFile` the URL of the original source file.
-
-* `sourceContent` the content of the source file.
-
-```js
-generator.setSourceContent("module-one.scm",
- fs.readFileSync("path/to/module-one.scm"))
-```
-
-#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
-
-Applies a SourceMap for a source file to the SourceMap.
-Each mapping to the supplied source file is rewritten using the
-supplied SourceMap. Note: The resolution for the resulting mappings
-is the minimum of this map and the supplied map.
-
-* `sourceMapConsumer`: The SourceMap to be applied.
-
-* `sourceFile`: Optional. The filename of the source file.
- If omitted, sourceMapConsumer.file will be used, if it exists.
- Otherwise an error will be thrown.
-
-* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
- to be applied. If relative, it is relative to the SourceMap.
-
- This parameter is needed when the two SourceMaps aren't in the same
- directory, and the SourceMap to be applied contains relative source
- paths. If so, those relative source paths need to be rewritten
- relative to the SourceMap.
-
- If omitted, it is assumed that both SourceMaps are in the same directory,
- thus not needing any rewriting. (Supplying `'.'` has the same effect.)
-
-#### SourceMapGenerator.prototype.toString()
-
-Renders the source map being generated to a string.
-
-```js
-generator.toString()
-// '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}'
-```
-
-### SourceNode
-
-SourceNodes provide a way to abstract over interpolating and/or concatenating
-snippets of generated JavaScript source code, while maintaining the line and
-column information associated between those snippets and the original source
-code. This is useful as the final intermediate representation a compiler might
-use before outputting the generated JS and source map.
-
-#### new SourceNode([line, column, source[, chunk[, name]]])
-
-* `line`: The original line number associated with this source node, or null if
- it isn't associated with an original line. The line number is 1-based.
-
-* `column`: The original column number associated with this source node, or null
- if it isn't associated with an original column. The column number
- is 0-based.
-
-* `source`: The original source's filename; null if no filename is provided.
-
-* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
- below.
-
-* `name`: Optional. The original identifier.
-
-```js
-var node = new SourceNode(1, 2, "a.cpp", [
- new SourceNode(3, 4, "b.cpp", "extern int status;\n"),
- new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"),
- new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"),
-]);
-```
-
-#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
-
-Creates a SourceNode from generated code and a SourceMapConsumer.
-
-* `code`: The generated code
-
-* `sourceMapConsumer` The SourceMap for the generated code
-
-* `relativePath` The optional path that relative sources in `sourceMapConsumer`
- should be relative to.
-
-```js
-var consumer = new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8"));
-var node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"),
- consumer);
-```
-
-#### SourceNode.prototype.add(chunk)
-
-Add a chunk of generated JS to this source node.
-
-* `chunk`: A string snippet of generated JS code, another instance of
- `SourceNode`, or an array where each member is one of those things.
-
-```js
-node.add(" + ");
-node.add(otherNode);
-node.add([leftHandOperandNode, " + ", rightHandOperandNode]);
-```
-
-#### SourceNode.prototype.prepend(chunk)
-
-Prepend a chunk of generated JS to this source node.
-
-* `chunk`: A string snippet of generated JS code, another instance of
- `SourceNode`, or an array where each member is one of those things.
-
-```js
-node.prepend("/** Build Id: f783haef86324gf **/\n\n");
-```
-
-#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
-
-Set the source content for a source file. This will be added to the
-`SourceMap` in the `sourcesContent` field.
-
-* `sourceFile`: The filename of the source file
-
-* `sourceContent`: The content of the source file
-
-```js
-node.setSourceContent("module-one.scm",
- fs.readFileSync("path/to/module-one.scm"))
-```
-
-#### SourceNode.prototype.walk(fn)
-
-Walk over the tree of JS snippets in this node and its children. The walking
-function is called once for each snippet of JS and is passed that snippet and
-the its original associated source's line/column location.
-
-* `fn`: The traversal function.
-
-```js
-var node = new SourceNode(1, 2, "a.js", [
- new SourceNode(3, 4, "b.js", "uno"),
- "dos",
- [
- "tres",
- new SourceNode(5, 6, "c.js", "quatro")
- ]
-]);
-
-node.walk(function (code, loc) { console.log("WALK:", code, loc); })
-// WALK: uno { source: 'b.js', line: 3, column: 4, name: null }
-// WALK: dos { source: 'a.js', line: 1, column: 2, name: null }
-// WALK: tres { source: 'a.js', line: 1, column: 2, name: null }
-// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null }
-```
-
-#### SourceNode.prototype.walkSourceContents(fn)
-
-Walk over the tree of SourceNodes. The walking function is called for each
-source file content and is passed the filename and source content.
-
-* `fn`: The traversal function.
-
-```js
-var a = new SourceNode(1, 2, "a.js", "generated from a");
-a.setSourceContent("a.js", "original a");
-var b = new SourceNode(1, 2, "b.js", "generated from b");
-b.setSourceContent("b.js", "original b");
-var c = new SourceNode(1, 2, "c.js", "generated from c");
-c.setSourceContent("c.js", "original c");
-
-var node = new SourceNode(null, null, null, [a, b, c]);
-node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); })
-// WALK: a.js : original a
-// WALK: b.js : original b
-// WALK: c.js : original c
-```
-
-#### SourceNode.prototype.join(sep)
-
-Like `Array.prototype.join` except for SourceNodes. Inserts the separator
-between each of this source node's children.
-
-* `sep`: The separator.
-
-```js
-var lhs = new SourceNode(1, 2, "a.rs", "my_copy");
-var operand = new SourceNode(3, 4, "a.rs", "=");
-var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()");
-
-var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]);
-var joinedNode = node.join(" ");
-```
-
-#### SourceNode.prototype.replaceRight(pattern, replacement)
-
-Call `String.prototype.replace` on the very right-most source snippet. Useful
-for trimming white space from the end of a source node, etc.
-
-* `pattern`: The pattern to replace.
-
-* `replacement`: The thing to replace the pattern with.
-
-```js
-// Trim trailing white space.
-node.replaceRight(/\s*$/, "");
-```
-
-#### SourceNode.prototype.toString()
-
-Return the string representation of this source node. Walks over the tree and
-concatenates all the various snippets together to one string.
-
-```js
-var node = new SourceNode(1, 2, "a.js", [
- new SourceNode(3, 4, "b.js", "uno"),
- "dos",
- [
- "tres",
- new SourceNode(5, 6, "c.js", "quatro")
- ]
-]);
-
-node.toString()
-// 'unodostresquatro'
-```
-
-#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
-
-Returns the string representation of this tree of source nodes, plus a
-SourceMapGenerator which contains all the mappings between the generated and
-original sources.
-
-The arguments are the same as those to `new SourceMapGenerator`.
-
-```js
-var node = new SourceNode(1, 2, "a.js", [
- new SourceNode(3, 4, "b.js", "uno"),
- "dos",
- [
- "tres",
- new SourceNode(5, 6, "c.js", "quatro")
- ]
-]);
-
-node.toStringWithSourceMap({ file: "my-output-file.js" })
-// { code: 'unodostresquatro',
-// map: [object SourceMapGenerator] }
-```
\ No newline at end of file
+## Docs
+Read **[full docs](https://github.com/7rulnik/source-map#readme)** on GitHub.
diff --git a/node_modules/source-map-js/dist/source-map.debug.js b/node_modules/source-map-js/dist/source-map.debug.js
deleted file mode 100644
index 52a186a..0000000
--- a/node_modules/source-map-js/dist/source-map.debug.js
+++ /dev/null
@@ -1,3391 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["sourceMap"] = factory();
- else
- root["sourceMap"] = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-/******/
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
- exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
- exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;
- exports.SourceNode = __webpack_require__(10).SourceNode;
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var base64VLQ = __webpack_require__(2);
- var util = __webpack_require__(4);
- var ArraySet = __webpack_require__(5).ArraySet;
- var MappingList = __webpack_require__(6).MappingList;
-
- /**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- * - file: The filename of the generated source.
- * - sourceRoot: A root for all relative URLs in this source map.
- */
- function SourceMapGenerator(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util.getArg(aArgs, 'file', null);
- this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
- this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
- this._sources = new ArraySet();
- this._names = new ArraySet();
- this._mappings = new MappingList();
- this._sourcesContents = null;
- }
-
- SourceMapGenerator.prototype._version = 3;
-
- /**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
- SourceMapGenerator.fromSourceMap =
- function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
- var sourceRoot = aSourceMapConsumer.sourceRoot;
- var generator = new SourceMapGenerator({
- file: aSourceMapConsumer.file,
- sourceRoot: sourceRoot
- });
- aSourceMapConsumer.eachMapping(function (mapping) {
- var newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
-
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util.relative(sourceRoot, newMapping.source);
- }
-
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
-
- if (mapping.name != null) {
- newMapping.name = mapping.name;
- }
- }
-
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var sourceRelative = sourceFile;
- if (sourceRoot !== null) {
- sourceRelative = util.relative(sourceRoot, sourceFile);
- }
-
- if (!generator._sources.has(sourceRelative)) {
- generator._sources.add(sourceRelative);
- }
-
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
- }
- });
- return generator;
- };
-
- /**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- * - generated: An object with the generated line and column positions.
- * - original: An object with the original line and column positions.
- * - source: The original source file (relative to the sourceRoot).
- * - name: An optional original token name for this mapping.
- */
- SourceMapGenerator.prototype.addMapping =
- function SourceMapGenerator_addMapping(aArgs) {
- var generated = util.getArg(aArgs, 'generated');
- var original = util.getArg(aArgs, 'original', null);
- var source = util.getArg(aArgs, 'source', null);
- var name = util.getArg(aArgs, 'name', null);
-
- if (!this._skipValidation) {
- this._validateMapping(generated, original, source, name);
- }
-
- if (source != null) {
- source = String(source);
- if (!this._sources.has(source)) {
- this._sources.add(source);
- }
- }
-
- if (name != null) {
- name = String(name);
- if (!this._names.has(name)) {
- this._names.add(name);
- }
- }
-
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source: source,
- name: name
- });
- };
-
- /**
- * Set the source content for a source file.
- */
- SourceMapGenerator.prototype.setSourceContent =
- function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
- var source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util.relative(this._sourceRoot, source);
- }
-
- if (aSourceContent != null) {
- // Add the source content to the _sourcesContents map.
- // Create a new _sourcesContents map if the property is null.
- if (!this._sourcesContents) {
- this._sourcesContents = Object.create(null);
- }
- this._sourcesContents[util.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- // Remove the source file from the _sourcesContents map.
- // If the _sourcesContents map is empty, set the property to null.
- delete this._sourcesContents[util.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
- }
- };
-
- /**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- * If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- * to be applied. If relative, it is relative to the SourceMapConsumer.
- * This parameter is needed when the two source maps aren't in the same
- * directory, and the source map to be applied contains relative source
- * paths. If so, those relative source paths need to be rewritten
- * relative to the SourceMapGenerator.
- */
- SourceMapGenerator.prototype.applySourceMap =
- function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- var sourceFile = aSourceFile;
- // If aSourceFile is omitted, we will use the file property of the SourceMap
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
- 'or the source map\'s "file" property. Both were omitted.'
- );
- }
- sourceFile = aSourceMapConsumer.file;
- }
- var sourceRoot = this._sourceRoot;
- // Make "sourceFile" relative if an absolute Url is passed.
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- // Applying the SourceMap can add and remove items from the sources and
- // the names array.
- var newSources = new ArraySet();
- var newNames = new ArraySet();
-
- // Find mappings for the "sourceFile"
- this._mappings.unsortedForEach(function (mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- // Check if it can be mapped by the source map, then update the mapping.
- var original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- // Copy mapping
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util.join(aSourceMapPath, mapping.source)
- }
- if (sourceRoot != null) {
- mapping.source = util.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
- }
- }
- }
-
- var source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
-
- var name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
-
- }, this);
- this._sources = newSources;
- this._names = newNames;
-
- // Copy sourcesContents of applied map.
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aSourceMapPath != null) {
- sourceFile = util.join(aSourceMapPath, sourceFile);
- }
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- this.setSourceContent(sourceFile, content);
- }
- }, this);
- };
-
- /**
- * A mapping can have one of the three levels of data:
- *
- * 1. Just the generated position.
- * 2. The Generated position, original position, and original source.
- * 3. Generated and original position, original source, as well as a name
- * token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
- SourceMapGenerator.prototype._validateMapping =
- function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
- aName) {
- // When aOriginal is truthy but has empty values for .line and .column,
- // it is most likely a programmer error. In this case we throw a very
- // specific error message to try to guide them the right way.
- // For example: https://github.com/Polymer/polymer-bundler/pull/519
- if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
- throw new Error(
- 'original.line and original.column are not numbers -- you probably meant to omit ' +
- 'the original mapping entirely and only map the generated position. If so, pass ' +
- 'null for the original mapping instead of an object with empty or null values.'
- );
- }
-
- if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aGenerated.line > 0 && aGenerated.column >= 0
- && !aOriginal && !aSource && !aName) {
- // Case 1.
- return;
- }
- else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aOriginal && 'line' in aOriginal && 'column' in aOriginal
- && aGenerated.line > 0 && aGenerated.column >= 0
- && aOriginal.line > 0 && aOriginal.column >= 0
- && aSource) {
- // Cases 2 and 3.
- return;
- }
- else {
- throw new Error('Invalid mapping: ' + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- }));
- }
- };
-
- /**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
- SourceMapGenerator.prototype._serializeMappings =
- function SourceMapGenerator_serializeMappings() {
- var previousGeneratedColumn = 0;
- var previousGeneratedLine = 1;
- var previousOriginalColumn = 0;
- var previousOriginalLine = 0;
- var previousName = 0;
- var previousSource = 0;
- var result = '';
- var next;
- var mapping;
- var nameIdx;
- var sourceIdx;
-
- var mappings = this._mappings.toArray();
- for (var i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
- next = ''
-
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- next += ';';
- previousGeneratedLine++;
- }
- }
- else {
- if (i > 0) {
- if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- next += ',';
- }
- }
-
- next += base64VLQ.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (mapping.source != null) {
- sourceIdx = this._sources.indexOf(mapping.source);
- next += base64VLQ.encode(sourceIdx - previousSource);
- previousSource = sourceIdx;
-
- // lines are stored 0-based in SourceMap spec version 3
- next += base64VLQ.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- next += base64VLQ.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
-
- if (mapping.name != null) {
- nameIdx = this._names.indexOf(mapping.name);
- next += base64VLQ.encode(nameIdx - previousName);
- previousName = nameIdx;
- }
- }
-
- result += next;
- }
-
- return result;
- };
-
- SourceMapGenerator.prototype._generateSourcesContent =
- function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function (source) {
- if (!this._sourcesContents) {
- return null;
- }
- if (aSourceRoot != null) {
- source = util.relative(aSourceRoot, source);
- }
- var key = util.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
- ? this._sourcesContents[key]
- : null;
- }, this);
- };
-
- /**
- * Externalize the source map.
- */
- SourceMapGenerator.prototype.toJSON =
- function SourceMapGenerator_toJSON() {
- var map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
- }
-
- return map;
- };
-
- /**
- * Render the source map being generated to a string.
- */
- SourceMapGenerator.prototype.toString =
- function SourceMapGenerator_toString() {
- return JSON.stringify(this.toJSON());
- };
-
- exports.SourceMapGenerator = SourceMapGenerator;
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. 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 name of Google Inc. nor the names of its
- * 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
- * OWNER 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.
- */
-
- var base64 = __webpack_require__(3);
-
- // A single base 64 digit can contain 6 bits of data. For the base 64 variable
- // length quantities we use in the source map spec, the first bit is the sign,
- // the next four bits are the actual value, and the 6th bit is the
- // continuation bit. The continuation bit tells us whether there are more
- // digits in this value following this digit.
- //
- // Continuation
- // | Sign
- // | |
- // V V
- // 101011
-
- var VLQ_BASE_SHIFT = 5;
-
- // binary: 100000
- var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-
- // binary: 011111
- var VLQ_BASE_MASK = VLQ_BASE - 1;
-
- // binary: 100000
- var VLQ_CONTINUATION_BIT = VLQ_BASE;
-
- /**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
- function toVLQSigned(aValue) {
- return aValue < 0
- ? ((-aValue) << 1) + 1
- : (aValue << 1) + 0;
- }
-
- /**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
- */
- function fromVLQSigned(aValue) {
- var isNegative = (aValue & 1) === 1;
- var shifted = aValue >> 1;
- return isNegative
- ? -shifted
- : shifted;
- }
-
- /**
- * Returns the base 64 VLQ encoded value.
- */
- exports.encode = function base64VLQ_encode(aValue) {
- var encoded = "";
- var digit;
-
- var vlq = toVLQSigned(aValue);
-
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- // There are still more digits in this value, so we must make sure the
- // continuation bit is marked.
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
-
- return encoded;
- };
-
- /**
- * Decodes the next base 64 VLQ value from the given string and returns the
- * value and the rest of the string via the out parameter.
- */
- exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
- var strLen = aStr.length;
- var result = 0;
- var shift = 0;
- var continuation, digit;
-
- do {
- if (aIndex >= strLen) {
- throw new Error("Expected more digits in base 64 VLQ value.");
- }
-
- digit = base64.decode(aStr.charCodeAt(aIndex++));
- if (digit === -1) {
- throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
- }
-
- continuation = !!(digit & VLQ_CONTINUATION_BIT);
- digit &= VLQ_BASE_MASK;
- result = result + (digit << shift);
- shift += VLQ_BASE_SHIFT;
- } while (continuation);
-
- aOutParam.value = fromVLQSigned(result);
- aOutParam.rest = aIndex;
- };
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
-
- /**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
- exports.encode = function (number) {
- if (0 <= number && number < intToCharMap.length) {
- return intToCharMap[number];
- }
- throw new TypeError("Must be between 0 and 63: " + number);
- };
-
- /**
- * Decode a single base 64 character code digit to an integer. Returns -1 on
- * failure.
- */
- exports.decode = function (charCode) {
- var bigA = 65; // 'A'
- var bigZ = 90; // 'Z'
-
- var littleA = 97; // 'a'
- var littleZ = 122; // 'z'
-
- var zero = 48; // '0'
- var nine = 57; // '9'
-
- var plus = 43; // '+'
- var slash = 47; // '/'
-
- var littleOffset = 26;
- var numberOffset = 52;
-
- // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
- if (bigA <= charCode && charCode <= bigZ) {
- return (charCode - bigA);
- }
-
- // 26 - 51: abcdefghijklmnopqrstuvwxyz
- if (littleA <= charCode && charCode <= littleZ) {
- return (charCode - littleA + littleOffset);
- }
-
- // 52 - 61: 0123456789
- if (zero <= charCode && charCode <= nine) {
- return (charCode - zero + numberOffset);
- }
-
- // 62: +
- if (charCode == plus) {
- return 62;
- }
-
- // 63: /
- if (charCode == slash) {
- return 63;
- }
-
- // Invalid base64 digit.
- return -1;
- };
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- /**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
- function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- } else {
- throw new Error('"' + aName + '" is a required argument.');
- }
- }
- exports.getArg = getArg;
-
- var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
- var dataUrlRegexp = /^data:.+\,.+$/;
-
- function urlParse(aUrl) {
- var match = aUrl.match(urlRegexp);
- if (!match) {
- return null;
- }
- return {
- scheme: match[1],
- auth: match[2],
- host: match[3],
- port: match[4],
- path: match[5]
- };
- }
- exports.urlParse = urlParse;
-
- function urlGenerate(aParsedUrl) {
- var url = '';
- if (aParsedUrl.scheme) {
- url += aParsedUrl.scheme + ':';
- }
- url += '//';
- if (aParsedUrl.auth) {
- url += aParsedUrl.auth + '@';
- }
- if (aParsedUrl.host) {
- url += aParsedUrl.host;
- }
- if (aParsedUrl.port) {
- url += ":" + aParsedUrl.port
- }
- if (aParsedUrl.path) {
- url += aParsedUrl.path;
- }
- return url;
- }
- exports.urlGenerate = urlGenerate;
-
- var MAX_CACHED_INPUTS = 32;
-
- /**
- * Takes some function `f(input) -> result` and returns a memoized version of
- * `f`.
- *
- * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The
- * memoization is a dumb-simple, linear least-recently-used cache.
- */
- function lruMemoize(f) {
- var cache = [];
-
- return function(input) {
- for (var i = 0; i < cache.length; i++) {
- if (cache[i].input === input) {
- var temp = cache[0];
- cache[0] = cache[i];
- cache[i] = temp;
- return cache[0].result;
- }
- }
-
- var result = f(input);
-
- cache.unshift({
- input,
- result,
- });
-
- if (cache.length > MAX_CACHED_INPUTS) {
- cache.pop();
- }
-
- return result;
- };
- }
-
- /**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consecutive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
- var normalize = lruMemoize(function normalize(aPath) {
- var path = aPath;
- var url = urlParse(aPath);
- if (url) {
- if (!url.path) {
- return aPath;
- }
- path = url.path;
- }
- var isAbsolute = exports.isAbsolute(path);
- // Split the path into parts between `/` characters. This is much faster than
- // using `.split(/\/+/g)`.
- var parts = [];
- var start = 0;
- var i = 0;
- while (true) {
- start = i;
- i = path.indexOf("/", start);
- if (i === -1) {
- parts.push(path.slice(start));
- break;
- } else {
- parts.push(path.slice(start, i));
- while (i < path.length && path[i] === "/") {
- i++;
- }
- }
- }
-
- for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
- part = parts[i];
- if (part === '.') {
- parts.splice(i, 1);
- } else if (part === '..') {
- up++;
- } else if (up > 0) {
- if (part === '') {
- // The first part is blank if the path is absolute. Trying to go
- // above the root is a no-op. Therefore we can remove all '..' parts
- // directly after the root.
- parts.splice(i + 1, up);
- up = 0;
- } else {
- parts.splice(i, 2);
- up--;
- }
- }
- }
- path = parts.join('/');
-
- if (path === '') {
- path = isAbsolute ? '/' : '.';
- }
-
- if (url) {
- url.path = path;
- return urlGenerate(url);
- }
- return path;
- });
- exports.normalize = normalize;
-
- /**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- * first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- * is updated with the result and aRoot is returned. Otherwise the result
- * is returned.
- * - If aPath is absolute, the result is aPath.
- * - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
- function join(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
- if (aPath === "") {
- aPath = ".";
- }
- var aPathUrl = urlParse(aPath);
- var aRootUrl = urlParse(aRoot);
- if (aRootUrl) {
- aRoot = aRootUrl.path || '/';
- }
-
- // `join(foo, '//www.example.org')`
- if (aPathUrl && !aPathUrl.scheme) {
- if (aRootUrl) {
- aPathUrl.scheme = aRootUrl.scheme;
- }
- return urlGenerate(aPathUrl);
- }
-
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
- return aPath;
- }
-
- // `join('http://', 'www.example.com')`
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
- aRootUrl.host = aPath;
- return urlGenerate(aRootUrl);
- }
-
- var joined = aPath.charAt(0) === '/'
- ? aPath
- : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
-
- if (aRootUrl) {
- aRootUrl.path = joined;
- return urlGenerate(aRootUrl);
- }
- return joined;
- }
- exports.join = join;
-
- exports.isAbsolute = function (aPath) {
- return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
- };
-
- /**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
- function relative(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
-
- aRoot = aRoot.replace(/\/$/, '');
-
- // It is possible for the path to be above the root. In this case, simply
- // checking whether the root is a prefix of the path won't work. Instead, we
- // need to remove components from the root one by one, until either we find
- // a prefix that fits, or we run out of components to remove.
- var level = 0;
- while (aPath.indexOf(aRoot + '/') !== 0) {
- var index = aRoot.lastIndexOf("/");
- if (index < 0) {
- return aPath;
- }
-
- // If the only part of the root that is left is the scheme (i.e. http://,
- // file:///, etc.), one or more slashes (/), or simply nothing at all, we
- // have exhausted all components, so the path is not relative to the root.
- aRoot = aRoot.slice(0, index);
- if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
- return aPath;
- }
-
- ++level;
- }
-
- // Make sure we add a "../" for each component we removed from the root.
- return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
- }
- exports.relative = relative;
-
- var supportsNullProto = (function () {
- var obj = Object.create(null);
- return !('__proto__' in obj);
- }());
-
- function identity (s) {
- return s;
- }
-
- /**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
- function toSetString(aStr) {
- if (isProtoString(aStr)) {
- return '$' + aStr;
- }
-
- return aStr;
- }
- exports.toSetString = supportsNullProto ? identity : toSetString;
-
- function fromSetString(aStr) {
- if (isProtoString(aStr)) {
- return aStr.slice(1);
- }
-
- return aStr;
- }
- exports.fromSetString = supportsNullProto ? identity : fromSetString;
-
- function isProtoString(s) {
- if (!s) {
- return false;
- }
-
- var length = s.length;
-
- if (length < 9 /* "__proto__".length */) {
- return false;
- }
-
- if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
- s.charCodeAt(length - 2) !== 95 /* '_' */ ||
- s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 4) !== 116 /* 't' */ ||
- s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
- s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
- s.charCodeAt(length - 8) !== 95 /* '_' */ ||
- s.charCodeAt(length - 9) !== 95 /* '_' */) {
- return false;
- }
-
- for (var i = length - 10; i >= 0; i--) {
- if (s.charCodeAt(i) !== 36 /* '$' */) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
- function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
- var cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByOriginalPositions = compareByOriginalPositions;
-
- function compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {
- var cmp
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;
-
- /**
- * Comparator between two mappings with deflated source and name indices where
- * the generated positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
- function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
-
- function compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;
-
- function strcmp(aStr1, aStr2) {
- if (aStr1 === aStr2) {
- return 0;
- }
-
- if (aStr1 === null) {
- return 1; // aStr2 !== null
- }
-
- if (aStr2 === null) {
- return -1; // aStr1 !== null
- }
-
- if (aStr1 > aStr2) {
- return 1;
- }
-
- return -1;
- }
-
- /**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
- function compareByGeneratedPositionsInflated(mappingA, mappingB) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-
- /**
- * Strip any JSON XSSI avoidance prefix from the string (as documented
- * in the source maps specification), and then parse the string as
- * JSON.
- */
- function parseSourceMapInput(str) {
- return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
- }
- exports.parseSourceMapInput = parseSourceMapInput;
-
- /**
- * Compute the URL of a source given the the source root, the source's
- * URL, and the source map's URL.
- */
- function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
- sourceURL = sourceURL || '';
-
- if (sourceRoot) {
- // This follows what Chrome does.
- if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
- sourceRoot += '/';
- }
- // The spec says:
- // Line 4: An optional source root, useful for relocating source
- // files on a server or removing repeated values in the
- // “sources” entry. This value is prepended to the individual
- // entries in the “source” field.
- sourceURL = sourceRoot + sourceURL;
- }
-
- // Historically, SourceMapConsumer did not take the sourceMapURL as
- // a parameter. This mode is still somewhat supported, which is why
- // this code block is conditional. However, it's preferable to pass
- // the source map URL to SourceMapConsumer, so that this function
- // can implement the source URL resolution algorithm as outlined in
- // the spec. This block is basically the equivalent of:
- // new URL(sourceURL, sourceMapURL).toString()
- // ... except it avoids using URL, which wasn't available in the
- // older releases of node still supported by this library.
- //
- // The spec says:
- // If the sources are not absolute URLs after prepending of the
- // “sourceRoot”, the sources are resolved relative to the
- // SourceMap (like resolving script src in a html document).
- if (sourceMapURL) {
- var parsed = urlParse(sourceMapURL);
- if (!parsed) {
- throw new Error("sourceMapURL could not be parsed");
- }
- if (parsed.path) {
- // Strip the last path component, but keep the "/".
- var index = parsed.path.lastIndexOf('/');
- if (index >= 0) {
- parsed.path = parsed.path.substring(0, index + 1);
- }
- }
- sourceURL = join(urlGenerate(parsed), sourceURL);
- }
-
- return normalize(sourceURL);
- }
- exports.computeSourceURL = computeSourceURL;
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
- var has = Object.prototype.hasOwnProperty;
- var hasNativeMap = typeof Map !== "undefined";
-
- /**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
- function ArraySet() {
- this._array = [];
- this._set = hasNativeMap ? new Map() : Object.create(null);
- }
-
- /**
- * Static method for creating ArraySet instances from an existing array.
- */
- ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
- var set = new ArraySet();
- for (var i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
- };
-
- /**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
- ArraySet.prototype.size = function ArraySet_size() {
- return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
- };
-
- /**
- * Add the given string to this set.
- *
- * @param String aStr
- */
- ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
- var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
- var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
- var idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- if (hasNativeMap) {
- this._set.set(aStr, idx);
- } else {
- this._set[sStr] = idx;
- }
- }
- };
-
- /**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
- ArraySet.prototype.has = function ArraySet_has(aStr) {
- if (hasNativeMap) {
- return this._set.has(aStr);
- } else {
- var sStr = util.toSetString(aStr);
- return has.call(this._set, sStr);
- }
- };
-
- /**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
- ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
- if (hasNativeMap) {
- var idx = this._set.get(aStr);
- if (idx >= 0) {
- return idx;
- }
- } else {
- var sStr = util.toSetString(aStr);
- if (has.call(this._set, sStr)) {
- return this._set[sStr];
- }
- }
-
- throw new Error('"' + aStr + '" is not in the set.');
- };
-
- /**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
- ArraySet.prototype.at = function ArraySet_at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error('No element indexed by ' + aIdx);
- };
-
- /**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
- ArraySet.prototype.toArray = function ArraySet_toArray() {
- return this._array.slice();
- };
-
- exports.ArraySet = ArraySet;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
-
- /**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
- function generatedPositionAfter(mappingA, mappingB) {
- // Optimized for most common case
- var lineA = mappingA.generatedLine;
- var lineB = mappingB.generatedLine;
- var columnA = mappingA.generatedColumn;
- var columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
- util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
- }
-
- /**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a neglibable overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
- function MappingList() {
- this._array = [];
- this._sorted = true;
- // Serves as infimum
- this._last = {generatedLine: -1, generatedColumn: 0};
- }
-
- /**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
- MappingList.prototype.unsortedForEach =
- function MappingList_forEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- };
-
- /**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
- MappingList.prototype.add = function MappingList_add(aMapping) {
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
- };
-
- /**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
- MappingList.prototype.toArray = function MappingList_toArray() {
- if (!this._sorted) {
- this._array.sort(util.compareByGeneratedPositionsInflated);
- this._sorted = true;
- }
- return this._array;
- };
-
- exports.MappingList = MappingList;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
- var binarySearch = __webpack_require__(8);
- var ArraySet = __webpack_require__(5).ArraySet;
- var base64VLQ = __webpack_require__(2);
- var quickSort = __webpack_require__(9).quickSort;
-
- function SourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- return sourceMap.sections != null
- ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
- : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
- }
-
- SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
- }
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- SourceMapConsumer.prototype._version = 3;
-
- // `__generatedMappings` and `__originalMappings` are arrays that hold the
- // parsed mapping coordinates from the source map's "mappings" attribute. They
- // are lazily instantiated, accessed via the `_generatedMappings` and
- // `_originalMappings` getters respectively, and we only parse the mappings
- // and create these arrays once queried for a source location. We jump through
- // these hoops because there can be many thousands of mappings, and parsing
- // them is expensive, so we only want to do it if we must.
- //
- // Each object in the arrays is of the form:
- //
- // {
- // generatedLine: The line number in the generated code,
- // generatedColumn: The column number in the generated code,
- // source: The path to the original source file that generated this
- // chunk of code,
- // originalLine: The line number in the original source that
- // corresponds to this chunk of generated code,
- // originalColumn: The column number in the original source that
- // corresponds to this chunk of generated code,
- // name: The name of the original symbol which generated this chunk of
- // code.
- // }
- //
- // All properties except for `generatedLine` and `generatedColumn` can be
- // `null`.
- //
- // `_generatedMappings` is ordered by the generated positions.
- //
- // `_originalMappings` is ordered by the original positions.
-
- SourceMapConsumer.prototype.__generatedMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__generatedMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__generatedMappings;
- }
- });
-
- SourceMapConsumer.prototype.__originalMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__originalMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__originalMappings;
- }
- });
-
- SourceMapConsumer.prototype._charIsMappingSeparator =
- function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
- var c = aStr.charAt(index);
- return c === ";" || c === ",";
- };
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- SourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- throw new Error("Subclasses must implement _parseMappings");
- };
-
- SourceMapConsumer.GENERATED_ORDER = 1;
- SourceMapConsumer.ORIGINAL_ORDER = 2;
-
- SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
- SourceMapConsumer.LEAST_UPPER_BOUND = 2;
-
- /**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- * The function that is called with each mapping.
- * @param Object aContext
- * Optional. If specified, this object will be the value of `this` every
- * time that `aCallback` is called.
- * @param aOrder
- * Either `SourceMapConsumer.GENERATED_ORDER` or
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- * iterate over the mappings sorted by the generated file's line/column
- * order or the original's source/line/column order, respectively. Defaults to
- * `SourceMapConsumer.GENERATED_ORDER`.
- */
- SourceMapConsumer.prototype.eachMapping =
- function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
- var context = aContext || null;
- var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
-
- var mappings;
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- mappings = this._generatedMappings;
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- mappings = this._originalMappings;
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
-
- var sourceRoot = this.sourceRoot;
- mappings.map(function (mapping) {
- var source = mapping.source === null ? null : this._sources.at(mapping.source);
- source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
- return {
- source: source,
- generatedLine: mapping.generatedLine,
- generatedColumn: mapping.generatedColumn,
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: mapping.name === null ? null : this._names.at(mapping.name)
- };
- }, this).forEach(aCallback, context);
- };
-
- /**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number is 1-based.
- * - column: Optional. the column number in the original source.
- * The column number is 0-based.
- *
- * and an array of objects is returned, each with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- SourceMapConsumer.prototype.allGeneratedPositionsFor =
- function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
- var line = util.getArg(aArgs, 'line');
-
- // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
- // returns the index of the closest mapping less than the needle. By
- // setting needle.originalColumn to 0, we thus find the last mapping for
- // the given line, provided such a mapping exists.
- var needle = {
- source: util.getArg(aArgs, 'source'),
- originalLine: line,
- originalColumn: util.getArg(aArgs, 'column', 0)
- };
-
- needle.source = this._findSourceIndex(needle.source);
- if (needle.source < 0) {
- return [];
- }
-
- var mappings = [];
-
- var index = this._findMapping(needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- binarySearch.LEAST_UPPER_BOUND);
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (aArgs.column === undefined) {
- var originalLine = mapping.originalLine;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we found. Since
- // mappings are sorted, this is guaranteed to find all mappings for
- // the line we found.
- while (mapping && mapping.originalLine === originalLine) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- } else {
- var originalColumn = mapping.originalColumn;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we were searching for.
- // Since mappings are sorted, this is guaranteed to find all mappings for
- // the line we are searching for.
- while (mapping &&
- mapping.originalLine === line &&
- mapping.originalColumn == originalColumn) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- }
- }
-
- return mappings;
- };
-
- exports.SourceMapConsumer = SourceMapConsumer;
-
- /**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The first parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - sources: An array of URLs to the original source files.
- * - names: An array of identifiers which can be referrenced by individual mappings.
- * - sourceRoot: Optional. The URL root from which all sources are relative.
- * - sourcesContent: Optional. An array of contents of the original source files.
- * - mappings: A string of base64 VLQs which contain the actual mappings.
- * - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- * {
- * version : 3,
- * file: "out.js",
- * sourceRoot : "",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AA,AB;;ABCDE;"
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
- function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sources = util.getArg(sourceMap, 'sources');
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
- // requires the array) to play nice here.
- var names = util.getArg(sourceMap, 'names', []);
- var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
- var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
- var mappings = util.getArg(sourceMap, 'mappings');
- var file = util.getArg(sourceMap, 'file', null);
-
- // Once again, Sass deviates from the spec and supplies the version as a
- // string rather than a number, so we use loose equality checking here.
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- if (sourceRoot) {
- sourceRoot = util.normalize(sourceRoot);
- }
-
- sources = sources
- .map(String)
- // Some source maps produce relative source paths like "./foo.js" instead of
- // "foo.js". Normalize these first so that future comparisons will succeed.
- // See bugzil.la/1090768.
- .map(util.normalize)
- // Always ensure that absolute sources are internally stored relative to
- // the source root, if the source root is absolute. Not doing this would
- // be particularly problematic when the source root is a prefix of the
- // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
- .map(function (source) {
- return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
- ? util.relative(sourceRoot, source)
- : source;
- });
-
- // Pass `true` below to allow duplicate names and sources. While source maps
- // are intended to be compressed and deduplicated, the TypeScript compiler
- // sometimes generates source maps with duplicates in them. See Github issue
- // #72 and bugzil.la/889492.
- this._names = ArraySet.fromArray(names.map(String), true);
- this._sources = ArraySet.fromArray(sources, true);
-
- this._absoluteSources = this._sources.toArray().map(function (s) {
- return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
- });
-
- this.sourceRoot = sourceRoot;
- this.sourcesContent = sourcesContent;
- this._mappings = mappings;
- this._sourceMapURL = aSourceMapURL;
- this.file = file;
- }
-
- BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
- BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
-
- /**
- * Utility function to find the index of a source. Returns -1 if not
- * found.
- */
- BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
-
- if (this._sources.has(relativeSource)) {
- return this._sources.indexOf(relativeSource);
- }
-
- // Maybe aSource is an absolute URL as returned by |sources|. In
- // this case we can't simply undo the transform.
- var i;
- for (i = 0; i < this._absoluteSources.length; ++i) {
- if (this._absoluteSources[i] == aSource) {
- return i;
- }
- }
-
- return -1;
- };
-
- /**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- * The source map that will be consumed.
- * @param String aSourceMapURL
- * The URL at which the source map can be found (optional)
- * @returns BasicSourceMapConsumer
- */
- BasicSourceMapConsumer.fromSourceMap =
- function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
- var smc = Object.create(BasicSourceMapConsumer.prototype);
-
- var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
- var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
- smc.sourceRoot = aSourceMap._sourceRoot;
- smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
- smc.sourceRoot);
- smc.file = aSourceMap._file;
- smc._sourceMapURL = aSourceMapURL;
- smc._absoluteSources = smc._sources.toArray().map(function (s) {
- return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
- });
-
- // Because we are modifying the entries (by converting string sources and
- // names to indices into the sources and names ArraySets), we have to make
- // a copy of the entry or else bad things happen. Shared mutable state
- // strikes again! See github issue #191.
-
- var generatedMappings = aSourceMap._mappings.toArray().slice();
- var destGeneratedMappings = smc.__generatedMappings = [];
- var destOriginalMappings = smc.__originalMappings = [];
-
- for (var i = 0, length = generatedMappings.length; i < length; i++) {
- var srcMapping = generatedMappings[i];
- var destMapping = new Mapping;
- destMapping.generatedLine = srcMapping.generatedLine;
- destMapping.generatedColumn = srcMapping.generatedColumn;
-
- if (srcMapping.source) {
- destMapping.source = sources.indexOf(srcMapping.source);
- destMapping.originalLine = srcMapping.originalLine;
- destMapping.originalColumn = srcMapping.originalColumn;
-
- if (srcMapping.name) {
- destMapping.name = names.indexOf(srcMapping.name);
- }
-
- destOriginalMappings.push(destMapping);
- }
-
- destGeneratedMappings.push(destMapping);
- }
-
- quickSort(smc.__originalMappings, util.compareByOriginalPositions);
-
- return smc;
- };
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- BasicSourceMapConsumer.prototype._version = 3;
-
- /**
- * The list of original sources.
- */
- Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
- get: function () {
- return this._absoluteSources.slice();
- }
- });
-
- /**
- * Provide the JIT with a nice shape / hidden class.
- */
- function Mapping() {
- this.generatedLine = 0;
- this.generatedColumn = 0;
- this.source = null;
- this.originalLine = null;
- this.originalColumn = null;
- this.name = null;
- }
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-
- const compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;
- function sortGenerated(array, start) {
- let l = array.length;
- let n = array.length - start;
- if (n <= 1) {
- return;
- } else if (n == 2) {
- let a = array[start];
- let b = array[start + 1];
- if (compareGenerated(a, b) > 0) {
- array[start] = b;
- array[start + 1] = a;
- }
- } else if (n < 20) {
- for (let i = start; i < l; i++) {
- for (let j = i; j > start; j--) {
- let a = array[j - 1];
- let b = array[j];
- if (compareGenerated(a, b) <= 0) {
- break;
- }
- array[j - 1] = b;
- array[j] = a;
- }
- }
- } else {
- quickSort(array, compareGenerated, start);
- }
- }
- BasicSourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- var generatedLine = 1;
- var previousGeneratedColumn = 0;
- var previousOriginalLine = 0;
- var previousOriginalColumn = 0;
- var previousSource = 0;
- var previousName = 0;
- var length = aStr.length;
- var index = 0;
- var cachedSegments = {};
- var temp = {};
- var originalMappings = [];
- var generatedMappings = [];
- var mapping, str, segment, end, value;
-
- let subarrayStart = 0;
- while (index < length) {
- if (aStr.charAt(index) === ';') {
- generatedLine++;
- index++;
- previousGeneratedColumn = 0;
-
- sortGenerated(generatedMappings, subarrayStart);
- subarrayStart = generatedMappings.length;
- }
- else if (aStr.charAt(index) === ',') {
- index++;
- }
- else {
- mapping = new Mapping();
- mapping.generatedLine = generatedLine;
-
- for (end = index; end < length; end++) {
- if (this._charIsMappingSeparator(aStr, end)) {
- break;
- }
- }
- str = aStr.slice(index, end);
-
- segment = [];
- while (index < end) {
- base64VLQ.decode(aStr, index, temp);
- value = temp.value;
- index = temp.rest;
- segment.push(value);
- }
-
- if (segment.length === 2) {
- throw new Error('Found a source, but no line and column');
- }
-
- if (segment.length === 3) {
- throw new Error('Found a source and line, but no column');
- }
-
- // Generated column.
- mapping.generatedColumn = previousGeneratedColumn + segment[0];
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (segment.length > 1) {
- // Original source.
- mapping.source = previousSource + segment[1];
- previousSource += segment[1];
-
- // Original line.
- mapping.originalLine = previousOriginalLine + segment[2];
- previousOriginalLine = mapping.originalLine;
- // Lines are stored 0-based
- mapping.originalLine += 1;
-
- // Original column.
- mapping.originalColumn = previousOriginalColumn + segment[3];
- previousOriginalColumn = mapping.originalColumn;
-
- if (segment.length > 4) {
- // Original name.
- mapping.name = previousName + segment[4];
- previousName += segment[4];
- }
- }
-
- generatedMappings.push(mapping);
- if (typeof mapping.originalLine === 'number') {
- let currentSource = mapping.source;
- while (originalMappings.length <= currentSource) {
- originalMappings.push(null);
- }
- if (originalMappings[currentSource] === null) {
- originalMappings[currentSource] = [];
- }
- originalMappings[currentSource].push(mapping);
- }
- }
- }
-
- sortGenerated(generatedMappings, subarrayStart);
- this.__generatedMappings = generatedMappings;
-
- for (var i = 0; i < originalMappings.length; i++) {
- if (originalMappings[i] != null) {
- quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);
- }
- }
- this.__originalMappings = [].concat(...originalMappings);
- };
-
- /**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
- BasicSourceMapConsumer.prototype._findMapping =
- function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
- aColumnName, aComparator, aBias) {
- // To return the position we are searching for, we must first find the
- // mapping for the given position and then return the opposite position it
- // points to. Because the mappings are sorted, we can use binary search to
- // find the best mapping.
-
- if (aNeedle[aLineName] <= 0) {
- throw new TypeError('Line must be greater than or equal to 1, got '
- + aNeedle[aLineName]);
- }
- if (aNeedle[aColumnName] < 0) {
- throw new TypeError('Column must be greater than or equal to 0, got '
- + aNeedle[aColumnName]);
- }
-
- return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
- };
-
- /**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
- BasicSourceMapConsumer.prototype.computeColumnSpans =
- function SourceMapConsumer_computeColumnSpans() {
- for (var index = 0; index < this._generatedMappings.length; ++index) {
- var mapping = this._generatedMappings[index];
-
- // Mappings do not contain a field for the last generated columnt. We
- // can come up with an optimistic estimate, however, by assuming that
- // mappings are contiguous (i.e. given two consecutive mappings, the
- // first mapping ends where the second one starts).
- if (index + 1 < this._generatedMappings.length) {
- var nextMapping = this._generatedMappings[index + 1];
-
- if (mapping.generatedLine === nextMapping.generatedLine) {
- mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
- continue;
- }
- }
-
- // The last mapping for each line spans the entire line.
- mapping.lastGeneratedColumn = Infinity;
- }
- };
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- BasicSourceMapConsumer.prototype.originalPositionFor =
- function SourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._generatedMappings,
- "generatedLine",
- "generatedColumn",
- util.compareByGeneratedPositionsDeflated,
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._generatedMappings[index];
-
- if (mapping.generatedLine === needle.generatedLine) {
- var source = util.getArg(mapping, 'source', null);
- if (source !== null) {
- source = this._sources.at(source);
- source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
- }
- var name = util.getArg(mapping, 'name', null);
- if (name !== null) {
- name = this._names.at(name);
- }
- return {
- source: source,
- line: util.getArg(mapping, 'originalLine', null),
- column: util.getArg(mapping, 'originalColumn', null),
- name: name
- };
- }
- }
-
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- };
-
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
- function BasicSourceMapConsumer_hasContentsOfAllSources() {
- if (!this.sourcesContent) {
- return false;
- }
- return this.sourcesContent.length >= this._sources.size() &&
- !this.sourcesContent.some(function (sc) { return sc == null; });
- };
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- BasicSourceMapConsumer.prototype.sourceContentFor =
- function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- if (!this.sourcesContent) {
- return null;
- }
-
- var index = this._findSourceIndex(aSource);
- if (index >= 0) {
- return this.sourcesContent[index];
- }
-
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
-
- var url;
- if (this.sourceRoot != null
- && (url = util.urlParse(this.sourceRoot))) {
- // XXX: file:// URIs and absolute paths lead to unexpected behavior for
- // many users. We can help them out when they expect file:// URIs to
- // behave like it would if they were running a local HTTP server. See
- // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
- var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
- if (url.scheme == "file"
- && this._sources.has(fileUriAbsPath)) {
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
- }
-
- if ((!url.path || url.path == "/")
- && this._sources.has("/" + relativeSource)) {
- return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
- }
- }
-
- // This function is used recursively from
- // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
- // don't want to throw if we can't find the source - we just want to
- // return null, so we provide a flag to exit gracefully.
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + relativeSource + '" is not in the SourceMap.');
- }
- };
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- BasicSourceMapConsumer.prototype.generatedPositionFor =
- function SourceMapConsumer_generatedPositionFor(aArgs) {
- var source = util.getArg(aArgs, 'source');
- source = this._findSourceIndex(source);
- if (source < 0) {
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
-
- var needle = {
- source: source,
- originalLine: util.getArg(aArgs, 'line'),
- originalColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (mapping.source === needle.source) {
- return {
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- };
- }
- }
-
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- };
-
- exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
-
- /**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The first parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - file: Optional. The generated file this source map is associated with.
- * - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- * - offset: The offset into the original specified at which this section
- * begins to apply, defined as an object with a "line" and "column"
- * field.
- * - map: A source map definition. This source map could also be indexed,
- * but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- * {
- * version : 3,
- * file: "app.js",
- * sections: [{
- * offset: {line:100, column:10},
- * map: {
- * version : 3,
- * file: "section.js",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AAAA,E;;ABCDE;"
- * }
- * }],
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
- function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sections = util.getArg(sourceMap, 'sections');
-
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- this._sources = new ArraySet();
- this._names = new ArraySet();
-
- var lastOffset = {
- line: -1,
- column: 0
- };
- this._sections = sections.map(function (s) {
- if (s.url) {
- // The url field will require support for asynchronicity.
- // See https://github.com/mozilla/source-map/issues/16
- throw new Error('Support for url field in sections not implemented.');
- }
- var offset = util.getArg(s, 'offset');
- var offsetLine = util.getArg(offset, 'line');
- var offsetColumn = util.getArg(offset, 'column');
-
- if (offsetLine < lastOffset.line ||
- (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
- throw new Error('Section offsets must be ordered and non-overlapping.');
- }
- lastOffset = offset;
-
- return {
- generatedOffset: {
- // The offset fields are 0-based, but we use 1-based indices when
- // encoding/decoding from VLQ.
- generatedLine: offsetLine + 1,
- generatedColumn: offsetColumn + 1
- },
- consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
- }
- });
- }
-
- IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
- IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- IndexedSourceMapConsumer.prototype._version = 3;
-
- /**
- * The list of original sources.
- */
- Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
- get: function () {
- var sources = [];
- for (var i = 0; i < this._sections.length; i++) {
- for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
- sources.push(this._sections[i].consumer.sources[j]);
- }
- }
- return sources;
- }
- });
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- IndexedSourceMapConsumer.prototype.originalPositionFor =
- function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- // Find the section containing the generated position we're trying to map
- // to an original position.
- var sectionIndex = binarySearch.search(needle, this._sections,
- function(needle, section) {
- var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
- if (cmp) {
- return cmp;
- }
-
- return (needle.generatedColumn -
- section.generatedOffset.generatedColumn);
- });
- var section = this._sections[sectionIndex];
-
- if (!section) {
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
-
- return section.consumer.originalPositionFor({
- line: needle.generatedLine -
- (section.generatedOffset.generatedLine - 1),
- column: needle.generatedColumn -
- (section.generatedOffset.generatedLine === needle.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- bias: aArgs.bias
- });
- };
-
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
- function IndexedSourceMapConsumer_hasContentsOfAllSources() {
- return this._sections.every(function (s) {
- return s.consumer.hasContentsOfAllSources();
- });
- };
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- IndexedSourceMapConsumer.prototype.sourceContentFor =
- function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- var content = section.consumer.sourceContentFor(aSource, true);
- if (content) {
- return content;
- }
- }
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + aSource + '" is not in the SourceMap.');
- }
- };
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- IndexedSourceMapConsumer.prototype.generatedPositionFor =
- function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- // Only consider this section if the requested source is in the list of
- // sources of the consumer.
- if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
- continue;
- }
- var generatedPosition = section.consumer.generatedPositionFor(aArgs);
- if (generatedPosition) {
- var ret = {
- line: generatedPosition.line +
- (section.generatedOffset.generatedLine - 1),
- column: generatedPosition.column +
- (section.generatedOffset.generatedLine === generatedPosition.line
- ? section.generatedOffset.generatedColumn - 1
- : 0)
- };
- return ret;
- }
- }
-
- return {
- line: null,
- column: null
- };
- };
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- IndexedSourceMapConsumer.prototype._parseMappings =
- function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- this.__generatedMappings = [];
- this.__originalMappings = [];
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
- var sectionMappings = section.consumer._generatedMappings;
- for (var j = 0; j < sectionMappings.length; j++) {
- var mapping = sectionMappings[j];
-
- var source = section.consumer._sources.at(mapping.source);
- source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
- this._sources.add(source);
- source = this._sources.indexOf(source);
-
- var name = null;
- if (mapping.name) {
- name = section.consumer._names.at(mapping.name);
- this._names.add(name);
- name = this._names.indexOf(name);
- }
-
- // The mappings coming from the consumer for the section have
- // generated positions relative to the start of the section, so we
- // need to offset them to be relative to the start of the concatenated
- // generated file.
- var adjustedMapping = {
- source: source,
- generatedLine: mapping.generatedLine +
- (section.generatedOffset.generatedLine - 1),
- generatedColumn: mapping.generatedColumn +
- (section.generatedOffset.generatedLine === mapping.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: name
- };
-
- this.__generatedMappings.push(adjustedMapping);
- if (typeof adjustedMapping.originalLine === 'number') {
- this.__originalMappings.push(adjustedMapping);
- }
- }
- }
-
- quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
- quickSort(this.__originalMappings, util.compareByOriginalPositions);
- };
-
- exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- exports.GREATEST_LOWER_BOUND = 1;
- exports.LEAST_UPPER_BOUND = 2;
-
- /**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- */
- function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
- // This function terminates when one of the following is true:
- //
- // 1. We find the exact element we are looking for.
- //
- // 2. We did not find the exact element, but we can return the index of
- // the next-closest element.
- //
- // 3. We did not find the exact element, and there is no next-closest
- // element than the one we are searching for, so we return -1.
- var mid = Math.floor((aHigh - aLow) / 2) + aLow;
- var cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- // Found the element we are looking for.
- return mid;
- }
- else if (cmp > 0) {
- // Our needle is greater than aHaystack[mid].
- if (aHigh - mid > 1) {
- // The element is in the upper half.
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // The exact needle element was not found in this haystack. Determine if
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return aHigh < aHaystack.length ? aHigh : -1;
- } else {
- return mid;
- }
- }
- else {
- // Our needle is less than aHaystack[mid].
- if (mid - aLow > 1) {
- // The element is in the lower half.
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return mid;
- } else {
- return aLow < 0 ? -1 : aLow;
- }
- }
- }
-
- /**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- * array and returns -1, 0, or 1 depending on whether the needle is less
- * than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
- exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
- if (aHaystack.length === 0) {
- return -1;
- }
-
- var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
- aCompare, aBias || exports.GREATEST_LOWER_BOUND);
- if (index < 0) {
- return -1;
- }
-
- // We have found either the exact element, or the next-closest element than
- // the one we are searching for. However, there may be more than one such
- // element. Make sure we always return the smallest of these.
- while (index - 1 >= 0) {
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
- break;
- }
- --index;
- }
-
- return index;
- };
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- // It turns out that some (most?) JavaScript engines don't self-host
- // `Array.prototype.sort`. This makes sense because C++ will likely remain
- // faster than JS when doing raw CPU-intensive sorting. However, when using a
- // custom comparator function, calling back and forth between the VM's C++ and
- // JIT'd JS is rather slow *and* loses JIT type information, resulting in
- // worse generated code for the comparator function than would be optimal. In
- // fact, when sorting with a comparator, these costs outweigh the benefits of
- // sorting in C++. By using our own JS-implemented Quick Sort (below), we get
- // a ~3500ms mean speed-up in `bench/bench.html`.
-
- function SortTemplate(comparator) {
-
- /**
- * Swap the elements indexed by `x` and `y` in the array `ary`.
- *
- * @param {Array} ary
- * The array.
- * @param {Number} x
- * The index of the first item.
- * @param {Number} y
- * The index of the second item.
- */
- function swap(ary, x, y) {
- var temp = ary[x];
- ary[x] = ary[y];
- ary[y] = temp;
- }
-
- /**
- * Returns a random integer within the range `low .. high` inclusive.
- *
- * @param {Number} low
- * The lower bound on the range.
- * @param {Number} high
- * The upper bound on the range.
- */
- function randomIntInRange(low, high) {
- return Math.round(low + (Math.random() * (high - low)));
- }
-
- /**
- * The Quick Sort algorithm.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- * @param {Number} p
- * Start index of the array
- * @param {Number} r
- * End index of the array
- */
- function doQuickSort(ary, comparator, p, r) {
- // If our lower bound is less than our upper bound, we (1) partition the
- // array into two pieces and (2) recurse on each half. If it is not, this is
- // the empty array and our base case.
-
- if (p < r) {
- // (1) Partitioning.
- //
- // The partitioning chooses a pivot between `p` and `r` and moves all
- // elements that are less than or equal to the pivot to the before it, and
- // all the elements that are greater than it after it. The effect is that
- // once partition is done, the pivot is in the exact place it will be when
- // the array is put in sorted order, and it will not need to be moved
- // again. This runs in O(n) time.
-
- // Always choose a random pivot so that an input array which is reverse
- // sorted does not cause O(n^2) running time.
- var pivotIndex = randomIntInRange(p, r);
- var i = p - 1;
-
- swap(ary, pivotIndex, r);
- var pivot = ary[r];
-
- // Immediately after `j` is incremented in this loop, the following hold
- // true:
- //
- // * Every element in `ary[p .. i]` is less than or equal to the pivot.
- //
- // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
- for (var j = p; j < r; j++) {
- if (comparator(ary[j], pivot, false) <= 0) {
- i += 1;
- swap(ary, i, j);
- }
- }
-
- swap(ary, i + 1, j);
- var q = i + 1;
-
- // (2) Recurse on each half.
-
- doQuickSort(ary, comparator, p, q - 1);
- doQuickSort(ary, comparator, q + 1, r);
- }
- }
-
- return doQuickSort;
- }
-
- function cloneSort(comparator) {
- let template = SortTemplate.toString();
- let templateFn = new Function(`return ${template}`)();
- return templateFn(comparator);
- }
-
- /**
- * Sort the given array in-place with the given comparator function.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- */
-
- let sortCache = new WeakMap();
- exports.quickSort = function (ary, comparator, start = 0) {
- let doQuickSort = sortCache.get(comparator);
- if (doQuickSort === void 0) {
- doQuickSort = cloneSort(comparator);
- sortCache.set(comparator, doQuickSort);
- }
- doQuickSort(ary, comparator, start, ary.length - 1);
- };
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
- var util = __webpack_require__(4);
-
- // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
- // operating systems these days (capturing the result).
- var REGEX_NEWLINE = /(\r?\n)/;
-
- // Newline character code for charCodeAt() comparisons
- var NEWLINE_CODE = 10;
-
- // Private symbol for identifying `SourceNode`s when multiple versions of
- // the source-map library are loaded. This MUST NOT CHANGE across
- // versions!
- var isSourceNode = "$$$isSourceNode$$$";
-
- /**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- * generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
- function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null) this.add(aChunks);
- }
-
- /**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- * SourceMapConsumer should be relative to.
- */
- SourceNode.fromStringWithSourceMap =
- function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- // The SourceNode we want to fill with the generated code
- // and the SourceMap
- var node = new SourceNode();
-
- // All even indices of this array are one line of the generated code,
- // while all odd indices are the newlines between two adjacent lines
- // (since `REGEX_NEWLINE` captures its match).
- // Processed fragments are accessed by calling `shiftNextLine`.
- var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- var remainingLinesIndex = 0;
- var shiftNextLine = function() {
- var lineContents = getNextLine();
- // The last line of a file might not have a newline.
- var newLine = getNextLine() || "";
- return lineContents + newLine;
-
- function getNextLine() {
- return remainingLinesIndex < remainingLines.length ?
- remainingLines[remainingLinesIndex++] : undefined;
- }
- };
-
- // We need to remember the position of "remainingLines"
- var lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
- // The generate SourceNodes we need a code range.
- // To extract it current and last mapping is used.
- // Here we store the last mapping.
- var lastMapping = null;
-
- aSourceMapConsumer.eachMapping(function (mapping) {
- if (lastMapping !== null) {
- // We add the code from "lastMapping" to "mapping":
- // First check if there is a new line in between.
- if (lastGeneratedLine < mapping.generatedLine) {
- // Associate first line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
- // The remaining code is added without mapping
- } else {
- // There is no new line in between.
- // Associate the code between "lastGeneratedColumn" and
- // "mapping.generatedColumn" with "lastMapping"
- var nextLine = remainingLines[remainingLinesIndex] || '';
- var code = nextLine.substr(0, mapping.generatedColumn -
- lastGeneratedColumn);
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
- lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- // No more remaining code, continue
- lastMapping = mapping;
- return;
- }
- }
- // We add the generated code until the first mapping
- // to the SourceNode without any mapping.
- // Each line is added as separate string.
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- var nextLine = remainingLines[remainingLinesIndex] || '';
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- }
- lastMapping = mapping;
- }, this);
- // We have processed all mappings.
- if (remainingLinesIndex < remainingLines.length) {
- if (lastMapping) {
- // Associate the remaining code in the current line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- }
- // and add the remaining lines without any mapping
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
- }
-
- // Copy sourcesContent into SourceNode
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
-
- return node;
-
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === undefined) {
- node.add(code);
- } else {
- var source = aRelativePath
- ? util.join(aRelativePath, mapping.source)
- : mapping.source;
- node.add(new SourceNode(mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name));
- }
- }
- };
-
- /**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- SourceNode.prototype.add = function SourceNode_add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function (chunk) {
- this.add(chunk);
- }, this);
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
- }
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- };
-
- /**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (var i = aChunk.length-1; i >= 0; i--) {
- this.prepend(aChunk[i]);
- }
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- };
-
- /**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
- SourceNode.prototype.walk = function SourceNode_walk(aFn) {
- var chunk;
- for (var i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
- }
- else {
- if (chunk !== '') {
- aFn(chunk, { source: this.source,
- line: this.line,
- column: this.column,
- name: this.name });
- }
- }
- }
- };
-
- /**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
- SourceNode.prototype.join = function SourceNode_join(aSep) {
- var newChildren;
- var i;
- var len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len-1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
- }
- return this;
- };
-
- /**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
- SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
- var lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- }
- else if (typeof lastChild === 'string') {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- }
- else {
- this.children.push(''.replace(aPattern, aReplacement));
- }
- return this;
- };
-
- /**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
- SourceNode.prototype.setSourceContent =
- function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- };
-
- /**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
- SourceNode.prototype.walkSourceContents =
- function SourceNode_walkSourceContents(aFn) {
- for (var i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
- }
- }
-
- var sources = Object.keys(this.sourceContents);
- for (var i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
- }
- };
-
- /**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
- SourceNode.prototype.toString = function SourceNode_toString() {
- var str = "";
- this.walk(function (chunk) {
- str += chunk;
- });
- return str;
- };
-
- /**
- * Returns the string representation of this source node along with a source
- * map.
- */
- SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
- var generated = {
- code: "",
- line: 1,
- column: 0
- };
- var map = new SourceMapGenerator(aArgs);
- var sourceMappingActive = false;
- var lastOriginalSource = null;
- var lastOriginalLine = null;
- var lastOriginalColumn = null;
- var lastOriginalName = null;
- this.walk(function (chunk, original) {
- generated.code += chunk;
- if (original.source !== null
- && original.line !== null
- && original.column !== null) {
- if(lastOriginalSource !== original.source
- || lastOriginalLine !== original.line
- || lastOriginalColumn !== original.column
- || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
- });
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (var idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- // Mappings end at eol
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- } else {
- generated.column++;
- }
- }
- });
- this.walkSourceContents(function (sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
-
- return { code: generated.code, map: map };
- };
-
- exports.SourceNode = SourceNode;
-
-
-/***/ })
-/******/ ])
-});
-;
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA1ZjU4ZWYyOTdlOTNjNDBkOTE4MiIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEwQyxTQUFTO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hhQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBMkQ7QUFDM0QscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBOzs7Ozs7O0FDM0lBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFnQjtBQUNoQixpQkFBZ0I7O0FBRWhCLG9CQUFtQjtBQUNuQixxQkFBb0I7O0FBRXBCLGlCQUFnQjtBQUNoQixpQkFBZ0I7O0FBRWhCLGlCQUFnQjtBQUNoQixrQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDbEVBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYTtBQUNiOztBQUVBO0FBQ0EsZUFBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNqbEJBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQyxTQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUN4SEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUM5RUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWEsa0NBQWtDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0gsd0JBQXVCLE9BQU87QUFDOUIsc0JBQXFCLFdBQVc7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQXlCLGNBQWM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBbUIsNkJBQTZCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBdUIsd0NBQXdDO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLG1CQUFtQixFQUFFO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNEMsY0FBYztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBLFlBQVc7QUFDWDtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUc7O0FBRUgsV0FBVTtBQUNWOztBQUVBIiwiZmlsZSI6InNvdXJjZS1tYXAuZGVidWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzb3VyY2VNYXBcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDVmNThlZjI5N2U5M2M0MGQ5MTgyIiwiLypcbiAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4dCBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NvdXJjZS1tYXAuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBNYXBwaW5nTGlzdCA9IHJlcXVpcmUoJy4vbWFwcGluZy1saXN0JykuTWFwcGluZ0xpc3Q7XG5cbi8qKlxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICogYmVpbmcgYnVpbHQgaW5jcmVtZW50YWxseS4gWW91IG1heSBwYXNzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAqIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGZpbGU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBzb3VyY2VSb290OiBBIHJvb3QgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoaXMgc291cmNlIG1hcC5cbiAqL1xuZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKSB7XG4gIGlmICghYUFyZ3MpIHtcbiAgICBhQXJncyA9IHt9O1xuICB9XG4gIHRoaXMuX2ZpbGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnLCBudWxsKTtcbiAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB0aGlzLl9za2lwVmFsaWRhdGlvbiA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc2tpcFZhbGlkYXRpb24nLCBmYWxzZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbWFwcGluZ3MgPSBuZXcgTWFwcGluZ0xpc3QoKTtcbiAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbn1cblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgIHZhciBnZW5lcmF0b3IgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLFxuICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLm5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZ2VuZXJhdG9yLmFkZE1hcHBpbmcobmV3TWFwcGluZyk7XG4gICAgfSk7XG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIHNvdXJjZVJlbGF0aXZlID0gc291cmNlRmlsZTtcbiAgICAgIGlmIChzb3VyY2VSb290ICE9PSBudWxsKSB7XG4gICAgICAgIHNvdXJjZVJlbGF0aXZlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFnZW5lcmF0b3IuX3NvdXJjZXMuaGFzKHNvdXJjZVJlbGF0aXZlKSkge1xuICAgICAgICBnZW5lcmF0b3IuX3NvdXJjZXMuYWRkKHNvdXJjZVJlbGF0aXZlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfTtcblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIGZvciB0aGlzIHNvdXJjZSBtYXAgYmVpbmcgY3JlYXRlZC4gVGhlIG1hcHBpbmdcbiAqIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGdlbmVyYXRlZDogQW4gb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zLlxuICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICogICAtIG5hbWU6IEFuIG9wdGlvbmFsIG9yaWdpbmFsIHRva2VuIG5hbWUgZm9yIHRoaXMgbWFwcGluZy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FkZE1hcHBpbmcoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTtcbiAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJywgbnVsbCk7XG4gICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTtcblxuICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwcGluZyhnZW5lcmF0ZWQsIG9yaWdpbmFsLCBzb3VyY2UsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gU3RyaW5nKHNvdXJjZSk7XG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgaWYgKCF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX21hcHBpbmdzLmFkZCh7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG9yaWdpbmFsTGluZTogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5saW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBuYW1lOiBuYW1lXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgdmFyIHNvdXJjZSA9IGFTb3VyY2VGaWxlO1xuICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgX3NvdXJjZXNDb250ZW50cyBtYXAgaWYgdGhlIHByb3BlcnR5IGlzIG51bGwuXG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgIC8vIElmIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcCBpcyBlbXB0eSwgc2V0IHRoZSBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gKiBzb3VyY2UgbWFwIGJlaW5nIGdlbmVyYXRlZC4gRWFjaCBtYXBwaW5nIHRvIHRoZSBzdXBwbGllZCBzb3VyY2UgZmlsZSBpc1xuICogcmV3cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlvbiBmb3IgdGhlXG4gKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAqICAgICAgICBJZiBvbWl0dGVkLCBTb3VyY2VNYXBDb25zdW1lcidzIGZpbGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGFTb3VyY2VNYXBQYXRoIE9wdGlvbmFsLiBUaGUgZGlybmFtZSBvZiB0aGUgcGF0aCB0byB0aGUgc291cmNlIG1hcFxuICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbmVlZGVkIHdoZW4gdGhlIHR3byBzb3VyY2UgbWFwcyBhcmVuJ3QgaW4gdGhlIHNhbWVcbiAqICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkIGNvbnRhaW5zIHJlbGF0aXZlIHNvdXJjZVxuICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gKiAgICAgICAgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hcHBseVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIsIGFTb3VyY2VGaWxlLCBhU291cmNlTWFwUGF0aCkge1xuICAgIHZhciBzb3VyY2VGaWxlID0gYVNvdXJjZUZpbGU7XG4gICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgIGlmIChhU291cmNlRmlsZSA9PSBudWxsKSB7XG4gICAgICBpZiAoYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgcmVxdWlyZXMgZWl0aGVyIGFuIGV4cGxpY2l0IHNvdXJjZSBmaWxlLCAnICtcbiAgICAgICAgICAnb3IgdGhlIHNvdXJjZSBtYXBcXCdzIFwiZmlsZVwiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzb3VyY2VGaWxlID0gYVNvdXJjZU1hcENvbnN1bWVyLmZpbGU7XG4gICAgfVxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICAvLyBNYWtlIFwic291cmNlRmlsZVwiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVybCBpcyBwYXNzZWQuXG4gICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlRmlsZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgfVxuICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgLy8gdGhlIG5hbWVzIGFycmF5LlxuICAgIHZhciBuZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAvLyBGaW5kIG1hcHBpbmdzIGZvciB0aGUgXCJzb3VyY2VGaWxlXCJcbiAgICB0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGNhbiBiZSBtYXBwZWQgYnkgdGhlIHNvdXJjZSBtYXAsIHRoZW4gdXBkYXRlIHRoZSBtYXBwaW5nLlxuICAgICAgICB2YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb3B5IG1hcHBpbmdcbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgICBpZiAob3JpZ2luYWwubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgIW5ld1NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgbmV3TmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5fc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lcztcblxuICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAqXG4gKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIDMuIEdlbmVyYXRlZCBhbmQgb3JpZ2luYWwgcG9zaXRpb24sIG9yaWdpbmFsIHNvdXJjZSwgYXMgd2VsbCBhcyBhIG5hbWVcbiAqICAgICAgdG9rZW4uXG4gKlxuICogVG8gbWFpbnRhaW4gY29uc2lzdGVuY3ksIHdlIHZhbGlkYXRlIHRoYXQgYW55IG5ldyBtYXBwaW5nIGJlaW5nIGFkZGVkIGZhbGxzXG4gKiBpbiB0byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFwcGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAvLyBXaGVuIGFPcmlnaW5hbCBpcyB0cnV0aHkgYnV0IGhhcyBlbXB0eSB2YWx1ZXMgZm9yIC5saW5lIGFuZCAuY29sdW1uLFxuICAgIC8vIGl0IGlzIG1vc3QgbGlrZWx5IGEgcHJvZ3JhbW1lciBlcnJvci4gSW4gdGhpcyBjYXNlIHdlIHRocm93IGEgdmVyeVxuICAgIC8vIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgdG8gdHJ5IHRvIGd1aWRlIHRoZW0gdGhlIHJpZ2h0IHdheS5cbiAgICAvLyBGb3IgZXhhbXBsZTogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci1idW5kbGVyL3B1bGwvNTE5XG4gICAgaWYgKGFPcmlnaW5hbCAmJiB0eXBlb2YgYU9yaWdpbmFsLmxpbmUgIT09ICdudW1iZXInICYmIHR5cGVvZiBhT3JpZ2luYWwuY29sdW1uICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnb3JpZ2luYWwubGluZSBhbmQgb3JpZ2luYWwuY29sdW1uIGFyZSBub3QgbnVtYmVycyAtLSB5b3UgcHJvYmFibHkgbWVhbnQgdG8gb21pdCAnICtcbiAgICAgICAgICAgICd0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRpcmVseSBhbmQgb25seSBtYXAgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi4gSWYgc28sIHBhc3MgJyArXG4gICAgICAgICAgICAnbnVsbCBmb3IgdGhlIG9yaWdpbmFsIG1hcHBpbmcgaW5zdGVhZCBvZiBhbiBvYmplY3Qgd2l0aCBlbXB0eSBvciBudWxsIHZhbHVlcy4nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgJiYgIWFPcmlnaW5hbCAmJiAhYVNvdXJjZSAmJiAhYU5hbWUpIHtcbiAgICAgIC8vIENhc2UgMS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsLmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgIC8vIENhc2VzIDIgYW5kIDMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBpbmc6ICcgKyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgc291cmNlOiBhU291cmNlLFxuICAgICAgICBvcmlnaW5hbDogYU9yaWdpbmFsLFxuICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzXG4gKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBuZXh0O1xuICAgIHZhciBtYXBwaW5nO1xuICAgIHZhciBuYW1lSWR4O1xuICAgIHZhciBzb3VyY2VJZHg7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9tYXBwaW5ncy50b0FycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBuZXh0ID0gJydcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbmV4dCArPSAnOyc7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBpZiAoIXV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZywgbWFwcGluZ3NbaSAtIDFdKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQgKz0gJywnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7XG4gICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VJZHggPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUoc291cmNlSWR4IC0gcHJldmlvdXNTb3VyY2UpO1xuICAgICAgICBwcmV2aW91c1NvdXJjZSA9IHNvdXJjZUlkeDtcblxuICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmUgLSAxO1xuXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbENvbHVtbik7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5hbWVJZHggPSB0aGlzLl9uYW1lcy5pbmRleE9mKG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgIHByZXZpb3VzTmFtZSA9IG5hbWVJZHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IG5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgIHJldHVybiBhU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoYVNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgdmFyIGtleSA9IHV0aWwudG9TZXRTdHJpbmcoc291cmNlKTtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLCBrZXkpXG4gICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW2tleV1cbiAgICAgICAgOiBudWxsO1xuICAgIH0sIHRoaXMpO1xuICB9O1xuXG4vKipcbiAqIEV4dGVybmFsaXplIHRoZSBzb3VyY2UgbWFwLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b0pTT04oKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICBzb3VyY2VzOiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgIG5hbWVzOiB0aGlzLl9uYW1lcy50b0FycmF5KCksXG4gICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgIH07XG4gICAgaWYgKHRoaXMuX2ZpbGUgIT0gbnVsbCkge1xuICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9O1xuXG4vKipcbiAqIFJlbmRlciB0aGUgc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LXZscS5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy4tXSopKD86OihcXGQrKSk/KC4qKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxudmFyIE1BWF9DQUNIRURfSU5QVVRTID0gMzI7XG5cbi8qKlxuICogVGFrZXMgc29tZSBmdW5jdGlvbiBgZihpbnB1dCkgLT4gcmVzdWx0YCBhbmQgcmV0dXJucyBhIG1lbW9pemVkIHZlcnNpb24gb2ZcbiAqIGBmYC5cbiAqXG4gKiBXZSBrZWVwIGF0IG1vc3QgYE1BWF9DQUNIRURfSU5QVVRTYCBtZW1vaXplZCByZXN1bHRzIG9mIGBmYCBhbGl2ZS4gVGhlXG4gKiBtZW1vaXphdGlvbiBpcyBhIGR1bWItc2ltcGxlLCBsaW5lYXIgbGVhc3QtcmVjZW50bHktdXNlZCBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gbHJ1TWVtb2l6ZShmKSB7XG4gIHZhciBjYWNoZSA9IFtdO1xuXG4gIHJldHVybiBmdW5jdGlvbihpbnB1dCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjYWNoZVtpXS5pbnB1dCA9PT0gaW5wdXQpIHtcbiAgICAgICAgdmFyIHRlbXAgPSBjYWNoZVswXTtcbiAgICAgICAgY2FjaGVbMF0gPSBjYWNoZVtpXTtcbiAgICAgICAgY2FjaGVbaV0gPSB0ZW1wO1xuICAgICAgICByZXR1cm4gY2FjaGVbMF0ucmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSBmKGlucHV0KTtcblxuICAgIGNhY2hlLnVuc2hpZnQoe1xuICAgICAgaW5wdXQsXG4gICAgICByZXN1bHQsXG4gICAgfSk7XG5cbiAgICBpZiAoY2FjaGUubGVuZ3RoID4gTUFYX0NBQ0hFRF9JTlBVVFMpIHtcbiAgICAgIGNhY2hlLnBvcCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG52YXIgbm9ybWFsaXplID0gbHJ1TWVtb2l6ZShmdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuICAvLyBTcGxpdCB0aGUgcGF0aCBpbnRvIHBhcnRzIGJldHdlZW4gYC9gIGNoYXJhY3RlcnMuIFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhblxuICAvLyB1c2luZyBgLnNwbGl0KC9cXC8rL2cpYC5cbiAgdmFyIHBhcnRzID0gW107XG4gIHZhciBzdGFydCA9IDA7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzdGFydCA9IGk7XG4gICAgaSA9IHBhdGguaW5kZXhPZihcIi9cIiwgc3RhcnQpO1xuICAgIGlmIChpID09PSAtMSkge1xuICAgICAgcGFydHMucHVzaChwYXRoLnNsaWNlKHN0YXJ0KSk7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydHMucHVzaChwYXRoLnNsaWNlKHN0YXJ0LCBpKSk7XG4gICAgICB3aGlsZSAoaSA8IHBhdGgubGVuZ3RoICYmIHBhdGhbaV0gPT09IFwiL1wiKSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59KTtcbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuXG4vKipcbiAqIEpvaW5zIHR3byBwYXRocy9VUkxzLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgam9pbmVkIHdpdGggdGhlIHJvb3QuXG4gKlxuICogLSBJZiBhUGF0aCBpcyBhIFVSTCBvciBhIGRhdGEgVVJJLCBhUGF0aCBpcyByZXR1cm5lZCwgdW5sZXNzIGFQYXRoIGlzIGFcbiAqICAgc2NoZW1lLXJlbGF0aXZlIFVSTDogVGhlbiB0aGUgc2NoZW1lIG9mIGFSb290LCBpZiBhbnksIGlzIHByZXBlbmRlZFxuICogICBmaXJzdC5cbiAqIC0gT3RoZXJ3aXNlIGFQYXRoIGlzIGEgcGF0aC4gSWYgYVJvb3QgaXMgYSBVUkwsIHRoZW4gaXRzIHBhdGggcG9ydGlvblxuICogICBpcyB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdCBhbmQgYVJvb3QgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcmVzdWx0XG4gKiAgIGlzIHJldHVybmVkLlxuICogICAtIElmIGFQYXRoIGlzIGFic29sdXRlLCB0aGUgcmVzdWx0IGlzIGFQYXRoLlxuICogICAtIE90aGVyd2lzZSB0aGUgdHdvIHBhdGhzIGFyZSBqb2luZWQgd2l0aCBhIHNsYXNoLlxuICogLSBKb2luaW5nIGZvciBleGFtcGxlICdodHRwOi8vJyBhbmQgJ3d3dy5leGFtcGxlLmNvbScgaXMgYWxzbyBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGpvaW4oYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cbiAgaWYgKGFQYXRoID09PSBcIlwiKSB7XG4gICAgYVBhdGggPSBcIi5cIjtcbiAgfVxuICB2YXIgYVBhdGhVcmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIHZhciBhUm9vdFVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3QgPSBhUm9vdFVybC5wYXRoIHx8ICcvJztcbiAgfVxuXG4gIC8vIGBqb2luKGZvbywgJy8vd3d3LmV4YW1wbGUub3JnJylgXG4gIGlmIChhUGF0aFVybCAmJiAhYVBhdGhVcmwuc2NoZW1lKSB7XG4gICAgaWYgKGFSb290VXJsKSB7XG4gICAgICBhUGF0aFVybC5zY2hlbWUgPSBhUm9vdFVybC5zY2hlbWU7XG4gICAgfVxuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUGF0aFVybCk7XG4gIH1cblxuICBpZiAoYVBhdGhVcmwgfHwgYVBhdGgubWF0Y2goZGF0YVVybFJlZ2V4cCkpIHtcbiAgICByZXR1cm4gYVBhdGg7XG4gIH1cblxuICAvLyBgam9pbignaHR0cDovLycsICd3d3cuZXhhbXBsZS5jb20nKWBcbiAgaWYgKGFSb290VXJsICYmICFhUm9vdFVybC5ob3N0ICYmICFhUm9vdFVybC5wYXRoKSB7XG4gICAgYVJvb3RVcmwuaG9zdCA9IGFQYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cblxuICB2YXIgam9pbmVkID0gYVBhdGguY2hhckF0KDApID09PSAnLydcbiAgICA/IGFQYXRoXG4gICAgOiBub3JtYWxpemUoYVJvb3QucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyBhUGF0aCk7XG5cbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3RVcmwucGF0aCA9IGpvaW5lZDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG4gIHJldHVybiBqb2luZWQ7XG59XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbiAoYVBhdGgpIHtcbiAgcmV0dXJuIGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nIHx8IHVybFJlZ2V4cC50ZXN0KGFQYXRoKTtcbn07XG5cbi8qKlxuICogTWFrZSBhIHBhdGggcmVsYXRpdmUgdG8gYSBVUkwgb3IgYW5vdGhlciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBhUm9vdC5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpdmUoYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cblxuICBhUm9vdCA9IGFSb290LnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBwYXRoIHRvIGJlIGFib3ZlIHRoZSByb290LiBJbiB0aGlzIGNhc2UsIHNpbXBseVxuICAvLyBjaGVja2luZyB3aGV0aGVyIHRoZSByb290IGlzIGEgcHJlZml4IG9mIHRoZSBwYXRoIHdvbid0IHdvcmsuIEluc3RlYWQsIHdlXG4gIC8vIG5lZWQgdG8gcmVtb3ZlIGNvbXBvbmVudHMgZnJvbSB0aGUgcm9vdCBvbmUgYnkgb25lLCB1bnRpbCBlaXRoZXIgd2UgZmluZFxuICAvLyBhIHByZWZpeCB0aGF0IGZpdHMsIG9yIHdlIHJ1biBvdXQgb2YgY29tcG9uZW50cyB0byByZW1vdmUuXG4gIHZhciBsZXZlbCA9IDA7XG4gIHdoaWxlIChhUGF0aC5pbmRleE9mKGFSb290ICsgJy8nKSAhPT0gMCkge1xuICAgIHZhciBpbmRleCA9IGFSb290Lmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9ubHkgcGFydCBvZiB0aGUgcm9vdCB0aGF0IGlzIGxlZnQgaXMgdGhlIHNjaGVtZSAoaS5lLiBodHRwOi8vLFxuICAgIC8vIGZpbGU6Ly8vLCBldGMuKSwgb25lIG9yIG1vcmUgc2xhc2hlcyAoLyksIG9yIHNpbXBseSBub3RoaW5nIGF0IGFsbCwgd2VcbiAgICAvLyBoYXZlIGV4aGF1c3RlZCBhbGwgY29tcG9uZW50cywgc28gdGhlIHBhdGggaXMgbm90IHJlbGF0aXZlIHRvIHRoZSByb290LlxuICAgIGFSb290ID0gYVJvb3Quc2xpY2UoMCwgaW5kZXgpO1xuICAgIGlmIChhUm9vdC5tYXRjaCgvXihbXlxcL10rOlxcLyk/XFwvKiQvKSkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgICsrbGV2ZWw7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgd2UgYWRkIGEgXCIuLi9cIiBmb3IgZWFjaCBjb21wb25lbnQgd2UgcmVtb3ZlZCBmcm9tIHRoZSByb290LlxuICByZXR1cm4gQXJyYXkobGV2ZWwgKyAxKS5qb2luKFwiLi4vXCIpICsgYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpO1xufVxuZXhwb3J0cy5yZWxhdGl2ZSA9IHJlbGF0aXZlO1xuXG52YXIgc3VwcG9ydHNOdWxsUHJvdG8gPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuICEoJ19fcHJvdG9fXycgaW4gb2JqKTtcbn0oKSk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5IChzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vKipcbiAqIEJlY2F1c2UgYmVoYXZpb3IgZ29lcyB3YWNreSB3aGVuIHlvdSBzZXQgYF9fcHJvdG9fX2Agb24gb2JqZWN0cywgd2VcbiAqIGhhdmUgdG8gcHJlZml4IGFsbCB0aGUgc3RyaW5ncyBpbiBvdXIgc2V0IHdpdGggYW4gYXJiaXRyYXJ5IGNoYXJhY3Rlci5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9wdWxsLzMxIGFuZFxuICogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMzBcbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiAnJCcgKyBhU3RyO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLnRvU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IHRvU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gYVN0ci5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IGZyb21TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzUHJvdG9TdHJpbmcocykge1xuICBpZiAoIXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gcy5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA8IDkgLyogXCJfX3Byb3RvX19cIi5sZW5ndGggKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocy5jaGFyQ29kZUF0KGxlbmd0aCAtIDEpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMikgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAzKSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDQpICE9PSAxMTYgLyogJ3QnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNSkgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA2KSAhPT0gMTE0IC8qICdyJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDcpICE9PSAxMTIgLyogJ3AnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOCkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA5KSAhPT0gOTUgIC8qICdfJyAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSBsZW5ndGggLSAxMDsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAocy5jaGFyQ29kZUF0KGkpICE9PSAzNiAvKiAnJCcgKi8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdoZXJlIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uLCBidXQgZGlmZmVyZW50IGdlbmVyYXRlZFxuICogbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGEgbWFwcGluZyB3aXRoIGFcbiAqIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICB2YXIgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9uc05vU291cmNlKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICB2YXIgY21wXG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnNOb1NvdXJjZSA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zTm9Tb3VyY2U7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWROb0xpbmUobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWROb0xpbmUgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZE5vTGluZTtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMTsgLy8gYVN0cjIgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAtMTsgLy8gYVN0cjEgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuLyoqXG4gKiBTdHJpcCBhbnkgSlNPTiBYU1NJIGF2b2lkYW5jZSBwcmVmaXggZnJvbSB0aGUgc3RyaW5nIChhcyBkb2N1bWVudGVkXG4gKiBpbiB0aGUgc291cmNlIG1hcHMgc3BlY2lmaWNhdGlvbiksIGFuZCB0aGVuIHBhcnNlIHRoZSBzdHJpbmcgYXNcbiAqIEpTT04uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU291cmNlTWFwSW5wdXQoc3RyKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHN0ci5yZXBsYWNlKC9eXFwpXX0nW15cXG5dKlxcbi8sICcnKSk7XG59XG5leHBvcnRzLnBhcnNlU291cmNlTWFwSW5wdXQgPSBwYXJzZVNvdXJjZU1hcElucHV0O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIFVSTCBvZiBhIHNvdXJjZSBnaXZlbiB0aGUgdGhlIHNvdXJjZSByb290LCB0aGUgc291cmNlJ3NcbiAqIFVSTCwgYW5kIHRoZSBzb3VyY2UgbWFwJ3MgVVJMLlxuICovXG5mdW5jdGlvbiBjb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZVVSTCwgc291cmNlTWFwVVJMKSB7XG4gIHNvdXJjZVVSTCA9IHNvdXJjZVVSTCB8fCAnJztcblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIC8vIFRoaXMgZm9sbG93cyB3aGF0IENocm9tZSBkb2VzLlxuICAgIGlmIChzb3VyY2VSb290W3NvdXJjZVJvb3QubGVuZ3RoIC0gMV0gIT09ICcvJyAmJiBzb3VyY2VVUkxbMF0gIT09ICcvJykge1xuICAgICAgc291cmNlUm9vdCArPSAnLyc7XG4gICAgfVxuICAgIC8vIFRoZSBzcGVjIHNheXM6XG4gICAgLy8gICBMaW5lIDQ6IEFuIG9wdGlvbmFsIHNvdXJjZSByb290LCB1c2VmdWwgZm9yIHJlbG9jYXRpbmcgc291cmNlXG4gICAgLy8gICBmaWxlcyBvbiBhIHNlcnZlciBvciByZW1vdmluZyByZXBlYXRlZCB2YWx1ZXMgaW4gdGhlXG4gICAgLy8gICDigJxzb3VyY2Vz4oCdIGVudHJ5LiAgVGhpcyB2YWx1ZSBpcyBwcmVwZW5kZWQgdG8gdGhlIGluZGl2aWR1YWxcbiAgICAvLyAgIGVudHJpZXMgaW4gdGhlIOKAnHNvdXJjZeKAnSBmaWVsZC5cbiAgICBzb3VyY2VVUkwgPSBzb3VyY2VSb290ICsgc291cmNlVVJMO1xuICB9XG5cbiAgLy8gSGlzdG9yaWNhbGx5LCBTb3VyY2VNYXBDb25zdW1lciBkaWQgbm90IHRha2UgdGhlIHNvdXJjZU1hcFVSTCBhc1xuICAvLyBhIHBhcmFtZXRlci4gIFRoaXMgbW9kZSBpcyBzdGlsbCBzb21ld2hhdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeVxuICAvLyB0aGlzIGNvZGUgYmxvY2sgaXMgY29uZGl0aW9uYWwuICBIb3dldmVyLCBpdCdzIHByZWZlcmFibGUgdG8gcGFzc1xuICAvLyB0aGUgc291cmNlIG1hcCBVUkwgdG8gU291cmNlTWFwQ29uc3VtZXIsIHNvIHRoYXQgdGhpcyBmdW5jdGlvblxuICAvLyBjYW4gaW1wbGVtZW50IHRoZSBzb3VyY2UgVVJMIHJlc29sdXRpb24gYWxnb3JpdGhtIGFzIG91dGxpbmVkIGluXG4gIC8vIHRoZSBzcGVjLiAgVGhpcyBibG9jayBpcyBiYXNpY2FsbHkgdGhlIGVxdWl2YWxlbnQgb2Y6XG4gIC8vICAgIG5ldyBVUkwoc291cmNlVVJMLCBzb3VyY2VNYXBVUkwpLnRvU3RyaW5nKClcbiAgLy8gLi4uIGV4Y2VwdCBpdCBhdm9pZHMgdXNpbmcgVVJMLCB3aGljaCB3YXNuJ3QgYXZhaWxhYmxlIGluIHRoZVxuICAvLyBvbGRlciByZWxlYXNlcyBvZiBub2RlIHN0aWxsIHN1cHBvcnRlZCBieSB0aGlzIGxpYnJhcnkuXG4gIC8vXG4gIC8vIFRoZSBzcGVjIHNheXM6XG4gIC8vICAgSWYgdGhlIHNvdXJjZXMgYXJlIG5vdCBhYnNvbHV0ZSBVUkxzIGFmdGVyIHByZXBlbmRpbmcgb2YgdGhlXG4gIC8vICAg4oCcc291cmNlUm9vdOKAnSwgdGhlIHNvdXJjZXMgYXJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZVxuICAvLyAgIFNvdXJjZU1hcCAobGlrZSByZXNvbHZpbmcgc2NyaXB0IHNyYyBpbiBhIGh0bWwgZG9jdW1lbnQpLlxuICBpZiAoc291cmNlTWFwVVJMKSB7XG4gICAgdmFyIHBhcnNlZCA9IHVybFBhcnNlKHNvdXJjZU1hcFVSTCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNvdXJjZU1hcFVSTCBjb3VsZCBub3QgYmUgcGFyc2VkXCIpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnBhdGgpIHtcbiAgICAgIC8vIFN0cmlwIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LCBidXQga2VlcCB0aGUgXCIvXCIuXG4gICAgICB2YXIgaW5kZXggPSBwYXJzZWQucGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgcGFyc2VkLnBhdGggPSBwYXJzZWQucGF0aC5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlVVJMID0gam9pbih1cmxHZW5lcmF0ZShwYXJzZWQpLCBzb3VyY2VVUkwpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShzb3VyY2VVUkwpO1xufVxuZXhwb3J0cy5jb21wdXRlU291cmNlVVJMID0gY29tcHV0ZVNvdXJjZVVSTDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSB1dGlsLnBhcnNlU291cmNlTWFwSW5wdXQoYVNvdXJjZU1hcCk7XG4gIH1cblxuICByZXR1cm4gc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGxcbiAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwLCBhU291cmNlTWFwVVJMKVxuICAgIDogbmV3IEJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwLCBhU291cmNlTWFwVVJMKTtcbn1cblxuU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgcmV0dXJuIEJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKTtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4vLyBwYXJzZWQgbWFwcGluZyBjb29yZGluYXRlcyBmcm9tIHRoZSBzb3VyY2UgbWFwJ3MgXCJtYXBwaW5nc1wiIGF0dHJpYnV0ZS4gVGhleVxuLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3Ncbi8vIGFuZCBjcmVhdGUgdGhlc2UgYXJyYXlzIG9uY2UgcXVlcmllZCBmb3IgYSBzb3VyY2UgbG9jYXRpb24uIFdlIGp1bXAgdGhyb3VnaFxuLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4vLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4vL1xuLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbi8vXG4vLyAgICAge1xuLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgc291cmNlOiBUaGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhpc1xuLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBzeW1ib2wgd2hpY2ggZ2VuZXJhdGVkIHRoaXMgY2h1bmsgb2Zcbi8vICAgICAgICAgICAgIGNvZGUuXG4vLyAgICAgfVxuLy9cbi8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbi8vIGBudWxsYC5cbi8vXG4vLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuLy9cbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgc291cmNlID0gdXRpbC5jb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZSwgdGhpcy5fc291cmNlTWFwVVJMKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IE9wdGlvbmFsLiB0aGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX2ZpbmRTb3VyY2VJbmRleChuZWVkbGUuc291cmNlKTtcbiAgICBpZiAobmVlZGxlLnNvdXJjZSA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3JcbiAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBuYW1lczogQW4gYXJyYXkgb2YgaWRlbnRpZmllcnMgd2hpY2ggY2FuIGJlIHJlZmVycmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbWFwcGluZ3M6IEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKlxuICogSGVyZSBpcyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXTpcbiAqXG4gKiAgICAge1xuICogICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gKiAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICogICAgIH1cbiAqXG4gKiBUaGUgc2Vjb25kIHBhcmFtZXRlciwgaWYgZ2l2ZW4sIGlzIGEgc3RyaW5nIHdob3NlIHZhbHVlIGlzIHRoZSBVUkxcbiAqIGF0IHdoaWNoIHRoZSBzb3VyY2UgbWFwIHdhcyBmb3VuZC4gIFRoaXMgVVJMIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGVcbiAqIHNvdXJjZXMgYXJyYXkuXG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IHV0aWwucGFyc2VTb3VyY2VNYXBJbnB1dChhU291cmNlTWFwKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAvLyByZXF1aXJlcyB0aGUgYXJyYXkpIHRvIHBsYXkgbmljZSBoZXJlLlxuICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHZhciBzb3VyY2VzQ29udGVudCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7XG4gIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gIC8vIE9uY2UgYWdhaW4sIFNhc3MgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYyBhbmQgc3VwcGxpZXMgdGhlIHZlcnNpb24gYXMgYVxuICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIHNvdXJjZVJvb3QgPSB1dGlsLm5vcm1hbGl6ZShzb3VyY2VSb290KTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuX2Fic29sdXRlU291cmNlcyA9IHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgIHJldHVybiB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc291cmNlUm9vdCwgcywgYVNvdXJjZU1hcFVSTCk7XG4gIH0pO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5fc291cmNlTWFwVVJMID0gYVNvdXJjZU1hcFVSTDtcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZmluZCB0aGUgaW5kZXggb2YgYSBzb3VyY2UuICBSZXR1cm5zIC0xIGlmIG5vdFxuICogZm91bmQuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kU291cmNlSW5kZXggPSBmdW5jdGlvbihhU291cmNlKSB7XG4gIHZhciByZWxhdGl2ZVNvdXJjZSA9IGFTb3VyY2U7XG4gIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgIHJlbGF0aXZlU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHJlbGF0aXZlU291cmNlKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhyZWxhdGl2ZVNvdXJjZSkpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlcy5pbmRleE9mKHJlbGF0aXZlU291cmNlKTtcbiAgfVxuXG4gIC8vIE1heWJlIGFTb3VyY2UgaXMgYW4gYWJzb2x1dGUgVVJMIGFzIHJldHVybmVkIGJ5IHxzb3VyY2VzfC4gIEluXG4gIC8vIHRoaXMgY2FzZSB3ZSBjYW4ndCBzaW1wbHkgdW5kbyB0aGUgdHJhbnNmb3JtLlxuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IHRoaXMuX2Fic29sdXRlU291cmNlcy5sZW5ndGg7ICsraSkge1xuICAgIGlmICh0aGlzLl9hYnNvbHV0ZVNvdXJjZXNbaV0gPT0gYVNvdXJjZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKlxuICogQHBhcmFtIFNvdXJjZU1hcEdlbmVyYXRvciBhU291cmNlTWFwXG4gKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICogQHBhcmFtIFN0cmluZyBhU291cmNlTWFwVVJMXG4gKiAgICAgICAgVGhlIFVSTCBhdCB3aGljaCB0aGUgc291cmNlIG1hcCBjYW4gYmUgZm91bmQgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgICB2YXIgc21jID0gT2JqZWN0LmNyZWF0ZShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5cbiAgICB2YXIgbmFtZXMgPSBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICBzbWMuc291cmNlc0NvbnRlbnQgPSBhU291cmNlTWFwLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHNtYy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuICAgIHNtYy5fc291cmNlTWFwVVJMID0gYVNvdXJjZU1hcFVSTDtcbiAgICBzbWMuX2Fic29sdXRlU291cmNlcyA9IHNtYy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gdXRpbC5jb21wdXRlU291cmNlVVJMKHNtYy5zb3VyY2VSb290LCBzLCBhU291cmNlTWFwVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlU291cmNlcy5zbGljZSgpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuXG5jb25zdCBjb21wYXJlR2VuZXJhdGVkID0gdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZE5vTGluZTtcbmZ1bmN0aW9uIHNvcnRHZW5lcmF0ZWQoYXJyYXksIHN0YXJ0KSB7XG4gIGxldCBsID0gYXJyYXkubGVuZ3RoO1xuICBsZXQgbiA9IGFycmF5Lmxlbmd0aCAtIHN0YXJ0O1xuICBpZiAobiA8PSAxKSB7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKG4gPT0gMikge1xuICAgIGxldCBhID0gYXJyYXlbc3RhcnRdO1xuICAgIGxldCBiID0gYXJyYXlbc3RhcnQgKyAxXTtcbiAgICBpZiAoY29tcGFyZUdlbmVyYXRlZChhLCBiKSA+IDApIHtcbiAgICAgIGFycmF5W3N0YXJ0XSA9IGI7XG4gICAgICBhcnJheVtzdGFydCArIDFdID0gYTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobiA8IDIwKSB7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgbDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gaTsgaiA+IHN0YXJ0OyBqLS0pIHtcbiAgICAgICAgbGV0IGEgPSBhcnJheVtqIC0gMV07XG4gICAgICAgIGxldCBiID0gYXJyYXlbal07XG4gICAgICAgIGlmIChjb21wYXJlR2VuZXJhdGVkKGEsIGIpIDw9IDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBhcnJheVtqIC0gMV0gPSBiO1xuICAgICAgICBhcnJheVtqXSA9IGE7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHF1aWNrU29ydChhcnJheSwgY29tcGFyZUdlbmVyYXRlZCwgc3RhcnQpO1xuICB9XG59XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBsZW5ndGggPSBhU3RyLmxlbmd0aDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjYWNoZWRTZWdtZW50cyA9IHt9O1xuICAgIHZhciB0ZW1wID0ge307XG4gICAgdmFyIG9yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgbWFwcGluZywgc3RyLCBzZWdtZW50LCBlbmQsIHZhbHVlO1xuXG4gICAgbGV0IHN1YmFycmF5U3RhcnQgPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuXG4gICAgICAgIHNvcnRHZW5lcmF0ZWQoZ2VuZXJhdGVkTWFwcGluZ3MsIHN1YmFycmF5U3RhcnQpO1xuICAgICAgICBzdWJhcnJheVN0YXJ0ID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICBmb3IgKGVuZCA9IGluZGV4OyBlbmQgPCBsZW5ndGg7IGVuZCsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgZW5kKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0ciA9IGFTdHIuc2xpY2UoaW5kZXgsIGVuZCk7XG5cbiAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHtcbiAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKGFTdHIsIGluZGV4LCB0ZW1wKTtcbiAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgaW5kZXggPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgc2VnbWVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlbmVyYXRlZCBjb2x1bW4uXG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gKyBzZWdtZW50WzBdO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBPcmlnaW5hbCBzb3VyY2UuXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBwcmV2aW91c1NvdXJjZSArIHNlZ21lbnRbMV07XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgKz0gc2VnbWVudFsxXTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGxpbmUuXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBwcmV2aW91c09yaWdpbmFsTGluZSArIHNlZ21lbnRbMl07XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICAvLyBMaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWRcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSArPSAxO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgY29sdW1uLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBwcmV2aW91c09yaWdpbmFsQ29sdW1uICsgc2VnbWVudFszXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBwcmV2aW91c05hbWUgKyBzZWdtZW50WzRdO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lICs9IHNlZ21lbnRbNF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBsZXQgY3VycmVudFNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgICAgIHdoaWxlIChvcmlnaW5hbE1hcHBpbmdzLmxlbmd0aCA8PSBjdXJyZW50U291cmNlKSB7XG4gICAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzLnB1c2gobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcmlnaW5hbE1hcHBpbmdzW2N1cnJlbnRTb3VyY2VdID09PSBudWxsKSB7XG4gICAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzW2N1cnJlbnRTb3VyY2VdID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIG9yaWdpbmFsTWFwcGluZ3NbY3VycmVudFNvdXJjZV0ucHVzaChtYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNvcnRHZW5lcmF0ZWQoZ2VuZXJhdGVkTWFwcGluZ3MsIHN1YmFycmF5U3RhcnQpO1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IGdlbmVyYXRlZE1hcHBpbmdzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnaW5hbE1hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob3JpZ2luYWxNYXBwaW5nc1tpXSAhPSBudWxsKSB7XG4gICAgICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzW2ldLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zTm9Tb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdLmNvbmNhdCguLi5vcmlnaW5hbE1hcHBpbmdzKTtcbiAgfTtcblxuLyoqXG4gKiBGaW5kIHRoZSBtYXBwaW5nIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBoeXBvdGhldGljYWwgXCJuZWVkbGVcIiBtYXBwaW5nIHRoYXRcbiAqIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGluIHRoZSBnaXZlbiBcImhheXN0YWNrXCIgb2YgbWFwcGluZ3MuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2ZpbmRNYXBwaW5nKGFOZWVkbGUsIGFNYXBwaW5ncywgYUxpbmVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IsIGFCaWFzKSB7XG4gICAgLy8gVG8gcmV0dXJuIHRoZSBwb3NpdGlvbiB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgd2UgbXVzdCBmaXJzdCBmaW5kIHRoZVxuICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGhlbiByZXR1cm4gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGl0XG4gICAgLy8gcG9pbnRzIHRvLiBCZWNhdXNlIHRoZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB3ZSBjYW4gdXNlIGJpbmFyeSBzZWFyY2ggdG9cbiAgICAvLyBmaW5kIHRoZSBiZXN0IG1hcHBpbmcuXG5cbiAgICBpZiAoYU5lZWRsZVthTGluZU5hbWVdIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FMaW5lTmFtZV0pO1xuICAgIH1cbiAgICBpZiAoYU5lZWRsZVthQ29sdW1uTmFtZV0gPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FDb2x1bW5OYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbmFyeVNlYXJjaC5zZWFyY2goYU5lZWRsZSwgYU1hcHBpbmdzLCBhQ29tcGFyYXRvciwgYUJpYXMpO1xuICB9O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxhc3QgY29sdW1uIGZvciBlYWNoIGdlbmVyYXRlZCBtYXBwaW5nLiBUaGUgbGFzdCBjb2x1bW4gaXNcbiAqIGluY2x1c2l2ZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY29tcHV0ZUNvbHVtblNwYW5zKCkge1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAvLyBNYXBwaW5ncyBkbyBub3QgY29udGFpbiBhIGZpZWxkIGZvciB0aGUgbGFzdCBnZW5lcmF0ZWQgY29sdW1udC4gV2VcbiAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgLy8gbWFwcGluZ3MgYXJlIGNvbnRpZ3VvdXMgKGkuZS4gZ2l2ZW4gdHdvIGNvbnNlY3V0aXZlIG1hcHBpbmdzLCB0aGVcbiAgICAgIC8vIGZpcnN0IG1hcHBpbmcgZW5kcyB3aGVyZSB0aGUgc2Vjb25kIG9uZSBzdGFydHMpLlxuICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICB2YXIgbmV4dE1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleCArIDFdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5leHRNYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IG1hcHBpbmcgZm9yIGVhY2ggbGluZSBzcGFucyB0aGUgZW50aXJlIGxpbmUuXG4gICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBJbmZpbml0eTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXJcbiAqICAgICBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuICBUaGUgY29sdW1uXG4gKiAgICAgbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncyxcbiAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgXCJnZW5lcmF0ZWRDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5hdChzb3VyY2UpO1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuY29tcHV0ZVNvdXJjZVVSTCh0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSwgdGhpcy5fc291cmNlTWFwVVJMKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZFNvdXJjZUluZGV4KGFTb3VyY2UpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFtpbmRleF07XG4gICAgfVxuXG4gICAgdmFyIHJlbGF0aXZlU291cmNlID0gYVNvdXJjZTtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHJlbGF0aXZlU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHJlbGF0aXZlU291cmNlKTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IHJlbGF0aXZlU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgaWYgKHVybC5zY2hlbWUgPT0gXCJmaWxlXCJcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhmaWxlVXJpQWJzUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgIH1cblxuICAgICAgaWYgKCghdXJsLnBhdGggfHwgdXJsLnBhdGggPT0gXCIvXCIpXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyByZWxhdGl2ZVNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKFwiL1wiICsgcmVsYXRpdmVTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyByZWxhdGl2ZVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgY29sdW1uXG4gKiAgICAgbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAgIFRoZSBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKTtcbiAgICBzb3VyY2UgPSB0aGlzLl9maW5kU291cmNlSW5kZXgoc291cmNlKTtcbiAgICBpZiAoc291cmNlIDwgMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0cy5CYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoXG4gKiB3ZSBjYW4gcXVlcnkgZm9yIGluZm9ybWF0aW9uLiBJdCBkaWZmZXJzIGZyb20gQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpblxuICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gKiBpbnB1dC5cbiAqXG4gKiBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvciBhbHJlYWR5XG4gKiBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIGZvciBpbmRleGVkIHNvdXJjZSBtYXBzLCB0aGV5XG4gKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKiAgIC0gc2VjdGlvbnM6IEEgbGlzdCBvZiBzZWN0aW9uIGRlZmluaXRpb25zLlxuICpcbiAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAqICAgLSBvZmZzZXQ6IFRoZSBvZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGF0IHdoaWNoIHRoaXMgc2VjdGlvblxuICogICAgICAgYmVnaW5zIHRvIGFwcGx5LCBkZWZpbmVkIGFzIGFuIG9iamVjdCB3aXRoIGEgXCJsaW5lXCIgYW5kIFwiY29sdW1uXCJcbiAqICAgICAgIGZpZWxkLlxuICogICAtIG1hcDogQSBzb3VyY2UgbWFwIGRlZmluaXRpb24uIFRoaXMgc291cmNlIG1hcCBjb3VsZCBhbHNvIGJlIGluZGV4ZWQsXG4gKiAgICAgICBidXQgZG9lc24ndCBoYXZlIHRvIGJlLlxuICpcbiAqIEluc3RlYWQgb2YgdGhlIFwibWFwXCIgZmllbGQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgXCJ1cmxcIiBmaWVsZFxuICogc3BlY2lmeWluZyBhIFVSTCB0byByZXRyaWV2ZSBhIHNvdXJjZSBtYXAgZnJvbSwgYnV0IHRoYXQncyBjdXJyZW50bHlcbiAqIHVuc3VwcG9ydGVkLlxuICpcbiAqIEhlcmUncyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXSwgYnV0XG4gKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICpcbiAqICB7XG4gKiAgICB2ZXJzaW9uIDogMyxcbiAqICAgIGZpbGU6IFwiYXBwLmpzXCIsXG4gKiAgICBzZWN0aW9uczogW3tcbiAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gKiAgICAgIG1hcDoge1xuICogICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICogICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gKiAgICAgIH1cbiAqICAgIH1dLFxuICogIH1cbiAqXG4gKiBUaGUgc2Vjb25kIHBhcmFtZXRlciwgaWYgZ2l2ZW4sIGlzIGEgc3RyaW5nIHdob3NlIHZhbHVlIGlzIHRoZSBVUkxcbiAqIGF0IHdoaWNoIHRoZSBzb3VyY2UgbWFwIHdhcyBmb3VuZC4gIFRoaXMgVVJMIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGVcbiAqIHNvdXJjZXMgYXJyYXkuXG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IHV0aWwucGFyc2VTb3VyY2VNYXBJbnB1dChhU291cmNlTWFwKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc2VjdGlvbnMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzZWN0aW9ucycpO1xuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICB2YXIgbGFzdE9mZnNldCA9IHtcbiAgICBsaW5lOiAtMSxcbiAgICBjb2x1bW46IDBcbiAgfTtcbiAgdGhpcy5fc2VjdGlvbnMgPSBzZWN0aW9ucy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICBpZiAocy51cmwpIHtcbiAgICAgIC8vIFRoZSB1cmwgZmllbGQgd2lsbCByZXF1aXJlIHN1cHBvcnQgZm9yIGFzeW5jaHJvbmljaXR5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzE2XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSB1dGlsLmdldEFyZyhzLCAnb2Zmc2V0Jyk7XG4gICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgdmFyIG9mZnNldENvbHVtbiA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2NvbHVtbicpO1xuXG4gICAgaWYgKG9mZnNldExpbmUgPCBsYXN0T2Zmc2V0LmxpbmUgfHxcbiAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLicpO1xuICAgIH1cbiAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZE9mZnNldDoge1xuICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAvLyBlbmNvZGluZy9kZWNvZGluZyBmcm9tIFZMUS5cbiAgICAgICAgZ2VuZXJhdGVkTGluZTogb2Zmc2V0TGluZSArIDEsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgfSxcbiAgICAgIGNvbnN1bWVyOiBuZXcgU291cmNlTWFwQ29uc3VtZXIodXRpbC5nZXRBcmcocywgJ21hcCcpLCBhU291cmNlTWFwVVJMKVxuICAgIH1cbiAgfSk7XG59XG5cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHNvdXJjZXMucHVzaCh0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uIHdlJ3JlIHRyeWluZyB0byBtYXBcbiAgICAvLyB0byBhbiBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgZnVuY3Rpb24obmVlZGxlLCBzZWN0aW9uKSB7XG4gICAgICAgIHZhciBjbXAgPSBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7XG4gICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICByZXR1cm4gY21wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgIGxpbmU6IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICA6IDApLFxuICAgICAgYmlhczogYUFyZ3MuYmlhc1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpO1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgdmFyIGNvbnRlbnQgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgdHJ1ZSk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgY29sdW1uXG4gKiAgICAgbnVtYmVyIGlzIDAtYmFzZWQuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC4gXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuX2ZpbmRTb3VyY2VJbmRleCh1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpKSA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZ2VuZXJhdGVkUG9zaXRpb24gPSBzZWN0aW9uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKTtcbiAgICAgIGlmIChnZW5lcmF0ZWRQb3NpdGlvbikge1xuICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gZ2VuZXJhdGVkUG9zaXRpb24ubGluZVxuICAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgIDogMClcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG4gICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlY3Rpb25NYXBwaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHNlY3Rpb25NYXBwaW5nc1tqXTtcblxuICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwuY29tcHV0ZVNvdXJjZVVSTChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSwgdGhpcy5fc291cmNlTWFwVVJMKTtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBudWxsO1xuICAgICAgICBpZiAobWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgbmFtZSA9IHNlY3Rpb24uY29uc3VtZXIuX25hbWVzLmF0KG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIG1hcHBpbmdzIGNvbWluZyBmcm9tIHRoZSBjb25zdW1lciBmb3IgdGhlIHNlY3Rpb24gaGF2ZVxuICAgICAgICAvLyBnZW5lcmF0ZWQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiwgc28gd2VcbiAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAvLyBnZW5lcmF0ZWQgZmlsZS5cbiAgICAgICAgdmFyIGFkanVzdGVkTWFwcGluZyA9IHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBtYXBwaW5nLmdlbmVyYXRlZExpbmVcbiAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgOiAwKSxcbiAgICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIGFkanVzdGVkTWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgcXVpY2tTb3J0KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgfTtcblxuZXhwb3J0cy5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIgPSBJbmRleGVkU291cmNlTWFwQ29uc3VtZXI7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzXG4vLyBtb2R1bGUgaWQgPSA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9iaW5hcnktc2VhcmNoLmpzXG4vLyBtb2R1bGUgaWQgPSA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLy8gSXQgdHVybnMgb3V0IHRoYXQgc29tZSAobW9zdD8pIEphdmFTY3JpcHQgZW5naW5lcyBkb24ndCBzZWxmLWhvc3Rcbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAuIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSBDKysgd2lsbCBsaWtlbHkgcmVtYWluXG4vLyBmYXN0ZXIgdGhhbiBKUyB3aGVuIGRvaW5nIHJhdyBDUFUtaW50ZW5zaXZlIHNvcnRpbmcuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgYVxuLy8gY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24sIGNhbGxpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgVk0ncyBDKysgYW5kXG4vLyBKSVQnZCBKUyBpcyByYXRoZXIgc2xvdyAqYW5kKiBsb3NlcyBKSVQgdHlwZSBpbmZvcm1hdGlvbiwgcmVzdWx0aW5nIGluXG4vLyB3b3JzZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGNvbXBhcmF0b3IgZnVuY3Rpb24gdGhhbiB3b3VsZCBiZSBvcHRpbWFsLiBJblxuLy8gZmFjdCwgd2hlbiBzb3J0aW5nIHdpdGggYSBjb21wYXJhdG9yLCB0aGVzZSBjb3N0cyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgb2Zcbi8vIHNvcnRpbmcgaW4gQysrLiBCeSB1c2luZyBvdXIgb3duIEpTLWltcGxlbWVudGVkIFF1aWNrIFNvcnQgKGJlbG93KSwgd2UgZ2V0XG4vLyBhIH4zNTAwbXMgbWVhbiBzcGVlZC11cCBpbiBgYmVuY2gvYmVuY2guaHRtbGAuXG5cbmZ1bmN0aW9uIFNvcnRUZW1wbGF0ZShjb21wYXJhdG9yKSB7XG5cbi8qKlxuICogU3dhcCB0aGUgZWxlbWVudHMgaW5kZXhlZCBieSBgeGAgYW5kIGB5YCBpbiB0aGUgYXJyYXkgYGFyeWAuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgVGhlIGFycmF5LlxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0uXG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIGl0ZW0uXG4gKi9cbmZ1bmN0aW9uIHN3YXAoYXJ5LCB4LCB5KSB7XG4gIHZhciB0ZW1wID0gYXJ5W3hdO1xuICBhcnlbeF0gPSBhcnlbeV07XG4gIGFyeVt5XSA9IHRlbXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgYGxvdyAuLiBoaWdoYCBpbmNsdXNpdmUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGxvd1xuICogICAgICAgIFRoZSBsb3dlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge051bWJlcn0gaGlnaFxuICogICAgICAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludEluUmFuZ2UobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKGxvdyArIChNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpKSk7XG59XG5cbi8qKlxuICogVGhlIFF1aWNrIFNvcnQgYWxnb3JpdGhtLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IHBcbiAqICAgICAgICBTdGFydCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSByXG4gKiAgICAgICAgRW5kIGluZGV4IG9mIHRoZSBhcnJheVxuICovXG5mdW5jdGlvbiBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHIpIHtcbiAgLy8gSWYgb3VyIGxvd2VyIGJvdW5kIGlzIGxlc3MgdGhhbiBvdXIgdXBwZXIgYm91bmQsIHdlICgxKSBwYXJ0aXRpb24gdGhlXG4gIC8vIGFycmF5IGludG8gdHdvIHBpZWNlcyBhbmQgKDIpIHJlY3Vyc2Ugb24gZWFjaCBoYWxmLiBJZiBpdCBpcyBub3QsIHRoaXMgaXNcbiAgLy8gdGhlIGVtcHR5IGFycmF5IGFuZCBvdXIgYmFzZSBjYXNlLlxuXG4gIGlmIChwIDwgcikge1xuICAgIC8vICgxKSBQYXJ0aXRpb25pbmcuXG4gICAgLy9cbiAgICAvLyBUaGUgcGFydGl0aW9uaW5nIGNob29zZXMgYSBwaXZvdCBiZXR3ZWVuIGBwYCBhbmQgYHJgIGFuZCBtb3ZlcyBhbGxcbiAgICAvLyBlbGVtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90IHRvIHRoZSBiZWZvcmUgaXQsIGFuZFxuICAgIC8vIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIGl0IGFmdGVyIGl0LiBUaGUgZWZmZWN0IGlzIHRoYXRcbiAgICAvLyBvbmNlIHBhcnRpdGlvbiBpcyBkb25lLCB0aGUgcGl2b3QgaXMgaW4gdGhlIGV4YWN0IHBsYWNlIGl0IHdpbGwgYmUgd2hlblxuICAgIC8vIHRoZSBhcnJheSBpcyBwdXQgaW4gc29ydGVkIG9yZGVyLCBhbmQgaXQgd2lsbCBub3QgbmVlZCB0byBiZSBtb3ZlZFxuICAgIC8vIGFnYWluLiBUaGlzIHJ1bnMgaW4gTyhuKSB0aW1lLlxuXG4gICAgLy8gQWx3YXlzIGNob29zZSBhIHJhbmRvbSBwaXZvdCBzbyB0aGF0IGFuIGlucHV0IGFycmF5IHdoaWNoIGlzIHJldmVyc2VcbiAgICAvLyBzb3J0ZWQgZG9lcyBub3QgY2F1c2UgTyhuXjIpIHJ1bm5pbmcgdGltZS5cbiAgICB2YXIgcGl2b3RJbmRleCA9IHJhbmRvbUludEluUmFuZ2UocCwgcik7XG4gICAgdmFyIGkgPSBwIC0gMTtcblxuICAgIHN3YXAoYXJ5LCBwaXZvdEluZGV4LCByKTtcbiAgICB2YXIgcGl2b3QgPSBhcnlbcl07XG5cbiAgICAvLyBJbW1lZGlhdGVseSBhZnRlciBgamAgaXMgaW5jcmVtZW50ZWQgaW4gdGhpcyBsb29wLCB0aGUgZm9sbG93aW5nIGhvbGRcbiAgICAvLyB0cnVlOlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtwIC4uIGldYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90LlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtpKzEgLi4gai0xXWAgaXMgZ3JlYXRlciB0aGFuIHRoZSBwaXZvdC5cbiAgICBmb3IgKHZhciBqID0gcDsgaiA8IHI7IGorKykge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJ5W2pdLCBwaXZvdCwgZmFsc2UpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuICByZXR1cm4gZG9RdWlja1NvcnQ7XG59XG5cbmZ1bmN0aW9uIGNsb25lU29ydChjb21wYXJhdG9yKSB7XG4gIGxldCB0ZW1wbGF0ZSA9IFNvcnRUZW1wbGF0ZS50b1N0cmluZygpO1xuICBsZXQgdGVtcGxhdGVGbiA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7dGVtcGxhdGV9YCkoKTtcbiAgcmV0dXJuIHRlbXBsYXRlRm4oY29tcGFyYXRvcik7XG59XG5cbi8qKlxuICogU29ydCB0aGUgZ2l2ZW4gYXJyYXkgaW4tcGxhY2Ugd2l0aCB0aGUgZ2l2ZW4gY29tcGFyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqL1xuXG5sZXQgc29ydENhY2hlID0gbmV3IFdlYWtNYXAoKTtcbmV4cG9ydHMucXVpY2tTb3J0ID0gZnVuY3Rpb24gKGFyeSwgY29tcGFyYXRvciwgc3RhcnQgPSAwKSB7XG4gIGxldCBkb1F1aWNrU29ydCA9IHNvcnRDYWNoZS5nZXQoY29tcGFyYXRvcik7XG4gIGlmIChkb1F1aWNrU29ydCA9PT0gdm9pZCAwKSB7XG4gICAgZG9RdWlja1NvcnQgPSBjbG9uZVNvcnQoY29tcGFyYXRvcik7XG4gICAgc29ydENhY2hlLnNldChjb21wYXJhdG9yLCBkb1F1aWNrU29ydCk7XG4gIH1cbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBzdGFydCwgYXJ5Lmxlbmd0aCAtIDEpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3F1aWNrLXNvcnQuanNcbi8vIG1vZHVsZSBpZCA9IDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgU291cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8vIE1hdGNoZXMgYSBXaW5kb3dzLXN0eWxlIGBcXHJcXG5gIG5ld2xpbmUgb3IgYSBgXFxuYCBuZXdsaW5lIHVzZWQgYnkgYWxsIG90aGVyXG4vLyBvcGVyYXRpbmcgc3lzdGVtcyB0aGVzZSBkYXlzIChjYXB0dXJpbmcgdGhlIHJlc3VsdCkuXG52YXIgUkVHRVhfTkVXTElORSA9IC8oXFxyP1xcbikvO1xuXG4vLyBOZXdsaW5lIGNoYXJhY3RlciBjb2RlIGZvciBjaGFyQ29kZUF0KCkgY29tcGFyaXNvbnNcbnZhciBORVdMSU5FX0NPREUgPSAxMDtcblxuLy8gUHJpdmF0ZSBzeW1ib2wgZm9yIGlkZW50aWZ5aW5nIGBTb3VyY2VOb2RlYHMgd2hlbiBtdWx0aXBsZSB2ZXJzaW9ucyBvZlxuLy8gdGhlIHNvdXJjZS1tYXAgbGlicmFyeSBhcmUgbG9hZGVkLiBUaGlzIE1VU1QgTk9UIENIQU5HRSBhY3Jvc3Ncbi8vIHZlcnNpb25zIVxudmFyIGlzU291cmNlTm9kZSA9IFwiJCQkaXNTb3VyY2VOb2RlJCQkXCI7XG5cbi8qKlxuICogU291cmNlTm9kZXMgcHJvdmlkZSBhIHdheSB0byBhYnN0cmFjdCBvdmVyIGludGVycG9sYXRpbmcvY29uY2F0ZW5hdGluZ1xuICogc25pcHBldHMgb2YgZ2VuZXJhdGVkIEphdmFTY3JpcHQgc291cmNlIGNvZGUgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIGxpbmUgYW5kXG4gKiBjb2x1bW4gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcGFyYW0gYUxpbmUgVGhlIG9yaWdpbmFsIGxpbmUgbnVtYmVyLlxuICogQHBhcmFtIGFDb2x1bW4gVGhlIG9yaWdpbmFsIGNvbHVtbiBudW1iZXIuXG4gKiBAcGFyYW0gYVNvdXJjZSBUaGUgb3JpZ2luYWwgc291cmNlJ3MgZmlsZW5hbWUuXG4gKiBAcGFyYW0gYUNodW5rcyBPcHRpb25hbC4gQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aGljaCBhcmUgc25pcHBldHMgb2ZcbiAqICAgICAgICBnZW5lcmF0ZWQgSlMsIG9yIG90aGVyIFNvdXJjZU5vZGVzLlxuICogQHBhcmFtIGFOYW1lIFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLlxuICovXG5mdW5jdGlvbiBTb3VyY2VOb2RlKGFMaW5lLCBhQ29sdW1uLCBhU291cmNlLCBhQ2h1bmtzLCBhTmFtZSkge1xuICB0aGlzLmNoaWxkcmVuID0gW107XG4gIHRoaXMuc291cmNlQ29udGVudHMgPSB7fTtcbiAgdGhpcy5saW5lID0gYUxpbmUgPT0gbnVsbCA/IG51bGwgOiBhTGluZTtcbiAgdGhpcy5jb2x1bW4gPSBhQ29sdW1uID09IG51bGwgPyBudWxsIDogYUNvbHVtbjtcbiAgdGhpcy5zb3VyY2UgPSBhU291cmNlID09IG51bGwgPyBudWxsIDogYVNvdXJjZTtcbiAgdGhpcy5uYW1lID0gYU5hbWUgPT0gbnVsbCA/IG51bGwgOiBhTmFtZTtcbiAgdGhpc1tpc1NvdXJjZU5vZGVdID0gdHJ1ZTtcbiAgaWYgKGFDaHVua3MgIT0gbnVsbCkgdGhpcy5hZGQoYUNodW5rcyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFNvdXJjZU5vZGUgZnJvbSBnZW5lcmF0ZWQgY29kZSBhbmQgYSBTb3VyY2VNYXBDb25zdW1lci5cbiAqXG4gKiBAcGFyYW0gYUdlbmVyYXRlZENvZGUgVGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAgZm9yIHRoZSBnZW5lcmF0ZWQgY29kZVxuICogQHBhcmFtIGFSZWxhdGl2ZVBhdGggT3B0aW9uYWwuIFRoZSBwYXRoIHRoYXQgcmVsYXRpdmUgc291cmNlcyBpbiB0aGVcbiAqICAgICAgICBTb3VyY2VNYXBDb25zdW1lciBzaG91bGQgYmUgcmVsYXRpdmUgdG8uXG4gKi9cblNvdXJjZU5vZGUuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VOb2RlX2Zyb21TdHJpbmdXaXRoU291cmNlTWFwKGFHZW5lcmF0ZWRDb2RlLCBhU291cmNlTWFwQ29uc3VtZXIsIGFSZWxhdGl2ZVBhdGgpIHtcbiAgICAvLyBUaGUgU291cmNlTm9kZSB3ZSB3YW50IHRvIGZpbGwgd2l0aCB0aGUgZ2VuZXJhdGVkIGNvZGVcbiAgICAvLyBhbmQgdGhlIFNvdXJjZU1hcFxuICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUoKTtcblxuICAgIC8vIEFsbCBldmVuIGluZGljZXMgb2YgdGhpcyBhcnJheSBhcmUgb25lIGxpbmUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlLFxuICAgIC8vIHdoaWxlIGFsbCBvZGQgaW5kaWNlcyBhcmUgdGhlIG5ld2xpbmVzIGJldHdlZW4gdHdvIGFkamFjZW50IGxpbmVzXG4gICAgLy8gKHNpbmNlIGBSRUdFWF9ORVdMSU5FYCBjYXB0dXJlcyBpdHMgbWF0Y2gpLlxuICAgIC8vIFByb2Nlc3NlZCBmcmFnbWVudHMgYXJlIGFjY2Vzc2VkIGJ5IGNhbGxpbmcgYHNoaWZ0TmV4dExpbmVgLlxuICAgIHZhciByZW1haW5pbmdMaW5lcyA9IGFHZW5lcmF0ZWRDb2RlLnNwbGl0KFJFR0VYX05FV0xJTkUpO1xuICAgIHZhciByZW1haW5pbmdMaW5lc0luZGV4ID0gMDtcbiAgICB2YXIgc2hpZnROZXh0TGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxpbmVDb250ZW50cyA9IGdldE5leHRMaW5lKCk7XG4gICAgICAvLyBUaGUgbGFzdCBsaW5lIG9mIGEgZmlsZSBtaWdodCBub3QgaGF2ZSBhIG5ld2xpbmUuXG4gICAgICB2YXIgbmV3TGluZSA9IGdldE5leHRMaW5lKCkgfHwgXCJcIjtcbiAgICAgIHJldHVybiBsaW5lQ29udGVudHMgKyBuZXdMaW5lO1xuXG4gICAgICBmdW5jdGlvbiBnZXROZXh0TGluZSgpIHtcbiAgICAgICAgcmV0dXJuIHJlbWFpbmluZ0xpbmVzSW5kZXggPCByZW1haW5pbmdMaW5lcy5sZW5ndGggP1xuICAgICAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleCsrXSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gV2UgbmVlZCB0byByZW1lbWJlciB0aGUgcG9zaXRpb24gb2YgXCJyZW1haW5pbmdMaW5lc1wiXG4gICAgdmFyIGxhc3RHZW5lcmF0ZWRMaW5lID0gMSwgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG5cbiAgICAvLyBUaGUgZ2VuZXJhdGUgU291cmNlTm9kZXMgd2UgbmVlZCBhIGNvZGUgcmFuZ2UuXG4gICAgLy8gVG8gZXh0cmFjdCBpdCBjdXJyZW50IGFuZCBsYXN0IG1hcHBpbmcgaXMgdXNlZC5cbiAgICAvLyBIZXJlIHdlIHN0b3JlIHRoZSBsYXN0IG1hcHBpbmcuXG4gICAgdmFyIGxhc3RNYXBwaW5nID0gbnVsbDtcblxuICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgaWYgKGxhc3RNYXBwaW5nICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGFkZCB0aGUgY29kZSBmcm9tIFwibGFzdE1hcHBpbmdcIiB0byBcIm1hcHBpbmdcIjpcbiAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlcmUgaXMgYSBuZXcgbGluZSBpbiBiZXR3ZWVuLlxuICAgICAgICBpZiAobGFzdEdlbmVyYXRlZExpbmUgPCBtYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICAvLyBBc3NvY2lhdGUgZmlyc3QgbGluZSB3aXRoIFwibGFzdE1hcHBpbmdcIlxuICAgICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkTGluZSsrO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgICAgIC8vIFRoZSByZW1haW5pbmcgY29kZSBpcyBhZGRlZCB3aXRob3V0IG1hcHBpbmdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGVyZSBpcyBubyBuZXcgbGluZSBpbiBiZXR3ZWVuLlxuICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgY29kZSBiZXR3ZWVuIFwibGFzdEdlbmVyYXRlZENvbHVtblwiIGFuZFxuICAgICAgICAgIC8vIFwibWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cIiB3aXRoIFwibGFzdE1hcHBpbmdcIlxuICAgICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdIHx8ICcnO1xuICAgICAgICAgIHZhciBjb2RlID0gbmV4dExpbmUuc3Vic3RyKDAsIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4XSA9IG5leHRMaW5lLnN1YnN0cihtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbik7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuICAgICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgY29kZSk7XG4gICAgICAgICAgLy8gTm8gbW9yZSByZW1haW5pbmcgY29kZSwgY29udGludWVcbiAgICAgICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBXZSBhZGQgdGhlIGdlbmVyYXRlZCBjb2RlIHVudGlsIHRoZSBmaXJzdCBtYXBwaW5nXG4gICAgICAvLyB0byB0aGUgU291cmNlTm9kZSB3aXRob3V0IGFueSBtYXBwaW5nLlxuICAgICAgLy8gRWFjaCBsaW5lIGlzIGFkZGVkIGFzIHNlcGFyYXRlIHN0cmluZy5cbiAgICAgIHdoaWxlIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICBub2RlLmFkZChzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICBsYXN0R2VuZXJhdGVkTGluZSsrO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RHZW5lcmF0ZWRDb2x1bW4gPCBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbikge1xuICAgICAgICB2YXIgbmV4dExpbmUgPSByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4XSB8fCAnJztcbiAgICAgICAgbm9kZS5hZGQobmV4dExpbmUuc3Vic3RyKDAsIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSk7XG4gICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuICAgICAgfVxuICAgICAgbGFzdE1hcHBpbmcgPSBtYXBwaW5nO1xuICAgIH0sIHRoaXMpO1xuICAgIC8vIFdlIGhhdmUgcHJvY2Vzc2VkIGFsbCBtYXBwaW5ncy5cbiAgICBpZiAocmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCkge1xuICAgICAgaWYgKGxhc3RNYXBwaW5nKSB7XG4gICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgcmVtYWluaW5nIGNvZGUgaW4gdGhlIGN1cnJlbnQgbGluZSB3aXRoIFwibGFzdE1hcHBpbmdcIlxuICAgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICB9XG4gICAgICAvLyBhbmQgYWRkIHRoZSByZW1haW5pbmcgbGluZXMgd2l0aG91dCBhbnkgbWFwcGluZ1xuICAgICAgbm9kZS5hZGQocmVtYWluaW5nTGluZXMuc3BsaWNlKHJlbWFpbmluZ0xpbmVzSW5kZXgpLmpvaW4oXCJcIikpO1xuICAgIH1cblxuICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnQgaW50byBTb3VyY2VOb2RlXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGFSZWxhdGl2ZVBhdGggIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVJlbGF0aXZlUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vZGU7XG5cbiAgICBmdW5jdGlvbiBhZGRNYXBwaW5nV2l0aENvZGUobWFwcGluZywgY29kZSkge1xuICAgICAgaWYgKG1hcHBpbmcgPT09IG51bGwgfHwgbWFwcGluZy5zb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2RlLmFkZChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhUmVsYXRpdmVQYXRoXG4gICAgICAgICAgPyB1dGlsLmpvaW4oYVJlbGF0aXZlUGF0aCwgbWFwcGluZy5zb3VyY2UpXG4gICAgICAgICAgOiBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgbm9kZS5hZGQobmV3IFNvdXJjZU5vZGUobWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5uYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEFkZCBhIGNodW5rIG9mIGdlbmVyYXRlZCBKUyB0byB0aGlzIHNvdXJjZSBub2RlLlxuICpcbiAqIEBwYXJhbSBhQ2h1bmsgQSBzdHJpbmcgc25pcHBldCBvZiBnZW5lcmF0ZWQgSlMgY29kZSwgYW5vdGhlciBpbnN0YW5jZSBvZlxuICogICAgICAgIFNvdXJjZU5vZGUsIG9yIGFuIGFycmF5IHdoZXJlIGVhY2ggbWVtYmVyIGlzIG9uZSBvZiB0aG9zZSB0aGluZ3MuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfYWRkKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgYUNodW5rLmZvckVhY2goZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICB0aGlzLmFkZChjaHVuayk7XG4gICAgfSwgdGhpcyk7XG4gIH1cbiAgZWxzZSBpZiAoYUNodW5rW2lzU291cmNlTm9kZV0gfHwgdHlwZW9mIGFDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChhQ2h1bmspIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChhQ2h1bmspO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgXCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCBcIiArIGFDaHVua1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFkZCBhIGNodW5rIG9mIGdlbmVyYXRlZCBKUyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcHJlcGVuZChhQ2h1bmspIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYUNodW5rKSkge1xuICAgIGZvciAodmFyIGkgPSBhQ2h1bmsubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLnByZXBlbmQoYUNodW5rW2ldKTtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAoYUNodW5rW2lzU291cmNlTm9kZV0gfHwgdHlwZW9mIGFDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgIHRoaXMuY2hpbGRyZW4udW5zaGlmdChhQ2h1bmspO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIEpTIHNuaXBwZXRzIGluIHRoaXMgbm9kZSBhbmQgaXRzIGNoaWxkcmVuLiBUaGVcbiAqIHdhbGtpbmcgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggc25pcHBldCBvZiBKUyBhbmQgaXMgcGFzc2VkIHRoYXRcbiAqIHNuaXBwZXQgYW5kIHRoZSBpdHMgb3JpZ2luYWwgYXNzb2NpYXRlZCBzb3VyY2UncyBsaW5lL2NvbHVtbiBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gYUZuIFRoZSB0cmF2ZXJzYWwgZnVuY3Rpb24uXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3dhbGsoYUZuKSB7XG4gIHZhciBjaHVuaztcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjaHVuayA9IHRoaXMuY2hpbGRyZW5baV07XG4gICAgaWYgKGNodW5rW2lzU291cmNlTm9kZV0pIHtcbiAgICAgIGNodW5rLndhbGsoYUZuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoY2h1bmsgIT09ICcnKSB7XG4gICAgICAgIGFGbihjaHVuaywgeyBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogTGlrZSBgU3RyaW5nLnByb3RvdHlwZS5qb2luYCBleGNlcHQgZm9yIFNvdXJjZU5vZGVzLiBJbnNlcnRzIGBhU3RyYCBiZXR3ZWVuXG4gKiBlYWNoIG9mIGB0aGlzLmNoaWxkcmVuYC5cbiAqXG4gKiBAcGFyYW0gYVNlcCBUaGUgc2VwYXJhdG9yLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gU291cmNlTm9kZV9qb2luKGFTZXApIHtcbiAgdmFyIG5ld0NoaWxkcmVuO1xuICB2YXIgaTtcbiAgdmFyIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICBpZiAobGVuID4gMCkge1xuICAgIG5ld0NoaWxkcmVuID0gW107XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbi0xOyBpKyspIHtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgICBuZXdDaGlsZHJlbi5wdXNoKGFTZXApO1xuICAgIH1cbiAgICBuZXdDaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5baV0pO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBuZXdDaGlsZHJlbjtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsbCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2Ugb24gdGhlIHZlcnkgcmlnaHQtbW9zdCBzb3VyY2Ugc25pcHBldC4gVXNlZnVsXG4gKiBmb3IgdHJpbW1pbmcgd2hpdGVzcGFjZSBmcm9tIHRoZSBlbmQgb2YgYSBzb3VyY2Ugbm9kZSwgZXRjLlxuICpcbiAqIEBwYXJhbSBhUGF0dGVybiBUaGUgcGF0dGVybiB0byByZXBsYWNlLlxuICogQHBhcmFtIGFSZXBsYWNlbWVudCBUaGUgdGhpbmcgdG8gcmVwbGFjZSB0aGUgcGF0dGVybiB3aXRoLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5yZXBsYWNlUmlnaHQgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3JlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KSB7XG4gIHZhciBsYXN0Q2hpbGQgPSB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gIGlmIChsYXN0Q2hpbGRbaXNTb3VyY2VOb2RlXSkge1xuICAgIGxhc3RDaGlsZC5yZXBsYWNlUmlnaHQoYVBhdHRlcm4sIGFSZXBsYWNlbWVudCk7XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIGxhc3RDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV0gPSBsYXN0Q2hpbGQucmVwbGFjZShhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goJycucmVwbGFjZShhUGF0dGVybiwgYVJlcGxhY2VtZW50KSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUuIFRoaXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgU291cmNlTWFwR2VuZXJhdG9yXG4gKiBpbiB0aGUgc291cmNlc0NvbnRlbnQgZmllbGQuXG4gKlxuICogQHBhcmFtIGFTb3VyY2VGaWxlIFRoZSBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGVcbiAqIEBwYXJhbSBhU291cmNlQ29udGVudCBUaGUgY29udGVudCBvZiB0aGUgc291cmNlIGZpbGVcbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfc2V0U291cmNlQ29udGVudChhU291cmNlRmlsZSwgYVNvdXJjZUNvbnRlbnQpIHtcbiAgICB0aGlzLnNvdXJjZUNvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoYVNvdXJjZUZpbGUpXSA9IGFTb3VyY2VDb250ZW50O1xuICB9O1xuXG4vKipcbiAqIFdhbGsgb3ZlciB0aGUgdHJlZSBvZiBTb3VyY2VOb2Rlcy4gVGhlIHdhbGtpbmcgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoXG4gKiBzb3VyY2UgZmlsZSBjb250ZW50IGFuZCBpcyBwYXNzZWQgdGhlIGZpbGVuYW1lIGFuZCBzb3VyY2UgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gYUZuIFRoZSB0cmF2ZXJzYWwgZnVuY3Rpb24uXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLndhbGtTb3VyY2VDb250ZW50cyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2Fsa1NvdXJjZUNvbnRlbnRzKGFGbikge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZHJlbltpXVtpc1NvdXJjZU5vZGVdKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5baV0ud2Fsa1NvdXJjZUNvbnRlbnRzKGFGbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZXMgPSBPYmplY3Qua2V5cyh0aGlzLnNvdXJjZUNvbnRlbnRzKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc291cmNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgYUZuKHV0aWwuZnJvbVNldFN0cmluZyhzb3VyY2VzW2ldKSwgdGhpcy5zb3VyY2VDb250ZW50c1tzb3VyY2VzW2ldXSk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc291cmNlIG5vZGUuIFdhbGtzIG92ZXIgdGhlIHRyZWVcbiAqIGFuZCBjb25jYXRlbmF0ZXMgYWxsIHRoZSB2YXJpb3VzIHNuaXBwZXRzIHRvZ2V0aGVyIHRvIG9uZSBzdHJpbmcuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZygpIHtcbiAgdmFyIHN0ciA9IFwiXCI7XG4gIHRoaXMud2FsayhmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBzdHIgKz0gY2h1bms7XG4gIH0pO1xuICByZXR1cm4gc3RyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZSBhbG9uZyB3aXRoIGEgc291cmNlXG4gKiBtYXAuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfdG9TdHJpbmdXaXRoU291cmNlTWFwKGFBcmdzKSB7XG4gIHZhciBnZW5lcmF0ZWQgPSB7XG4gICAgY29kZTogXCJcIixcbiAgICBsaW5lOiAxLFxuICAgIGNvbHVtbjogMFxuICB9O1xuICB2YXIgbWFwID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncyk7XG4gIHZhciBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gIHZhciBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICB2YXIgbGFzdE9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB2YXIgbGFzdE9yaWdpbmFsTmFtZSA9IG51bGw7XG4gIHRoaXMud2FsayhmdW5jdGlvbiAoY2h1bmssIG9yaWdpbmFsKSB7XG4gICAgZ2VuZXJhdGVkLmNvZGUgKz0gY2h1bms7XG4gICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAhPT0gbnVsbFxuICAgICAgICAmJiBvcmlnaW5hbC5saW5lICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmNvbHVtbiAhPT0gbnVsbCkge1xuICAgICAgaWYobGFzdE9yaWdpbmFsU291cmNlICE9PSBvcmlnaW5hbC5zb3VyY2VcbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbExpbmUgIT09IG9yaWdpbmFsLmxpbmVcbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbENvbHVtbiAhPT0gb3JpZ2luYWwuY29sdW1uXG4gICAgICAgICB8fCBsYXN0T3JpZ2luYWxOYW1lICE9PSBvcmlnaW5hbC5uYW1lKSB7XG4gICAgICAgIG1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgICBzb3VyY2U6IG9yaWdpbmFsLnNvdXJjZSxcbiAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgbGluZTogb3JpZ2luYWwubGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogb3JpZ2luYWwuY29sdW1uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYW1lOiBvcmlnaW5hbC5uYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbGFzdE9yaWdpbmFsU291cmNlID0gb3JpZ2luYWwuc291cmNlO1xuICAgICAgbGFzdE9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICBsYXN0T3JpZ2luYWxDb2x1bW4gPSBvcmlnaW5hbC5jb2x1bW47XG4gICAgICBsYXN0T3JpZ2luYWxOYW1lID0gb3JpZ2luYWwubmFtZTtcbiAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoc291cmNlTWFwcGluZ0FjdGl2ZSkge1xuICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpZHggPSAwLCBsZW5ndGggPSBjaHVuay5sZW5ndGg7IGlkeCA8IGxlbmd0aDsgaWR4KyspIHtcbiAgICAgIGlmIChjaHVuay5jaGFyQ29kZUF0KGlkeCkgPT09IE5FV0xJTkVfQ09ERSkge1xuICAgICAgICBnZW5lcmF0ZWQubGluZSsrO1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uID0gMDtcbiAgICAgICAgLy8gTWFwcGluZ3MgZW5kIGF0IGVvbFxuICAgICAgICBpZiAoaWR4ICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgbGFzdE9yaWdpbmFsU291cmNlID0gbnVsbDtcbiAgICAgICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoc291cmNlTWFwcGluZ0FjdGl2ZSkge1xuICAgICAgICAgIG1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgICAgb3JpZ2luYWw6IHtcbiAgICAgICAgICAgICAgbGluZTogb3JpZ2luYWwubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2VuZXJhdGVkLmNvbHVtbisrO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHRoaXMud2Fsa1NvdXJjZUNvbnRlbnRzKGZ1bmN0aW9uIChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KSB7XG4gICAgbWFwLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgc291cmNlQ29udGVudCk7XG4gIH0pO1xuXG4gIHJldHVybiB7IGNvZGU6IGdlbmVyYXRlZC5jb2RlLCBtYXA6IG1hcCB9O1xufTtcblxuZXhwb3J0cy5Tb3VyY2VOb2RlID0gU291cmNlTm9kZTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3NvdXJjZS1ub2RlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9
\ No newline at end of file
diff --git a/node_modules/source-map-js/dist/source-map.js b/node_modules/source-map-js/dist/source-map.js
deleted file mode 100644
index bdee9d1..0000000
--- a/node_modules/source-map-js/dist/source-map.js
+++ /dev/null
@@ -1,3390 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["sourceMap"] = factory();
- else
- root["sourceMap"] = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-
-
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
- exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
- exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;
- exports.SourceNode = __webpack_require__(10).SourceNode;
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var base64VLQ = __webpack_require__(2);
- var util = __webpack_require__(4);
- var ArraySet = __webpack_require__(5).ArraySet;
- var MappingList = __webpack_require__(6).MappingList;
-
- /**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- * - file: The filename of the generated source.
- * - sourceRoot: A root for all relative URLs in this source map.
- */
- function SourceMapGenerator(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util.getArg(aArgs, 'file', null);
- this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
- this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
- this._sources = new ArraySet();
- this._names = new ArraySet();
- this._mappings = new MappingList();
- this._sourcesContents = null;
- }
-
- SourceMapGenerator.prototype._version = 3;
-
- /**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
- SourceMapGenerator.fromSourceMap =
- function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
- var sourceRoot = aSourceMapConsumer.sourceRoot;
- var generator = new SourceMapGenerator({
- file: aSourceMapConsumer.file,
- sourceRoot: sourceRoot
- });
- aSourceMapConsumer.eachMapping(function (mapping) {
- var newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
-
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util.relative(sourceRoot, newMapping.source);
- }
-
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
-
- if (mapping.name != null) {
- newMapping.name = mapping.name;
- }
- }
-
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var sourceRelative = sourceFile;
- if (sourceRoot !== null) {
- sourceRelative = util.relative(sourceRoot, sourceFile);
- }
-
- if (!generator._sources.has(sourceRelative)) {
- generator._sources.add(sourceRelative);
- }
-
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
- }
- });
- return generator;
- };
-
- /**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- * - generated: An object with the generated line and column positions.
- * - original: An object with the original line and column positions.
- * - source: The original source file (relative to the sourceRoot).
- * - name: An optional original token name for this mapping.
- */
- SourceMapGenerator.prototype.addMapping =
- function SourceMapGenerator_addMapping(aArgs) {
- var generated = util.getArg(aArgs, 'generated');
- var original = util.getArg(aArgs, 'original', null);
- var source = util.getArg(aArgs, 'source', null);
- var name = util.getArg(aArgs, 'name', null);
-
- if (!this._skipValidation) {
- this._validateMapping(generated, original, source, name);
- }
-
- if (source != null) {
- source = String(source);
- if (!this._sources.has(source)) {
- this._sources.add(source);
- }
- }
-
- if (name != null) {
- name = String(name);
- if (!this._names.has(name)) {
- this._names.add(name);
- }
- }
-
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source: source,
- name: name
- });
- };
-
- /**
- * Set the source content for a source file.
- */
- SourceMapGenerator.prototype.setSourceContent =
- function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
- var source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util.relative(this._sourceRoot, source);
- }
-
- if (aSourceContent != null) {
- // Add the source content to the _sourcesContents map.
- // Create a new _sourcesContents map if the property is null.
- if (!this._sourcesContents) {
- this._sourcesContents = Object.create(null);
- }
- this._sourcesContents[util.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- // Remove the source file from the _sourcesContents map.
- // If the _sourcesContents map is empty, set the property to null.
- delete this._sourcesContents[util.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
- }
- };
-
- /**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- * If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- * to be applied. If relative, it is relative to the SourceMapConsumer.
- * This parameter is needed when the two source maps aren't in the same
- * directory, and the source map to be applied contains relative source
- * paths. If so, those relative source paths need to be rewritten
- * relative to the SourceMapGenerator.
- */
- SourceMapGenerator.prototype.applySourceMap =
- function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- var sourceFile = aSourceFile;
- // If aSourceFile is omitted, we will use the file property of the SourceMap
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
- 'or the source map\'s "file" property. Both were omitted.'
- );
- }
- sourceFile = aSourceMapConsumer.file;
- }
- var sourceRoot = this._sourceRoot;
- // Make "sourceFile" relative if an absolute Url is passed.
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- // Applying the SourceMap can add and remove items from the sources and
- // the names array.
- var newSources = new ArraySet();
- var newNames = new ArraySet();
-
- // Find mappings for the "sourceFile"
- this._mappings.unsortedForEach(function (mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- // Check if it can be mapped by the source map, then update the mapping.
- var original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- // Copy mapping
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util.join(aSourceMapPath, mapping.source)
- }
- if (sourceRoot != null) {
- mapping.source = util.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
- }
- }
- }
-
- var source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
-
- var name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
-
- }, this);
- this._sources = newSources;
- this._names = newNames;
-
- // Copy sourcesContents of applied map.
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aSourceMapPath != null) {
- sourceFile = util.join(aSourceMapPath, sourceFile);
- }
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- this.setSourceContent(sourceFile, content);
- }
- }, this);
- };
-
- /**
- * A mapping can have one of the three levels of data:
- *
- * 1. Just the generated position.
- * 2. The Generated position, original position, and original source.
- * 3. Generated and original position, original source, as well as a name
- * token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
- SourceMapGenerator.prototype._validateMapping =
- function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
- aName) {
- // When aOriginal is truthy but has empty values for .line and .column,
- // it is most likely a programmer error. In this case we throw a very
- // specific error message to try to guide them the right way.
- // For example: https://github.com/Polymer/polymer-bundler/pull/519
- if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
- throw new Error(
- 'original.line and original.column are not numbers -- you probably meant to omit ' +
- 'the original mapping entirely and only map the generated position. If so, pass ' +
- 'null for the original mapping instead of an object with empty or null values.'
- );
- }
-
- if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aGenerated.line > 0 && aGenerated.column >= 0
- && !aOriginal && !aSource && !aName) {
- // Case 1.
- return;
- }
- else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aOriginal && 'line' in aOriginal && 'column' in aOriginal
- && aGenerated.line > 0 && aGenerated.column >= 0
- && aOriginal.line > 0 && aOriginal.column >= 0
- && aSource) {
- // Cases 2 and 3.
- return;
- }
- else {
- throw new Error('Invalid mapping: ' + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- }));
- }
- };
-
- /**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
- SourceMapGenerator.prototype._serializeMappings =
- function SourceMapGenerator_serializeMappings() {
- var previousGeneratedColumn = 0;
- var previousGeneratedLine = 1;
- var previousOriginalColumn = 0;
- var previousOriginalLine = 0;
- var previousName = 0;
- var previousSource = 0;
- var result = '';
- var next;
- var mapping;
- var nameIdx;
- var sourceIdx;
-
- var mappings = this._mappings.toArray();
- for (var i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
- next = ''
-
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- next += ';';
- previousGeneratedLine++;
- }
- }
- else {
- if (i > 0) {
- if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- next += ',';
- }
- }
-
- next += base64VLQ.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (mapping.source != null) {
- sourceIdx = this._sources.indexOf(mapping.source);
- next += base64VLQ.encode(sourceIdx - previousSource);
- previousSource = sourceIdx;
-
- // lines are stored 0-based in SourceMap spec version 3
- next += base64VLQ.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- next += base64VLQ.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
-
- if (mapping.name != null) {
- nameIdx = this._names.indexOf(mapping.name);
- next += base64VLQ.encode(nameIdx - previousName);
- previousName = nameIdx;
- }
- }
-
- result += next;
- }
-
- return result;
- };
-
- SourceMapGenerator.prototype._generateSourcesContent =
- function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function (source) {
- if (!this._sourcesContents) {
- return null;
- }
- if (aSourceRoot != null) {
- source = util.relative(aSourceRoot, source);
- }
- var key = util.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
- ? this._sourcesContents[key]
- : null;
- }, this);
- };
-
- /**
- * Externalize the source map.
- */
- SourceMapGenerator.prototype.toJSON =
- function SourceMapGenerator_toJSON() {
- var map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
- }
-
- return map;
- };
-
- /**
- * Render the source map being generated to a string.
- */
- SourceMapGenerator.prototype.toString =
- function SourceMapGenerator_toString() {
- return JSON.stringify(this.toJSON());
- };
-
- exports.SourceMapGenerator = SourceMapGenerator;
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. 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 name of Google Inc. nor the names of its
- * 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
- * OWNER 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.
- */
-
- var base64 = __webpack_require__(3);
-
- // A single base 64 digit can contain 6 bits of data. For the base 64 variable
- // length quantities we use in the source map spec, the first bit is the sign,
- // the next four bits are the actual value, and the 6th bit is the
- // continuation bit. The continuation bit tells us whether there are more
- // digits in this value following this digit.
- //
- // Continuation
- // | Sign
- // | |
- // V V
- // 101011
-
- var VLQ_BASE_SHIFT = 5;
-
- // binary: 100000
- var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-
- // binary: 011111
- var VLQ_BASE_MASK = VLQ_BASE - 1;
-
- // binary: 100000
- var VLQ_CONTINUATION_BIT = VLQ_BASE;
-
- /**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
- function toVLQSigned(aValue) {
- return aValue < 0
- ? ((-aValue) << 1) + 1
- : (aValue << 1) + 0;
- }
-
- /**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
- */
- function fromVLQSigned(aValue) {
- var isNegative = (aValue & 1) === 1;
- var shifted = aValue >> 1;
- return isNegative
- ? -shifted
- : shifted;
- }
-
- /**
- * Returns the base 64 VLQ encoded value.
- */
- exports.encode = function base64VLQ_encode(aValue) {
- var encoded = "";
- var digit;
-
- var vlq = toVLQSigned(aValue);
-
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- // There are still more digits in this value, so we must make sure the
- // continuation bit is marked.
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
-
- return encoded;
- };
-
- /**
- * Decodes the next base 64 VLQ value from the given string and returns the
- * value and the rest of the string via the out parameter.
- */
- exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
- var strLen = aStr.length;
- var result = 0;
- var shift = 0;
- var continuation, digit;
-
- do {
- if (aIndex >= strLen) {
- throw new Error("Expected more digits in base 64 VLQ value.");
- }
-
- digit = base64.decode(aStr.charCodeAt(aIndex++));
- if (digit === -1) {
- throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
- }
-
- continuation = !!(digit & VLQ_CONTINUATION_BIT);
- digit &= VLQ_BASE_MASK;
- result = result + (digit << shift);
- shift += VLQ_BASE_SHIFT;
- } while (continuation);
-
- aOutParam.value = fromVLQSigned(result);
- aOutParam.rest = aIndex;
- };
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
-
- /**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
- exports.encode = function (number) {
- if (0 <= number && number < intToCharMap.length) {
- return intToCharMap[number];
- }
- throw new TypeError("Must be between 0 and 63: " + number);
- };
-
- /**
- * Decode a single base 64 character code digit to an integer. Returns -1 on
- * failure.
- */
- exports.decode = function (charCode) {
- var bigA = 65; // 'A'
- var bigZ = 90; // 'Z'
-
- var littleA = 97; // 'a'
- var littleZ = 122; // 'z'
-
- var zero = 48; // '0'
- var nine = 57; // '9'
-
- var plus = 43; // '+'
- var slash = 47; // '/'
-
- var littleOffset = 26;
- var numberOffset = 52;
-
- // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
- if (bigA <= charCode && charCode <= bigZ) {
- return (charCode - bigA);
- }
-
- // 26 - 51: abcdefghijklmnopqrstuvwxyz
- if (littleA <= charCode && charCode <= littleZ) {
- return (charCode - littleA + littleOffset);
- }
-
- // 52 - 61: 0123456789
- if (zero <= charCode && charCode <= nine) {
- return (charCode - zero + numberOffset);
- }
-
- // 62: +
- if (charCode == plus) {
- return 62;
- }
-
- // 63: /
- if (charCode == slash) {
- return 63;
- }
-
- // Invalid base64 digit.
- return -1;
- };
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- /**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
- function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- } else {
- throw new Error('"' + aName + '" is a required argument.');
- }
- }
- exports.getArg = getArg;
-
- var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
- var dataUrlRegexp = /^data:.+\,.+$/;
-
- function urlParse(aUrl) {
- var match = aUrl.match(urlRegexp);
- if (!match) {
- return null;
- }
- return {
- scheme: match[1],
- auth: match[2],
- host: match[3],
- port: match[4],
- path: match[5]
- };
- }
- exports.urlParse = urlParse;
-
- function urlGenerate(aParsedUrl) {
- var url = '';
- if (aParsedUrl.scheme) {
- url += aParsedUrl.scheme + ':';
- }
- url += '//';
- if (aParsedUrl.auth) {
- url += aParsedUrl.auth + '@';
- }
- if (aParsedUrl.host) {
- url += aParsedUrl.host;
- }
- if (aParsedUrl.port) {
- url += ":" + aParsedUrl.port
- }
- if (aParsedUrl.path) {
- url += aParsedUrl.path;
- }
- return url;
- }
- exports.urlGenerate = urlGenerate;
-
- var MAX_CACHED_INPUTS = 32;
-
- /**
- * Takes some function `f(input) -> result` and returns a memoized version of
- * `f`.
- *
- * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The
- * memoization is a dumb-simple, linear least-recently-used cache.
- */
- function lruMemoize(f) {
- var cache = [];
-
- return function(input) {
- for (var i = 0; i < cache.length; i++) {
- if (cache[i].input === input) {
- var temp = cache[0];
- cache[0] = cache[i];
- cache[i] = temp;
- return cache[0].result;
- }
- }
-
- var result = f(input);
-
- cache.unshift({
- input,
- result,
- });
-
- if (cache.length > MAX_CACHED_INPUTS) {
- cache.pop();
- }
-
- return result;
- };
- }
-
- /**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consecutive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
- var normalize = lruMemoize(function normalize(aPath) {
- var path = aPath;
- var url = urlParse(aPath);
- if (url) {
- if (!url.path) {
- return aPath;
- }
- path = url.path;
- }
- var isAbsolute = exports.isAbsolute(path);
- // Split the path into parts between `/` characters. This is much faster than
- // using `.split(/\/+/g)`.
- var parts = [];
- var start = 0;
- var i = 0;
- while (true) {
- start = i;
- i = path.indexOf("/", start);
- if (i === -1) {
- parts.push(path.slice(start));
- break;
- } else {
- parts.push(path.slice(start, i));
- while (i < path.length && path[i] === "/") {
- i++;
- }
- }
- }
-
- for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
- part = parts[i];
- if (part === '.') {
- parts.splice(i, 1);
- } else if (part === '..') {
- up++;
- } else if (up > 0) {
- if (part === '') {
- // The first part is blank if the path is absolute. Trying to go
- // above the root is a no-op. Therefore we can remove all '..' parts
- // directly after the root.
- parts.splice(i + 1, up);
- up = 0;
- } else {
- parts.splice(i, 2);
- up--;
- }
- }
- }
- path = parts.join('/');
-
- if (path === '') {
- path = isAbsolute ? '/' : '.';
- }
-
- if (url) {
- url.path = path;
- return urlGenerate(url);
- }
- return path;
- });
- exports.normalize = normalize;
-
- /**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- * first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- * is updated with the result and aRoot is returned. Otherwise the result
- * is returned.
- * - If aPath is absolute, the result is aPath.
- * - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
- function join(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
- if (aPath === "") {
- aPath = ".";
- }
- var aPathUrl = urlParse(aPath);
- var aRootUrl = urlParse(aRoot);
- if (aRootUrl) {
- aRoot = aRootUrl.path || '/';
- }
-
- // `join(foo, '//www.example.org')`
- if (aPathUrl && !aPathUrl.scheme) {
- if (aRootUrl) {
- aPathUrl.scheme = aRootUrl.scheme;
- }
- return urlGenerate(aPathUrl);
- }
-
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
- return aPath;
- }
-
- // `join('http://', 'www.example.com')`
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
- aRootUrl.host = aPath;
- return urlGenerate(aRootUrl);
- }
-
- var joined = aPath.charAt(0) === '/'
- ? aPath
- : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
-
- if (aRootUrl) {
- aRootUrl.path = joined;
- return urlGenerate(aRootUrl);
- }
- return joined;
- }
- exports.join = join;
-
- exports.isAbsolute = function (aPath) {
- return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
- };
-
- /**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
- function relative(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
-
- aRoot = aRoot.replace(/\/$/, '');
-
- // It is possible for the path to be above the root. In this case, simply
- // checking whether the root is a prefix of the path won't work. Instead, we
- // need to remove components from the root one by one, until either we find
- // a prefix that fits, or we run out of components to remove.
- var level = 0;
- while (aPath.indexOf(aRoot + '/') !== 0) {
- var index = aRoot.lastIndexOf("/");
- if (index < 0) {
- return aPath;
- }
-
- // If the only part of the root that is left is the scheme (i.e. http://,
- // file:///, etc.), one or more slashes (/), or simply nothing at all, we
- // have exhausted all components, so the path is not relative to the root.
- aRoot = aRoot.slice(0, index);
- if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
- return aPath;
- }
-
- ++level;
- }
-
- // Make sure we add a "../" for each component we removed from the root.
- return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
- }
- exports.relative = relative;
-
- var supportsNullProto = (function () {
- var obj = Object.create(null);
- return !('__proto__' in obj);
- }());
-
- function identity (s) {
- return s;
- }
-
- /**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
- function toSetString(aStr) {
- if (isProtoString(aStr)) {
- return '$' + aStr;
- }
-
- return aStr;
- }
- exports.toSetString = supportsNullProto ? identity : toSetString;
-
- function fromSetString(aStr) {
- if (isProtoString(aStr)) {
- return aStr.slice(1);
- }
-
- return aStr;
- }
- exports.fromSetString = supportsNullProto ? identity : fromSetString;
-
- function isProtoString(s) {
- if (!s) {
- return false;
- }
-
- var length = s.length;
-
- if (length < 9 /* "__proto__".length */) {
- return false;
- }
-
- if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
- s.charCodeAt(length - 2) !== 95 /* '_' */ ||
- s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 4) !== 116 /* 't' */ ||
- s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
- s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
- s.charCodeAt(length - 8) !== 95 /* '_' */ ||
- s.charCodeAt(length - 9) !== 95 /* '_' */) {
- return false;
- }
-
- for (var i = length - 10; i >= 0; i--) {
- if (s.charCodeAt(i) !== 36 /* '$' */) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
- function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
- var cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByOriginalPositions = compareByOriginalPositions;
-
- function compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {
- var cmp
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;
-
- /**
- * Comparator between two mappings with deflated source and name indices where
- * the generated positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
- function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
-
- function compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;
-
- function strcmp(aStr1, aStr2) {
- if (aStr1 === aStr2) {
- return 0;
- }
-
- if (aStr1 === null) {
- return 1; // aStr2 !== null
- }
-
- if (aStr2 === null) {
- return -1; // aStr1 !== null
- }
-
- if (aStr1 > aStr2) {
- return 1;
- }
-
- return -1;
- }
-
- /**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
- function compareByGeneratedPositionsInflated(mappingA, mappingB) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-
- /**
- * Strip any JSON XSSI avoidance prefix from the string (as documented
- * in the source maps specification), and then parse the string as
- * JSON.
- */
- function parseSourceMapInput(str) {
- return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
- }
- exports.parseSourceMapInput = parseSourceMapInput;
-
- /**
- * Compute the URL of a source given the the source root, the source's
- * URL, and the source map's URL.
- */
- function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
- sourceURL = sourceURL || '';
-
- if (sourceRoot) {
- // This follows what Chrome does.
- if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
- sourceRoot += '/';
- }
- // The spec says:
- // Line 4: An optional source root, useful for relocating source
- // files on a server or removing repeated values in the
- // “sources” entry. This value is prepended to the individual
- // entries in the “source” field.
- sourceURL = sourceRoot + sourceURL;
- }
-
- // Historically, SourceMapConsumer did not take the sourceMapURL as
- // a parameter. This mode is still somewhat supported, which is why
- // this code block is conditional. However, it's preferable to pass
- // the source map URL to SourceMapConsumer, so that this function
- // can implement the source URL resolution algorithm as outlined in
- // the spec. This block is basically the equivalent of:
- // new URL(sourceURL, sourceMapURL).toString()
- // ... except it avoids using URL, which wasn't available in the
- // older releases of node still supported by this library.
- //
- // The spec says:
- // If the sources are not absolute URLs after prepending of the
- // “sourceRoot”, the sources are resolved relative to the
- // SourceMap (like resolving script src in a html document).
- if (sourceMapURL) {
- var parsed = urlParse(sourceMapURL);
- if (!parsed) {
- throw new Error("sourceMapURL could not be parsed");
- }
- if (parsed.path) {
- // Strip the last path component, but keep the "/".
- var index = parsed.path.lastIndexOf('/');
- if (index >= 0) {
- parsed.path = parsed.path.substring(0, index + 1);
- }
- }
- sourceURL = join(urlGenerate(parsed), sourceURL);
- }
-
- return normalize(sourceURL);
- }
- exports.computeSourceURL = computeSourceURL;
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
- var has = Object.prototype.hasOwnProperty;
- var hasNativeMap = typeof Map !== "undefined";
-
- /**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
- function ArraySet() {
- this._array = [];
- this._set = hasNativeMap ? new Map() : Object.create(null);
- }
-
- /**
- * Static method for creating ArraySet instances from an existing array.
- */
- ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
- var set = new ArraySet();
- for (var i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
- };
-
- /**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
- ArraySet.prototype.size = function ArraySet_size() {
- return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
- };
-
- /**
- * Add the given string to this set.
- *
- * @param String aStr
- */
- ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
- var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
- var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
- var idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- if (hasNativeMap) {
- this._set.set(aStr, idx);
- } else {
- this._set[sStr] = idx;
- }
- }
- };
-
- /**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
- ArraySet.prototype.has = function ArraySet_has(aStr) {
- if (hasNativeMap) {
- return this._set.has(aStr);
- } else {
- var sStr = util.toSetString(aStr);
- return has.call(this._set, sStr);
- }
- };
-
- /**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
- ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
- if (hasNativeMap) {
- var idx = this._set.get(aStr);
- if (idx >= 0) {
- return idx;
- }
- } else {
- var sStr = util.toSetString(aStr);
- if (has.call(this._set, sStr)) {
- return this._set[sStr];
- }
- }
-
- throw new Error('"' + aStr + '" is not in the set.');
- };
-
- /**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
- ArraySet.prototype.at = function ArraySet_at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error('No element indexed by ' + aIdx);
- };
-
- /**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
- ArraySet.prototype.toArray = function ArraySet_toArray() {
- return this._array.slice();
- };
-
- exports.ArraySet = ArraySet;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
-
- /**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
- function generatedPositionAfter(mappingA, mappingB) {
- // Optimized for most common case
- var lineA = mappingA.generatedLine;
- var lineB = mappingB.generatedLine;
- var columnA = mappingA.generatedColumn;
- var columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
- util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
- }
-
- /**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a neglibable overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
- function MappingList() {
- this._array = [];
- this._sorted = true;
- // Serves as infimum
- this._last = {generatedLine: -1, generatedColumn: 0};
- }
-
- /**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
- MappingList.prototype.unsortedForEach =
- function MappingList_forEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- };
-
- /**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
- MappingList.prototype.add = function MappingList_add(aMapping) {
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
- };
-
- /**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
- MappingList.prototype.toArray = function MappingList_toArray() {
- if (!this._sorted) {
- this._array.sort(util.compareByGeneratedPositionsInflated);
- this._sorted = true;
- }
- return this._array;
- };
-
- exports.MappingList = MappingList;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
- var binarySearch = __webpack_require__(8);
- var ArraySet = __webpack_require__(5).ArraySet;
- var base64VLQ = __webpack_require__(2);
- var quickSort = __webpack_require__(9).quickSort;
-
- function SourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- return sourceMap.sections != null
- ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
- : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
- }
-
- SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
- }
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- SourceMapConsumer.prototype._version = 3;
-
- // `__generatedMappings` and `__originalMappings` are arrays that hold the
- // parsed mapping coordinates from the source map's "mappings" attribute. They
- // are lazily instantiated, accessed via the `_generatedMappings` and
- // `_originalMappings` getters respectively, and we only parse the mappings
- // and create these arrays once queried for a source location. We jump through
- // these hoops because there can be many thousands of mappings, and parsing
- // them is expensive, so we only want to do it if we must.
- //
- // Each object in the arrays is of the form:
- //
- // {
- // generatedLine: The line number in the generated code,
- // generatedColumn: The column number in the generated code,
- // source: The path to the original source file that generated this
- // chunk of code,
- // originalLine: The line number in the original source that
- // corresponds to this chunk of generated code,
- // originalColumn: The column number in the original source that
- // corresponds to this chunk of generated code,
- // name: The name of the original symbol which generated this chunk of
- // code.
- // }
- //
- // All properties except for `generatedLine` and `generatedColumn` can be
- // `null`.
- //
- // `_generatedMappings` is ordered by the generated positions.
- //
- // `_originalMappings` is ordered by the original positions.
-
- SourceMapConsumer.prototype.__generatedMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__generatedMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__generatedMappings;
- }
- });
-
- SourceMapConsumer.prototype.__originalMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__originalMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__originalMappings;
- }
- });
-
- SourceMapConsumer.prototype._charIsMappingSeparator =
- function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
- var c = aStr.charAt(index);
- return c === ";" || c === ",";
- };
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- SourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- throw new Error("Subclasses must implement _parseMappings");
- };
-
- SourceMapConsumer.GENERATED_ORDER = 1;
- SourceMapConsumer.ORIGINAL_ORDER = 2;
-
- SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
- SourceMapConsumer.LEAST_UPPER_BOUND = 2;
-
- /**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- * The function that is called with each mapping.
- * @param Object aContext
- * Optional. If specified, this object will be the value of `this` every
- * time that `aCallback` is called.
- * @param aOrder
- * Either `SourceMapConsumer.GENERATED_ORDER` or
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- * iterate over the mappings sorted by the generated file's line/column
- * order or the original's source/line/column order, respectively. Defaults to
- * `SourceMapConsumer.GENERATED_ORDER`.
- */
- SourceMapConsumer.prototype.eachMapping =
- function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
- var context = aContext || null;
- var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
-
- var mappings;
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- mappings = this._generatedMappings;
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- mappings = this._originalMappings;
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
-
- var sourceRoot = this.sourceRoot;
- mappings.map(function (mapping) {
- var source = mapping.source === null ? null : this._sources.at(mapping.source);
- source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
- return {
- source: source,
- generatedLine: mapping.generatedLine,
- generatedColumn: mapping.generatedColumn,
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: mapping.name === null ? null : this._names.at(mapping.name)
- };
- }, this).forEach(aCallback, context);
- };
-
- /**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number is 1-based.
- * - column: Optional. the column number in the original source.
- * The column number is 0-based.
- *
- * and an array of objects is returned, each with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- SourceMapConsumer.prototype.allGeneratedPositionsFor =
- function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
- var line = util.getArg(aArgs, 'line');
-
- // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
- // returns the index of the closest mapping less than the needle. By
- // setting needle.originalColumn to 0, we thus find the last mapping for
- // the given line, provided such a mapping exists.
- var needle = {
- source: util.getArg(aArgs, 'source'),
- originalLine: line,
- originalColumn: util.getArg(aArgs, 'column', 0)
- };
-
- needle.source = this._findSourceIndex(needle.source);
- if (needle.source < 0) {
- return [];
- }
-
- var mappings = [];
-
- var index = this._findMapping(needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- binarySearch.LEAST_UPPER_BOUND);
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (aArgs.column === undefined) {
- var originalLine = mapping.originalLine;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we found. Since
- // mappings are sorted, this is guaranteed to find all mappings for
- // the line we found.
- while (mapping && mapping.originalLine === originalLine) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- } else {
- var originalColumn = mapping.originalColumn;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we were searching for.
- // Since mappings are sorted, this is guaranteed to find all mappings for
- // the line we are searching for.
- while (mapping &&
- mapping.originalLine === line &&
- mapping.originalColumn == originalColumn) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- }
- }
-
- return mappings;
- };
-
- exports.SourceMapConsumer = SourceMapConsumer;
-
- /**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The first parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - sources: An array of URLs to the original source files.
- * - names: An array of identifiers which can be referrenced by individual mappings.
- * - sourceRoot: Optional. The URL root from which all sources are relative.
- * - sourcesContent: Optional. An array of contents of the original source files.
- * - mappings: A string of base64 VLQs which contain the actual mappings.
- * - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- * {
- * version : 3,
- * file: "out.js",
- * sourceRoot : "",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AA,AB;;ABCDE;"
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
- function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sources = util.getArg(sourceMap, 'sources');
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
- // requires the array) to play nice here.
- var names = util.getArg(sourceMap, 'names', []);
- var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
- var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
- var mappings = util.getArg(sourceMap, 'mappings');
- var file = util.getArg(sourceMap, 'file', null);
-
- // Once again, Sass deviates from the spec and supplies the version as a
- // string rather than a number, so we use loose equality checking here.
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- if (sourceRoot) {
- sourceRoot = util.normalize(sourceRoot);
- }
-
- sources = sources
- .map(String)
- // Some source maps produce relative source paths like "./foo.js" instead of
- // "foo.js". Normalize these first so that future comparisons will succeed.
- // See bugzil.la/1090768.
- .map(util.normalize)
- // Always ensure that absolute sources are internally stored relative to
- // the source root, if the source root is absolute. Not doing this would
- // be particularly problematic when the source root is a prefix of the
- // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
- .map(function (source) {
- return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
- ? util.relative(sourceRoot, source)
- : source;
- });
-
- // Pass `true` below to allow duplicate names and sources. While source maps
- // are intended to be compressed and deduplicated, the TypeScript compiler
- // sometimes generates source maps with duplicates in them. See Github issue
- // #72 and bugzil.la/889492.
- this._names = ArraySet.fromArray(names.map(String), true);
- this._sources = ArraySet.fromArray(sources, true);
-
- this._absoluteSources = this._sources.toArray().map(function (s) {
- return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
- });
-
- this.sourceRoot = sourceRoot;
- this.sourcesContent = sourcesContent;
- this._mappings = mappings;
- this._sourceMapURL = aSourceMapURL;
- this.file = file;
- }
-
- BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
- BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
-
- /**
- * Utility function to find the index of a source. Returns -1 if not
- * found.
- */
- BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
-
- if (this._sources.has(relativeSource)) {
- return this._sources.indexOf(relativeSource);
- }
-
- // Maybe aSource is an absolute URL as returned by |sources|. In
- // this case we can't simply undo the transform.
- var i;
- for (i = 0; i < this._absoluteSources.length; ++i) {
- if (this._absoluteSources[i] == aSource) {
- return i;
- }
- }
-
- return -1;
- };
-
- /**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- * The source map that will be consumed.
- * @param String aSourceMapURL
- * The URL at which the source map can be found (optional)
- * @returns BasicSourceMapConsumer
- */
- BasicSourceMapConsumer.fromSourceMap =
- function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
- var smc = Object.create(BasicSourceMapConsumer.prototype);
-
- var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
- var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
- smc.sourceRoot = aSourceMap._sourceRoot;
- smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
- smc.sourceRoot);
- smc.file = aSourceMap._file;
- smc._sourceMapURL = aSourceMapURL;
- smc._absoluteSources = smc._sources.toArray().map(function (s) {
- return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
- });
-
- // Because we are modifying the entries (by converting string sources and
- // names to indices into the sources and names ArraySets), we have to make
- // a copy of the entry or else bad things happen. Shared mutable state
- // strikes again! See github issue #191.
-
- var generatedMappings = aSourceMap._mappings.toArray().slice();
- var destGeneratedMappings = smc.__generatedMappings = [];
- var destOriginalMappings = smc.__originalMappings = [];
-
- for (var i = 0, length = generatedMappings.length; i < length; i++) {
- var srcMapping = generatedMappings[i];
- var destMapping = new Mapping;
- destMapping.generatedLine = srcMapping.generatedLine;
- destMapping.generatedColumn = srcMapping.generatedColumn;
-
- if (srcMapping.source) {
- destMapping.source = sources.indexOf(srcMapping.source);
- destMapping.originalLine = srcMapping.originalLine;
- destMapping.originalColumn = srcMapping.originalColumn;
-
- if (srcMapping.name) {
- destMapping.name = names.indexOf(srcMapping.name);
- }
-
- destOriginalMappings.push(destMapping);
- }
-
- destGeneratedMappings.push(destMapping);
- }
-
- quickSort(smc.__originalMappings, util.compareByOriginalPositions);
-
- return smc;
- };
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- BasicSourceMapConsumer.prototype._version = 3;
-
- /**
- * The list of original sources.
- */
- Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
- get: function () {
- return this._absoluteSources.slice();
- }
- });
-
- /**
- * Provide the JIT with a nice shape / hidden class.
- */
- function Mapping() {
- this.generatedLine = 0;
- this.generatedColumn = 0;
- this.source = null;
- this.originalLine = null;
- this.originalColumn = null;
- this.name = null;
- }
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-
- const compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;
- function sortGenerated(array, start) {
- let l = array.length;
- let n = array.length - start;
- if (n <= 1) {
- return;
- } else if (n == 2) {
- let a = array[start];
- let b = array[start + 1];
- if (compareGenerated(a, b) > 0) {
- array[start] = b;
- array[start + 1] = a;
- }
- } else if (n < 20) {
- for (let i = start; i < l; i++) {
- for (let j = i; j > start; j--) {
- let a = array[j - 1];
- let b = array[j];
- if (compareGenerated(a, b) <= 0) {
- break;
- }
- array[j - 1] = b;
- array[j] = a;
- }
- }
- } else {
- quickSort(array, compareGenerated, start);
- }
- }
- BasicSourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- var generatedLine = 1;
- var previousGeneratedColumn = 0;
- var previousOriginalLine = 0;
- var previousOriginalColumn = 0;
- var previousSource = 0;
- var previousName = 0;
- var length = aStr.length;
- var index = 0;
- var cachedSegments = {};
- var temp = {};
- var originalMappings = [];
- var generatedMappings = [];
- var mapping, str, segment, end, value;
-
- let subarrayStart = 0;
- while (index < length) {
- if (aStr.charAt(index) === ';') {
- generatedLine++;
- index++;
- previousGeneratedColumn = 0;
-
- sortGenerated(generatedMappings, subarrayStart);
- subarrayStart = generatedMappings.length;
- }
- else if (aStr.charAt(index) === ',') {
- index++;
- }
- else {
- mapping = new Mapping();
- mapping.generatedLine = generatedLine;
-
- for (end = index; end < length; end++) {
- if (this._charIsMappingSeparator(aStr, end)) {
- break;
- }
- }
- str = aStr.slice(index, end);
-
- segment = [];
- while (index < end) {
- base64VLQ.decode(aStr, index, temp);
- value = temp.value;
- index = temp.rest;
- segment.push(value);
- }
-
- if (segment.length === 2) {
- throw new Error('Found a source, but no line and column');
- }
-
- if (segment.length === 3) {
- throw new Error('Found a source and line, but no column');
- }
-
- // Generated column.
- mapping.generatedColumn = previousGeneratedColumn + segment[0];
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (segment.length > 1) {
- // Original source.
- mapping.source = previousSource + segment[1];
- previousSource += segment[1];
-
- // Original line.
- mapping.originalLine = previousOriginalLine + segment[2];
- previousOriginalLine = mapping.originalLine;
- // Lines are stored 0-based
- mapping.originalLine += 1;
-
- // Original column.
- mapping.originalColumn = previousOriginalColumn + segment[3];
- previousOriginalColumn = mapping.originalColumn;
-
- if (segment.length > 4) {
- // Original name.
- mapping.name = previousName + segment[4];
- previousName += segment[4];
- }
- }
-
- generatedMappings.push(mapping);
- if (typeof mapping.originalLine === 'number') {
- let currentSource = mapping.source;
- while (originalMappings.length <= currentSource) {
- originalMappings.push(null);
- }
- if (originalMappings[currentSource] === null) {
- originalMappings[currentSource] = [];
- }
- originalMappings[currentSource].push(mapping);
- }
- }
- }
-
- sortGenerated(generatedMappings, subarrayStart);
- this.__generatedMappings = generatedMappings;
-
- for (var i = 0; i < originalMappings.length; i++) {
- if (originalMappings[i] != null) {
- quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);
- }
- }
- this.__originalMappings = [].concat(...originalMappings);
- };
-
- /**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
- BasicSourceMapConsumer.prototype._findMapping =
- function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
- aColumnName, aComparator, aBias) {
- // To return the position we are searching for, we must first find the
- // mapping for the given position and then return the opposite position it
- // points to. Because the mappings are sorted, we can use binary search to
- // find the best mapping.
-
- if (aNeedle[aLineName] <= 0) {
- throw new TypeError('Line must be greater than or equal to 1, got '
- + aNeedle[aLineName]);
- }
- if (aNeedle[aColumnName] < 0) {
- throw new TypeError('Column must be greater than or equal to 0, got '
- + aNeedle[aColumnName]);
- }
-
- return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
- };
-
- /**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
- BasicSourceMapConsumer.prototype.computeColumnSpans =
- function SourceMapConsumer_computeColumnSpans() {
- for (var index = 0; index < this._generatedMappings.length; ++index) {
- var mapping = this._generatedMappings[index];
-
- // Mappings do not contain a field for the last generated columnt. We
- // can come up with an optimistic estimate, however, by assuming that
- // mappings are contiguous (i.e. given two consecutive mappings, the
- // first mapping ends where the second one starts).
- if (index + 1 < this._generatedMappings.length) {
- var nextMapping = this._generatedMappings[index + 1];
-
- if (mapping.generatedLine === nextMapping.generatedLine) {
- mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
- continue;
- }
- }
-
- // The last mapping for each line spans the entire line.
- mapping.lastGeneratedColumn = Infinity;
- }
- };
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- BasicSourceMapConsumer.prototype.originalPositionFor =
- function SourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._generatedMappings,
- "generatedLine",
- "generatedColumn",
- util.compareByGeneratedPositionsDeflated,
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._generatedMappings[index];
-
- if (mapping.generatedLine === needle.generatedLine) {
- var source = util.getArg(mapping, 'source', null);
- if (source !== null) {
- source = this._sources.at(source);
- source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
- }
- var name = util.getArg(mapping, 'name', null);
- if (name !== null) {
- name = this._names.at(name);
- }
- return {
- source: source,
- line: util.getArg(mapping, 'originalLine', null),
- column: util.getArg(mapping, 'originalColumn', null),
- name: name
- };
- }
- }
-
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- };
-
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
- function BasicSourceMapConsumer_hasContentsOfAllSources() {
- if (!this.sourcesContent) {
- return false;
- }
- return this.sourcesContent.length >= this._sources.size() &&
- !this.sourcesContent.some(function (sc) { return sc == null; });
- };
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- BasicSourceMapConsumer.prototype.sourceContentFor =
- function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- if (!this.sourcesContent) {
- return null;
- }
-
- var index = this._findSourceIndex(aSource);
- if (index >= 0) {
- return this.sourcesContent[index];
- }
-
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
-
- var url;
- if (this.sourceRoot != null
- && (url = util.urlParse(this.sourceRoot))) {
- // XXX: file:// URIs and absolute paths lead to unexpected behavior for
- // many users. We can help them out when they expect file:// URIs to
- // behave like it would if they were running a local HTTP server. See
- // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
- var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
- if (url.scheme == "file"
- && this._sources.has(fileUriAbsPath)) {
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
- }
-
- if ((!url.path || url.path == "/")
- && this._sources.has("/" + relativeSource)) {
- return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
- }
- }
-
- // This function is used recursively from
- // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
- // don't want to throw if we can't find the source - we just want to
- // return null, so we provide a flag to exit gracefully.
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + relativeSource + '" is not in the SourceMap.');
- }
- };
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- BasicSourceMapConsumer.prototype.generatedPositionFor =
- function SourceMapConsumer_generatedPositionFor(aArgs) {
- var source = util.getArg(aArgs, 'source');
- source = this._findSourceIndex(source);
- if (source < 0) {
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
-
- var needle = {
- source: source,
- originalLine: util.getArg(aArgs, 'line'),
- originalColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (mapping.source === needle.source) {
- return {
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- };
- }
- }
-
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- };
-
- exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
-
- /**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The first parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - file: Optional. The generated file this source map is associated with.
- * - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- * - offset: The offset into the original specified at which this section
- * begins to apply, defined as an object with a "line" and "column"
- * field.
- * - map: A source map definition. This source map could also be indexed,
- * but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- * {
- * version : 3,
- * file: "app.js",
- * sections: [{
- * offset: {line:100, column:10},
- * map: {
- * version : 3,
- * file: "section.js",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AAAA,E;;ABCDE;"
- * }
- * }],
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
- function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sections = util.getArg(sourceMap, 'sections');
-
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- this._sources = new ArraySet();
- this._names = new ArraySet();
-
- var lastOffset = {
- line: -1,
- column: 0
- };
- this._sections = sections.map(function (s) {
- if (s.url) {
- // The url field will require support for asynchronicity.
- // See https://github.com/mozilla/source-map/issues/16
- throw new Error('Support for url field in sections not implemented.');
- }
- var offset = util.getArg(s, 'offset');
- var offsetLine = util.getArg(offset, 'line');
- var offsetColumn = util.getArg(offset, 'column');
-
- if (offsetLine < lastOffset.line ||
- (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
- throw new Error('Section offsets must be ordered and non-overlapping.');
- }
- lastOffset = offset;
-
- return {
- generatedOffset: {
- // The offset fields are 0-based, but we use 1-based indices when
- // encoding/decoding from VLQ.
- generatedLine: offsetLine + 1,
- generatedColumn: offsetColumn + 1
- },
- consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
- }
- });
- }
-
- IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
- IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- IndexedSourceMapConsumer.prototype._version = 3;
-
- /**
- * The list of original sources.
- */
- Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
- get: function () {
- var sources = [];
- for (var i = 0; i < this._sections.length; i++) {
- for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
- sources.push(this._sections[i].consumer.sources[j]);
- }
- }
- return sources;
- }
- });
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- IndexedSourceMapConsumer.prototype.originalPositionFor =
- function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- // Find the section containing the generated position we're trying to map
- // to an original position.
- var sectionIndex = binarySearch.search(needle, this._sections,
- function(needle, section) {
- var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
- if (cmp) {
- return cmp;
- }
-
- return (needle.generatedColumn -
- section.generatedOffset.generatedColumn);
- });
- var section = this._sections[sectionIndex];
-
- if (!section) {
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
-
- return section.consumer.originalPositionFor({
- line: needle.generatedLine -
- (section.generatedOffset.generatedLine - 1),
- column: needle.generatedColumn -
- (section.generatedOffset.generatedLine === needle.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- bias: aArgs.bias
- });
- };
-
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
- function IndexedSourceMapConsumer_hasContentsOfAllSources() {
- return this._sections.every(function (s) {
- return s.consumer.hasContentsOfAllSources();
- });
- };
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- IndexedSourceMapConsumer.prototype.sourceContentFor =
- function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- var content = section.consumer.sourceContentFor(aSource, true);
- if (content) {
- return content;
- }
- }
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + aSource + '" is not in the SourceMap.');
- }
- };
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- IndexedSourceMapConsumer.prototype.generatedPositionFor =
- function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- // Only consider this section if the requested source is in the list of
- // sources of the consumer.
- if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
- continue;
- }
- var generatedPosition = section.consumer.generatedPositionFor(aArgs);
- if (generatedPosition) {
- var ret = {
- line: generatedPosition.line +
- (section.generatedOffset.generatedLine - 1),
- column: generatedPosition.column +
- (section.generatedOffset.generatedLine === generatedPosition.line
- ? section.generatedOffset.generatedColumn - 1
- : 0)
- };
- return ret;
- }
- }
-
- return {
- line: null,
- column: null
- };
- };
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- IndexedSourceMapConsumer.prototype._parseMappings =
- function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- this.__generatedMappings = [];
- this.__originalMappings = [];
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
- var sectionMappings = section.consumer._generatedMappings;
- for (var j = 0; j < sectionMappings.length; j++) {
- var mapping = sectionMappings[j];
-
- var source = section.consumer._sources.at(mapping.source);
- source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
- this._sources.add(source);
- source = this._sources.indexOf(source);
-
- var name = null;
- if (mapping.name) {
- name = section.consumer._names.at(mapping.name);
- this._names.add(name);
- name = this._names.indexOf(name);
- }
-
- // The mappings coming from the consumer for the section have
- // generated positions relative to the start of the section, so we
- // need to offset them to be relative to the start of the concatenated
- // generated file.
- var adjustedMapping = {
- source: source,
- generatedLine: mapping.generatedLine +
- (section.generatedOffset.generatedLine - 1),
- generatedColumn: mapping.generatedColumn +
- (section.generatedOffset.generatedLine === mapping.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: name
- };
-
- this.__generatedMappings.push(adjustedMapping);
- if (typeof adjustedMapping.originalLine === 'number') {
- this.__originalMappings.push(adjustedMapping);
- }
- }
- }
-
- quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
- quickSort(this.__originalMappings, util.compareByOriginalPositions);
- };
-
- exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- exports.GREATEST_LOWER_BOUND = 1;
- exports.LEAST_UPPER_BOUND = 2;
-
- /**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- */
- function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
- // This function terminates when one of the following is true:
- //
- // 1. We find the exact element we are looking for.
- //
- // 2. We did not find the exact element, but we can return the index of
- // the next-closest element.
- //
- // 3. We did not find the exact element, and there is no next-closest
- // element than the one we are searching for, so we return -1.
- var mid = Math.floor((aHigh - aLow) / 2) + aLow;
- var cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- // Found the element we are looking for.
- return mid;
- }
- else if (cmp > 0) {
- // Our needle is greater than aHaystack[mid].
- if (aHigh - mid > 1) {
- // The element is in the upper half.
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // The exact needle element was not found in this haystack. Determine if
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return aHigh < aHaystack.length ? aHigh : -1;
- } else {
- return mid;
- }
- }
- else {
- // Our needle is less than aHaystack[mid].
- if (mid - aLow > 1) {
- // The element is in the lower half.
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return mid;
- } else {
- return aLow < 0 ? -1 : aLow;
- }
- }
- }
-
- /**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- * array and returns -1, 0, or 1 depending on whether the needle is less
- * than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
- exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
- if (aHaystack.length === 0) {
- return -1;
- }
-
- var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
- aCompare, aBias || exports.GREATEST_LOWER_BOUND);
- if (index < 0) {
- return -1;
- }
-
- // We have found either the exact element, or the next-closest element than
- // the one we are searching for. However, there may be more than one such
- // element. Make sure we always return the smallest of these.
- while (index - 1 >= 0) {
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
- break;
- }
- --index;
- }
-
- return index;
- };
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- // It turns out that some (most?) JavaScript engines don't self-host
- // `Array.prototype.sort`. This makes sense because C++ will likely remain
- // faster than JS when doing raw CPU-intensive sorting. However, when using a
- // custom comparator function, calling back and forth between the VM's C++ and
- // JIT'd JS is rather slow *and* loses JIT type information, resulting in
- // worse generated code for the comparator function than would be optimal. In
- // fact, when sorting with a comparator, these costs outweigh the benefits of
- // sorting in C++. By using our own JS-implemented Quick Sort (below), we get
- // a ~3500ms mean speed-up in `bench/bench.html`.
-
- function SortTemplate(comparator) {
-
- /**
- * Swap the elements indexed by `x` and `y` in the array `ary`.
- *
- * @param {Array} ary
- * The array.
- * @param {Number} x
- * The index of the first item.
- * @param {Number} y
- * The index of the second item.
- */
- function swap(ary, x, y) {
- var temp = ary[x];
- ary[x] = ary[y];
- ary[y] = temp;
- }
-
- /**
- * Returns a random integer within the range `low .. high` inclusive.
- *
- * @param {Number} low
- * The lower bound on the range.
- * @param {Number} high
- * The upper bound on the range.
- */
- function randomIntInRange(low, high) {
- return Math.round(low + (Math.random() * (high - low)));
- }
-
- /**
- * The Quick Sort algorithm.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- * @param {Number} p
- * Start index of the array
- * @param {Number} r
- * End index of the array
- */
- function doQuickSort(ary, comparator, p, r) {
- // If our lower bound is less than our upper bound, we (1) partition the
- // array into two pieces and (2) recurse on each half. If it is not, this is
- // the empty array and our base case.
-
- if (p < r) {
- // (1) Partitioning.
- //
- // The partitioning chooses a pivot between `p` and `r` and moves all
- // elements that are less than or equal to the pivot to the before it, and
- // all the elements that are greater than it after it. The effect is that
- // once partition is done, the pivot is in the exact place it will be when
- // the array is put in sorted order, and it will not need to be moved
- // again. This runs in O(n) time.
-
- // Always choose a random pivot so that an input array which is reverse
- // sorted does not cause O(n^2) running time.
- var pivotIndex = randomIntInRange(p, r);
- var i = p - 1;
-
- swap(ary, pivotIndex, r);
- var pivot = ary[r];
-
- // Immediately after `j` is incremented in this loop, the following hold
- // true:
- //
- // * Every element in `ary[p .. i]` is less than or equal to the pivot.
- //
- // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
- for (var j = p; j < r; j++) {
- if (comparator(ary[j], pivot, false) <= 0) {
- i += 1;
- swap(ary, i, j);
- }
- }
-
- swap(ary, i + 1, j);
- var q = i + 1;
-
- // (2) Recurse on each half.
-
- doQuickSort(ary, comparator, p, q - 1);
- doQuickSort(ary, comparator, q + 1, r);
- }
- }
-
- return doQuickSort;
- }
-
- function cloneSort(comparator) {
- let template = SortTemplate.toString();
- let templateFn = new Function(`return ${template}`)();
- return templateFn(comparator);
- }
-
- /**
- * Sort the given array in-place with the given comparator function.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- */
-
- let sortCache = new WeakMap();
- exports.quickSort = function (ary, comparator, start = 0) {
- let doQuickSort = sortCache.get(comparator);
- if (doQuickSort === void 0) {
- doQuickSort = cloneSort(comparator);
- sortCache.set(comparator, doQuickSort);
- }
- doQuickSort(ary, comparator, start, ary.length - 1);
- };
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
- var util = __webpack_require__(4);
-
- // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
- // operating systems these days (capturing the result).
- var REGEX_NEWLINE = /(\r?\n)/;
-
- // Newline character code for charCodeAt() comparisons
- var NEWLINE_CODE = 10;
-
- // Private symbol for identifying `SourceNode`s when multiple versions of
- // the source-map library are loaded. This MUST NOT CHANGE across
- // versions!
- var isSourceNode = "$$$isSourceNode$$$";
-
- /**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- * generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
- function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null) this.add(aChunks);
- }
-
- /**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- * SourceMapConsumer should be relative to.
- */
- SourceNode.fromStringWithSourceMap =
- function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- // The SourceNode we want to fill with the generated code
- // and the SourceMap
- var node = new SourceNode();
-
- // All even indices of this array are one line of the generated code,
- // while all odd indices are the newlines between two adjacent lines
- // (since `REGEX_NEWLINE` captures its match).
- // Processed fragments are accessed by calling `shiftNextLine`.
- var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- var remainingLinesIndex = 0;
- var shiftNextLine = function() {
- var lineContents = getNextLine();
- // The last line of a file might not have a newline.
- var newLine = getNextLine() || "";
- return lineContents + newLine;
-
- function getNextLine() {
- return remainingLinesIndex < remainingLines.length ?
- remainingLines[remainingLinesIndex++] : undefined;
- }
- };
-
- // We need to remember the position of "remainingLines"
- var lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
- // The generate SourceNodes we need a code range.
- // To extract it current and last mapping is used.
- // Here we store the last mapping.
- var lastMapping = null;
-
- aSourceMapConsumer.eachMapping(function (mapping) {
- if (lastMapping !== null) {
- // We add the code from "lastMapping" to "mapping":
- // First check if there is a new line in between.
- if (lastGeneratedLine < mapping.generatedLine) {
- // Associate first line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
- // The remaining code is added without mapping
- } else {
- // There is no new line in between.
- // Associate the code between "lastGeneratedColumn" and
- // "mapping.generatedColumn" with "lastMapping"
- var nextLine = remainingLines[remainingLinesIndex] || '';
- var code = nextLine.substr(0, mapping.generatedColumn -
- lastGeneratedColumn);
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
- lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- // No more remaining code, continue
- lastMapping = mapping;
- return;
- }
- }
- // We add the generated code until the first mapping
- // to the SourceNode without any mapping.
- // Each line is added as separate string.
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- var nextLine = remainingLines[remainingLinesIndex] || '';
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- }
- lastMapping = mapping;
- }, this);
- // We have processed all mappings.
- if (remainingLinesIndex < remainingLines.length) {
- if (lastMapping) {
- // Associate the remaining code in the current line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- }
- // and add the remaining lines without any mapping
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
- }
-
- // Copy sourcesContent into SourceNode
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
-
- return node;
-
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === undefined) {
- node.add(code);
- } else {
- var source = aRelativePath
- ? util.join(aRelativePath, mapping.source)
- : mapping.source;
- node.add(new SourceNode(mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name));
- }
- }
- };
-
- /**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- SourceNode.prototype.add = function SourceNode_add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function (chunk) {
- this.add(chunk);
- }, this);
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
- }
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- };
-
- /**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (var i = aChunk.length-1; i >= 0; i--) {
- this.prepend(aChunk[i]);
- }
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- };
-
- /**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
- SourceNode.prototype.walk = function SourceNode_walk(aFn) {
- var chunk;
- for (var i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
- }
- else {
- if (chunk !== '') {
- aFn(chunk, { source: this.source,
- line: this.line,
- column: this.column,
- name: this.name });
- }
- }
- }
- };
-
- /**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
- SourceNode.prototype.join = function SourceNode_join(aSep) {
- var newChildren;
- var i;
- var len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len-1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
- }
- return this;
- };
-
- /**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
- SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
- var lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- }
- else if (typeof lastChild === 'string') {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- }
- else {
- this.children.push(''.replace(aPattern, aReplacement));
- }
- return this;
- };
-
- /**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
- SourceNode.prototype.setSourceContent =
- function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- };
-
- /**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
- SourceNode.prototype.walkSourceContents =
- function SourceNode_walkSourceContents(aFn) {
- for (var i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
- }
- }
-
- var sources = Object.keys(this.sourceContents);
- for (var i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
- }
- };
-
- /**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
- SourceNode.prototype.toString = function SourceNode_toString() {
- var str = "";
- this.walk(function (chunk) {
- str += chunk;
- });
- return str;
- };
-
- /**
- * Returns the string representation of this source node along with a source
- * map.
- */
- SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
- var generated = {
- code: "",
- line: 1,
- column: 0
- };
- var map = new SourceMapGenerator(aArgs);
- var sourceMappingActive = false;
- var lastOriginalSource = null;
- var lastOriginalLine = null;
- var lastOriginalColumn = null;
- var lastOriginalName = null;
- this.walk(function (chunk, original) {
- generated.code += chunk;
- if (original.source !== null
- && original.line !== null
- && original.column !== null) {
- if(lastOriginalSource !== original.source
- || lastOriginalLine !== original.line
- || lastOriginalColumn !== original.column
- || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
- });
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (var idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- // Mappings end at eol
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- } else {
- generated.column++;
- }
- }
- });
- this.walkSourceContents(function (sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
-
- return { code: generated.code, map: map };
- };
-
- exports.SourceNode = SourceNode;
-
-
-/***/ })
-/******/ ])
-});
-;
\ No newline at end of file
diff --git a/node_modules/source-map-js/dist/source-map.min.js b/node_modules/source-map-js/dist/source-map.min.js
deleted file mode 100644
index 6335f5a..0000000
--- a/node_modules/source-map-js/dist/source-map.min.js
+++ /dev/null
@@ -1,3391 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["sourceMap"] = factory();
- else
- root["sourceMap"] = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId])
-/******/ return installedModules[moduleId].exports;
-/******/
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ exports: {},
-/******/ id: moduleId,
-/******/ loaded: false
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.loaded = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
- exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
- exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;
- exports.SourceNode = __webpack_require__(10).SourceNode;
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var base64VLQ = __webpack_require__(2);
- var util = __webpack_require__(4);
- var ArraySet = __webpack_require__(5).ArraySet;
- var MappingList = __webpack_require__(6).MappingList;
-
- /**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- * - file: The filename of the generated source.
- * - sourceRoot: A root for all relative URLs in this source map.
- */
- function SourceMapGenerator(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util.getArg(aArgs, 'file', null);
- this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
- this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
- this._sources = new ArraySet();
- this._names = new ArraySet();
- this._mappings = new MappingList();
- this._sourcesContents = null;
- }
-
- SourceMapGenerator.prototype._version = 3;
-
- /**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
- SourceMapGenerator.fromSourceMap =
- function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
- var sourceRoot = aSourceMapConsumer.sourceRoot;
- var generator = new SourceMapGenerator({
- file: aSourceMapConsumer.file,
- sourceRoot: sourceRoot
- });
- aSourceMapConsumer.eachMapping(function (mapping) {
- var newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
-
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util.relative(sourceRoot, newMapping.source);
- }
-
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
-
- if (mapping.name != null) {
- newMapping.name = mapping.name;
- }
- }
-
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var sourceRelative = sourceFile;
- if (sourceRoot !== null) {
- sourceRelative = util.relative(sourceRoot, sourceFile);
- }
-
- if (!generator._sources.has(sourceRelative)) {
- generator._sources.add(sourceRelative);
- }
-
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
- }
- });
- return generator;
- };
-
- /**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- * - generated: An object with the generated line and column positions.
- * - original: An object with the original line and column positions.
- * - source: The original source file (relative to the sourceRoot).
- * - name: An optional original token name for this mapping.
- */
- SourceMapGenerator.prototype.addMapping =
- function SourceMapGenerator_addMapping(aArgs) {
- var generated = util.getArg(aArgs, 'generated');
- var original = util.getArg(aArgs, 'original', null);
- var source = util.getArg(aArgs, 'source', null);
- var name = util.getArg(aArgs, 'name', null);
-
- if (!this._skipValidation) {
- this._validateMapping(generated, original, source, name);
- }
-
- if (source != null) {
- source = String(source);
- if (!this._sources.has(source)) {
- this._sources.add(source);
- }
- }
-
- if (name != null) {
- name = String(name);
- if (!this._names.has(name)) {
- this._names.add(name);
- }
- }
-
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source: source,
- name: name
- });
- };
-
- /**
- * Set the source content for a source file.
- */
- SourceMapGenerator.prototype.setSourceContent =
- function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
- var source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util.relative(this._sourceRoot, source);
- }
-
- if (aSourceContent != null) {
- // Add the source content to the _sourcesContents map.
- // Create a new _sourcesContents map if the property is null.
- if (!this._sourcesContents) {
- this._sourcesContents = Object.create(null);
- }
- this._sourcesContents[util.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- // Remove the source file from the _sourcesContents map.
- // If the _sourcesContents map is empty, set the property to null.
- delete this._sourcesContents[util.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
- }
- };
-
- /**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- * If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- * to be applied. If relative, it is relative to the SourceMapConsumer.
- * This parameter is needed when the two source maps aren't in the same
- * directory, and the source map to be applied contains relative source
- * paths. If so, those relative source paths need to be rewritten
- * relative to the SourceMapGenerator.
- */
- SourceMapGenerator.prototype.applySourceMap =
- function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- var sourceFile = aSourceFile;
- // If aSourceFile is omitted, we will use the file property of the SourceMap
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
- 'or the source map\'s "file" property. Both were omitted.'
- );
- }
- sourceFile = aSourceMapConsumer.file;
- }
- var sourceRoot = this._sourceRoot;
- // Make "sourceFile" relative if an absolute Url is passed.
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- // Applying the SourceMap can add and remove items from the sources and
- // the names array.
- var newSources = new ArraySet();
- var newNames = new ArraySet();
-
- // Find mappings for the "sourceFile"
- this._mappings.unsortedForEach(function (mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- // Check if it can be mapped by the source map, then update the mapping.
- var original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- // Copy mapping
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util.join(aSourceMapPath, mapping.source)
- }
- if (sourceRoot != null) {
- mapping.source = util.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
- }
- }
- }
-
- var source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
-
- var name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
-
- }, this);
- this._sources = newSources;
- this._names = newNames;
-
- // Copy sourcesContents of applied map.
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aSourceMapPath != null) {
- sourceFile = util.join(aSourceMapPath, sourceFile);
- }
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- this.setSourceContent(sourceFile, content);
- }
- }, this);
- };
-
- /**
- * A mapping can have one of the three levels of data:
- *
- * 1. Just the generated position.
- * 2. The Generated position, original position, and original source.
- * 3. Generated and original position, original source, as well as a name
- * token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
- SourceMapGenerator.prototype._validateMapping =
- function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
- aName) {
- // When aOriginal is truthy but has empty values for .line and .column,
- // it is most likely a programmer error. In this case we throw a very
- // specific error message to try to guide them the right way.
- // For example: https://github.com/Polymer/polymer-bundler/pull/519
- if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
- throw new Error(
- 'original.line and original.column are not numbers -- you probably meant to omit ' +
- 'the original mapping entirely and only map the generated position. If so, pass ' +
- 'null for the original mapping instead of an object with empty or null values.'
- );
- }
-
- if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aGenerated.line > 0 && aGenerated.column >= 0
- && !aOriginal && !aSource && !aName) {
- // Case 1.
- return;
- }
- else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
- && aOriginal && 'line' in aOriginal && 'column' in aOriginal
- && aGenerated.line > 0 && aGenerated.column >= 0
- && aOriginal.line > 0 && aOriginal.column >= 0
- && aSource) {
- // Cases 2 and 3.
- return;
- }
- else {
- throw new Error('Invalid mapping: ' + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- }));
- }
- };
-
- /**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
- SourceMapGenerator.prototype._serializeMappings =
- function SourceMapGenerator_serializeMappings() {
- var previousGeneratedColumn = 0;
- var previousGeneratedLine = 1;
- var previousOriginalColumn = 0;
- var previousOriginalLine = 0;
- var previousName = 0;
- var previousSource = 0;
- var result = '';
- var next;
- var mapping;
- var nameIdx;
- var sourceIdx;
-
- var mappings = this._mappings.toArray();
- for (var i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
- next = ''
-
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- next += ';';
- previousGeneratedLine++;
- }
- }
- else {
- if (i > 0) {
- if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- next += ',';
- }
- }
-
- next += base64VLQ.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (mapping.source != null) {
- sourceIdx = this._sources.indexOf(mapping.source);
- next += base64VLQ.encode(sourceIdx - previousSource);
- previousSource = sourceIdx;
-
- // lines are stored 0-based in SourceMap spec version 3
- next += base64VLQ.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- next += base64VLQ.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
-
- if (mapping.name != null) {
- nameIdx = this._names.indexOf(mapping.name);
- next += base64VLQ.encode(nameIdx - previousName);
- previousName = nameIdx;
- }
- }
-
- result += next;
- }
-
- return result;
- };
-
- SourceMapGenerator.prototype._generateSourcesContent =
- function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function (source) {
- if (!this._sourcesContents) {
- return null;
- }
- if (aSourceRoot != null) {
- source = util.relative(aSourceRoot, source);
- }
- var key = util.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
- ? this._sourcesContents[key]
- : null;
- }, this);
- };
-
- /**
- * Externalize the source map.
- */
- SourceMapGenerator.prototype.toJSON =
- function SourceMapGenerator_toJSON() {
- var map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
- }
-
- return map;
- };
-
- /**
- * Render the source map being generated to a string.
- */
- SourceMapGenerator.prototype.toString =
- function SourceMapGenerator_toString() {
- return JSON.stringify(this.toJSON());
- };
-
- exports.SourceMapGenerator = SourceMapGenerator;
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. 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 name of Google Inc. nor the names of its
- * 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
- * OWNER 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.
- */
-
- var base64 = __webpack_require__(3);
-
- // A single base 64 digit can contain 6 bits of data. For the base 64 variable
- // length quantities we use in the source map spec, the first bit is the sign,
- // the next four bits are the actual value, and the 6th bit is the
- // continuation bit. The continuation bit tells us whether there are more
- // digits in this value following this digit.
- //
- // Continuation
- // | Sign
- // | |
- // V V
- // 101011
-
- var VLQ_BASE_SHIFT = 5;
-
- // binary: 100000
- var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-
- // binary: 011111
- var VLQ_BASE_MASK = VLQ_BASE - 1;
-
- // binary: 100000
- var VLQ_CONTINUATION_BIT = VLQ_BASE;
-
- /**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
- function toVLQSigned(aValue) {
- return aValue < 0
- ? ((-aValue) << 1) + 1
- : (aValue << 1) + 0;
- }
-
- /**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
- */
- function fromVLQSigned(aValue) {
- var isNegative = (aValue & 1) === 1;
- var shifted = aValue >> 1;
- return isNegative
- ? -shifted
- : shifted;
- }
-
- /**
- * Returns the base 64 VLQ encoded value.
- */
- exports.encode = function base64VLQ_encode(aValue) {
- var encoded = "";
- var digit;
-
- var vlq = toVLQSigned(aValue);
-
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- // There are still more digits in this value, so we must make sure the
- // continuation bit is marked.
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
-
- return encoded;
- };
-
- /**
- * Decodes the next base 64 VLQ value from the given string and returns the
- * value and the rest of the string via the out parameter.
- */
- exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
- var strLen = aStr.length;
- var result = 0;
- var shift = 0;
- var continuation, digit;
-
- do {
- if (aIndex >= strLen) {
- throw new Error("Expected more digits in base 64 VLQ value.");
- }
-
- digit = base64.decode(aStr.charCodeAt(aIndex++));
- if (digit === -1) {
- throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
- }
-
- continuation = !!(digit & VLQ_CONTINUATION_BIT);
- digit &= VLQ_BASE_MASK;
- result = result + (digit << shift);
- shift += VLQ_BASE_SHIFT;
- } while (continuation);
-
- aOutParam.value = fromVLQSigned(result);
- aOutParam.rest = aIndex;
- };
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
-
- /**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
- exports.encode = function (number) {
- if (0 <= number && number < intToCharMap.length) {
- return intToCharMap[number];
- }
- throw new TypeError("Must be between 0 and 63: " + number);
- };
-
- /**
- * Decode a single base 64 character code digit to an integer. Returns -1 on
- * failure.
- */
- exports.decode = function (charCode) {
- var bigA = 65; // 'A'
- var bigZ = 90; // 'Z'
-
- var littleA = 97; // 'a'
- var littleZ = 122; // 'z'
-
- var zero = 48; // '0'
- var nine = 57; // '9'
-
- var plus = 43; // '+'
- var slash = 47; // '/'
-
- var littleOffset = 26;
- var numberOffset = 52;
-
- // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
- if (bigA <= charCode && charCode <= bigZ) {
- return (charCode - bigA);
- }
-
- // 26 - 51: abcdefghijklmnopqrstuvwxyz
- if (littleA <= charCode && charCode <= littleZ) {
- return (charCode - littleA + littleOffset);
- }
-
- // 52 - 61: 0123456789
- if (zero <= charCode && charCode <= nine) {
- return (charCode - zero + numberOffset);
- }
-
- // 62: +
- if (charCode == plus) {
- return 62;
- }
-
- // 63: /
- if (charCode == slash) {
- return 63;
- }
-
- // Invalid base64 digit.
- return -1;
- };
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- /**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
- function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- } else {
- throw new Error('"' + aName + '" is a required argument.');
- }
- }
- exports.getArg = getArg;
-
- var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
- var dataUrlRegexp = /^data:.+\,.+$/;
-
- function urlParse(aUrl) {
- var match = aUrl.match(urlRegexp);
- if (!match) {
- return null;
- }
- return {
- scheme: match[1],
- auth: match[2],
- host: match[3],
- port: match[4],
- path: match[5]
- };
- }
- exports.urlParse = urlParse;
-
- function urlGenerate(aParsedUrl) {
- var url = '';
- if (aParsedUrl.scheme) {
- url += aParsedUrl.scheme + ':';
- }
- url += '//';
- if (aParsedUrl.auth) {
- url += aParsedUrl.auth + '@';
- }
- if (aParsedUrl.host) {
- url += aParsedUrl.host;
- }
- if (aParsedUrl.port) {
- url += ":" + aParsedUrl.port
- }
- if (aParsedUrl.path) {
- url += aParsedUrl.path;
- }
- return url;
- }
- exports.urlGenerate = urlGenerate;
-
- var MAX_CACHED_INPUTS = 32;
-
- /**
- * Takes some function `f(input) -> result` and returns a memoized version of
- * `f`.
- *
- * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The
- * memoization is a dumb-simple, linear least-recently-used cache.
- */
- function lruMemoize(f) {
- var cache = [];
-
- return function(input) {
- for (var i = 0; i < cache.length; i++) {
- if (cache[i].input === input) {
- var temp = cache[0];
- cache[0] = cache[i];
- cache[i] = temp;
- return cache[0].result;
- }
- }
-
- var result = f(input);
-
- cache.unshift({
- input,
- result,
- });
-
- if (cache.length > MAX_CACHED_INPUTS) {
- cache.pop();
- }
-
- return result;
- };
- }
-
- /**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consecutive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
- var normalize = lruMemoize(function normalize(aPath) {
- var path = aPath;
- var url = urlParse(aPath);
- if (url) {
- if (!url.path) {
- return aPath;
- }
- path = url.path;
- }
- var isAbsolute = exports.isAbsolute(path);
- // Split the path into parts between `/` characters. This is much faster than
- // using `.split(/\/+/g)`.
- var parts = [];
- var start = 0;
- var i = 0;
- while (true) {
- start = i;
- i = path.indexOf("/", start);
- if (i === -1) {
- parts.push(path.slice(start));
- break;
- } else {
- parts.push(path.slice(start, i));
- while (i < path.length && path[i] === "/") {
- i++;
- }
- }
- }
-
- for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
- part = parts[i];
- if (part === '.') {
- parts.splice(i, 1);
- } else if (part === '..') {
- up++;
- } else if (up > 0) {
- if (part === '') {
- // The first part is blank if the path is absolute. Trying to go
- // above the root is a no-op. Therefore we can remove all '..' parts
- // directly after the root.
- parts.splice(i + 1, up);
- up = 0;
- } else {
- parts.splice(i, 2);
- up--;
- }
- }
- }
- path = parts.join('/');
-
- if (path === '') {
- path = isAbsolute ? '/' : '.';
- }
-
- if (url) {
- url.path = path;
- return urlGenerate(url);
- }
- return path;
- });
- exports.normalize = normalize;
-
- /**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- * first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- * is updated with the result and aRoot is returned. Otherwise the result
- * is returned.
- * - If aPath is absolute, the result is aPath.
- * - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
- function join(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
- if (aPath === "") {
- aPath = ".";
- }
- var aPathUrl = urlParse(aPath);
- var aRootUrl = urlParse(aRoot);
- if (aRootUrl) {
- aRoot = aRootUrl.path || '/';
- }
-
- // `join(foo, '//www.example.org')`
- if (aPathUrl && !aPathUrl.scheme) {
- if (aRootUrl) {
- aPathUrl.scheme = aRootUrl.scheme;
- }
- return urlGenerate(aPathUrl);
- }
-
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
- return aPath;
- }
-
- // `join('http://', 'www.example.com')`
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
- aRootUrl.host = aPath;
- return urlGenerate(aRootUrl);
- }
-
- var joined = aPath.charAt(0) === '/'
- ? aPath
- : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
-
- if (aRootUrl) {
- aRootUrl.path = joined;
- return urlGenerate(aRootUrl);
- }
- return joined;
- }
- exports.join = join;
-
- exports.isAbsolute = function (aPath) {
- return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
- };
-
- /**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
- function relative(aRoot, aPath) {
- if (aRoot === "") {
- aRoot = ".";
- }
-
- aRoot = aRoot.replace(/\/$/, '');
-
- // It is possible for the path to be above the root. In this case, simply
- // checking whether the root is a prefix of the path won't work. Instead, we
- // need to remove components from the root one by one, until either we find
- // a prefix that fits, or we run out of components to remove.
- var level = 0;
- while (aPath.indexOf(aRoot + '/') !== 0) {
- var index = aRoot.lastIndexOf("/");
- if (index < 0) {
- return aPath;
- }
-
- // If the only part of the root that is left is the scheme (i.e. http://,
- // file:///, etc.), one or more slashes (/), or simply nothing at all, we
- // have exhausted all components, so the path is not relative to the root.
- aRoot = aRoot.slice(0, index);
- if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
- return aPath;
- }
-
- ++level;
- }
-
- // Make sure we add a "../" for each component we removed from the root.
- return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
- }
- exports.relative = relative;
-
- var supportsNullProto = (function () {
- var obj = Object.create(null);
- return !('__proto__' in obj);
- }());
-
- function identity (s) {
- return s;
- }
-
- /**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
- function toSetString(aStr) {
- if (isProtoString(aStr)) {
- return '$' + aStr;
- }
-
- return aStr;
- }
- exports.toSetString = supportsNullProto ? identity : toSetString;
-
- function fromSetString(aStr) {
- if (isProtoString(aStr)) {
- return aStr.slice(1);
- }
-
- return aStr;
- }
- exports.fromSetString = supportsNullProto ? identity : fromSetString;
-
- function isProtoString(s) {
- if (!s) {
- return false;
- }
-
- var length = s.length;
-
- if (length < 9 /* "__proto__".length */) {
- return false;
- }
-
- if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
- s.charCodeAt(length - 2) !== 95 /* '_' */ ||
- s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 4) !== 116 /* 't' */ ||
- s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
- s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
- s.charCodeAt(length - 8) !== 95 /* '_' */ ||
- s.charCodeAt(length - 9) !== 95 /* '_' */) {
- return false;
- }
-
- for (var i = length - 10; i >= 0; i--) {
- if (s.charCodeAt(i) !== 36 /* '$' */) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
- function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
- var cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByOriginalPositions = compareByOriginalPositions;
-
- function compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {
- var cmp
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0 || onlyCompareOriginal) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;
-
- /**
- * Comparator between two mappings with deflated source and name indices where
- * the generated positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
- function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
-
- function compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {
- var cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0 || onlyCompareGenerated) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;
-
- function strcmp(aStr1, aStr2) {
- if (aStr1 === aStr2) {
- return 0;
- }
-
- if (aStr1 === null) {
- return 1; // aStr2 !== null
- }
-
- if (aStr2 === null) {
- return -1; // aStr1 !== null
- }
-
- if (aStr1 > aStr2) {
- return 1;
- }
-
- return -1;
- }
-
- /**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
- function compareByGeneratedPositionsInflated(mappingA, mappingB) {
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
-
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
-
- return strcmp(mappingA.name, mappingB.name);
- }
- exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-
- /**
- * Strip any JSON XSSI avoidance prefix from the string (as documented
- * in the source maps specification), and then parse the string as
- * JSON.
- */
- function parseSourceMapInput(str) {
- return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
- }
- exports.parseSourceMapInput = parseSourceMapInput;
-
- /**
- * Compute the URL of a source given the the source root, the source's
- * URL, and the source map's URL.
- */
- function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
- sourceURL = sourceURL || '';
-
- if (sourceRoot) {
- // This follows what Chrome does.
- if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
- sourceRoot += '/';
- }
- // The spec says:
- // Line 4: An optional source root, useful for relocating source
- // files on a server or removing repeated values in the
- // “sources” entry. This value is prepended to the individual
- // entries in the “source” field.
- sourceURL = sourceRoot + sourceURL;
- }
-
- // Historically, SourceMapConsumer did not take the sourceMapURL as
- // a parameter. This mode is still somewhat supported, which is why
- // this code block is conditional. However, it's preferable to pass
- // the source map URL to SourceMapConsumer, so that this function
- // can implement the source URL resolution algorithm as outlined in
- // the spec. This block is basically the equivalent of:
- // new URL(sourceURL, sourceMapURL).toString()
- // ... except it avoids using URL, which wasn't available in the
- // older releases of node still supported by this library.
- //
- // The spec says:
- // If the sources are not absolute URLs after prepending of the
- // “sourceRoot”, the sources are resolved relative to the
- // SourceMap (like resolving script src in a html document).
- if (sourceMapURL) {
- var parsed = urlParse(sourceMapURL);
- if (!parsed) {
- throw new Error("sourceMapURL could not be parsed");
- }
- if (parsed.path) {
- // Strip the last path component, but keep the "/".
- var index = parsed.path.lastIndexOf('/');
- if (index >= 0) {
- parsed.path = parsed.path.substring(0, index + 1);
- }
- }
- sourceURL = join(urlGenerate(parsed), sourceURL);
- }
-
- return normalize(sourceURL);
- }
- exports.computeSourceURL = computeSourceURL;
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
- var has = Object.prototype.hasOwnProperty;
- var hasNativeMap = typeof Map !== "undefined";
-
- /**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
- function ArraySet() {
- this._array = [];
- this._set = hasNativeMap ? new Map() : Object.create(null);
- }
-
- /**
- * Static method for creating ArraySet instances from an existing array.
- */
- ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
- var set = new ArraySet();
- for (var i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
- };
-
- /**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
- ArraySet.prototype.size = function ArraySet_size() {
- return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
- };
-
- /**
- * Add the given string to this set.
- *
- * @param String aStr
- */
- ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
- var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
- var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
- var idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- if (hasNativeMap) {
- this._set.set(aStr, idx);
- } else {
- this._set[sStr] = idx;
- }
- }
- };
-
- /**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
- ArraySet.prototype.has = function ArraySet_has(aStr) {
- if (hasNativeMap) {
- return this._set.has(aStr);
- } else {
- var sStr = util.toSetString(aStr);
- return has.call(this._set, sStr);
- }
- };
-
- /**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
- ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
- if (hasNativeMap) {
- var idx = this._set.get(aStr);
- if (idx >= 0) {
- return idx;
- }
- } else {
- var sStr = util.toSetString(aStr);
- if (has.call(this._set, sStr)) {
- return this._set[sStr];
- }
- }
-
- throw new Error('"' + aStr + '" is not in the set.');
- };
-
- /**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
- ArraySet.prototype.at = function ArraySet_at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error('No element indexed by ' + aIdx);
- };
-
- /**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
- ArraySet.prototype.toArray = function ArraySet_toArray() {
- return this._array.slice();
- };
-
- exports.ArraySet = ArraySet;
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
-
- /**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
- function generatedPositionAfter(mappingA, mappingB) {
- // Optimized for most common case
- var lineA = mappingA.generatedLine;
- var lineB = mappingB.generatedLine;
- var columnA = mappingA.generatedColumn;
- var columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
- util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
- }
-
- /**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a neglibable overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
- function MappingList() {
- this._array = [];
- this._sorted = true;
- // Serves as infimum
- this._last = {generatedLine: -1, generatedColumn: 0};
- }
-
- /**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
- MappingList.prototype.unsortedForEach =
- function MappingList_forEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- };
-
- /**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
- MappingList.prototype.add = function MappingList_add(aMapping) {
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
- };
-
- /**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
- MappingList.prototype.toArray = function MappingList_toArray() {
- if (!this._sorted) {
- this._array.sort(util.compareByGeneratedPositionsInflated);
- this._sorted = true;
- }
- return this._array;
- };
-
- exports.MappingList = MappingList;
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var util = __webpack_require__(4);
- var binarySearch = __webpack_require__(8);
- var ArraySet = __webpack_require__(5).ArraySet;
- var base64VLQ = __webpack_require__(2);
- var quickSort = __webpack_require__(9).quickSort;
-
- function SourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- return sourceMap.sections != null
- ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
- : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
- }
-
- SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
- }
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- SourceMapConsumer.prototype._version = 3;
-
- // `__generatedMappings` and `__originalMappings` are arrays that hold the
- // parsed mapping coordinates from the source map's "mappings" attribute. They
- // are lazily instantiated, accessed via the `_generatedMappings` and
- // `_originalMappings` getters respectively, and we only parse the mappings
- // and create these arrays once queried for a source location. We jump through
- // these hoops because there can be many thousands of mappings, and parsing
- // them is expensive, so we only want to do it if we must.
- //
- // Each object in the arrays is of the form:
- //
- // {
- // generatedLine: The line number in the generated code,
- // generatedColumn: The column number in the generated code,
- // source: The path to the original source file that generated this
- // chunk of code,
- // originalLine: The line number in the original source that
- // corresponds to this chunk of generated code,
- // originalColumn: The column number in the original source that
- // corresponds to this chunk of generated code,
- // name: The name of the original symbol which generated this chunk of
- // code.
- // }
- //
- // All properties except for `generatedLine` and `generatedColumn` can be
- // `null`.
- //
- // `_generatedMappings` is ordered by the generated positions.
- //
- // `_originalMappings` is ordered by the original positions.
-
- SourceMapConsumer.prototype.__generatedMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__generatedMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__generatedMappings;
- }
- });
-
- SourceMapConsumer.prototype.__originalMappings = null;
- Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
- configurable: true,
- enumerable: true,
- get: function () {
- if (!this.__originalMappings) {
- this._parseMappings(this._mappings, this.sourceRoot);
- }
-
- return this.__originalMappings;
- }
- });
-
- SourceMapConsumer.prototype._charIsMappingSeparator =
- function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
- var c = aStr.charAt(index);
- return c === ";" || c === ",";
- };
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- SourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- throw new Error("Subclasses must implement _parseMappings");
- };
-
- SourceMapConsumer.GENERATED_ORDER = 1;
- SourceMapConsumer.ORIGINAL_ORDER = 2;
-
- SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
- SourceMapConsumer.LEAST_UPPER_BOUND = 2;
-
- /**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- * The function that is called with each mapping.
- * @param Object aContext
- * Optional. If specified, this object will be the value of `this` every
- * time that `aCallback` is called.
- * @param aOrder
- * Either `SourceMapConsumer.GENERATED_ORDER` or
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- * iterate over the mappings sorted by the generated file's line/column
- * order or the original's source/line/column order, respectively. Defaults to
- * `SourceMapConsumer.GENERATED_ORDER`.
- */
- SourceMapConsumer.prototype.eachMapping =
- function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
- var context = aContext || null;
- var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
-
- var mappings;
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- mappings = this._generatedMappings;
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- mappings = this._originalMappings;
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
-
- var sourceRoot = this.sourceRoot;
- mappings.map(function (mapping) {
- var source = mapping.source === null ? null : this._sources.at(mapping.source);
- source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
- return {
- source: source,
- generatedLine: mapping.generatedLine,
- generatedColumn: mapping.generatedColumn,
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: mapping.name === null ? null : this._names.at(mapping.name)
- };
- }, this).forEach(aCallback, context);
- };
-
- /**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number is 1-based.
- * - column: Optional. the column number in the original source.
- * The column number is 0-based.
- *
- * and an array of objects is returned, each with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- SourceMapConsumer.prototype.allGeneratedPositionsFor =
- function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
- var line = util.getArg(aArgs, 'line');
-
- // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
- // returns the index of the closest mapping less than the needle. By
- // setting needle.originalColumn to 0, we thus find the last mapping for
- // the given line, provided such a mapping exists.
- var needle = {
- source: util.getArg(aArgs, 'source'),
- originalLine: line,
- originalColumn: util.getArg(aArgs, 'column', 0)
- };
-
- needle.source = this._findSourceIndex(needle.source);
- if (needle.source < 0) {
- return [];
- }
-
- var mappings = [];
-
- var index = this._findMapping(needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- binarySearch.LEAST_UPPER_BOUND);
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (aArgs.column === undefined) {
- var originalLine = mapping.originalLine;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we found. Since
- // mappings are sorted, this is guaranteed to find all mappings for
- // the line we found.
- while (mapping && mapping.originalLine === originalLine) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- } else {
- var originalColumn = mapping.originalColumn;
-
- // Iterate until either we run out of mappings, or we run into
- // a mapping for a different line than the one we were searching for.
- // Since mappings are sorted, this is guaranteed to find all mappings for
- // the line we are searching for.
- while (mapping &&
- mapping.originalLine === line &&
- mapping.originalColumn == originalColumn) {
- mappings.push({
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- });
-
- mapping = this._originalMappings[++index];
- }
- }
- }
-
- return mappings;
- };
-
- exports.SourceMapConsumer = SourceMapConsumer;
-
- /**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The first parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - sources: An array of URLs to the original source files.
- * - names: An array of identifiers which can be referrenced by individual mappings.
- * - sourceRoot: Optional. The URL root from which all sources are relative.
- * - sourcesContent: Optional. An array of contents of the original source files.
- * - mappings: A string of base64 VLQs which contain the actual mappings.
- * - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- * {
- * version : 3,
- * file: "out.js",
- * sourceRoot : "",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AA,AB;;ABCDE;"
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
- function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sources = util.getArg(sourceMap, 'sources');
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
- // requires the array) to play nice here.
- var names = util.getArg(sourceMap, 'names', []);
- var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
- var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
- var mappings = util.getArg(sourceMap, 'mappings');
- var file = util.getArg(sourceMap, 'file', null);
-
- // Once again, Sass deviates from the spec and supplies the version as a
- // string rather than a number, so we use loose equality checking here.
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- if (sourceRoot) {
- sourceRoot = util.normalize(sourceRoot);
- }
-
- sources = sources
- .map(String)
- // Some source maps produce relative source paths like "./foo.js" instead of
- // "foo.js". Normalize these first so that future comparisons will succeed.
- // See bugzil.la/1090768.
- .map(util.normalize)
- // Always ensure that absolute sources are internally stored relative to
- // the source root, if the source root is absolute. Not doing this would
- // be particularly problematic when the source root is a prefix of the
- // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
- .map(function (source) {
- return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
- ? util.relative(sourceRoot, source)
- : source;
- });
-
- // Pass `true` below to allow duplicate names and sources. While source maps
- // are intended to be compressed and deduplicated, the TypeScript compiler
- // sometimes generates source maps with duplicates in them. See Github issue
- // #72 and bugzil.la/889492.
- this._names = ArraySet.fromArray(names.map(String), true);
- this._sources = ArraySet.fromArray(sources, true);
-
- this._absoluteSources = this._sources.toArray().map(function (s) {
- return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
- });
-
- this.sourceRoot = sourceRoot;
- this.sourcesContent = sourcesContent;
- this._mappings = mappings;
- this._sourceMapURL = aSourceMapURL;
- this.file = file;
- }
-
- BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
- BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
-
- /**
- * Utility function to find the index of a source. Returns -1 if not
- * found.
- */
- BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
-
- if (this._sources.has(relativeSource)) {
- return this._sources.indexOf(relativeSource);
- }
-
- // Maybe aSource is an absolute URL as returned by |sources|. In
- // this case we can't simply undo the transform.
- var i;
- for (i = 0; i < this._absoluteSources.length; ++i) {
- if (this._absoluteSources[i] == aSource) {
- return i;
- }
- }
-
- return -1;
- };
-
- /**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- * The source map that will be consumed.
- * @param String aSourceMapURL
- * The URL at which the source map can be found (optional)
- * @returns BasicSourceMapConsumer
- */
- BasicSourceMapConsumer.fromSourceMap =
- function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
- var smc = Object.create(BasicSourceMapConsumer.prototype);
-
- var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
- var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
- smc.sourceRoot = aSourceMap._sourceRoot;
- smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
- smc.sourceRoot);
- smc.file = aSourceMap._file;
- smc._sourceMapURL = aSourceMapURL;
- smc._absoluteSources = smc._sources.toArray().map(function (s) {
- return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
- });
-
- // Because we are modifying the entries (by converting string sources and
- // names to indices into the sources and names ArraySets), we have to make
- // a copy of the entry or else bad things happen. Shared mutable state
- // strikes again! See github issue #191.
-
- var generatedMappings = aSourceMap._mappings.toArray().slice();
- var destGeneratedMappings = smc.__generatedMappings = [];
- var destOriginalMappings = smc.__originalMappings = [];
-
- for (var i = 0, length = generatedMappings.length; i < length; i++) {
- var srcMapping = generatedMappings[i];
- var destMapping = new Mapping;
- destMapping.generatedLine = srcMapping.generatedLine;
- destMapping.generatedColumn = srcMapping.generatedColumn;
-
- if (srcMapping.source) {
- destMapping.source = sources.indexOf(srcMapping.source);
- destMapping.originalLine = srcMapping.originalLine;
- destMapping.originalColumn = srcMapping.originalColumn;
-
- if (srcMapping.name) {
- destMapping.name = names.indexOf(srcMapping.name);
- }
-
- destOriginalMappings.push(destMapping);
- }
-
- destGeneratedMappings.push(destMapping);
- }
-
- quickSort(smc.__originalMappings, util.compareByOriginalPositions);
-
- return smc;
- };
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- BasicSourceMapConsumer.prototype._version = 3;
-
- /**
- * The list of original sources.
- */
- Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
- get: function () {
- return this._absoluteSources.slice();
- }
- });
-
- /**
- * Provide the JIT with a nice shape / hidden class.
- */
- function Mapping() {
- this.generatedLine = 0;
- this.generatedColumn = 0;
- this.source = null;
- this.originalLine = null;
- this.originalColumn = null;
- this.name = null;
- }
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-
- const compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;
- function sortGenerated(array, start) {
- let l = array.length;
- let n = array.length - start;
- if (n <= 1) {
- return;
- } else if (n == 2) {
- let a = array[start];
- let b = array[start + 1];
- if (compareGenerated(a, b) > 0) {
- array[start] = b;
- array[start + 1] = a;
- }
- } else if (n < 20) {
- for (let i = start; i < l; i++) {
- for (let j = i; j > start; j--) {
- let a = array[j - 1];
- let b = array[j];
- if (compareGenerated(a, b) <= 0) {
- break;
- }
- array[j - 1] = b;
- array[j] = a;
- }
- }
- } else {
- quickSort(array, compareGenerated, start);
- }
- }
- BasicSourceMapConsumer.prototype._parseMappings =
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- var generatedLine = 1;
- var previousGeneratedColumn = 0;
- var previousOriginalLine = 0;
- var previousOriginalColumn = 0;
- var previousSource = 0;
- var previousName = 0;
- var length = aStr.length;
- var index = 0;
- var cachedSegments = {};
- var temp = {};
- var originalMappings = [];
- var generatedMappings = [];
- var mapping, str, segment, end, value;
-
- let subarrayStart = 0;
- while (index < length) {
- if (aStr.charAt(index) === ';') {
- generatedLine++;
- index++;
- previousGeneratedColumn = 0;
-
- sortGenerated(generatedMappings, subarrayStart);
- subarrayStart = generatedMappings.length;
- }
- else if (aStr.charAt(index) === ',') {
- index++;
- }
- else {
- mapping = new Mapping();
- mapping.generatedLine = generatedLine;
-
- for (end = index; end < length; end++) {
- if (this._charIsMappingSeparator(aStr, end)) {
- break;
- }
- }
- str = aStr.slice(index, end);
-
- segment = [];
- while (index < end) {
- base64VLQ.decode(aStr, index, temp);
- value = temp.value;
- index = temp.rest;
- segment.push(value);
- }
-
- if (segment.length === 2) {
- throw new Error('Found a source, but no line and column');
- }
-
- if (segment.length === 3) {
- throw new Error('Found a source and line, but no column');
- }
-
- // Generated column.
- mapping.generatedColumn = previousGeneratedColumn + segment[0];
- previousGeneratedColumn = mapping.generatedColumn;
-
- if (segment.length > 1) {
- // Original source.
- mapping.source = previousSource + segment[1];
- previousSource += segment[1];
-
- // Original line.
- mapping.originalLine = previousOriginalLine + segment[2];
- previousOriginalLine = mapping.originalLine;
- // Lines are stored 0-based
- mapping.originalLine += 1;
-
- // Original column.
- mapping.originalColumn = previousOriginalColumn + segment[3];
- previousOriginalColumn = mapping.originalColumn;
-
- if (segment.length > 4) {
- // Original name.
- mapping.name = previousName + segment[4];
- previousName += segment[4];
- }
- }
-
- generatedMappings.push(mapping);
- if (typeof mapping.originalLine === 'number') {
- let currentSource = mapping.source;
- while (originalMappings.length <= currentSource) {
- originalMappings.push(null);
- }
- if (originalMappings[currentSource] === null) {
- originalMappings[currentSource] = [];
- }
- originalMappings[currentSource].push(mapping);
- }
- }
- }
-
- sortGenerated(generatedMappings, subarrayStart);
- this.__generatedMappings = generatedMappings;
-
- for (var i = 0; i < originalMappings.length; i++) {
- if (originalMappings[i] != null) {
- quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);
- }
- }
- this.__originalMappings = [].concat(...originalMappings);
- };
-
- /**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
- BasicSourceMapConsumer.prototype._findMapping =
- function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
- aColumnName, aComparator, aBias) {
- // To return the position we are searching for, we must first find the
- // mapping for the given position and then return the opposite position it
- // points to. Because the mappings are sorted, we can use binary search to
- // find the best mapping.
-
- if (aNeedle[aLineName] <= 0) {
- throw new TypeError('Line must be greater than or equal to 1, got '
- + aNeedle[aLineName]);
- }
- if (aNeedle[aColumnName] < 0) {
- throw new TypeError('Column must be greater than or equal to 0, got '
- + aNeedle[aColumnName]);
- }
-
- return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
- };
-
- /**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
- BasicSourceMapConsumer.prototype.computeColumnSpans =
- function SourceMapConsumer_computeColumnSpans() {
- for (var index = 0; index < this._generatedMappings.length; ++index) {
- var mapping = this._generatedMappings[index];
-
- // Mappings do not contain a field for the last generated columnt. We
- // can come up with an optimistic estimate, however, by assuming that
- // mappings are contiguous (i.e. given two consecutive mappings, the
- // first mapping ends where the second one starts).
- if (index + 1 < this._generatedMappings.length) {
- var nextMapping = this._generatedMappings[index + 1];
-
- if (mapping.generatedLine === nextMapping.generatedLine) {
- mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
- continue;
- }
- }
-
- // The last mapping for each line spans the entire line.
- mapping.lastGeneratedColumn = Infinity;
- }
- };
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- BasicSourceMapConsumer.prototype.originalPositionFor =
- function SourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._generatedMappings,
- "generatedLine",
- "generatedColumn",
- util.compareByGeneratedPositionsDeflated,
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._generatedMappings[index];
-
- if (mapping.generatedLine === needle.generatedLine) {
- var source = util.getArg(mapping, 'source', null);
- if (source !== null) {
- source = this._sources.at(source);
- source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
- }
- var name = util.getArg(mapping, 'name', null);
- if (name !== null) {
- name = this._names.at(name);
- }
- return {
- source: source,
- line: util.getArg(mapping, 'originalLine', null),
- column: util.getArg(mapping, 'originalColumn', null),
- name: name
- };
- }
- }
-
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- };
-
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
- function BasicSourceMapConsumer_hasContentsOfAllSources() {
- if (!this.sourcesContent) {
- return false;
- }
- return this.sourcesContent.length >= this._sources.size() &&
- !this.sourcesContent.some(function (sc) { return sc == null; });
- };
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- BasicSourceMapConsumer.prototype.sourceContentFor =
- function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- if (!this.sourcesContent) {
- return null;
- }
-
- var index = this._findSourceIndex(aSource);
- if (index >= 0) {
- return this.sourcesContent[index];
- }
-
- var relativeSource = aSource;
- if (this.sourceRoot != null) {
- relativeSource = util.relative(this.sourceRoot, relativeSource);
- }
-
- var url;
- if (this.sourceRoot != null
- && (url = util.urlParse(this.sourceRoot))) {
- // XXX: file:// URIs and absolute paths lead to unexpected behavior for
- // many users. We can help them out when they expect file:// URIs to
- // behave like it would if they were running a local HTTP server. See
- // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
- var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
- if (url.scheme == "file"
- && this._sources.has(fileUriAbsPath)) {
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
- }
-
- if ((!url.path || url.path == "/")
- && this._sources.has("/" + relativeSource)) {
- return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
- }
- }
-
- // This function is used recursively from
- // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
- // don't want to throw if we can't find the source - we just want to
- // return null, so we provide a flag to exit gracefully.
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + relativeSource + '" is not in the SourceMap.');
- }
- };
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- BasicSourceMapConsumer.prototype.generatedPositionFor =
- function SourceMapConsumer_generatedPositionFor(aArgs) {
- var source = util.getArg(aArgs, 'source');
- source = this._findSourceIndex(source);
- if (source < 0) {
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
-
- var needle = {
- source: source,
- originalLine: util.getArg(aArgs, 'line'),
- originalColumn: util.getArg(aArgs, 'column')
- };
-
- var index = this._findMapping(
- needle,
- this._originalMappings,
- "originalLine",
- "originalColumn",
- util.compareByOriginalPositions,
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
- );
-
- if (index >= 0) {
- var mapping = this._originalMappings[index];
-
- if (mapping.source === needle.source) {
- return {
- line: util.getArg(mapping, 'generatedLine', null),
- column: util.getArg(mapping, 'generatedColumn', null),
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
- };
- }
- }
-
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- };
-
- exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
-
- /**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The first parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - file: Optional. The generated file this source map is associated with.
- * - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- * - offset: The offset into the original specified at which this section
- * begins to apply, defined as an object with a "line" and "column"
- * field.
- * - map: A source map definition. This source map could also be indexed,
- * but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- * {
- * version : 3,
- * file: "app.js",
- * sections: [{
- * offset: {line:100, column:10},
- * map: {
- * version : 3,
- * file: "section.js",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AAAA,E;;ABCDE;"
- * }
- * }],
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
- function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
- var sourceMap = aSourceMap;
- if (typeof aSourceMap === 'string') {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- var version = util.getArg(sourceMap, 'version');
- var sections = util.getArg(sourceMap, 'sections');
-
- if (version != this._version) {
- throw new Error('Unsupported version: ' + version);
- }
-
- this._sources = new ArraySet();
- this._names = new ArraySet();
-
- var lastOffset = {
- line: -1,
- column: 0
- };
- this._sections = sections.map(function (s) {
- if (s.url) {
- // The url field will require support for asynchronicity.
- // See https://github.com/mozilla/source-map/issues/16
- throw new Error('Support for url field in sections not implemented.');
- }
- var offset = util.getArg(s, 'offset');
- var offsetLine = util.getArg(offset, 'line');
- var offsetColumn = util.getArg(offset, 'column');
-
- if (offsetLine < lastOffset.line ||
- (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
- throw new Error('Section offsets must be ordered and non-overlapping.');
- }
- lastOffset = offset;
-
- return {
- generatedOffset: {
- // The offset fields are 0-based, but we use 1-based indices when
- // encoding/decoding from VLQ.
- generatedLine: offsetLine + 1,
- generatedColumn: offsetColumn + 1
- },
- consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
- }
- });
- }
-
- IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
- IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
-
- /**
- * The version of the source mapping spec that we are consuming.
- */
- IndexedSourceMapConsumer.prototype._version = 3;
-
- /**
- * The list of original sources.
- */
- Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
- get: function () {
- var sources = [];
- for (var i = 0; i < this._sections.length; i++) {
- for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
- sources.push(this._sections[i].consumer.sources[j]);
- }
- }
- return sources;
- }
- });
-
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- IndexedSourceMapConsumer.prototype.originalPositionFor =
- function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
- var needle = {
- generatedLine: util.getArg(aArgs, 'line'),
- generatedColumn: util.getArg(aArgs, 'column')
- };
-
- // Find the section containing the generated position we're trying to map
- // to an original position.
- var sectionIndex = binarySearch.search(needle, this._sections,
- function(needle, section) {
- var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
- if (cmp) {
- return cmp;
- }
-
- return (needle.generatedColumn -
- section.generatedOffset.generatedColumn);
- });
- var section = this._sections[sectionIndex];
-
- if (!section) {
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
-
- return section.consumer.originalPositionFor({
- line: needle.generatedLine -
- (section.generatedOffset.generatedLine - 1),
- column: needle.generatedColumn -
- (section.generatedOffset.generatedLine === needle.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- bias: aArgs.bias
- });
- };
-
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
- function IndexedSourceMapConsumer_hasContentsOfAllSources() {
- return this._sections.every(function (s) {
- return s.consumer.hasContentsOfAllSources();
- });
- };
-
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- IndexedSourceMapConsumer.prototype.sourceContentFor =
- function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- var content = section.consumer.sourceContentFor(aSource, true);
- if (content) {
- return content;
- }
- }
- if (nullOnMissing) {
- return null;
- }
- else {
- throw new Error('"' + aSource + '" is not in the SourceMap.');
- }
- };
-
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- IndexedSourceMapConsumer.prototype.generatedPositionFor =
- function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
-
- // Only consider this section if the requested source is in the list of
- // sources of the consumer.
- if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
- continue;
- }
- var generatedPosition = section.consumer.generatedPositionFor(aArgs);
- if (generatedPosition) {
- var ret = {
- line: generatedPosition.line +
- (section.generatedOffset.generatedLine - 1),
- column: generatedPosition.column +
- (section.generatedOffset.generatedLine === generatedPosition.line
- ? section.generatedOffset.generatedColumn - 1
- : 0)
- };
- return ret;
- }
- }
-
- return {
- line: null,
- column: null
- };
- };
-
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- IndexedSourceMapConsumer.prototype._parseMappings =
- function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
- this.__generatedMappings = [];
- this.__originalMappings = [];
- for (var i = 0; i < this._sections.length; i++) {
- var section = this._sections[i];
- var sectionMappings = section.consumer._generatedMappings;
- for (var j = 0; j < sectionMappings.length; j++) {
- var mapping = sectionMappings[j];
-
- var source = section.consumer._sources.at(mapping.source);
- source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
- this._sources.add(source);
- source = this._sources.indexOf(source);
-
- var name = null;
- if (mapping.name) {
- name = section.consumer._names.at(mapping.name);
- this._names.add(name);
- name = this._names.indexOf(name);
- }
-
- // The mappings coming from the consumer for the section have
- // generated positions relative to the start of the section, so we
- // need to offset them to be relative to the start of the concatenated
- // generated file.
- var adjustedMapping = {
- source: source,
- generatedLine: mapping.generatedLine +
- (section.generatedOffset.generatedLine - 1),
- generatedColumn: mapping.generatedColumn +
- (section.generatedOffset.generatedLine === mapping.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- originalLine: mapping.originalLine,
- originalColumn: mapping.originalColumn,
- name: name
- };
-
- this.__generatedMappings.push(adjustedMapping);
- if (typeof adjustedMapping.originalLine === 'number') {
- this.__originalMappings.push(adjustedMapping);
- }
- }
- }
-
- quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
- quickSort(this.__originalMappings, util.compareByOriginalPositions);
- };
-
- exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- exports.GREATEST_LOWER_BOUND = 1;
- exports.LEAST_UPPER_BOUND = 2;
-
- /**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- */
- function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
- // This function terminates when one of the following is true:
- //
- // 1. We find the exact element we are looking for.
- //
- // 2. We did not find the exact element, but we can return the index of
- // the next-closest element.
- //
- // 3. We did not find the exact element, and there is no next-closest
- // element than the one we are searching for, so we return -1.
- var mid = Math.floor((aHigh - aLow) / 2) + aLow;
- var cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- // Found the element we are looking for.
- return mid;
- }
- else if (cmp > 0) {
- // Our needle is greater than aHaystack[mid].
- if (aHigh - mid > 1) {
- // The element is in the upper half.
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // The exact needle element was not found in this haystack. Determine if
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return aHigh < aHaystack.length ? aHigh : -1;
- } else {
- return mid;
- }
- }
- else {
- // Our needle is less than aHaystack[mid].
- if (mid - aLow > 1) {
- // The element is in the lower half.
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
- }
-
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return mid;
- } else {
- return aLow < 0 ? -1 : aLow;
- }
- }
- }
-
- /**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- * array and returns -1, 0, or 1 depending on whether the needle is less
- * than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
- exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
- if (aHaystack.length === 0) {
- return -1;
- }
-
- var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
- aCompare, aBias || exports.GREATEST_LOWER_BOUND);
- if (index < 0) {
- return -1;
- }
-
- // We have found either the exact element, or the next-closest element than
- // the one we are searching for. However, there may be more than one such
- // element. Make sure we always return the smallest of these.
- while (index - 1 >= 0) {
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
- break;
- }
- --index;
- }
-
- return index;
- };
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- // It turns out that some (most?) JavaScript engines don't self-host
- // `Array.prototype.sort`. This makes sense because C++ will likely remain
- // faster than JS when doing raw CPU-intensive sorting. However, when using a
- // custom comparator function, calling back and forth between the VM's C++ and
- // JIT'd JS is rather slow *and* loses JIT type information, resulting in
- // worse generated code for the comparator function than would be optimal. In
- // fact, when sorting with a comparator, these costs outweigh the benefits of
- // sorting in C++. By using our own JS-implemented Quick Sort (below), we get
- // a ~3500ms mean speed-up in `bench/bench.html`.
-
- function SortTemplate(comparator) {
-
- /**
- * Swap the elements indexed by `x` and `y` in the array `ary`.
- *
- * @param {Array} ary
- * The array.
- * @param {Number} x
- * The index of the first item.
- * @param {Number} y
- * The index of the second item.
- */
- function swap(ary, x, y) {
- var temp = ary[x];
- ary[x] = ary[y];
- ary[y] = temp;
- }
-
- /**
- * Returns a random integer within the range `low .. high` inclusive.
- *
- * @param {Number} low
- * The lower bound on the range.
- * @param {Number} high
- * The upper bound on the range.
- */
- function randomIntInRange(low, high) {
- return Math.round(low + (Math.random() * (high - low)));
- }
-
- /**
- * The Quick Sort algorithm.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- * @param {Number} p
- * Start index of the array
- * @param {Number} r
- * End index of the array
- */
- function doQuickSort(ary, comparator, p, r) {
- // If our lower bound is less than our upper bound, we (1) partition the
- // array into two pieces and (2) recurse on each half. If it is not, this is
- // the empty array and our base case.
-
- if (p < r) {
- // (1) Partitioning.
- //
- // The partitioning chooses a pivot between `p` and `r` and moves all
- // elements that are less than or equal to the pivot to the before it, and
- // all the elements that are greater than it after it. The effect is that
- // once partition is done, the pivot is in the exact place it will be when
- // the array is put in sorted order, and it will not need to be moved
- // again. This runs in O(n) time.
-
- // Always choose a random pivot so that an input array which is reverse
- // sorted does not cause O(n^2) running time.
- var pivotIndex = randomIntInRange(p, r);
- var i = p - 1;
-
- swap(ary, pivotIndex, r);
- var pivot = ary[r];
-
- // Immediately after `j` is incremented in this loop, the following hold
- // true:
- //
- // * Every element in `ary[p .. i]` is less than or equal to the pivot.
- //
- // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
- for (var j = p; j < r; j++) {
- if (comparator(ary[j], pivot, false) <= 0) {
- i += 1;
- swap(ary, i, j);
- }
- }
-
- swap(ary, i + 1, j);
- var q = i + 1;
-
- // (2) Recurse on each half.
-
- doQuickSort(ary, comparator, p, q - 1);
- doQuickSort(ary, comparator, q + 1, r);
- }
- }
-
- return doQuickSort;
- }
-
- function cloneSort(comparator) {
- let template = SortTemplate.toString();
- let templateFn = new Function(`return ${template}`)();
- return templateFn(comparator);
- }
-
- /**
- * Sort the given array in-place with the given comparator function.
- *
- * @param {Array} ary
- * An array to sort.
- * @param {function} comparator
- * Function to use to compare two items.
- */
-
- let sortCache = new WeakMap();
- exports.quickSort = function (ary, comparator, start = 0) {
- let doQuickSort = sortCache.get(comparator);
- if (doQuickSort === void 0) {
- doQuickSort = cloneSort(comparator);
- sortCache.set(comparator, doQuickSort);
- }
- doQuickSort(ary, comparator, start, ary.length - 1);
- };
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
- /* -*- Mode: js; js-indent-level: 2; -*- */
- /*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
- var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
- var util = __webpack_require__(4);
-
- // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
- // operating systems these days (capturing the result).
- var REGEX_NEWLINE = /(\r?\n)/;
-
- // Newline character code for charCodeAt() comparisons
- var NEWLINE_CODE = 10;
-
- // Private symbol for identifying `SourceNode`s when multiple versions of
- // the source-map library are loaded. This MUST NOT CHANGE across
- // versions!
- var isSourceNode = "$$$isSourceNode$$$";
-
- /**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- * generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
- function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null) this.add(aChunks);
- }
-
- /**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- * SourceMapConsumer should be relative to.
- */
- SourceNode.fromStringWithSourceMap =
- function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- // The SourceNode we want to fill with the generated code
- // and the SourceMap
- var node = new SourceNode();
-
- // All even indices of this array are one line of the generated code,
- // while all odd indices are the newlines between two adjacent lines
- // (since `REGEX_NEWLINE` captures its match).
- // Processed fragments are accessed by calling `shiftNextLine`.
- var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- var remainingLinesIndex = 0;
- var shiftNextLine = function() {
- var lineContents = getNextLine();
- // The last line of a file might not have a newline.
- var newLine = getNextLine() || "";
- return lineContents + newLine;
-
- function getNextLine() {
- return remainingLinesIndex < remainingLines.length ?
- remainingLines[remainingLinesIndex++] : undefined;
- }
- };
-
- // We need to remember the position of "remainingLines"
- var lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
- // The generate SourceNodes we need a code range.
- // To extract it current and last mapping is used.
- // Here we store the last mapping.
- var lastMapping = null;
-
- aSourceMapConsumer.eachMapping(function (mapping) {
- if (lastMapping !== null) {
- // We add the code from "lastMapping" to "mapping":
- // First check if there is a new line in between.
- if (lastGeneratedLine < mapping.generatedLine) {
- // Associate first line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
- // The remaining code is added without mapping
- } else {
- // There is no new line in between.
- // Associate the code between "lastGeneratedColumn" and
- // "mapping.generatedColumn" with "lastMapping"
- var nextLine = remainingLines[remainingLinesIndex] || '';
- var code = nextLine.substr(0, mapping.generatedColumn -
- lastGeneratedColumn);
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
- lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- // No more remaining code, continue
- lastMapping = mapping;
- return;
- }
- }
- // We add the generated code until the first mapping
- // to the SourceNode without any mapping.
- // Each line is added as separate string.
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- var nextLine = remainingLines[remainingLinesIndex] || '';
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- }
- lastMapping = mapping;
- }, this);
- // We have processed all mappings.
- if (remainingLinesIndex < remainingLines.length) {
- if (lastMapping) {
- // Associate the remaining code in the current line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- }
- // and add the remaining lines without any mapping
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
- }
-
- // Copy sourcesContent into SourceNode
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
-
- return node;
-
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === undefined) {
- node.add(code);
- } else {
- var source = aRelativePath
- ? util.join(aRelativePath, mapping.source)
- : mapping.source;
- node.add(new SourceNode(mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name));
- }
- }
- };
-
- /**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- SourceNode.prototype.add = function SourceNode_add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function (chunk) {
- this.add(chunk);
- }, this);
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
- }
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- };
-
- /**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (var i = aChunk.length-1; i >= 0; i--) {
- this.prepend(aChunk[i]);
- }
- }
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- }
- else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
- };
-
- /**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
- SourceNode.prototype.walk = function SourceNode_walk(aFn) {
- var chunk;
- for (var i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
- }
- else {
- if (chunk !== '') {
- aFn(chunk, { source: this.source,
- line: this.line,
- column: this.column,
- name: this.name });
- }
- }
- }
- };
-
- /**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
- SourceNode.prototype.join = function SourceNode_join(aSep) {
- var newChildren;
- var i;
- var len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len-1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
- }
- return this;
- };
-
- /**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
- SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
- var lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- }
- else if (typeof lastChild === 'string') {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- }
- else {
- this.children.push(''.replace(aPattern, aReplacement));
- }
- return this;
- };
-
- /**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
- SourceNode.prototype.setSourceContent =
- function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- };
-
- /**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
- SourceNode.prototype.walkSourceContents =
- function SourceNode_walkSourceContents(aFn) {
- for (var i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
- }
- }
-
- var sources = Object.keys(this.sourceContents);
- for (var i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
- }
- };
-
- /**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
- SourceNode.prototype.toString = function SourceNode_toString() {
- var str = "";
- this.walk(function (chunk) {
- str += chunk;
- });
- return str;
- };
-
- /**
- * Returns the string representation of this source node along with a source
- * map.
- */
- SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
- var generated = {
- code: "",
- line: 1,
- column: 0
- };
- var map = new SourceMapGenerator(aArgs);
- var sourceMappingActive = false;
- var lastOriginalSource = null;
- var lastOriginalLine = null;
- var lastOriginalColumn = null;
- var lastOriginalName = null;
- this.walk(function (chunk, original) {
- generated.code += chunk;
- if (original.source !== null
- && original.line !== null
- && original.column !== null) {
- if(lastOriginalSource !== original.source
- || lastOriginalLine !== original.line
- || lastOriginalColumn !== original.column
- || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
- });
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (var idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- // Mappings end at eol
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- } else {
- generated.column++;
- }
- }
- });
- this.walkSourceContents(function (sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
-
- return { code: generated.code, map: map };
- };
-
- exports.SourceNode = SourceNode;
-
-
-/***/ })
-/******/ ])
-});
-;
-//# sourceMappingURL=source-map.min.js.map
\ No newline at end of file
diff --git a/node_modules/source-map-js/dist/source-map.min.js.map b/node_modules/source-map-js/dist/source-map.min.js.map
deleted file mode 100644
index e8685c1..0000000
--- a/node_modules/source-map-js/dist/source-map.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap e70d6d2fc15858a690e4","webpack:///./source-map.js","webpack:///./lib/source-map-generator.js","webpack:///./lib/base64-vlq.js","webpack:///./lib/base64.js","webpack:///./lib/util.js","webpack:///./lib/array-set.js","webpack:///./lib/mapping-list.js","webpack:///./lib/source-map-consumer.js","webpack:///./lib/binary-search.js","webpack:///./lib/quick-sort.js","webpack:///./lib/source-node.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA0C,SAAS;AACnD;AACA;;AAEA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxaA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA2D;AAC3D,qBAAoB;AACpB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;;;;;;AC3IA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,iBAAgB;;AAEhB,oBAAmB;AACnB,qBAAoB;;AAEpB,iBAAgB;AAChB,iBAAgB;;AAEhB,iBAAgB;AAChB,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AClEA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,+CAA8C,QAAQ;AACtD;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb;;AAEA;AACA,eAAc;AACd;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACjlBA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxHA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9EA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,MAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa,kCAAkC;AAC/C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uDAAsD,YAAY;AAClE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,wBAAuB,OAAO;AAC9B,sBAAqB,WAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAAyB,cAAc;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,wCAAwC;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAA+C,mBAAmB,EAAE;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA,8BAA6B,MAAM;AACnC;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,2BAA2B;AAC9C,sBAAqB,+CAA+C;AACpE;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,2BAA2B;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,2BAA2B;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,2BAA2B;AAC9C;AACA;AACA,sBAAqB,4BAA4B;AACjD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACzpCA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC9GA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA,YAAW,OAAO;AAClB;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA,YAAW,SAAS;AACpB;AACA,YAAW,OAAO;AAClB;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,2CAA0C,SAAS;AACnD;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnIA,iBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,SAAS;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,WAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA,0CAAyC,SAAS;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,6CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;AACX;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;;AAEH,WAAU;AACV;;AAEA","file":"source-map.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e70d6d2fc15858a690e4","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var sourceRelative = sourceFile;\n if (sourceRoot !== null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\nvar MAX_CACHED_INPUTS = 32;\n\n/**\n * Takes some function `f(input) -> result` and returns a memoized version of\n * `f`.\n *\n * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n * memoization is a dumb-simple, linear least-recently-used cache.\n */\nfunction lruMemoize(f) {\n var cache = [];\n\n return function(input) {\n for (var i = 0; i < cache.length; i++) {\n if (cache[i].input === input) {\n var temp = cache[0];\n cache[0] = cache[i];\n cache[i] = temp;\n return cache[0].result;\n }\n }\n\n var result = f(input);\n\n cache.unshift({\n input,\n result,\n });\n\n if (cache.length > MAX_CACHED_INPUTS) {\n cache.pop();\n }\n\n return result;\n };\n}\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nvar normalize = lruMemoize(function normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n // Split the path into parts between `/` characters. This is much faster than\n // using `.split(/\\/+/g)`.\n var parts = [];\n var start = 0;\n var i = 0;\n while (true) {\n start = i;\n i = path.indexOf(\"/\", start);\n if (i === -1) {\n parts.push(path.slice(start));\n break;\n } else {\n parts.push(path.slice(start, i));\n while (i < path.length && path[i] === \"/\") {\n i++;\n }\n }\n }\n\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n});\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\nfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n var cmp\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n sourceURL = sourceURL || '';\n\n if (sourceRoot) {\n // This follows what Chrome does.\n if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n sourceRoot += '/';\n }\n // The spec says:\n // Line 4: An optional source root, useful for relocating source\n // files on a server or removing repeated values in the\n // “sources” entry. This value is prepended to the individual\n // entries in the “source” field.\n sourceURL = sourceRoot + sourceURL;\n }\n\n // Historically, SourceMapConsumer did not take the sourceMapURL as\n // a parameter. This mode is still somewhat supported, which is why\n // this code block is conditional. However, it's preferable to pass\n // the source map URL to SourceMapConsumer, so that this function\n // can implement the source URL resolution algorithm as outlined in\n // the spec. This block is basically the equivalent of:\n // new URL(sourceURL, sourceMapURL).toString()\n // ... except it avoids using URL, which wasn't available in the\n // older releases of node still supported by this library.\n //\n // The spec says:\n // If the sources are not absolute URLs after prepending of the\n // “sourceRoot”, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n var parsed = urlParse(sourceMapURL);\n if (!parsed) {\n throw new Error(\"sourceMapURL could not be parsed\");\n }\n if (parsed.path) {\n // Strip the last path component, but keep the \"/\".\n var index = parsed.path.lastIndexOf('/');\n if (index >= 0) {\n parsed.path = parsed.path.substring(0, index + 1);\n }\n }\n sourceURL = join(urlGenerate(parsed), sourceURL);\n }\n\n return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number is 1-based.\n * - column: Optional. the column number in the original source.\n * The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n needle.source = this._findSourceIndex(needle.source);\n if (needle.source < 0) {\n return [];\n }\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n if (sourceRoot) {\n sourceRoot = util.normalize(sourceRoot);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this._absoluteSources = this._sources.toArray().map(function (s) {\n return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n });\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this._sourceMapURL = aSourceMapURL;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source. Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n if (this._sources.has(relativeSource)) {\n return this._sources.indexOf(relativeSource);\n }\n\n // Maybe aSource is an absolute URL as returned by |sources|. In\n // this case we can't simply undo the transform.\n var i;\n for (i = 0; i < this._absoluteSources.length; ++i) {\n if (this._absoluteSources[i] == aSource) {\n return i;\n }\n }\n\n return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @param String aSourceMapURL\n * The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n smc._sourceMapURL = aSourceMapURL;\n smc._absoluteSources = smc._sources.toArray().map(function (s) {\n return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n });\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._absoluteSources.slice();\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\n\nconst compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;\nfunction sortGenerated(array, start) {\n let l = array.length;\n let n = array.length - start;\n if (n <= 1) {\n return;\n } else if (n == 2) {\n let a = array[start];\n let b = array[start + 1];\n if (compareGenerated(a, b) > 0) {\n array[start] = b;\n array[start + 1] = a;\n }\n } else if (n < 20) {\n for (let i = start; i < l; i++) {\n for (let j = i; j > start; j--) {\n let a = array[j - 1];\n let b = array[j];\n if (compareGenerated(a, b) <= 0) {\n break;\n }\n array[j - 1] = b;\n array[j] = a;\n }\n }\n } else {\n quickSort(array, compareGenerated, start);\n }\n}\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n let subarrayStart = 0;\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n\n sortGenerated(generatedMappings, subarrayStart);\n subarrayStart = generatedMappings.length;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n let currentSource = mapping.source;\n while (originalMappings.length <= currentSource) {\n originalMappings.push(null);\n }\n if (originalMappings[currentSource] === null) {\n originalMappings[currentSource] = [];\n }\n originalMappings[currentSource].push(mapping);\n }\n }\n }\n\n sortGenerated(generatedMappings, subarrayStart);\n this.__generatedMappings = generatedMappings;\n\n for (var i = 0; i < originalMappings.length; i++) {\n if (originalMappings[i] != null) {\n quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);\n }\n }\n this.__originalMappings = [].concat(...originalMappings);\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n var index = this._findSourceIndex(aSource);\n if (index >= 0) {\n return this.sourcesContent[index];\n }\n\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + relativeSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n source = this._findSourceIndex(source);\n if (source < 0) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based. \n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = null;\n if (mapping.name) {\n name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n }\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\nfunction SortTemplate(comparator) {\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot, false) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n return doQuickSort;\n}\n\nfunction cloneSort(comparator) {\n let template = SortTemplate.toString();\n let templateFn = new Function(`return ${template}`)();\n return templateFn(comparator);\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\n\nlet sortCache = new WeakMap();\nexports.quickSort = function (ary, comparator, start = 0) {\n let doQuickSort = sortCache.get(comparator);\n if (doQuickSort === void 0) {\n doQuickSort = cloneSort(comparator);\n sortCache.set(comparator, doQuickSort);\n }\n doQuickSort(ary, comparator, start, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex] || '';\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex] || '';\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""}
\ No newline at end of file
diff --git a/node_modules/source-map-js/lib/source-map-consumer.js b/node_modules/source-map-js/lib/source-map-consumer.js
index 17bd8c3..4bd7a4a 100644
--- a/node_modules/source-map-js/lib/source-map-consumer.js
+++ b/node_modules/source-map-js/lib/source-map-consumer.js
@@ -143,18 +143,24 @@
}
var sourceRoot = this.sourceRoot;
- mappings.map(function (mapping) {
- var source = mapping.source === null ? null : this._sources.at(mapping.source);
- source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
- return {
+ var boundCallback = aCallback.bind(context);
+ var names = this._names;
+ var sources = this._sources;
+ var sourceMapURL = this._sourceMapURL;
+
+ for (var i = 0, n = mappings.length; i < n; i++) {
+ var mapping = mappings[i];
+ var source = mapping.source === null ? null : sources.at(mapping.source);
+ source = util.computeSourceURL(sourceRoot, source, sourceMapURL);
+ boundCallback({
source: source,
generatedLine: mapping.generatedLine,
generatedColumn: mapping.generatedColumn,
originalLine: mapping.originalLine,
originalColumn: mapping.originalColumn,
- name: mapping.name === null ? null : this._names.at(mapping.name)
- };
- }, this).forEach(aCallback, context);
+ name: mapping.name === null ? null : names.at(mapping.name)
+ });
+ }
};
/**
diff --git a/node_modules/source-map-js/package.json b/node_modules/source-map-js/package.json
index 41a2131..f708ca5 100644
--- a/node_modules/source-map-js/package.json
+++ b/node_modules/source-map-js/package.json
@@ -1,7 +1,7 @@
{
"name": "source-map-js",
"description": "Generates and consumes source maps",
- "version": "0.6.2",
+ "version": "1.0.1",
"homepage": "https://github.com/7rulnik/source-map",
"author": "Valentin 7rulnik Semirulnik <v7rulnik@gmail.com>",
"contributors": [
@@ -43,32 +43,16 @@
"Gary Ye <garysye@gmail.com>",
"Nicolas Laleve\u0301e <nicolas.lalevee@hibnet.org>"
],
- "repository": {
- "type": "git",
- "url": "http://github.com/7rulnik/source-map.git"
- },
+ "repository": "7rulnik/source-map",
"main": "./source-map.js",
"files": [
"source-map.js",
"source-map.d.ts",
- "lib/",
- "dist/source-map.debug.js",
- "dist/source-map.js",
- "dist/source-map.min.js",
- "dist/source-map.min.js.map"
+ "lib/"
],
"engines": {
"node": ">=0.10.0"
},
"license": "BSD-3-Clause",
- "scripts": {
- "test": "npm run build && node test/run-tests.js",
- "build": "webpack --color",
- "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md"
- },
- "devDependencies": {
- "doctoc": "^0.15.0",
- "webpack": "^1.12.0"
- },
- "typings": "source-map"
+ "typings": "source-map.d.ts"
}
diff --git a/node_modules/stylelint-config-standard/README.md b/node_modules/stylelint-config-standard/README.md
index 9da021c..b05618d 100644
--- a/node_modules/stylelint-config-standard/README.md
+++ b/node_modules/stylelint-config-standard/README.md
@@ -93,8 +93,8 @@
}
@keyframes fade-in {
- from { opacity: 0%; }
- to { opacity: 100%; }
+ from { opacity: 0; }
+ to { opacity: 1; }
}
```
@@ -177,53 +177,53 @@
`stylelint-config-standard` is a great foundation for your own config. You can extend it to create a tailored and much stricter config:
- Manage specificity using:
- - [`max-nesting-depth`](https://github.com/stylelint/stylelint/blob/master/lib/rules/max-nesting-depth/README.md)
- - [`selector-max-attribute`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-attribute/README.md)
- - [`selector-max-class`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-class/README.md)
- - [`selector-max-combinators`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-combinators/README.md)
- - [`selector-max-compound-selectors`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-compound-selectors/README.md)
- - [`selector-max-id`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-id/README.md)
- - [`selector-max-pseudo-class`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-pseudo-class/README.md)
- - [`selector-max-specificity`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-specificity/README.md)
- - [`selector-max-type`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-type/README.md)
- - [`selector-max-universal`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-max-universal/README.md)
- - [`selector-no-qualifying-type`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-no-qualifying-type/README.md)
+ - [`max-nesting-depth`](https://github.com/stylelint/stylelint/blob/main/lib/rules/max-nesting-depth/README.md)
+ - [`selector-max-attribute`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-attribute/README.md)
+ - [`selector-max-class`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-class/README.md)
+ - [`selector-max-combinators`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-combinators/README.md)
+ - [`selector-max-compound-selectors`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-compound-selectors/README.md)
+ - [`selector-max-id`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-id/README.md)
+ - [`selector-max-pseudo-class`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-pseudo-class/README.md)
+ - [`selector-max-specificity`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-specificity/README.md)
+ - [`selector-max-type`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-type/README.md)
+ - [`selector-max-universal`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-max-universal/README.md)
+ - [`selector-no-qualifying-type`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-no-qualifying-type/README.md)
- Specify acceptable selector types, units, properties, functions and words in comments using:
- - [`at-rule-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/at-rule-disallowed-list/README.md)
- - [`at-rule-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/at-rule-allowed-list/README.md)
- - [`at-rule-property-required-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/at-rule-property-required-list/README.md)
- - [`color-named`](https://github.com/stylelint/stylelint/blob/master/lib/rules/color-named/README.md)
- - [`color-no-hex`](https://github.com/stylelint/stylelint/blob/master/lib/rules/color-no-hex/README.md)
- - [`comment-word-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/comment-word-disallowed-list/README.md)
- - [`declaration-no-important`](https://github.com/stylelint/stylelint/blob/master/lib/rules/declaration-no-important/README.md)
- - [`declaration-property-unit-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/declaration-property-unit-disallowed-list/README.md)
- - [`declaration-property-unit-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/declaration-property-unit-allowed-list/README.md)
- - [`declaration-property-value-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/declaration-property-value-disallowed-list/README.md)
- - [`declaration-property-value-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/declaration-property-value-allowed-list/README.md)
- - [`function-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/function-disallowed-list/README.md)
- - [`function-url-scheme-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/function-url-scheme-disallowed-list/README.md)
- - [`function-url-scheme-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/function-url-scheme-allowed-list/README.md)
- - [`function-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/function-allowed-list/README.md)
- - [`media-feature-name-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/media-feature-name-disallowed-list/README.md)
- - [`media-feature-name-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/media-feature-name-allowed-list/README.md)
- - [`property-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/property-disallowed-list/README.md)
- - [`property-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/property-allowed-list/README.md)
- - [`selector-attribute-operator-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-attribute-operator-disallowed-list/README.md)
- - [`selector-attribute-operator-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-attribute-operator-allowed-list/README.md)
- - [`selector-combinator-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-combinator-disallowed-list/README.md)
- - [`selector-combinator-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-combinator-allowed-list/README.md)
- - [`selector-pseudo-class-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-pseudo-class-disallowed-list/README.md)
- - [`selector-pseudo-class-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-pseudo-class-allowed-list/README.md)
- - [`selector-pseudo-element-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-pseudo-element-disallowed-list/README.md)
- - [`selector-pseudo-element-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-pseudo-element-allowed-list/README.md)
- - [`unit-disallowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/unit-disallowed-list/README.md)
- - [`unit-allowed-list`](https://github.com/stylelint/stylelint/blob/master/lib/rules/unit-allowed-list/README.md)
+ - [`at-rule-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/at-rule-disallowed-list/README.md)
+ - [`at-rule-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/at-rule-allowed-list/README.md)
+ - [`at-rule-property-required-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/at-rule-property-required-list/README.md)
+ - [`color-named`](https://github.com/stylelint/stylelint/blob/main/lib/rules/color-named/README.md)
+ - [`color-no-hex`](https://github.com/stylelint/stylelint/blob/main/lib/rules/color-no-hex/README.md)
+ - [`comment-word-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/comment-word-disallowed-list/README.md)
+ - [`declaration-no-important`](https://github.com/stylelint/stylelint/blob/main/lib/rules/declaration-no-important/README.md)
+ - [`declaration-property-unit-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/declaration-property-unit-disallowed-list/README.md)
+ - [`declaration-property-unit-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/declaration-property-unit-allowed-list/README.md)
+ - [`declaration-property-value-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/declaration-property-value-disallowed-list/README.md)
+ - [`declaration-property-value-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/declaration-property-value-allowed-list/README.md)
+ - [`function-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/function-disallowed-list/README.md)
+ - [`function-url-scheme-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/function-url-scheme-disallowed-list/README.md)
+ - [`function-url-scheme-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/function-url-scheme-allowed-list/README.md)
+ - [`function-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/function-allowed-list/README.md)
+ - [`media-feature-name-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/media-feature-name-disallowed-list/README.md)
+ - [`media-feature-name-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/media-feature-name-allowed-list/README.md)
+ - [`property-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/property-disallowed-list/README.md)
+ - [`property-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/property-allowed-list/README.md)
+ - [`selector-attribute-operator-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-attribute-operator-disallowed-list/README.md)
+ - [`selector-attribute-operator-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-attribute-operator-allowed-list/README.md)
+ - [`selector-combinator-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-combinator-disallowed-list/README.md)
+ - [`selector-combinator-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-combinator-allowed-list/README.md)
+ - [`selector-pseudo-class-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-pseudo-class-disallowed-list/README.md)
+ - [`selector-pseudo-class-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-pseudo-class-allowed-list/README.md)
+ - [`selector-pseudo-element-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-pseudo-element-disallowed-list/README.md)
+ - [`selector-pseudo-element-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-pseudo-element-allowed-list/README.md)
+ - [`unit-disallowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/unit-disallowed-list/README.md)
+ - [`unit-allowed-list`](https://github.com/stylelint/stylelint/blob/main/lib/rules/unit-allowed-list/README.md)
- Specify acceptable patterns using:
- - [`selector-nested-pattern`](https://github.com/stylelint/stylelint/blob/master/lib/rules/selector-nested-pattern/README.md)
+ - [`selector-nested-pattern`](https://github.com/stylelint/stylelint/blob/main/lib/rules/selector-nested-pattern/README.md)
- Specify a notation for font weights using:
- - [`font-weight-notation`](https://github.com/stylelint/stylelint/blob/master/lib/rules/font-weight-notation/README.md)
+ - [`font-weight-notation`](https://github.com/stylelint/stylelint/blob/main/lib/rules/font-weight-notation/README.md)
- Specify what types of URLs are allowed using:
- - [`function-url-no-scheme-relative`](https://github.com/stylelint/stylelint/blob/master/lib/rules/function-url-no-scheme-relative/README.md)
+ - [`function-url-no-scheme-relative`](https://github.com/stylelint/stylelint/blob/main/lib/rules/function-url-no-scheme-relative/README.md)
## [Changelog](CHANGELOG.md)
diff --git a/node_modules/stylelint-config-standard/index.js b/node_modules/stylelint-config-standard/index.js
index 44c7f80..cb0e51d 100644
--- a/node_modules/stylelint-config-standard/index.js
+++ b/node_modules/stylelint-config-standard/index.js
@@ -3,7 +3,12 @@
module.exports = {
extends: 'stylelint-config-recommended',
rules: {
- 'alpha-value-notation': 'percentage',
+ 'alpha-value-notation': [
+ 'percentage',
+ {
+ exceptProperties: ['opacity'],
+ },
+ ],
'at-rule-empty-line-before': [
'always',
{
diff --git a/node_modules/stylelint-config-standard/package.json b/node_modules/stylelint-config-standard/package.json
index f339942..6dfaf07 100644
--- a/node_modules/stylelint-config-standard/package.json
+++ b/node_modules/stylelint-config-standard/package.json
@@ -1,6 +1,6 @@
{
"name": "stylelint-config-standard",
- "version": "23.0.0",
+ "version": "24.0.0",
"description": "Standard shareable config for Stylelint",
"keywords": [
"stylelint",
@@ -50,16 +50,16 @@
"devDependencies": {
"@stylelint/prettier-config": "^2.0.0",
"@stylelint/remark-preset": "^3.0.0",
- "eslint": "^7.32.0",
- "eslint-config-stylelint": "^14.0.0",
- "husky": "^7.0.2",
- "jest": "^27.1.0",
- "lint-staged": "^11.1.2",
+ "eslint": "^8.2.0",
+ "eslint-config-stylelint": "^15.0.0",
+ "husky": "^7.0.4",
+ "jest": "^27.3.1",
+ "lint-staged": "^12.0.2",
"np": "^7.5.0",
"npm-run-all": "^4.1.5",
- "prettier": "^2.3.2",
+ "prettier": "^2.4.1",
"remark-cli": "^10.0.0",
- "stylelint": "^14.0.0"
+ "stylelint": "^14.1.0"
},
"peerDependencies": {
"stylelint": "^14.0.0"
diff --git a/node_modules/stylelint/README.md b/node_modules/stylelint/README.md
index c6ee112..d5fe407 100644
--- a/node_modules/stylelint/README.md
+++ b/node_modules/stylelint/README.md
@@ -1,6 +1,6 @@
# Stylelint
-[](https://www.npmjs.org/package/stylelint) [](https://github.com/stylelint/stylelint/actions) [](https://npmcharts.com/compare/stylelint?minimal=true)
+[](https://www.npmjs.com/package/stylelint) [](https://github.com/stylelint/stylelint/actions/workflows/testing.yml?query=branch%3Amain) [](https://npmcharts.com/compare/stylelint?minimal=true)
A mighty, modern linter that helps you avoid errors and enforce conventions in your styles.
@@ -24,7 +24,7 @@
## Example output
-
+
## Guides
@@ -87,7 +87,7 @@
### Website hosting
-<a href="https://www.netlify.com"><img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt="Deploys by Netlify" /></a>
+[](https://www.netlify.com)
## License
diff --git a/node_modules/stylelint/lib/assignDisabledRanges.js b/node_modules/stylelint/lib/assignDisabledRanges.js
index 9d94c89..30351ab 100644
--- a/node_modules/stylelint/lib/assignDisabledRanges.js
+++ b/node_modules/stylelint/lib/assignDisabledRanges.js
@@ -134,9 +134,9 @@
const line = comment.source.start.line;
const description = getDescription(comment.text);
- getCommandRules(disableLineCommand, comment.text).forEach((ruleName) => {
+ for (const ruleName of getCommandRules(disableLineCommand, comment.text)) {
disableLine(comment, line, ruleName, description);
- });
+ }
}
}
@@ -148,9 +148,9 @@
const line = comment.source.end.line;
const description = getDescription(comment.text);
- getCommandRules(disableNextLineCommand, comment.text).forEach((ruleName) => {
+ for (const ruleName of getCommandRules(disableNextLineCommand, comment.text)) {
disableLine(comment, line + 1, ruleName, description);
- });
+ }
}
}
@@ -168,14 +168,14 @@
}
if (ruleName === ALL_RULES) {
- Object.keys(disabledRanges).forEach((disabledRuleName) => {
- if (ruleIsDisabled(disabledRuleName)) return;
+ for (const disabledRuleName of Object.keys(disabledRanges)) {
+ if (ruleIsDisabled(disabledRuleName)) continue;
const strict = disabledRuleName === ALL_RULES;
startDisabledRange(comment, line, disabledRuleName, strict, description);
endDisabledRange(line, disabledRuleName, strict);
- });
+ }
} else {
if (ruleIsDisabled(ruleName)) {
throw comment.error(`"${ruleName}" has already been disabled`, {
@@ -194,7 +194,7 @@
function processDisableCommand(comment) {
const description = getDescription(comment.text);
- getCommandRules(disableCommand, comment.text).forEach((ruleToDisable) => {
+ for (const ruleToDisable of getCommandRules(disableCommand, comment.text)) {
const isAllRules = ruleToDisable === ALL_RULES;
if (ruleIsDisabled(ruleToDisable)) {
@@ -212,21 +212,21 @@
const line = comment.source.start.line;
if (isAllRules) {
- Object.keys(disabledRanges).forEach((ruleName) => {
+ for (const ruleName of Object.keys(disabledRanges)) {
startDisabledRange(comment, line, ruleName, ruleName === ALL_RULES, description);
- });
+ }
} else {
startDisabledRange(comment, line, ruleToDisable, true, description);
}
}
- });
+ }
}
/**
* @param {PostcssComment} comment
*/
function processEnableCommand(comment) {
- getCommandRules(enableCommand, comment.text).forEach((ruleToEnable) => {
+ for (const ruleToEnable of getCommandRules(enableCommand, comment.text)) {
// TODO TYPES
// need fallback if endLine will be undefined
const endLine = /** @type {number} */ (
@@ -244,15 +244,15 @@
});
}
- Object.entries(disabledRanges).forEach(([ruleName, ranges]) => {
+ for (const [ruleName, ranges] of Object.entries(disabledRanges)) {
const lastRange = ranges[ranges.length - 1];
if (!lastRange || !lastRange.end) {
endDisabledRange(endLine, ruleName, ruleName === ALL_RULES);
}
- });
+ }
- return;
+ continue;
}
if (ruleIsDisabled(ALL_RULES) && disabledRanges[ruleToEnable] === undefined) {
@@ -272,19 +272,19 @@
endDisabledRange(endLine, ruleToEnable, true);
- return;
+ continue;
}
if (ruleIsDisabled(ruleToEnable)) {
endDisabledRange(endLine, ruleToEnable, true);
- return;
+ continue;
}
throw comment.error(`"${ruleToEnable}" has not been disabled`, {
plugin: 'stylelint',
});
- });
+ }
}
/**
diff --git a/node_modules/stylelint/lib/augmentConfig.js b/node_modules/stylelint/lib/augmentConfig.js
index 337affc..a06ad2d 100644
--- a/node_modules/stylelint/lib/augmentConfig.js
+++ b/node_modules/stylelint/lib/augmentConfig.js
@@ -16,6 +16,8 @@
/** @typedef {import('stylelint').InternalApi} StylelintInternalApi */
/** @typedef {import('stylelint').Config} StylelintConfig */
/** @typedef {import('stylelint').CosmiconfigResult} StylelintCosmiconfigResult */
+/** @typedef {import('stylelint').CodeProcessor} StylelintCodeProcessor */
+/** @typedef {import('stylelint').ResultProcessor} StylelintResultProcessor */
/**
* - Merges config and stylelint options
@@ -24,50 +26,64 @@
* @param {StylelintInternalApi} stylelint
* @param {StylelintConfig} config
* @param {string} configDir
- * @param {boolean} [allowOverrides]
+ * @param {boolean} allowOverrides
+ * @param {string} rootConfigDir
* @param {string} [filePath]
* @returns {Promise<StylelintConfig>}
*/
-async function augmentConfigBasic(stylelint, config, configDir, allowOverrides, filePath) {
+async function augmentConfigBasic(
+ stylelint,
+ config,
+ configDir,
+ allowOverrides,
+ rootConfigDir,
+ filePath,
+) {
let augmentedConfig = config;
if (allowOverrides) {
augmentedConfig = addOptions(stylelint, augmentedConfig);
}
- augmentedConfig = await extendConfig(stylelint, augmentedConfig, configDir);
-
if (filePath) {
- while (augmentedConfig.overrides) {
- augmentedConfig = applyOverrides(augmentedConfig, configDir, filePath);
- augmentedConfig = await extendConfig(stylelint, augmentedConfig, configDir);
- }
+ augmentedConfig = applyOverrides(augmentedConfig, rootConfigDir, filePath);
}
- return absolutizePaths(augmentedConfig, configDir);
+ augmentedConfig = await extendConfig(
+ stylelint,
+ augmentedConfig,
+ configDir,
+ rootConfigDir,
+ filePath,
+ );
+
+ const cwd = stylelint._options.cwd;
+
+ return absolutizePaths(augmentedConfig, configDir, cwd);
}
/**
* Extended configs need to be run through augmentConfigBasic
* but do not need the full treatment. Things like pluginFunctions
* will be resolved and added by the parent config.
- * @param {StylelintInternalApi} stylelint
- * @param {StylelintCosmiconfigResult} [cosmiconfigResult]
- * @returns {Promise<StylelintCosmiconfigResult>}
+ * @param {string} cwd
+ * @returns {(cosmiconfigResult?: StylelintCosmiconfigResult) => Promise<StylelintCosmiconfigResult>}
*/
-async function augmentConfigExtended(stylelint, cosmiconfigResult) {
- if (!cosmiconfigResult) {
- return null;
- }
+function augmentConfigExtended(cwd) {
+ return async (cosmiconfigResult) => {
+ if (!cosmiconfigResult) {
+ return null;
+ }
- const configDir = path.dirname(cosmiconfigResult.filepath || '');
- const { config } = cosmiconfigResult;
+ const configDir = path.dirname(cosmiconfigResult.filepath || '');
+ const { config } = cosmiconfigResult;
- const augmentedConfig = await augmentConfigBasic(stylelint, config, configDir);
+ const augmentedConfig = absolutizePaths(config, configDir, cwd);
- return {
- config: augmentedConfig,
- filepath: cosmiconfigResult.filepath,
+ return {
+ config: augmentedConfig,
+ filepath: cosmiconfigResult.filepath,
+ };
};
}
@@ -87,7 +103,14 @@
const configDir = stylelint._options.configBasedir || path.dirname(filepath || '');
- let augmentedConfig = await augmentConfigBasic(stylelint, config, configDir, true, filePath);
+ let augmentedConfig = await augmentConfigBasic(
+ stylelint,
+ config,
+ configDir,
+ true,
+ configDir,
+ filePath,
+ );
augmentedConfig = addPluginFunctions(augmentedConfig);
augmentedConfig = addProcessorFunctions(augmentedConfig);
@@ -114,9 +137,10 @@
* (extends handled elsewhere)
* @param {StylelintConfig} config
* @param {string} configDir
+ * @param {string} cwd
* @returns {StylelintConfig}
*/
-function absolutizePaths(config, configDir) {
+function absolutizePaths(config, configDir, cwd) {
if (config.ignoreFiles) {
config.ignoreFiles = [config.ignoreFiles].flat().map((glob) => {
if (path.isAbsolute(glob.replace(/^!/, ''))) return glob;
@@ -126,7 +150,7 @@
}
if (config.plugins) {
- config.plugins = [config.plugins].flat().map((lookup) => getModulePath(configDir, lookup));
+ config.plugins = [config.plugins].flat().map((lookup) => getModulePath(configDir, lookup, cwd));
}
if (config.processors) {
@@ -159,9 +183,11 @@
* @param {StylelintInternalApi} stylelint
* @param {StylelintConfig} config
* @param {string} configDir
+ * @param {string} rootConfigDir
+ * @param {string} [filePath]
* @return {Promise<StylelintConfig>}
*/
-async function extendConfig(stylelint, config, configDir) {
+async function extendConfig(stylelint, config, configDir, rootConfigDir, filePath) {
if (config.extends === undefined) {
return config;
}
@@ -175,7 +201,19 @@
const extendResult = await loadExtendedConfig(stylelint, configDir, extendLookup);
if (extendResult) {
- resultConfig = mergeConfigs(resultConfig, extendResult.config);
+ let extendResultConfig = extendResult.config;
+ const extendConfigDir = path.dirname(extendResult.filepath || '');
+
+ extendResultConfig = await augmentConfigBasic(
+ stylelint,
+ extendResultConfig,
+ extendConfigDir,
+ false,
+ rootConfigDir,
+ filePath,
+ );
+
+ resultConfig = mergeConfigs(resultConfig, extendResultConfig);
}
}
@@ -189,7 +227,7 @@
* @return {Promise<StylelintCosmiconfigResult>}
*/
function loadExtendedConfig(stylelint, configDir, extendLookup) {
- const extendPath = getModulePath(configDir, extendLookup);
+ const extendPath = getModulePath(configDir, extendLookup, stylelint._options.cwd);
return stylelint._extendExplorer.load(extendPath);
}
@@ -293,7 +331,7 @@
// or an array of them
const normalizedPluginImport = [pluginImport].flat();
- normalizedPluginImport.forEach((pluginRuleDefinition) => {
+ for (const pluginRuleDefinition of normalizedPluginImport) {
if (!pluginRuleDefinition.ruleName) {
throw configurationError(
`stylelint requires plugins to expose a ruleName. The plugin "${pluginLookup}" is not doing this, so will not work with stylelint. Please file an issue with the plugin.`,
@@ -307,7 +345,7 @@
}
pluginFunctions[pluginRuleDefinition.ruleName] = pluginRuleDefinition.rule;
- });
+ }
}
config.pluginFunctions = pluginFunctions;
@@ -337,12 +375,12 @@
function addProcessorFunctions(config) {
if (!config.processors) return config;
- /** @type {Array<Function>} */
+ /** @type {StylelintCodeProcessor[]} */
const codeProcessors = [];
- /** @type {Array<Function>} */
+ /** @type {StylelintResultProcessor[]} */
const resultProcessors = [];
- [config.processors].flat().forEach((processorConfig) => {
+ for (const processorConfig of [config.processors].flat()) {
const processorKey = JSON.stringify(processorConfig);
let initializedProcessor;
@@ -367,7 +405,7 @@
if (initializedProcessor && initializedProcessor.result) {
resultProcessors.push(initializedProcessor.result);
}
- });
+ }
config.codeProcessors = codeProcessors;
config.resultProcessors = resultProcessors;
@@ -377,11 +415,11 @@
/**
* @param {StylelintConfig} fullConfig
- * @param {string} configDir
+ * @param {string} rootConfigDir
* @param {string} filePath
* @return {StylelintConfig}
*/
-function applyOverrides(fullConfig, configDir, filePath) {
+function applyOverrides(fullConfig, rootConfigDir, filePath) {
let { overrides, ...config } = fullConfig;
if (!overrides) {
@@ -410,7 +448,7 @@
return glob;
}
- return globjoin(configDir, glob);
+ return globjoin(rootConfigDir, glob);
})
// Glob patterns for micromatch should be in POSIX-style
.map((s) => normalizePath(s));
diff --git a/node_modules/stylelint/lib/createStylelint.js b/node_modules/stylelint/lib/createStylelint.js
index 4a0b486..ffe0a04 100644
--- a/node_modules/stylelint/lib/createStylelint.js
+++ b/node_modules/stylelint/lib/createStylelint.js
@@ -22,12 +22,14 @@
* @returns {StylelintInternalApi}
*/
function createStylelint(options = {}) {
+ const cwd = options.cwd || process.cwd();
+
/** @type {StylelintInternalApi} */
// @ts-expect-error -- TS2740: Type '{ _options: LinterOptions; }' is missing the following properties from type 'InternalApi'
- const stylelint = { _options: options };
+ const stylelint = { _options: { ...options, cwd } };
stylelint._extendExplorer = cosmiconfig('', {
- transform: augmentConfig.augmentConfigExtended.bind(null, stylelint),
+ transform: augmentConfig.augmentConfigExtended(cwd),
stopDir: STOP_DIR,
});
diff --git a/node_modules/stylelint/lib/createStylelintResult.js b/node_modules/stylelint/lib/createStylelintResult.js
index 25d9d3d..a16401a 100644
--- a/node_modules/stylelint/lib/createStylelintResult.js
+++ b/node_modules/stylelint/lib/createStylelintResult.js
@@ -26,7 +26,7 @@
const file = stylelintResult.source || (cssSyntaxError && cssSyntaxError.file);
if (config.resultProcessors) {
- config.resultProcessors.forEach((resultProcessor) => {
+ for (const resultProcessor of config.resultProcessors) {
// Result processors might just mutate the result object,
// or might return a new one
const returned = resultProcessor(stylelintResult, file);
@@ -34,7 +34,7 @@
if (returned) {
stylelintResult = returned;
}
- });
+ }
}
return stylelintResult;
diff --git a/node_modules/stylelint/lib/descriptionlessDisables.js b/node_modules/stylelint/lib/descriptionlessDisables.js
index 004120f..3fc86fa 100644
--- a/node_modules/stylelint/lib/descriptionlessDisables.js
+++ b/node_modules/stylelint/lib/descriptionlessDisables.js
@@ -12,13 +12,13 @@
* @param {import('stylelint').LintResult[]} results
*/
module.exports = function descriptionlessDisables(results) {
- results.forEach((result) => {
+ for (const result of results) {
const settings = validateDisableSettings(
result._postcssResult,
'reportDescriptionlessDisables',
);
- if (!settings) return;
+ if (!settings) continue;
const [enabled, options, stylelintResult] = settings;
@@ -27,11 +27,11 @@
/** @type {Set<PostcssComment>} */
const alreadyReported = new Set();
- Object.keys(rangeData).forEach((rule) => {
- rangeData[rule].forEach((range) => {
- if (range.description) return;
+ for (const rule of Object.keys(rangeData)) {
+ for (const range of rangeData[rule]) {
+ if (range.description) continue;
- if (alreadyReported.has(range.comment)) return;
+ if (alreadyReported.has(range.comment)) continue;
if (enabled === optionsMatches(options, 'except', rule)) {
// An 'all' rule will get copied for each individual rule. If the
@@ -40,14 +40,14 @@
// the comment as already reported.
if (!enabled && rule === 'all') alreadyReported.add(range.comment);
- return;
+ continue;
}
alreadyReported.add(range.comment);
// If the comment doesn't have a location, we can't report a useful error.
// In practice we expect all comments to have locations, though.
- if (!range.comment.source || !range.comment.source.start) return;
+ if (!range.comment.source || !range.comment.source.start) continue;
result.warnings.push({
text: `Disable for "${rule}" is missing a description`,
@@ -56,7 +56,7 @@
column: range.comment.source.start.column,
severity: options.severity,
});
- });
- });
- });
+ }
+ }
+ }
};
diff --git a/node_modules/stylelint/lib/formatters/stringFormatter.js b/node_modules/stylelint/lib/formatters/stringFormatter.js
index c394658..4d3d804 100644
--- a/node_modules/stylelint/lib/formatters/stringFormatter.js
+++ b/node_modules/stylelint/lib/formatters/stringFormatter.js
@@ -79,12 +79,13 @@
/**
* @param {string} fromValue
+ * @param {string} cwd
* @return {string}
*/
-function logFrom(fromValue) {
+function logFrom(fromValue, cwd) {
if (fromValue.startsWith('<')) return fromValue;
- return path.relative(process.cwd(), fromValue).split(path.sep).join('/');
+ return path.relative(cwd, fromValue).split(path.sep).join('/');
}
/**
@@ -110,9 +111,10 @@
/**
* @param {import('stylelint').Warning[]} messages
* @param {string} source
+ * @param {string} cwd
* @return {string}
*/
-function formatter(messages, source) {
+function formatter(messages, source, cwd) {
if (!messages.length) return '';
const orderedMessages = [...messages].sort((a, b) => {
@@ -157,7 +159,7 @@
let output = '\n';
if (source) {
- output += `${underline(logFrom(source))}\n`;
+ output += `${underline(logFrom(source, cwd))}\n`;
}
/**
@@ -231,7 +233,7 @@
/**
* @type {import('stylelint').Formatter}
*/
-module.exports = function (results) {
+module.exports = function (results, returnValue) {
let output = invalidOptionsFormatter(results);
output += deprecationsFormatter(results);
@@ -239,18 +241,21 @@
output = results.reduce((accum, result) => {
// Treat parseErrors as warnings
if (result.parseErrors) {
- result.parseErrors.forEach((error) =>
+ for (const error of result.parseErrors)
result.warnings.push({
line: error.line,
column: error.column,
rule: error.stylelintType,
severity: 'error',
text: `${error.text} (${error.stylelintType})`,
- }),
- );
+ });
}
- accum += formatter(result.warnings, result.source || '');
+ accum += formatter(
+ result.warnings,
+ result.source || '',
+ (returnValue && returnValue.cwd) || process.cwd(),
+ );
return accum;
}, output);
diff --git a/node_modules/stylelint/lib/formatters/tapFormatter.js b/node_modules/stylelint/lib/formatters/tapFormatter.js
index f7ade9f..fa73a04 100644
--- a/node_modules/stylelint/lib/formatters/tapFormatter.js
+++ b/node_modules/stylelint/lib/formatters/tapFormatter.js
@@ -6,7 +6,7 @@
const tapFormatter = (results) => {
const lines = [`TAP version 13\n1..${results.length}`];
- results.forEach((result, index) => {
+ for (const [index, result] of results.entries()) {
lines.push(
`${result.errored ? 'not ok' : 'ok'} ${index + 1} - ${result.ignored ? 'ignored ' : ''}${
result.source
@@ -16,7 +16,7 @@
if (result.warnings.length > 0) {
lines.push('---', 'messages:');
- result.warnings.forEach((warning) => {
+ for (const warning of result.warnings) {
lines.push(
` - message: "${warning.text}"`,
` severity: ${warning.severity}`,
@@ -25,11 +25,11 @@
` column: ${warning.column}`,
` ruleId: ${warning.rule}`,
);
- });
+ }
lines.push('---');
}
- });
+ }
lines.push('');
diff --git a/node_modules/stylelint/lib/formatters/verboseFormatter.js b/node_modules/stylelint/lib/formatters/verboseFormatter.js
index bd59b5a..d56af20 100644
--- a/node_modules/stylelint/lib/formatters/verboseFormatter.js
+++ b/node_modules/stylelint/lib/formatters/verboseFormatter.js
@@ -9,8 +9,8 @@
/**
* @type {Formatter}
*/
-module.exports = function (results) {
- let output = stringFormatter(results);
+module.exports = function (results, returnValue) {
+ let output = stringFormatter(results, returnValue);
if (output === '') {
output = '\n';
@@ -23,7 +23,8 @@
: results.length;
output += underline(`${checkedDisplay} ${sourceWord} checked\n`);
- results.forEach((result) => {
+
+ for (const result of results) {
let formatting = green;
if (result.errored) {
@@ -41,7 +42,7 @@
}
output += formatting(` ${sourceText}\n`);
- });
+ }
const warnings = results.flatMap((r) => r.warnings);
const warningsBySeverity = groupBy(warnings, (w) => w.severity);
diff --git a/node_modules/stylelint/lib/getConfigForFile.js b/node_modules/stylelint/lib/getConfigForFile.js
index d602fbd..1d843df 100644
--- a/node_modules/stylelint/lib/getConfigForFile.js
+++ b/node_modules/stylelint/lib/getConfigForFile.js
@@ -18,8 +18,13 @@
* @param {string} [filePath]
* @returns {Promise<StylelintCosmiconfigResult>}
*/
-module.exports = async function getConfigForFile(stylelint, searchPath = process.cwd(), filePath) {
+module.exports = async function getConfigForFile(
+ stylelint,
+ searchPath = stylelint._options.cwd,
+ filePath,
+) {
const optionsConfig = stylelint._options.config;
+ const cwd = stylelint._options.cwd;
if (optionsConfig !== undefined) {
const cached = stylelint._specifiedConfigCache.get(optionsConfig);
@@ -34,7 +39,7 @@
config: optionsConfig,
// Add the extra path part so that we can get the directory without being
// confused
- filepath: path.join(process.cwd(), 'argument-config'),
+ filepath: path.join(cwd, 'argument-config'),
});
stylelint._specifiedConfigCache.set(optionsConfig, augmentedResult);
@@ -52,7 +57,7 @@
: await configExplorer.search(searchPath);
if (!config) {
- config = await configExplorer.search(process.cwd());
+ config = await configExplorer.search(cwd);
}
if (!config) {
diff --git a/node_modules/stylelint/lib/getPostcssResult.js b/node_modules/stylelint/lib/getPostcssResult.js
index 273dae4..4b00c5a 100644
--- a/node_modules/stylelint/lib/getPostcssResult.js
+++ b/node_modules/stylelint/lib/getPostcssResult.js
@@ -69,9 +69,9 @@
const sourceName = options.code ? options.codeFilename : options.filePath;
- options.codeProcessors.forEach((codeProcessor) => {
+ for (const codeProcessor of options.codeProcessors) {
getCode = codeProcessor(getCode, sourceName);
- });
+ }
}
const postcssResult = await new LazyResult(postcssProcessor, getCode, postcssOptions);
@@ -94,10 +94,16 @@
try {
resolved = require(customSyntax);
} catch (error) {
- // @ts-expect-error -- TS2571: Object is of type 'unknown'.
- if (error && typeof error === 'object' && error.code === 'MODULE_NOT_FOUND') {
+ if (
+ error &&
+ typeof error === 'object' &&
+ // @ts-expect-error -- TS2571: Object is of type 'unknown'.
+ error.code === 'MODULE_NOT_FOUND' &&
+ // @ts-expect-error -- TS2571: Object is of type 'unknown'.
+ error.message.includes(customSyntax)
+ ) {
throw new Error(
- `Cannot resolve custom syntax module "${customSyntax}". Check that module "${customSyntax}" is available and spelled correctly.`,
+ `Cannot resolve custom syntax module "${customSyntax}". Check that module "${customSyntax}" is available and spelled correctly.\n\nCaused by: ${error}`,
);
}
diff --git a/node_modules/stylelint/lib/index.js b/node_modules/stylelint/lib/index.js
index f8bca2f..5e6c736 100644
--- a/node_modules/stylelint/lib/index.js
+++ b/node_modules/stylelint/lib/index.js
@@ -10,6 +10,7 @@
const rules = require('./rules');
const standalone = require('./standalone');
const validateOptions = require('./utils/validateOptions');
+const resolveConfig = require('./resolveConfig');
/** @type {import('stylelint').PublicApi} */
const stylelint = Object.assign(postcssPlugin, {
@@ -17,6 +18,7 @@
rules,
formatters,
createPlugin,
+ resolveConfig,
createLinter: createStylelint,
utils: {
report,
diff --git a/node_modules/stylelint/lib/invalidScopeDisables.js b/node_modules/stylelint/lib/invalidScopeDisables.js
index dec9f82..4a0f816 100644
--- a/node_modules/stylelint/lib/invalidScopeDisables.js
+++ b/node_modules/stylelint/lib/invalidScopeDisables.js
@@ -9,10 +9,10 @@
* @param {import('stylelint').LintResult[]} results
*/
module.exports = function invalidScopeDisables(results) {
- results.forEach((result) => {
+ for (const result of results) {
const settings = validateDisableSettings(result._postcssResult, 'reportInvalidScopeDisables');
- if (!settings) return;
+ if (!settings) continue;
const [enabled, options, stylelintResult] = settings;
@@ -25,17 +25,17 @@
const rangeData = stylelintResult.disabledRanges;
const disabledRules = Object.keys(rangeData);
- disabledRules.forEach((rule) => {
- if (usedRules.has(rule)) return;
+ for (const rule of disabledRules) {
+ if (usedRules.has(rule)) continue;
- if (enabled === optionsMatches(options, 'except', rule)) return;
+ if (enabled === optionsMatches(options, 'except', rule)) continue;
- rangeData[rule].forEach((range) => {
- if (!range.strictStart && !range.strictEnd) return;
+ for (const range of rangeData[rule]) {
+ if (!range.strictStart && !range.strictEnd) continue;
// If the comment doesn't have a location, we can't report a useful error.
// In practice we expect all comments to have locations, though.
- if (!range.comment.source || !range.comment.source.start) return;
+ if (!range.comment.source || !range.comment.source.start) continue;
result.warnings.push({
text: `Rule "${rule}" isn't enabled`,
@@ -44,7 +44,7 @@
column: range.comment.source.start.column,
severity: options.severity,
});
- });
- });
- });
+ }
+ }
+ }
};
diff --git a/node_modules/stylelint/lib/isPathIgnored.js b/node_modules/stylelint/lib/isPathIgnored.js
index b3c05d3..13c0061 100644
--- a/node_modules/stylelint/lib/isPathIgnored.js
+++ b/node_modules/stylelint/lib/isPathIgnored.js
@@ -19,7 +19,7 @@
return false;
}
- const cwd = process.cwd();
+ const cwd = stylelint._options.cwd;
const ignorer = getFileIgnorer(stylelint._options);
const result = await stylelint.getConfigForFile(filePath, filePath);
@@ -33,9 +33,7 @@
normalizePath(s),
);
- const absoluteFilePath = path.isAbsolute(filePath)
- ? filePath
- : path.resolve(process.cwd(), filePath);
+ const absoluteFilePath = path.isAbsolute(filePath) ? filePath : path.resolve(cwd, filePath);
if (micromatch([absoluteFilePath], ignoreFiles).length) {
return true;
diff --git a/node_modules/stylelint/lib/lintPostcssResult.js b/node_modules/stylelint/lib/lintPostcssResult.js
index d55b01a..99e78f6 100644
--- a/node_modules/stylelint/lib/lintPostcssResult.js
+++ b/node_modules/stylelint/lib/lintPostcssResult.js
@@ -60,7 +60,7 @@
)
: [];
- rules.forEach((ruleName) => {
+ for (const ruleName of rules) {
const ruleFunction =
rulesOrder[ruleName] || (config.pluginFunctions && config.pluginFunctions[ruleName]);
@@ -73,13 +73,13 @@
),
);
- return;
+ continue;
}
const ruleSettings = config.rules && config.rules[ruleName];
if (ruleSettings === null || ruleSettings[0] === null) {
- return;
+ continue;
}
const primaryOption = ruleSettings[0];
@@ -113,7 +113,7 @@
),
),
);
- });
+ }
return Promise.all(performRules);
}
diff --git a/node_modules/stylelint/lib/lintSource.js b/node_modules/stylelint/lib/lintSource.js
index 7682d52..caf877b 100644
--- a/node_modules/stylelint/lib/lintSource.js
+++ b/node_modules/stylelint/lib/lintSource.js
@@ -49,12 +49,12 @@
}
const configSearchPath = stylelint._options.configFile || inputFilePath;
+ const cwd = stylelint._options.cwd;
const configForFile = await stylelint
.getConfigForFile(configSearchPath, inputFilePath)
.catch((err) => {
- if (isCodeNotFile && isPathNotFoundError(err))
- return stylelint.getConfigForFile(process.cwd());
+ if (isCodeNotFile && isPathNotFoundError(err)) return stylelint.getConfigForFile(cwd);
throw err;
});
diff --git a/node_modules/stylelint/lib/needlessDisables.js b/node_modules/stylelint/lib/needlessDisables.js
index ccd2bb9..fd6a917 100644
--- a/node_modules/stylelint/lib/needlessDisables.js
+++ b/node_modules/stylelint/lib/needlessDisables.js
@@ -13,16 +13,16 @@
* @param {import('stylelint').LintResult[]} results
*/
module.exports = function needlessDisables(results) {
- results.forEach((result) => {
+ for (const result of results) {
const settings = validateDisableSettings(result._postcssResult, 'reportNeedlessDisables');
- if (!settings) return;
+ if (!settings) continue;
const [enabled, options, stylelintResult] = settings;
const rangeData = stylelintResult.disabledRanges;
- if (!rangeData) return;
+ if (!rangeData) continue;
const disabledWarnings = stylelintResult.disabledWarnings || [];
@@ -81,7 +81,7 @@
});
}
}
- });
+ }
};
/**
diff --git a/node_modules/stylelint/lib/postcssPlugin.js b/node_modules/stylelint/lib/postcssPlugin.js
index fed3181..01ab533 100644
--- a/node_modules/stylelint/lib/postcssPlugin.js
+++ b/node_modules/stylelint/lib/postcssPlugin.js
@@ -10,7 +10,9 @@
* @type {import('postcss').PluginCreator<PostcssPluginOptions>}
* */
module.exports = (options = {}) => {
- const tailoredOptions = isConfig(options) ? { config: options } : options;
+ const [cwd, tailoredOptions] = isConfig(options)
+ ? [process.cwd(), { config: options }]
+ : [options.cwd || process.cwd(), options];
const stylelint = createStylelint(tailoredOptions);
return {
@@ -19,7 +21,7 @@
let filePath = root.source && root.source.input.file;
if (filePath && !path.isAbsolute(filePath)) {
- filePath = path.join(process.cwd(), filePath);
+ filePath = path.join(cwd, filePath);
}
return stylelint._lintSource({
diff --git a/node_modules/stylelint/lib/prepareReturnValue.js b/node_modules/stylelint/lib/prepareReturnValue.js
index f97e311..c358dd3 100644
--- a/node_modules/stylelint/lib/prepareReturnValue.js
+++ b/node_modules/stylelint/lib/prepareReturnValue.js
@@ -14,10 +14,11 @@
* @param {StylelintResult[]} stylelintResults
* @param {maxWarnings} maxWarnings
* @param {Formatter} formatter
+ * @param {string} cwd
*
* @returns {LinterResult}
*/
-function prepareReturnValue(stylelintResults, maxWarnings, formatter) {
+function prepareReturnValue(stylelintResults, maxWarnings, formatter, cwd) {
reportDisables(stylelintResults);
needlessDisables(stylelintResults);
invalidScopeDisables(stylelintResults);
@@ -32,6 +33,7 @@
/** @type {LinterResult} */
const returnValue = {
+ cwd,
errored,
results: [],
output: '',
diff --git a/node_modules/stylelint/lib/printConfig.js b/node_modules/stylelint/lib/printConfig.js
index ad25bdf..dcd05e1 100644
--- a/node_modules/stylelint/lib/printConfig.js
+++ b/node_modules/stylelint/lib/printConfig.js
@@ -1,8 +1,7 @@
'use strict';
-const createStylelint = require('./createStylelint');
+const resolveConfig = require('./resolveConfig');
const globby = require('globby');
-const path = require('path');
/** @typedef {import('stylelint').Config} StylelintConfig */
@@ -10,7 +9,8 @@
* @param {import('stylelint').LinterOptions} options
* @returns {Promise<StylelintConfig | null>}
*/
-module.exports = function printConfig({
+module.exports = async function printConfig({
+ cwd = process.cwd(),
code,
config,
configBasedir,
@@ -32,24 +32,12 @@
return Promise.reject(new Error('The --print-config option does not support globs.'));
}
- const stylelint = createStylelint({
- config,
- configFile,
- configBasedir,
- });
-
- const cwd = (globbyOptions && globbyOptions.cwd) || process.cwd();
- const absoluteFilePath = !path.isAbsolute(filePath)
- ? path.join(cwd, filePath)
- : path.normalize(filePath);
-
- const configSearchPath = stylelint._options.configFile || absoluteFilePath;
-
- return stylelint.getConfigForFile(configSearchPath, absoluteFilePath).then((result) => {
- if (result === null) {
- return result;
- }
-
- return result.config;
- });
+ return (
+ (await resolveConfig(filePath, {
+ cwd: (globbyOptions && globbyOptions.cwd) || cwd,
+ config,
+ configBasedir,
+ configFile,
+ })) || null
+ );
};
diff --git a/node_modules/stylelint/lib/reference/keywordSets.js b/node_modules/stylelint/lib/reference/keywordSets.js
index 0b632a3..0232a76 100644
--- a/node_modules/stylelint/lib/reference/keywordSets.js
+++ b/node_modules/stylelint/lib/reference/keywordSets.js
@@ -51,8 +51,6 @@
keywordSets.units = uniteSets(keywordSets.nonLengthUnits, keywordSets.lengthUnits);
-keywordSets.colorFunctionNames = new Set(['rgb', 'rgba', 'hsl', 'hsla', 'hwb', 'gray']);
-
keywordSets.camelCaseFunctionNames = new Set([
'translateX',
'translateY',
@@ -679,6 +677,42 @@
'xmp',
]);
+// extracted from https://developer.mozilla.org/en-US/docs/Web/SVG/Element
+keywordSets.validMixedCaseSvgElements = new Set([
+ 'animateMotion',
+ 'animateTransform',
+ 'clipPath',
+ 'feBlend',
+ 'feColorMatrix',
+ 'feComponentTransfer',
+ 'feComposite',
+ 'feConvolveMatrix',
+ 'feDiffuseLighting',
+ 'feDisplacementMap',
+ 'feDistantLight',
+ 'feDropShadow',
+ 'feFlood',
+ 'feFuncA',
+ 'feFuncB',
+ 'feFuncG',
+ 'feFuncR',
+ 'feGaussianBlur',
+ 'feImage',
+ 'feMerge',
+ 'feMergeNode',
+ 'feMorphology',
+ 'feOffset',
+ 'fePointLight',
+ 'feSpecularLighting',
+ 'feSpotLight',
+ 'feTile',
+ 'feTurbulence',
+ 'foreignObject',
+ 'linearGradient',
+ 'radialGradient',
+ 'textPath',
+]);
+
/**
* @param {(string[] | Set<string>)[]} args
*/
diff --git a/node_modules/stylelint/lib/reference/namedColorData.js b/node_modules/stylelint/lib/reference/namedColorData.js
deleted file mode 100644
index d9c85c0..0000000
--- a/node_modules/stylelint/lib/reference/namedColorData.js
+++ /dev/null
@@ -1,153 +0,0 @@
-'use strict';
-
-/** @type {Record<string, string[]>} */
-module.exports = {
- aliceblue: ['#f0f8ff', '#fff0f8ff'],
- antiquewhite: ['#faebd7', '#fffaebd7'],
- aqua: ['#00ffff', '#ff00ffff', '#0ff', '#f0ff'],
- aquamarine: ['#7fffd4', '#ff7fffd4'],
- azure: ['#f0ffff', '#fff0ffff'],
- beige: ['#f5f5dc', '#fff5f5dc'],
- bisque: ['#ffe4c4', '#ffffe4c4'],
- black: ['#000000', '#ff000000', '#000', '#f000'],
- blanchedalmond: ['#ffebcd', '#ffffebcd'],
- blue: ['#0000ff', '#ff0000ff', '#00f', '#f00f'],
- blueviolet: ['#8a2be2', '#ff8a2be2'],
- brown: ['#a52a2a', '#ffa52a2a'],
- burlywood: ['#deb887', '#ffdeb887'],
- cadetblue: ['#5f9ea0', '#ff5f9ea0'],
- chartreuse: ['#7fff00', '#ff7fff00'],
- chocolate: ['#d2691e', '#ffd2691e'],
- coral: ['#ff7f50', '#ffff7f50'],
- cornflowerblue: ['#6495ed', '#ff6495ed'],
- cornsilk: ['#fff8dc', '#fffff8dc'],
- crimson: ['#dc143c', '#ffdc143c'],
- cyan: ['#00ffff', '#ff00ffff', '#0ff', '#f0ff'],
- darkblue: ['#00008b', '#ff00008b'],
- darkcyan: ['#008b8b', '#ff008b8b'],
- darkgoldenrod: ['#b8860b', '#ffb8860b'],
- darkgray: ['#a9a9a9', '#ffa9a9a9'],
- darkgreen: ['#006400', '#ff006400'],
- darkgrey: ['#a9a9a9', '#ffa9a9a9'],
- darkkhaki: ['#bdb76b', '#ffbdb76b'],
- darkmagenta: ['#8b008b', '#ff8b008b'],
- darkolivegreen: ['#556b2f', '#ff556b2f'],
- darkorange: ['#ff8c00', '#ffff8c00'],
- darkorchid: ['#9932cc', '#ff9932cc'],
- darkred: ['#8b0000', '#ff8b0000'],
- darksalmon: ['#e9967a', '#ffe9967a'],
- darkseagreen: ['#8fbc8f', '#ff8fbc8f'],
- darkslateblue: ['#483d8b', '#ff483d8b'],
- darkslategray: ['#2f4f4f', '#ff2f4f4f'],
- darkslategrey: ['#2f4f4f', '#ff2f4f4f'],
- darkturquoise: ['#00ced1', '#ff00ced1'],
- darkviolet: ['#9400d3', '#ff9400d3'],
- deeppink: ['#ff1493', '#ffff1493'],
- deepskyblue: ['#00bfff', '#ff00bfff'],
- dimgray: ['#696969', '#ff696969'],
- dimgrey: ['#696969', '#ff696969'],
- dodgerblue: ['#1e90ff', '#ff1e90ff'],
- firebrick: ['#b22222', '#ffb22222'],
- floralwhite: ['#fffaf0', '#fffffaf0'],
- forestgreen: ['#228b22', '#ff228b22'],
- fuchsia: ['#ff00ff', '#ffff00ff', '#f0f', '#ff0f'],
- gainsboro: ['#dcdcdc', '#ffdcdcdc'],
- ghostwhite: ['#f8f8ff', '#fff8f8ff'],
- gold: ['#ffd700', '#ffffd700'],
- goldenrod: ['#daa520', '#ffdaa520'],
- gray: ['#808080', '#ff808080'],
- green: ['#008000', '#ff008000'],
- greenyellow: ['#adff2f', '#ffadff2f'],
- grey: ['#808080', '#ff808080'],
- honeydew: ['#f0fff0', '#fff0fff0'],
- hotpink: ['#ff69b4', '#ffff69b4'],
- indianred: ['#cd5c5c', '#ffcd5c5c'],
- indigo: ['#4b0082', '#ff4b0082'],
- ivory: ['#fffff0', '#fffffff0'],
- khaki: ['#f0e68c', '#fff0e68c'],
- lavender: ['#e6e6fa', '#ffe6e6fa'],
- lavenderblush: ['#fff0f5', '#fffff0f5'],
- lawngreen: ['#7cfc00', '#ff7cfc00'],
- lemonchiffon: ['#fffacd', '#fffffacd'],
- lightblue: ['#add8e6', '#ffadd8e6'],
- lightcoral: ['#f08080', '#fff08080'],
- lightcyan: ['#e0ffff', '#ffe0ffff'],
- lightgoldenrodyellow: ['#fafad2', '#fffafad2'],
- lightgray: ['#d3d3d3', '#ffd3d3d3'],
- lightgreen: ['#90ee90', '#ff90ee90'],
- lightgrey: ['#d3d3d3', '#ffd3d3d3'],
- lightpink: ['#ffb6c1', '#ffffb6c1'],
- lightsalmon: ['#ffa07a', '#ffffa07a'],
- lightseagreen: ['#20b2aa', '#ff20b2aa'],
- lightskyblue: ['#87cefa', '#ff87cefa'],
- lightslategray: ['#778899', '#ff778899', '#789', '#f789'],
- lightslategrey: ['#778899', '#ff778899', '#789', '#f789'],
- lightsteelblue: ['#b0c4de', '#ffb0c4de'],
- lightyellow: ['#ffffe0', '#ffffffe0'],
- lime: ['#00ff00', '#ff00ff00', '#0f0', '#f0f0'],
- limegreen: ['#32cd32', '#ff32cd32'],
- linen: ['#faf0e6', '#fffaf0e6'],
- magenta: ['#ff00ff', '#ffff00ff', '#f0f', '#ff0f'],
- maroon: ['#800000', '#ff800000'],
- mediumaquamarine: ['#66cdaa', '#ff66cdaa'],
- mediumblue: ['#0000cd', '#ff0000cd'],
- mediumorchid: ['#ba55d3', '#ffba55d3'],
- mediumpurple: ['#9370db', '#ff9370db'],
- mediumseagreen: ['#3cb371', '#ff3cb371'],
- mediumslateblue: ['#7b68ee', '#ff7b68ee'],
- mediumspringgreen: ['#00fa9a', '#ff00fa9a'],
- mediumturquoise: ['#48d1cc', '#ff48d1cc'],
- mediumvioletred: ['#c71585', '#ffc71585'],
- midnightblue: ['#191970', '#ff191970'],
- mintcream: ['#f5fffa', '#fff5fffa'],
- mistyrose: ['#ffe4e1', '#ffffe4e1'],
- moccasin: ['#ffe4b5', '#ffffe4b5'],
- navajowhite: ['#ffdead', '#ffffdead'],
- navy: ['#000080', '#ff000080'],
- oldlace: ['#fdf5e6', '#fffdf5e6'],
- olive: ['#808000', '#ff808000'],
- olivedrab: ['#6b8e23', '#ff6b8e23'],
- orange: ['#ffa500', '#ffffa500'],
- orangered: ['#ff4500', '#ffff4500'],
- orchid: ['#da70d6', '#ffda70d6'],
- palegoldenrod: ['#eee8aa', '#ffeee8aa'],
- palegreen: ['#98fb98', '#ff98fb98'],
- paleturquoise: ['#afeeee', '#ffafeeee'],
- palevioletred: ['#db7093', '#ffdb7093'],
- papayawhip: ['#ffefd5', '#ffffefd5'],
- peachpuff: ['#ffdab9', '#ffffdab9'],
- peru: ['#cd853f', '#ffcd853f'],
- pink: ['#ffc0cb', '#ffffc0cb'],
- plum: ['#dda0dd', '#ffdda0dd'],
- powderblue: ['#b0e0e6', '#ffb0e0e6'],
- purple: ['#800080', '#ff800080'],
- rebeccapurple: ['#663399', '#ff663399', '#639', '#f639'],
- red: ['#ff0000', '#ffff0000', '#f00', '#ff00'],
- rosybrown: ['#bc8f8f', '#ffbc8f8f'],
- royalblue: ['#4169e1', '#ff4169e1'],
- saddlebrown: ['#8b4513', '#ff8b4513'],
- salmon: ['#fa8072', '#fffa8072'],
- sandybrown: ['#f4a460', '#fff4a460'],
- seagreen: ['#2e8b57', '#ff2e8b57'],
- seashell: ['#fff5ee', '#fffff5ee'],
- sienna: ['#a0522d', '#ffa0522d'],
- silver: ['#c0c0c0', '#ffc0c0c0'],
- skyblue: ['#87ceeb', '#ff87ceeb'],
- slateblue: ['#6a5acd', '#ff6a5acd'],
- slategray: ['#708090', '#ff708090'],
- slategrey: ['#708090', '#ff708090'],
- snow: ['#fffafa', '#fffffafa'],
- springgreen: ['#00ff7f', '#ff00ff7f'],
- steelblue: ['#4682b4', '#ff4682b4'],
- tan: ['#d2b48c', '#ffd2b48c'],
- teal: ['#008080', '#ff008080'],
- thistle: ['#d8bfd8', '#ffd8bfd8'],
- tomato: ['#ff6347', '#ffff6347'],
- turquoise: ['#40e0d0', '#ff40e0d0'],
- violet: ['#ee82ee', '#ffee82ee'],
- wheat: ['#f5deb3', '#fff5deb3'],
- white: ['#ffffff', '#ffffffff', '#fff', '#ffff'],
- whitesmoke: ['#f5f5f5', '#fff5f5f5'],
- yellow: ['#ffff00', '#ffffff00', '#ff0', '#fff0'],
- yellowgreen: ['#9acd32', '#ff9acd32'],
-};
diff --git a/node_modules/stylelint/lib/reportDisables.js b/node_modules/stylelint/lib/reportDisables.js
index 9e75d8f..15a1150 100644
--- a/node_modules/stylelint/lib/reportDisables.js
+++ b/node_modules/stylelint/lib/reportDisables.js
@@ -12,25 +12,25 @@
* @param {StylelintResult[]} results
*/
module.exports = function (results) {
- results.forEach((result) => {
+ for (const result of results) {
// File with `CssSyntaxError` don't have `_postcssResult`s.
if (!result._postcssResult) {
- return;
+ continue;
}
/** @type {{[ruleName: string]: Array<RangeType>}} */
const rangeData = result._postcssResult.stylelint.disabledRanges;
- if (!rangeData) return;
+ if (!rangeData) continue;
const config = result._postcssResult.stylelint.config;
- if (!config || !config.rules) return;
+ if (!config || !config.rules) continue;
// If no rules actually disallow disables, don't bother looking for ranges
// that correspond to disabled rules.
- if (!Object.values(config.rules).some(reportDisablesForRule)) {
- return;
+ if (!Object.values(config.rules).some((rule) => reportDisablesForRule(rule))) {
+ continue;
}
for (const [rule, ranges] of Object.entries(rangeData)) {
@@ -50,7 +50,7 @@
});
}
}
- });
+ }
};
/**
diff --git a/node_modules/stylelint/lib/reportUnknownRuleNames.js b/node_modules/stylelint/lib/reportUnknownRuleNames.js
index e673bb6..3f5a1c0 100644
--- a/node_modules/stylelint/lib/reportUnknownRuleNames.js
+++ b/node_modules/stylelint/lib/reportUnknownRuleNames.js
@@ -17,13 +17,13 @@
suggestions[i] = [];
}
- Object.keys(rules).forEach((existRuleName) => {
+ for (const existRuleName of Object.keys(rules)) {
const distance = levenshtein.distance(existRuleName, ruleName);
if (distance <= MAX_LEVENSHTEIN_DISTANCE) {
suggestions[distance - 1].push(existRuleName);
}
- });
+ }
/** @type {string[]} */
let result = [];
diff --git a/node_modules/stylelint/lib/resolveConfig.js b/node_modules/stylelint/lib/resolveConfig.js
new file mode 100644
index 0000000..3ff990a
--- /dev/null
+++ b/node_modules/stylelint/lib/resolveConfig.js
@@ -0,0 +1,47 @@
+'use strict';
+
+const createStylelint = require('./createStylelint');
+const path = require('path');
+
+/**
+ * Resolves the effective configuation for a given file. Resolves to `undefined`
+ * if no config is found.
+ * @param {string} filePath - The path to the file to get the config for.
+ * @param {Pick<
+ * import('stylelint').LinterOptions,
+ * | 'cwd'
+ * | 'config'
+ * | 'configBasedir'
+ * | 'configFile'
+ * >} [options] - The options to use when creating the Stylelint instance.
+ * @returns {Promise<import('stylelint').Config | undefined>}
+ */
+module.exports = async function resolveConfig(
+ filePath,
+ { cwd = process.cwd(), config, configBasedir, configFile } = {},
+) {
+ if (!filePath) {
+ return undefined;
+ }
+
+ const stylelint = createStylelint({
+ config,
+ configFile,
+ configBasedir,
+ cwd,
+ });
+
+ const absoluteFilePath = !path.isAbsolute(filePath)
+ ? path.join(cwd, filePath)
+ : path.normalize(filePath);
+
+ const configSearchPath = stylelint._options.configFile || absoluteFilePath;
+
+ const resolved = await stylelint.getConfigForFile(configSearchPath, absoluteFilePath);
+
+ if (!resolved) {
+ return undefined;
+ }
+
+ return resolved.config;
+};
diff --git a/node_modules/stylelint/lib/rules/at-rule-property-required-list/index.js b/node_modules/stylelint/lib/rules/at-rule-property-required-list/index.js
index fd6afcd..8f244142 100644
--- a/node_modules/stylelint/lib/rules/at-rule-property-required-list/index.js
+++ b/node_modules/stylelint/lib/rules/at-rule-property-required-list/index.js
@@ -39,7 +39,7 @@
return;
}
- list[atRuleName].forEach((property) => {
+ for (const property of list[atRuleName]) {
const propertyName = property.toLowerCase();
const hasProperty = nodes.find(
@@ -47,16 +47,17 @@
);
if (hasProperty) {
- return;
+ continue;
}
- return report({
+ report({
message: messages.expected(propertyName, atRuleName),
node: atRule,
result,
ruleName,
});
- });
+ continue;
+ }
});
};
};
diff --git a/node_modules/stylelint/lib/rules/block-opening-brace-newline-after/index.js b/node_modules/stylelint/lib/rules/block-opening-brace-newline-after/index.js
index e7e8a88..563a724 100644
--- a/node_modules/stylelint/lib/rules/block-opening-brace-newline-after/index.js
+++ b/node_modules/stylelint/lib/rules/block-opening-brace-newline-after/index.js
@@ -105,9 +105,10 @@
if (primary === 'never-multi-line') {
// Restore the `before` of the node next to the comment node.
- backupCommentNextBefores.forEach((before, node) => {
+ for (const [node, before] of backupCommentNextBefores.entries()) {
node.raws.before = before;
- });
+ }
+
backupCommentNextBefores.clear();
// Fix
@@ -147,9 +148,9 @@
});
// Restore the `before` of the node next to the comment node.
- backupCommentNextBefores.forEach((before, node) => {
+ for (const [node, before] of backupCommentNextBefores.entries()) {
node.raws.before = before;
- });
+ }
}
};
};
diff --git a/node_modules/stylelint/lib/rules/color-function-notation/index.js b/node_modules/stylelint/lib/rules/color-function-notation/index.js
index 5563c53..a797801 100644
--- a/node_modules/stylelint/lib/rules/color-function-notation/index.js
+++ b/node_modules/stylelint/lib/rules/color-function-notation/index.js
@@ -4,9 +4,11 @@
const declarationValueIndex = require('../../utils/declarationValueIndex');
const getDeclarationValue = require('../../utils/getDeclarationValue');
+const isStandardSyntaxColorFunction = require('../../utils/isStandardSyntaxColorFunction');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const setDeclarationValue = require('../../utils/setDeclarationValue');
+const { isValueFunction } = require('../../utils/typeGuards');
const validateOptions = require('../../utils/validateOptions');
const ruleName = 'color-function-notation';
@@ -33,7 +35,9 @@
const parsedValue = valueParser(getDeclarationValue(decl));
parsedValue.walk((node) => {
- if (node.type !== 'function') return;
+ if (!isValueFunction(node)) return;
+
+ if (!isStandardSyntaxColorFunction(node)) return;
const { value, sourceIndex, nodes } = node;
diff --git a/node_modules/stylelint/lib/rules/color-named/colordUtils.js b/node_modules/stylelint/lib/rules/color-named/colordUtils.js
new file mode 100644
index 0000000..7bb55f2
--- /dev/null
+++ b/node_modules/stylelint/lib/rules/color-named/colordUtils.js
@@ -0,0 +1,108 @@
+const { colord, extend } = require('colord');
+const valueParser = require('postcss-value-parser');
+
+const namesPlugin = require('colord/plugins/names');
+const hwbPlugin = require('colord/plugins/hwb');
+const labPlugin = require('colord/plugins/lab');
+const lchPlugin = require('colord/plugins/lch');
+
+extend([
+ // Type definitions are not compatible with commonjs.
+ /** @type {any} */ (namesPlugin),
+ /** @type {any} */ (hwbPlugin),
+ /** @type {any} */ (labPlugin),
+ /** @type {any} */ (lchPlugin),
+
+ /* Syntaxes that is removed in Color Module Level 4 specification. */
+
+ // hwb() with comma
+ (_colordClass, parsers) => {
+ parsers.string.push([parseHwbWithCommaString, /** @type {any} */ ('hwb-with-comma')]);
+ },
+ // gray()
+ (_colordClass, parsers) => {
+ parsers.string.push([parseGrayString, /** @type {any} */ ('gray')]);
+ },
+]);
+
+module.exports = {
+ colord,
+};
+
+/**
+ * Parses a valid hwb with comma CSS color function
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hwb()#syntax
+ * @type {import('colord/types').ParseFunction<string>}
+ */
+function parseHwbWithCommaString(input) {
+ input = input.toLowerCase();
+
+ if (!input.startsWith('hwb(') || !input.endsWith(')') || input.includes('/')) {
+ return null;
+ }
+
+ const [hue, whiteness = '', blackness = '', alpha, ...extraArgs] = input.slice(4, -1).split(',');
+
+ if (!hue.trim() || !whiteness.trim() || !blackness.trim() || extraArgs.length > 0) {
+ return null;
+ }
+
+ // Change the delimiter and parse with colord.
+ const colordInstance = colord(
+ `hwb(${hue} ${whiteness} ${blackness}${alpha ? ` / ${alpha}` : ''})`,
+ );
+
+ if (!colordInstance.isValid()) {
+ return null;
+ }
+
+ return colordInstance.rgba;
+}
+
+/**
+ * Parses a valid gray() CSS color function
+ * @type {import('colord/types').ParseFunction<string>}
+ */
+function parseGrayString(input) {
+ input = input.toLowerCase();
+
+ if (!input.startsWith('gray(') || !input.endsWith(')')) {
+ return null;
+ }
+
+ const [lightness, alpha, ...extraArgs] = input.slice(5, -1).split(',');
+
+ if (extraArgs.length > 0) {
+ return null;
+ }
+
+ const lightnessWithUnit = valueParser.unit(lightness.trim());
+
+ if (!lightnessWithUnit || !['', '%'].includes(lightnessWithUnit.unit)) {
+ return null;
+ }
+
+ /**
+ * @type {import('colord/types').LabColor | import('colord/types').LabaColor}
+ */
+ let colorObject = {
+ l: Number(lightnessWithUnit.number),
+ a: 0,
+ b: 0,
+ };
+
+ if (alpha) {
+ const alphaWithUnit = valueParser.unit(alpha.trim());
+
+ if (!alphaWithUnit || !['', '%'].includes(alphaWithUnit.unit)) {
+ return null;
+ }
+
+ colorObject = {
+ ...colorObject,
+ alpha: Number(alphaWithUnit.number) / (alphaWithUnit.unit ? 100 : 1),
+ };
+ }
+
+ return colord(colorObject).rgba;
+}
diff --git a/node_modules/stylelint/lib/rules/color-named/generateColorFuncs.js b/node_modules/stylelint/lib/rules/color-named/generateColorFuncs.js
deleted file mode 100644
index 0a83f0a..0000000
--- a/node_modules/stylelint/lib/rules/color-named/generateColorFuncs.js
+++ /dev/null
@@ -1,233 +0,0 @@
-'use strict';
-
-// these algorithms are sourced from https://drafts.csswg.org/css-color/#color-conversion-code
-
-/**
- * @param {number[]} RGB
- */
-function lin_sRGB(RGB) {
- // convert an array of sRGB values in the range 0.0 - 1.0
- // to linear light (un-companded) form.
- // https://en.wikipedia.org/wiki/SRGB
- return RGB.map((val) => {
- if (val < 0.04045) {
- return val / 12.92;
- }
-
- return ((val + 0.055) / 1.055) ** 2.4;
- });
-}
-
-/**
- * @param {number[][]} matrix
- * @param {number[]} vector
- */
-function matrixMultiple3d(matrix, vector) {
- return [
- matrix[0][0] * vector[0] + matrix[0][1] * vector[1] + matrix[0][2] * vector[2],
- matrix[1][0] * vector[0] + matrix[1][1] * vector[1] + matrix[1][2] * vector[2],
- matrix[2][0] * vector[0] + matrix[2][1] * vector[1] + matrix[2][2] * vector[2],
- ];
-}
-
-/**
- * @param {number[]} srgb
- */
-function srgb2xyz(srgb) {
- return matrixMultiple3d(
- [
- [0.4124564, 0.3575761, 0.1804375],
- [0.2126729, 0.7151522, 0.072175],
- [0.0193339, 0.119192, 0.9503041],
- ],
- srgb,
- );
-}
-
-/**
- * @param {number[]} xyz
- */
-function chromaticAdaptationD65_D50(xyz) {
- return matrixMultiple3d(
- [
- [1.0478112, 0.0228866, -0.050127],
- [0.0295424, 0.9904844, -0.0170491],
- [-0.0092345, 0.0150436, 0.7521316],
- ],
- xyz,
- );
-}
-
-/**
- * @param {number[]} xyzIn
- */
-function xyz2lab(xyzIn) {
- // Assuming XYZ is relative to D50, convert to CIE Lab
- // from CIE standard, which now defines these as a rational fraction
- const ε = 216 / 24389; // 6^3/29^3
- const κ = 24389 / 27; // 29^3/3^3
- const white = [0.9642, 1.0, 0.8249]; // D50 reference white
-
- // compute xyz, which is XYZ scaled relative to reference white
- const xyz = xyzIn.map((value, i) => value / white[i]);
-
- // now compute f
- const f = xyz.map((value) => {
- if (value > ε) {
- return Math.cbrt(value);
- }
-
- return (κ * value + 16) / 116;
- });
-
- return [
- 116 * f[1] - 16, // L
- 500 * (f[0] - f[1]), // a
- 200 * (f[1] - f[2]), // b
- ];
-}
-
-/**
- * @param {number} r
- * @param {number} g
- * @param {number} b
- */
-function rgb2hsl(r, g, b) {
- r /= 255;
- g /= 255;
- b /= 255;
- let h;
- let s;
- let l;
- const M = Math.max(r, g, b);
- const m = Math.min(r, g, b);
- const d = M - m;
-
- if (d === 0) {
- h = 0;
- } else if (M === r) {
- h = ((g - b) / d) % 6;
- } else if (M === g) {
- h = (b - r) / d + 2;
- } else {
- h = (r - g) / d + 4;
- }
-
- h *= 60;
-
- if (h < 0) {
- h += 360;
- }
-
- l = (M + m) / 2;
-
- s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
-
- s *= 100;
- l *= 100;
-
- return [Math.round(h), Math.round(s), Math.round(l)];
-}
-
-/**
- * @param {number} rgb_r
- * @param {number} rgb_g
- * @param {number} rgb_b
- */
-function rgb2hwb(rgb_r, rgb_g, rgb_b) {
- rgb_r /= 255;
- rgb_g /= 255;
- rgb_b /= 255;
-
- const w = Math.min(rgb_r, rgb_g, rgb_b);
- const v = Math.max(rgb_r, rgb_g, rgb_b);
-
- const b = 1 - v;
-
- if (v === w) {
- return [0, Math.round(w * 100), Math.round(b * 100)];
- }
-
- const f = rgb_r === w ? rgb_g - rgb_b : rgb_g === w ? rgb_b - rgb_r : rgb_r - rgb_g;
- const i = rgb_r === w ? 3 : rgb_g === w ? 5 : 1;
-
- return [
- Math.round(((i - f / (v - w)) / 6) * 360) % 360,
- Math.round(w * 100),
- Math.round(b * 100),
- ];
-}
-
-/**
- * @param {number} value
- */
-function perc255(value) {
- return `${Math.round((value * 100) / 255)}%`;
-}
-
-/**
- * @param {string} hexString
- * @returns {string[]}
- */
-function generateColorFuncs(hexString) {
- if (hexString.length !== 7) {
- throw new Error(
- `Invalid hex string color definition (${hexString}) - expected 6 character hex string`,
- );
- }
-
- const rgb = [0, 0, 0];
-
- for (let i = 0; i < 3; i += 1) {
- rgb[i] = Number.parseInt(hexString.substr(2 * i + 1, 2), 16);
- }
-
- const hsl = rgb2hsl(rgb[0], rgb[1], rgb[2]);
- const hwb = rgb2hwb(rgb[0], rgb[1], rgb[2]);
- const func = [];
- const rgbStr = `${rgb[0]},${rgb[1]},${rgb[2]}`;
- const rgbPercStr = `${perc255(rgb[0])},${perc255(rgb[1])},${perc255(rgb[2])}`;
- const hslStr = `${hsl[0]},${hsl[1]}%,${hsl[2]}%`;
- const hwbStr = `${hwb[0]},${hwb[1]}%,${hwb[2]}%`;
-
- // *very* convoluted process, just to be able to establish if the color
- // is gray -- or not.
- const linRgb = lin_sRGB([rgb[0] / 255, rgb[1] / 255, rgb[2] / 255]);
- const xyz_d65 = srgb2xyz(linRgb);
- const xyz_d50 = chromaticAdaptationD65_D50(xyz_d65);
- const lab = xyz2lab(xyz_d50);
-
- func.push(
- `rgb(${rgbStr})`,
- `rgba(${rgbStr},1)`,
- `rgba(${rgbStr},100%)`,
- `rgb(${rgbPercStr})`,
- `rgba(${rgbPercStr},1)`,
- `rgba(${rgbPercStr},100%)`,
- `hsl(${hslStr})`,
- `hsla(${hslStr},1)`,
- `hsla(${hslStr},100%)`,
- `hwb(${hwbStr})`,
- `hwb(${hwbStr},1)`,
- `hwb(${hwbStr},100%)`,
- );
-
- // technically, this should be 0 - but then #808080 wouldn't even be gray
- if (lab[1] * lab[1] < 0.01 && lab[2] * lab[2] < 0.01) {
- // yay! gray!
- const grayStr = Math.round(lab[0]);
-
- func.push(
- `gray(${grayStr})`,
- `gray(${grayStr},1)`,
- `gray(${grayStr},100%)`,
- `gray(${grayStr}%)`,
- `gray(${grayStr}%,1)`,
- `gray(${grayStr}%,100%)`,
- );
- }
-
- return func;
-}
-
-module.exports = generateColorFuncs;
diff --git a/node_modules/stylelint/lib/rules/color-named/index.js b/node_modules/stylelint/lib/rules/color-named/index.js
index a5f1152..29a080d 100644
--- a/node_modules/stylelint/lib/rules/color-named/index.js
+++ b/node_modules/stylelint/lib/rules/color-named/index.js
@@ -3,8 +3,6 @@
const declarationValueIndex = require('../../utils/declarationValueIndex');
const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction');
const isStandardSyntaxValue = require('../../utils/isStandardSyntaxValue');
-const keywordSets = require('../../reference/keywordSets');
-const namedColorDataHex = require('../../reference/namedColorData');
const optionsMatches = require('../../utils/optionsMatches');
const propertySets = require('../../reference/propertySets');
const report = require('../../utils/report');
@@ -12,8 +10,7 @@
const validateOptions = require('../../utils/validateOptions');
const valueParser = require('postcss-value-parser');
const { isRegExp, isString } = require('../../utils/validateTypes');
-
-const generateColorFuncs = require('./generateColorFuncs');
+const { colord } = require('./colordUtils');
const ruleName = 'color-named';
@@ -49,20 +46,6 @@
return;
}
- const namedColors = Object.keys(namedColorDataHex);
-
- /** @type {Record<string, { hex: string[], func: string[] }>} */
- const namedColorData = {};
-
- namedColors.forEach((name) => {
- const hex = namedColorDataHex[name];
-
- namedColorData[name] = {
- hex,
- func: generateColorFuncs(hex[0]),
- };
- });
-
root.walkDecls((decl) => {
if (propertySets.acceptCustomIdents.has(decl.prop)) {
return;
@@ -96,7 +79,13 @@
}
// Check for named colors for "never" option
- if (primary === 'never' && type === 'word' && namedColors.includes(value.toLowerCase())) {
+ if (
+ primary === 'never' &&
+ type === 'word' &&
+ /^[a-z]+$/iu.test(value) &&
+ value.toLowerCase() !== 'transparent' &&
+ colord(value).isValid()
+ ) {
complain(messages.rejected(value), decl, declarationValueIndex(decl) + sourceIndex);
return;
@@ -107,38 +96,36 @@
return;
}
- // First by checking for alternative color function representations ...
- if (type === 'function' && keywordSets.colorFunctionNames.has(value.toLowerCase())) {
+ let colorString = null;
+
+ if (type === 'function') {
+ // First by checking for alternative color function representations ...
// Remove all spaces to match what's in `representations`
- const normalizedFunctionString = valueParser.stringify(node).replace(/\s+/g, '');
-
- for (const namedColor of namedColors) {
- if (namedColorData[namedColor].func.includes(normalizedFunctionString.toLowerCase())) {
- complain(
- messages.expected(namedColor, normalizedFunctionString),
- decl,
- declarationValueIndex(decl) + sourceIndex,
- );
-
- return; // Exit as soon as a problem is found
- }
- }
-
+ colorString = valueParser
+ .stringify(node)
+ .replace(/\s*([,/()])\s*/g, '$1')
+ .replace(/\s{2,}/g, ' ');
+ } else if (type === 'word' && value.startsWith('#')) {
+ // Then by checking for alternative hex representations
+ colorString = value;
+ } else {
return;
}
- // Then by checking for alternative hex representations
+ const color = colord(colorString);
- for (const namedColor of namedColors) {
- if (namedColorData[namedColor].hex.includes(value.toLowerCase())) {
- complain(
- messages.expected(namedColor, value),
- decl,
- declarationValueIndex(decl) + sourceIndex,
- );
+ if (!color.isValid()) {
+ return;
+ }
- return; // Exit as soon as a problem is found
- }
+ const namedColor = color.toName();
+
+ if (namedColor && namedColor.toLowerCase() !== 'transparent') {
+ complain(
+ messages.expected(namedColor, colorString),
+ decl,
+ declarationValueIndex(decl) + sourceIndex,
+ );
}
});
});
diff --git a/node_modules/stylelint/lib/rules/color-no-invalid-hex/index.js b/node_modules/stylelint/lib/rules/color-no-invalid-hex/index.js
index 94fb9a2..45db19f 100644
--- a/node_modules/stylelint/lib/rules/color-no-invalid-hex/index.js
+++ b/node_modules/stylelint/lib/rules/color-no-invalid-hex/index.js
@@ -1,6 +1,7 @@
'use strict';
const declarationValueIndex = require('../../utils/declarationValueIndex');
+const isStandardSyntaxHexColor = require('../../utils/isStandardSyntaxHexColor');
const isValidHex = require('../../utils/isValidHex');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
@@ -23,6 +24,10 @@
}
root.walkDecls((decl) => {
+ if (!isStandardSyntaxHexColor(decl.value)) {
+ return;
+ }
+
valueParser(decl.value).walk(({ value, type, sourceIndex }) => {
if (type === 'function' && value.endsWith('url')) return false;
diff --git a/node_modules/stylelint/lib/rules/declaration-block-no-duplicate-properties/index.js b/node_modules/stylelint/lib/rules/declaration-block-no-duplicate-properties/index.js
index b6a0ae4..b7fea7e 100644
--- a/node_modules/stylelint/lib/rules/declaration-block-no-duplicate-properties/index.js
+++ b/node_modules/stylelint/lib/rules/declaration-block-no-duplicate-properties/index.js
@@ -8,6 +8,7 @@
const ruleMessages = require('../../utils/ruleMessages');
const validateOptions = require('../../utils/validateOptions');
const { isString } = require('../../utils/validateTypes');
+const vendor = require('../../utils/vendor');
const ruleName = 'declaration-block-no-duplicate-properties';
@@ -25,7 +26,11 @@
{
actual: secondaryOptions,
possible: {
- ignore: ['consecutive-duplicates', 'consecutive-duplicates-with-different-values'],
+ ignore: [
+ 'consecutive-duplicates',
+ 'consecutive-duplicates-with-different-values',
+ 'consecutive-duplicates-with-same-prefixless-values',
+ ],
ignoreProperties: [isString],
},
optional: true,
@@ -36,6 +41,18 @@
return;
}
+ const ignoreDuplicates = optionsMatches(secondaryOptions, 'ignore', 'consecutive-duplicates');
+ const ignoreDiffValues = optionsMatches(
+ secondaryOptions,
+ 'ignore',
+ 'consecutive-duplicates-with-different-values',
+ );
+ const ignorePrefixlessSameValues = optionsMatches(
+ secondaryOptions,
+ 'ignore',
+ 'consecutive-duplicates-with-same-prefixless-values',
+ );
+
eachDeclarationBlock(root, (eachDecl) => {
/** @type {string[]} */
const decls = [];
@@ -67,14 +84,8 @@
const indexDuplicate = decls.indexOf(prop.toLowerCase());
if (indexDuplicate !== -1) {
- if (
- optionsMatches(
- secondaryOptions,
- 'ignore',
- 'consecutive-duplicates-with-different-values',
- )
- ) {
- // if duplicates are not consecutive
+ if (ignoreDiffValues || ignorePrefixlessSameValues) {
+ // fails if duplicates are not consecutive
if (indexDuplicate !== decls.length - 1) {
report({
message: messages.rejected(prop),
@@ -86,10 +97,26 @@
return;
}
- // if values of consecutive duplicates are equal
- if (value === values[indexDuplicate]) {
+ const duplicateValue = values[indexDuplicate];
+
+ if (ignorePrefixlessSameValues) {
+ // fails if values of consecutive, unprefixed duplicates are equal
+ if (vendor.unprefixed(value) !== vendor.unprefixed(duplicateValue)) {
+ report({
+ message: messages.rejected(prop),
+ node: decl,
+ result,
+ ruleName,
+ });
+
+ return;
+ }
+ }
+
+ // fails if values of consecutive duplicates are equal
+ if (value === duplicateValue) {
report({
- message: messages.rejected(value),
+ message: messages.rejected(prop),
node: decl,
result,
ruleName,
@@ -101,10 +128,7 @@
return;
}
- if (
- optionsMatches(secondaryOptions, 'ignore', 'consecutive-duplicates') &&
- indexDuplicate === decls.length - 1
- ) {
+ if (ignoreDuplicates && indexDuplicate === decls.length - 1) {
return;
}
diff --git a/node_modules/stylelint/lib/rules/declaration-block-no-redundant-longhand-properties/index.js b/node_modules/stylelint/lib/rules/declaration-block-no-redundant-longhand-properties/index.js
index 2a1a359..ca23ae6 100644
--- a/node_modules/stylelint/lib/rules/declaration-block-no-redundant-longhand-properties/index.js
+++ b/node_modules/stylelint/lib/rules/declaration-block-no-redundant-longhand-properties/index.js
@@ -42,9 +42,9 @@
return longhandProps;
}
- values.forEach((value) => {
+ for (const value of values) {
(longhandProps[value] || (longhandProps[value] = [])).push(key);
- });
+ }
return longhandProps;
},
@@ -66,7 +66,7 @@
return;
}
- shorthandProperties.forEach((shorthandProperty) => {
+ for (const shorthandProperty of shorthandProperties) {
const prefixedShorthandProperty = prefix + shorthandProperty;
if (!longhandDeclarations[prefixedShorthandProperty]) {
@@ -85,7 +85,7 @@
longhandDeclarations[prefixedShorthandProperty].sort(),
)
) {
- return;
+ continue;
}
report({
@@ -94,7 +94,7 @@
node: decl,
message: messages.expected(prefixedShorthandProperty),
});
- });
+ }
});
});
};
diff --git a/node_modules/stylelint/lib/rules/declaration-block-no-shorthand-property-overrides/index.js b/node_modules/stylelint/lib/rules/declaration-block-no-shorthand-property-overrides/index.js
index bf27f24..1c5a8d2 100644
--- a/node_modules/stylelint/lib/rules/declaration-block-no-shorthand-property-overrides/index.js
+++ b/node_modules/stylelint/lib/rules/declaration-block-no-shorthand-property-overrides/index.js
@@ -39,9 +39,9 @@
return;
}
- overrideables.forEach((longhandProp) => {
+ for (const longhandProp of overrideables) {
if (!Object.prototype.hasOwnProperty.call(declarations, prefix + longhandProp)) {
- return;
+ continue;
}
report({
@@ -50,7 +50,7 @@
node: decl,
message: messages.rejected(prop, declarations[prefix + longhandProp]),
});
- });
+ }
});
});
};
diff --git a/node_modules/stylelint/lib/rules/declaration-empty-line-before/index.js b/node_modules/stylelint/lib/rules/declaration-empty-line-before/index.js
index 43e971c..30e1175 100644
--- a/node_modules/stylelint/lib/rules/declaration-empty-line-before/index.js
+++ b/node_modules/stylelint/lib/rules/declaration-empty-line-before/index.js
@@ -15,7 +15,7 @@
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
const validateOptions = require('../../utils/validateOptions');
-const { isAtRule, isRule } = require('../../utils/typeGuards');
+const { isAtRule, isRule, isRoot } = require('../../utils/typeGuards');
const ruleName = 'declaration-empty-line-before';
@@ -66,7 +66,7 @@
return;
}
- if (!isAtRule(parent) && !isRule(parent)) {
+ if (!isAtRule(parent) && !isRule(parent) && !isRoot(parent)) {
return;
}
diff --git a/node_modules/stylelint/lib/rules/font-family-name-quotes/index.js b/node_modules/stylelint/lib/rules/font-family-name-quotes/index.js
index 9e50790..172c6bb 100644
--- a/node_modules/stylelint/lib/rules/font-family-name-quotes/index.js
+++ b/node_modules/stylelint/lib/rules/font-family-name-quotes/index.js
@@ -75,7 +75,7 @@
return;
}
- fontFamilies.forEach((fontFamilyNode) => {
+ for (const fontFamilyNode of fontFamilies) {
let rawFamily = fontFamilyNode.value;
if ('quote' in fontFamilyNode) {
@@ -83,7 +83,7 @@
}
checkFamilyName(rawFamily, decl);
- });
+ }
});
/**
diff --git a/node_modules/stylelint/lib/rules/font-family-no-duplicate-names/index.js b/node_modules/stylelint/lib/rules/font-family-no-duplicate-names/index.js
index 4e8b1af..b045566 100644
--- a/node_modules/stylelint/lib/rules/font-family-no-duplicate-names/index.js
+++ b/node_modules/stylelint/lib/rules/font-family-no-duplicate-names/index.js
@@ -51,11 +51,11 @@
return;
}
- fontFamilies.forEach((fontFamilyNode) => {
+ for (const fontFamilyNode of fontFamilies) {
const family = fontFamilyNode.value.trim();
if (optionsMatches(secondaryOptions, 'ignoreFontFamilyNames', family)) {
- return;
+ continue;
}
if (isFamilyNameKeyword(fontFamilyNode)) {
@@ -66,12 +66,12 @@
decl,
);
- return;
+ continue;
}
keywords.add(family);
- return;
+ continue;
}
if (familyNames.has(family)) {
@@ -81,11 +81,11 @@
decl,
);
- return;
+ continue;
}
familyNames.add(family);
- });
+ }
});
/**
diff --git a/node_modules/stylelint/lib/rules/font-family-no-missing-generic-family-keyword/index.js b/node_modules/stylelint/lib/rules/font-family-no-missing-generic-family-keyword/index.js
index 02ddfe8..2066bd4 100644
--- a/node_modules/stylelint/lib/rules/font-family-no-missing-generic-family-keyword/index.js
+++ b/node_modules/stylelint/lib/rules/font-family-no-missing-generic-family-keyword/index.js
@@ -78,7 +78,7 @@
return;
}
- if (fontFamilies.some(isFamilyNameKeyword)) {
+ if (fontFamilies.some((node) => isFamilyNameKeyword(node))) {
return;
}
diff --git a/node_modules/stylelint/lib/rules/font-weight-notation/index.js b/node_modules/stylelint/lib/rules/font-weight-notation/index.js
index c741f4d..55c5206 100644
--- a/node_modules/stylelint/lib/rules/font-weight-notation/index.js
+++ b/node_modules/stylelint/lib/rules/font-weight-notation/index.js
@@ -65,7 +65,7 @@
// We do not need to more carefully distinguish font-weight
// numbers from unitless line-heights because line-heights in
// `font` values need to be part of a font-size/line-height pair
- const hasNumericFontWeight = valueList.some(isNumbery);
+ const hasNumericFontWeight = valueList.some((value) => isNumbery(value));
for (const value of postcss.list.space(decl.value)) {
if (
@@ -116,7 +116,7 @@
if (parent && isAtRule(parent) && parent.name.toLowerCase() === 'font-face') {
const weightValueNumbers = postcss.list.space(weightValue);
- if (!weightValueNumbers.every(isNumbery)) {
+ if (!weightValueNumbers.every((value) => isNumbery(value))) {
return complain(messages.expected('numeric'));
}
diff --git a/node_modules/stylelint/lib/rules/function-calc-no-unspaced-operator/index.js b/node_modules/stylelint/lib/rules/function-calc-no-unspaced-operator/index.js
index d902154..0bfeee3 100644
--- a/node_modules/stylelint/lib/rules/function-calc-no-unspaced-operator/index.js
+++ b/node_modules/stylelint/lib/rules/function-calc-no-unspaced-operator/index.js
@@ -237,11 +237,9 @@
* @param {import('postcss-value-parser').Node[]} nodes
*/
function checkWords(nodes) {
- if (checkForOperatorInFirstNode(nodes)) return;
+ if (checkForOperatorInFirstNode(nodes) || checkForOperatorInLastNode(nodes)) return;
- if (checkForOperatorInLastNode(nodes)) return;
-
- nodes.forEach((node, index) => {
+ for (const [index, node] of nodes.entries()) {
const lastChar = node.value.slice(-1);
const firstChar = node.value.slice(0, 1);
@@ -250,7 +248,7 @@
if (context.fix) {
node.value = `${node.value.slice(0, -1)} ${lastChar}`;
- return;
+ continue;
}
complain(messages.expectedBefore(lastChar), decl, node.sourceIndex);
@@ -258,13 +256,13 @@
if (context.fix) {
node.value = `${firstChar} ${node.value.slice(1)}`;
- return;
+ continue;
}
complain(messages.expectedOperatorBeforeSign(firstChar), decl, node.sourceIndex);
}
}
- });
+ }
}
parsedValue.walk((node) => {
diff --git a/node_modules/stylelint/lib/rules/function-name-case/index.js b/node_modules/stylelint/lib/rules/function-name-case/index.js
index e446046..69716b6 100644
--- a/node_modules/stylelint/lib/rules/function-name-case/index.js
+++ b/node_modules/stylelint/lib/rules/function-name-case/index.js
@@ -20,9 +20,9 @@
const mapLowercaseFunctionNamesToCamelCase = new Map();
-keywordSets.camelCaseFunctionNames.forEach((func) => {
+for (const func of keywordSets.camelCaseFunctionNames) {
mapLowercaseFunctionNamesToCamelCase.set(func.toLowerCase(), func);
-});
+}
/** @type {import('stylelint').Rule} */
const rule = (primary, secondaryOptions, context) => {
diff --git a/node_modules/stylelint/lib/rules/functionCommaSpaceChecker.js b/node_modules/stylelint/lib/rules/functionCommaSpaceChecker.js
index 2d88c47..b64857b 100644
--- a/node_modules/stylelint/lib/rules/functionCommaSpaceChecker.js
+++ b/node_modules/stylelint/lib/rules/functionCommaSpaceChecker.js
@@ -74,9 +74,9 @@
/** @type {{ commaNode: ValueParserDivNode, checkIndex: number, nodeIndex: number }[]} */
const commaDataList = [];
- valueNode.nodes.forEach((node, nodeIndex) => {
+ for (const [nodeIndex, node] of valueNode.nodes.entries()) {
if (node.type !== 'div' || node.value !== ',') {
- return;
+ continue;
}
const checkIndex = getCommaCheckIndex(node, nodeIndex);
@@ -86,7 +86,7 @@
checkIndex,
nodeIndex,
});
- });
+ }
for (const { commaNode, checkIndex, nodeIndex } of commaDataList) {
opts.locationChecker({
diff --git a/node_modules/stylelint/lib/rules/indentation/index.js b/node_modules/stylelint/lib/rules/indentation/index.js
index f5d7d4a..d77de82 100644
--- a/node_modules/stylelint/lib/rules/indentation/index.js
+++ b/node_modules/stylelint/lib/rules/indentation/index.js
@@ -93,7 +93,9 @@
// it is some other kind of separation, checked by some separate rule
if (
(lastIndexOfNewline !== -1 ||
- (isFirstChild && (!getDocument(parent) || parent.raws.beforeStart.endsWith('\n')))) &&
+ (isFirstChild &&
+ (!getDocument(parent) ||
+ (parent.raws.codeBefore && parent.raws.codeBefore.endsWith('\n'))))) &&
before.slice(lastIndexOfNewline + 1) !== expectedOpeningBraceIndentation
) {
if (context.fix) {
@@ -388,14 +390,14 @@
if (fixPositions.length) {
if (isRule(node)) {
- fixPositions.forEach((fixPosition) => {
+ for (const fixPosition of fixPositions) {
node.selector = replaceIndentation(
node.selector,
fixPosition.currentIndentation,
fixPosition.expectedIndentation,
fixPosition.startIndex,
);
- });
+ }
}
if (isDeclaration(node)) {
@@ -406,7 +408,7 @@
throw new TypeError('The `between` property must be a string');
}
- fixPositions.forEach((fixPosition) => {
+ for (const fixPosition of fixPositions) {
if (fixPosition.startIndex < declProp.length + declBetween.length) {
node.raws.between = replaceIndentation(
declBetween,
@@ -422,7 +424,7 @@
fixPosition.startIndex - declProp.length - declBetween.length,
);
}
- });
+ }
}
if (isAtRule(node)) {
@@ -434,7 +436,7 @@
throw new TypeError('The `afterName` property must be a string');
}
- fixPositions.forEach((fixPosition) => {
+ for (const fixPosition of fixPositions) {
// 1 — it's a @ length
if (fixPosition.startIndex < 1 + atRuleName.length + atRuleAfterName.length) {
node.raws.afterName = replaceIndentation(
@@ -451,7 +453,7 @@
fixPosition.startIndex - atRuleName.length - atRuleAfterName.length - 1,
);
}
- });
+ }
}
}
}
@@ -559,9 +561,9 @@
lastLeadingSpacesLength = leadingSpacesLength;
};
- indents.forEach((leadingSpaces) => {
+ for (const leadingSpaces of indents) {
vote(leadingSpaces.length);
- });
+ }
let bestScore = 0;
@@ -607,7 +609,7 @@
let source = root.source.input.css;
source = source.replace(/^[^\r\n]+/, (firstLine) => {
- const match = /(?:^|\n)([ \t]*)$/.exec(root.raws.beforeStart);
+ const match = root.raws.codeBefore && /(?:^|\n)([ \t]*)$/.exec(root.raws.codeBefore);
if (match) {
return match[1] + firstLine;
@@ -619,7 +621,7 @@
const indents = source.match(/^[ \t]*(?=\S)/gm);
if (indents) {
- return Math.min(...indents.map(getIndentLevel));
+ return Math.min(...indents.map((indent) => getIndentLevel(indent)));
}
newBaseIndentLevel = 1;
@@ -628,7 +630,7 @@
}
const indents = [];
- const foundIndents = /(?:^|\n)([ \t]*)\S/m.exec(root.raws.beforeStart);
+ const foundIndents = root.raws.codeBefore && /(?:^|\n)([ \t]*)\S/m.exec(root.raws.codeBefore);
// The indent level of the CSS code block in non-CSS-like files is determined by the shortest indent of non-empty line.
if (foundIndents) {
@@ -664,7 +666,7 @@
if (document) {
const nextRoot = document.nodes[document.nodes.indexOf(root) + 1];
- afterEnd = nextRoot ? nextRoot.raws.beforeStart : document.raws.afterEnd;
+ afterEnd = nextRoot ? nextRoot.raws.codeBefore : document.raws.codeAfter;
} else {
// Nested root node in css-in-js lang
const parent = root.parent;
@@ -673,17 +675,17 @@
const nextRoot = parent.nodes[parent.nodes.indexOf(root) + 1];
- afterEnd = nextRoot ? nextRoot.raws.beforeStart : root.raws.afterEnd;
+ afterEnd = nextRoot ? nextRoot.raws.codeBefore : root.raws.codeAfter;
}
} else {
afterEnd = after;
}
- indents.push(afterEnd.match(/^[ \t]*/)[0]);
+ if (afterEnd) indents.push(afterEnd.match(/^[ \t]*/)[0]);
}
if (indents.length) {
- return Math.max(...indents.map(getIndentLevel)) + newBaseIndentLevel;
+ return Math.max(...indents.map((indent) => getIndentLevel(indent))) + newBaseIndentLevel;
}
return newBaseIndentLevel;
diff --git a/node_modules/stylelint/lib/rules/index.js b/node_modules/stylelint/lib/rules/index.js
index 1a5cb09..2295815 100644
--- a/node_modules/stylelint/lib/rules/index.js
+++ b/node_modules/stylelint/lib/rules/index.js
@@ -235,6 +235,9 @@
'property-no-unknown': importLazy(() => require('./property-no-unknown'))(),
'property-no-vendor-prefix': importLazy(() => require('./property-no-vendor-prefix'))(),
'rule-empty-line-before': importLazy(() => require('./rule-empty-line-before'))(),
+ 'rule-selector-property-disallowed-list': importLazy(() =>
+ require('./rule-selector-property-disallowed-list'),
+ )(),
'selector-attribute-brackets-space-inside': importLazy(() =>
require('./selector-attribute-brackets-space-inside'),
)(),
diff --git a/node_modules/stylelint/lib/rules/max-empty-lines/index.js b/node_modules/stylelint/lib/rules/max-empty-lines/index.js
index 6b37108..8d00993 100644
--- a/node_modules/stylelint/lib/rules/max-empty-lines/index.js
+++ b/node_modules/stylelint/lib/rules/max-empty-lines/index.js
@@ -195,15 +195,15 @@
// @ts-expect-error -- TS2367: This condition will always return 'false' since the types 'Root' and 'ChildNode | undefined' have no overlap.
if (root === document.last) {
- after = document.raws && document.raws.afterEnd;
+ after = document.raws && document.raws.codeAfter;
} else {
// @ts-expect-error -- TS2345: Argument of type 'Root' is not assignable to parameter of type 'number | ChildNode'.
const rootIndex = document.index(root);
const nextNode = document.nodes[rootIndex + 1];
- // @ts-expect-error -- TS2339: Property 'beforeStart' does not exist on type 'AtRuleRaws | RuleRaws | DeclarationRaws | CommentRaws'.
- after = nextNode && nextNode.raws && nextNode.raws.beforeStart;
+ // @ts-expect-error -- TS2339: Property 'codeBefore' does not exist on type 'CommentRaws'.
+ after = nextNode && nextNode.raws && nextNode.raws.codeBefore;
}
return !String(after).trim();
diff --git a/node_modules/stylelint/lib/rules/max-line-length/index.js b/node_modules/stylelint/lib/rules/max-line-length/index.js
index ea22b10..2b6e3d8 100644
--- a/node_modules/stylelint/lib/rules/max-line-length/index.js
+++ b/node_modules/stylelint/lib/rules/max-line-length/index.js
@@ -55,14 +55,14 @@
let skippedSubStrings = [];
let skippedSubStringsIndex = 0;
- EXCLUDED_PATTERNS.forEach((pattern) =>
- execall(pattern, rootString).forEach((match) => {
+ for (const pattern of EXCLUDED_PATTERNS)
+ for (const match of execall(pattern, rootString)) {
const subMatch = match.subMatches[0] || '';
const startOfSubString = match.index + match.match.indexOf(subMatch);
- return skippedSubStrings.push([startOfSubString, startOfSubString + subMatch.length]);
- }),
- );
+ skippedSubStrings.push([startOfSubString, startOfSubString + subMatch.length]);
+ continue;
+ }
skippedSubStrings = skippedSubStrings.sort((a, b) => a[0] - b[0]);
diff --git a/node_modules/stylelint/lib/rules/max-nesting-depth/index.js b/node_modules/stylelint/lib/rules/max-nesting-depth/index.js
index 0670c9a..63f94ea 100644
--- a/node_modules/stylelint/lib/rules/max-nesting-depth/index.js
+++ b/node_modules/stylelint/lib/rules/max-nesting-depth/index.js
@@ -25,7 +25,7 @@
isAtRule(node) && optionsMatches(secondaryOptions, 'ignoreAtRules', node.name);
return (root, result) => {
- validateOptions(
+ const validOptions = validateOptions(
result,
ruleName,
{
@@ -38,10 +38,13 @@
possible: {
ignore: ['blockless-at-rules', 'pseudo-classes'],
ignoreAtRules: [isString, isRegExp],
+ ignorePseudoClasses: [isString, isRegExp],
},
},
);
+ if (!validOptions) return;
+
root.walkRules(checkStatement);
root.walkAtRules(checkStatement);
@@ -105,7 +108,23 @@
const normalized = parser().processSync(selector, { lossless: false });
const selectors = normalized.split(',');
- return selectors.every((sel) => sel.startsWith('&:') && sel[2] !== ':');
+ return selectors.every((sel) => extractPseudoRule(sel));
+ }
+
+ /**
+ * @param {string[]} selectors
+ * @returns {boolean}
+ */
+ function containsIgnoredPseudoClassesOnly(selectors) {
+ if (!(secondaryOptions && secondaryOptions.ignorePseudoClasses)) return false;
+
+ return selectors.every((selector) => {
+ const pseudoRule = extractPseudoRule(selector);
+
+ if (!pseudoRule) return false;
+
+ return optionsMatches(secondaryOptions, 'ignorePseudoClasses', pseudoRule);
+ });
}
if (
@@ -114,7 +133,8 @@
node.every((child) => !isDeclaration(child))) ||
(optionsMatches(secondaryOptions, 'ignore', 'pseudo-classes') &&
isRule(node) &&
- containsPseudoClassesOnly(node.selector))
+ containsPseudoClassesOnly(node.selector)) ||
+ (isRule(node) && containsIgnoredPseudoClassesOnly(node.selectors))
) {
return nestingDepth(parent, level);
}
@@ -127,6 +147,14 @@
}
};
+/**
+ * @param {string} selector
+ * @returns {string | undefined}
+ */
+function extractPseudoRule(selector) {
+ return selector.startsWith('&:') && selector[2] !== ':' ? selector.substr(2) : undefined;
+}
+
rule.ruleName = ruleName;
rule.messages = messages;
module.exports = rule;
diff --git a/node_modules/stylelint/lib/rules/media-feature-colon-space-after/index.js b/node_modules/stylelint/lib/rules/media-feature-colon-space-after/index.js
index 987f1e0..6ebec0d 100644
--- a/node_modules/stylelint/lib/rules/media-feature-colon-space-after/index.js
+++ b/node_modules/stylelint/lib/rules/media-feature-colon-space-after/index.js
@@ -51,28 +51,26 @@
});
if (fixData) {
- fixData.forEach((colonIndices, atRule) => {
+ for (const [atRule, colonIndices] of fixData.entries()) {
let params = atRule.raws.params ? atRule.raws.params.raw : atRule.params;
- colonIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeColon = params.slice(0, index + 1);
- const afterColon = params.slice(index + 1);
+ for (const index of colonIndices.sort((a, b) => b - a)) {
+ const beforeColon = params.slice(0, index + 1);
+ const afterColon = params.slice(index + 1);
- if (primary === 'always') {
- params = beforeColon + afterColon.replace(/^\s*/, ' ');
- } else if (primary === 'never') {
- params = beforeColon + afterColon.replace(/^\s*/, '');
- }
- });
+ if (primary === 'always') {
+ params = beforeColon + afterColon.replace(/^\s*/, ' ');
+ } else if (primary === 'never') {
+ params = beforeColon + afterColon.replace(/^\s*/, '');
+ }
+ }
if (atRule.raws.params) {
atRule.raws.params.raw = params;
} else {
atRule.params = params;
}
- });
+ }
}
};
};
diff --git a/node_modules/stylelint/lib/rules/media-feature-colon-space-before/index.js b/node_modules/stylelint/lib/rules/media-feature-colon-space-before/index.js
index ea7f5dd..f7fadea 100644
--- a/node_modules/stylelint/lib/rules/media-feature-colon-space-before/index.js
+++ b/node_modules/stylelint/lib/rules/media-feature-colon-space-before/index.js
@@ -51,28 +51,26 @@
});
if (fixData) {
- fixData.forEach((colonIndices, atRule) => {
+ for (const [atRule, colonIndices] of fixData.entries()) {
let params = atRule.raws.params ? atRule.raws.params.raw : atRule.params;
- colonIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeColon = params.slice(0, index);
- const afterColon = params.slice(index);
+ for (const index of colonIndices.sort((a, b) => b - a)) {
+ const beforeColon = params.slice(0, index);
+ const afterColon = params.slice(index);
- if (primary === 'always') {
- params = beforeColon.replace(/\s*$/, ' ') + afterColon;
- } else if (primary === 'never') {
- params = beforeColon.replace(/\s*$/, '') + afterColon;
- }
- });
+ if (primary === 'always') {
+ params = beforeColon.replace(/\s*$/, ' ') + afterColon;
+ } else if (primary === 'never') {
+ params = beforeColon.replace(/\s*$/, '') + afterColon;
+ }
+ }
if (atRule.raws.params) {
atRule.raws.params.raw = params;
} else {
atRule.params = params;
}
- });
+ }
}
};
};
diff --git a/node_modules/stylelint/lib/rules/media-feature-name-no-vendor-prefix/index.js b/node_modules/stylelint/lib/rules/media-feature-name-no-vendor-prefix/index.js
index 9a4fe60..f3f031a 100644
--- a/node_modules/stylelint/lib/rules/media-feature-name-no-vendor-prefix/index.js
+++ b/node_modules/stylelint/lib/rules/media-feature-name-no-vendor-prefix/index.js
@@ -39,7 +39,7 @@
return;
}
- matches.forEach((match) => {
+ for (const match of matches) {
report({
message: messages.rejected,
node: atRule,
@@ -47,7 +47,7 @@
result,
ruleName,
});
- });
+ }
});
};
};
diff --git a/node_modules/stylelint/lib/rules/media-feature-parentheses-space-inside/index.js b/node_modules/stylelint/lib/rules/media-feature-parentheses-space-inside/index.js
index 0719bef..55d56ab 100644
--- a/node_modules/stylelint/lib/rules/media-feature-parentheses-space-inside/index.js
+++ b/node_modules/stylelint/lib/rules/media-feature-parentheses-space-inside/index.js
@@ -86,7 +86,7 @@
return;
}
- problems.forEach((err) => {
+ for (const err of problems) {
report({
message: err.message,
node: atRule,
@@ -94,7 +94,7 @@
result,
ruleName,
});
- });
+ }
}
});
};
diff --git a/node_modules/stylelint/lib/rules/media-feature-range-operator-space-after/index.js b/node_modules/stylelint/lib/rules/media-feature-range-operator-space-after/index.js
index 16036d6..0d57f31 100644
--- a/node_modules/stylelint/lib/rules/media-feature-range-operator-space-after/index.js
+++ b/node_modules/stylelint/lib/rules/media-feature-range-operator-space-after/index.js
@@ -41,18 +41,16 @@
if (fixOperatorIndices.length) {
let params = atRule.raws.params ? atRule.raws.params.raw : atRule.params;
- fixOperatorIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeOperator = params.slice(0, index + 1);
- const afterOperator = params.slice(index + 1);
+ for (const index of fixOperatorIndices.sort((a, b) => b - a)) {
+ const beforeOperator = params.slice(0, index + 1);
+ const afterOperator = params.slice(index + 1);
- if (primary === 'always') {
- params = beforeOperator + afterOperator.replace(/^\s*/, ' ');
- } else if (primary === 'never') {
- params = beforeOperator + afterOperator.replace(/^\s*/, '');
- }
- });
+ if (primary === 'always') {
+ params = beforeOperator + afterOperator.replace(/^\s*/, ' ');
+ } else if (primary === 'never') {
+ params = beforeOperator + afterOperator.replace(/^\s*/, '');
+ }
+ }
if (atRule.raws.params) {
atRule.raws.params.raw = params;
diff --git a/node_modules/stylelint/lib/rules/media-feature-range-operator-space-before/index.js b/node_modules/stylelint/lib/rules/media-feature-range-operator-space-before/index.js
index 2a2a5f6..8915f50 100644
--- a/node_modules/stylelint/lib/rules/media-feature-range-operator-space-before/index.js
+++ b/node_modules/stylelint/lib/rules/media-feature-range-operator-space-before/index.js
@@ -41,18 +41,16 @@
if (fixOperatorIndices.length) {
let params = atRule.raws.params ? atRule.raws.params.raw : atRule.params;
- fixOperatorIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeOperator = params.slice(0, index);
- const afterOperator = params.slice(index);
+ for (const index of fixOperatorIndices.sort((a, b) => b - a)) {
+ const beforeOperator = params.slice(0, index);
+ const afterOperator = params.slice(index);
- if (primary === 'always') {
- params = beforeOperator.replace(/\s*$/, ' ') + afterOperator;
- } else if (primary === 'never') {
- params = beforeOperator.replace(/\s*$/, '') + afterOperator;
- }
- });
+ if (primary === 'always') {
+ params = beforeOperator.replace(/\s*$/, ' ') + afterOperator;
+ } else if (primary === 'never') {
+ params = beforeOperator.replace(/\s*$/, '') + afterOperator;
+ }
+ }
if (atRule.raws.params) {
atRule.raws.params.raw = params;
diff --git a/node_modules/stylelint/lib/rules/media-query-list-comma-newline-after/index.js b/node_modules/stylelint/lib/rules/media-query-list-comma-newline-after/index.js
index 01c627d..6747578 100644
--- a/node_modules/stylelint/lib/rules/media-query-list-comma-newline-after/index.js
+++ b/node_modules/stylelint/lib/rules/media-query-list-comma-newline-after/index.js
@@ -55,30 +55,28 @@
});
if (fixData) {
- fixData.forEach((commaIndices, atRule) => {
+ for (const [atRule, commaIndices] of fixData.entries()) {
let params = atRule.raws.params ? atRule.raws.params.raw : atRule.params;
- commaIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeComma = params.slice(0, index + 1);
- const afterComma = params.slice(index + 1);
+ for (const index of commaIndices.sort((a, b) => b - a)) {
+ const beforeComma = params.slice(0, index + 1);
+ const afterComma = params.slice(index + 1);
- if (primary.startsWith('always')) {
- params = /^\s*\n/.test(afterComma)
- ? beforeComma + afterComma.replace(/^[^\S\r\n]*/, '')
- : beforeComma + context.newline + afterComma;
- } else if (primary.startsWith('never')) {
- params = beforeComma + afterComma.replace(/^\s*/, '');
- }
- });
+ if (primary.startsWith('always')) {
+ params = /^\s*\n/.test(afterComma)
+ ? beforeComma + afterComma.replace(/^[^\S\r\n]*/, '')
+ : beforeComma + context.newline + afterComma;
+ } else if (primary.startsWith('never')) {
+ params = beforeComma + afterComma.replace(/^\s*/, '');
+ }
+ }
if (atRule.raws.params) {
atRule.raws.params.raw = params;
} else {
atRule.params = params;
}
- });
+ }
}
};
};
diff --git a/node_modules/stylelint/lib/rules/media-query-list-comma-space-after/index.js b/node_modules/stylelint/lib/rules/media-query-list-comma-space-after/index.js
index 94d8263..3ab9bff 100644
--- a/node_modules/stylelint/lib/rules/media-query-list-comma-space-after/index.js
+++ b/node_modules/stylelint/lib/rules/media-query-list-comma-space-after/index.js
@@ -53,28 +53,26 @@
});
if (fixData) {
- fixData.forEach((commaIndices, atRule) => {
+ for (const [atRule, commaIndices] of fixData.entries()) {
let params = atRule.raws.params ? atRule.raws.params.raw : atRule.params;
- commaIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeComma = params.slice(0, index + 1);
- const afterComma = params.slice(index + 1);
+ for (const index of commaIndices.sort((a, b) => b - a)) {
+ const beforeComma = params.slice(0, index + 1);
+ const afterComma = params.slice(index + 1);
- if (primary.startsWith('always')) {
- params = beforeComma + afterComma.replace(/^\s*/, ' ');
- } else if (primary.startsWith('never')) {
- params = beforeComma + afterComma.replace(/^\s*/, '');
- }
- });
+ if (primary.startsWith('always')) {
+ params = beforeComma + afterComma.replace(/^\s*/, ' ');
+ } else if (primary.startsWith('never')) {
+ params = beforeComma + afterComma.replace(/^\s*/, '');
+ }
+ }
if (atRule.raws.params) {
atRule.raws.params.raw = params;
} else {
atRule.params = params;
}
- });
+ }
}
};
};
diff --git a/node_modules/stylelint/lib/rules/media-query-list-comma-space-before/index.js b/node_modules/stylelint/lib/rules/media-query-list-comma-space-before/index.js
index 04697cf..d0e879a 100644
--- a/node_modules/stylelint/lib/rules/media-query-list-comma-space-before/index.js
+++ b/node_modules/stylelint/lib/rules/media-query-list-comma-space-before/index.js
@@ -53,28 +53,26 @@
});
if (fixData) {
- fixData.forEach((commaIndices, atRule) => {
+ for (const [atRule, commaIndices] of fixData.entries()) {
let params = atRule.raws.params ? atRule.raws.params.raw : atRule.params;
- commaIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeComma = params.slice(0, index);
- const afterComma = params.slice(index);
+ for (const index of commaIndices.sort((a, b) => b - a)) {
+ const beforeComma = params.slice(0, index);
+ const afterComma = params.slice(index);
- if (primary.startsWith('always')) {
- params = beforeComma.replace(/\s*$/, ' ') + afterComma;
- } else if (primary.startsWith('never')) {
- params = beforeComma.replace(/\s*$/, '') + afterComma;
- }
- });
+ if (primary.startsWith('always')) {
+ params = beforeComma.replace(/\s*$/, ' ') + afterComma;
+ } else if (primary.startsWith('never')) {
+ params = beforeComma.replace(/\s*$/, '') + afterComma;
+ }
+ }
if (atRule.raws.params) {
atRule.raws.params.raw = params;
} else {
atRule.params = params;
}
- });
+ }
}
};
};
diff --git a/node_modules/stylelint/lib/rules/named-grid-areas-no-invalid/index.js b/node_modules/stylelint/lib/rules/named-grid-areas-no-invalid/index.js
index 4e9bd08..ada7a076 100644
--- a/node_modules/stylelint/lib/rules/named-grid-areas-no-invalid/index.js
+++ b/node_modules/stylelint/lib/rules/named-grid-areas-no-invalid/index.js
@@ -62,9 +62,9 @@
const notContiguousOrRectangular = findNotContiguousOrRectangular(areas);
- notContiguousOrRectangular.sort().forEach((name) => {
+ for (const name of notContiguousOrRectangular.sort()) {
complain(messages.expectedRectangle(name));
- });
+ }
/**
* @param {string} message
diff --git a/node_modules/stylelint/lib/rules/no-descending-specificity/index.js b/node_modules/stylelint/lib/rules/no-descending-specificity/index.js
index 75eb285..519432a 100644
--- a/node_modules/stylelint/lib/rules/no-descending-specificity/index.js
+++ b/node_modules/stylelint/lib/rules/no-descending-specificity/index.js
@@ -62,19 +62,19 @@
findAtRuleContext(ruleNode),
);
- ruleNode.selectors.forEach((selector) => {
+ for (const selector of ruleNode.selectors) {
const trimSelector = selector.trim();
// Ignore `.selector, { }`
if (trimSelector === '') {
- return;
+ continue;
}
// The edge-case of duplicate selectors will act acceptably
const index = ruleNode.selector.indexOf(trimSelector);
// Resolve any nested selectors before checking
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
parseSelector(resolvedSelector, result, ruleNode, (s) => {
if (!isStandardSyntaxSelector(resolvedSelector)) {
return;
@@ -82,8 +82,8 @@
checkSelector(s, ruleNode, index, comparisonContext);
});
- });
- });
+ }
+ }
});
/**
@@ -107,7 +107,7 @@
/** @type {Array<{ selector: string, specificity: import('specificity').SpecificityArray }>} */
const priorComparableSelectors = comparisonContext.get(referenceSelectorNode);
- priorComparableSelectors.forEach((priorEntry) => {
+ for (const priorEntry of priorComparableSelectors) {
if (specificity.compare(selectorSpecificity, priorEntry.specificity) === -1) {
report({
ruleName,
@@ -117,7 +117,7 @@
index: sourceIndex,
});
}
- });
+ }
priorComparableSelectors.push(entry);
}
diff --git a/node_modules/stylelint/lib/rules/no-duplicate-selectors/index.js b/node_modules/stylelint/lib/rules/no-duplicate-selectors/index.js
index 6bdf52d..78a117e 100644
--- a/node_modules/stylelint/lib/rules/no-duplicate-selectors/index.js
+++ b/node_modules/stylelint/lib/rules/no-duplicate-selectors/index.js
@@ -60,7 +60,9 @@
ruleNode.selectors.flatMap((selector) => resolvedNestedSelector(selector, ruleNode)),
),
];
- const normalizedSelectorList = resolvedSelectorList.map(normalizeSelector);
+ const normalizedSelectorList = resolvedSelectorList.map((selector) =>
+ normalizeSelector(selector),
+ );
// Sort the selectors list so that the order of the constituents
// doesn't matter
@@ -116,12 +118,12 @@
const reportedSelectors = new Set();
// Or complain if one selector list contains the same selector more than once
- ruleNode.selectors.forEach((selector) => {
+ for (const selector of ruleNode.selectors) {
const normalized = normalizeSelector(selector);
if (presentedSelectors.has(normalized)) {
if (reportedSelectors.has(normalized)) {
- return;
+ continue;
}
report({
@@ -134,7 +136,7 @@
} else {
presentedSelectors.add(normalized);
}
- });
+ }
if (shouldDisallowDuplicateInList) {
for (const selector of selectorListParsed) {
diff --git a/node_modules/stylelint/lib/rules/no-empty-first-line/index.js b/node_modules/stylelint/lib/rules/no-empty-first-line/index.js
index c5bcb0f..094a4cc 100644
--- a/node_modules/stylelint/lib/rules/no-empty-first-line/index.js
+++ b/node_modules/stylelint/lib/rules/no-empty-first-line/index.js
@@ -1,5 +1,3 @@
-// @ts-nocheck
-
'use strict';
const report = require('../../utils/report');
@@ -13,15 +11,17 @@
rejected: 'Unexpected empty line',
});
-function rule(actual, _, context) {
+/** @type {import('stylelint').Rule} */
+const rule = (primary, _secondaryOptions, context) => {
return (root, result) => {
- const validOptions = validateOptions(result, ruleName, { actual });
+ const validOptions = validateOptions(result, ruleName, { actual: primary });
+ // @ts-expect-error -- TS2339: Property 'inline' does not exist on type 'Source'. Property 'lang' does not exist on type 'Source'.
if (!validOptions || root.source.inline || root.source.lang === 'object-literal') {
return;
}
- const rootString = context.fix ? root.toString() : root.source.input.css;
+ const rootString = context.fix ? root.toString() : (root.source && root.source.input.css) || '';
if (!rootString.trim()) {
return;
@@ -29,7 +29,15 @@
if (noEmptyFirstLineTest.test(rootString)) {
if (context.fix) {
- root.nodes[0].raws.before = root.first.raws.before.trimStart();
+ if (root.first == null) {
+ throw new Error('The root node must have the first node.');
+ }
+
+ if (root.first.raws.before == null) {
+ throw new Error('The first node must have spaces before.');
+ }
+
+ root.first.raws.before = root.first.raws.before.trimStart();
return;
}
@@ -42,7 +50,7 @@
});
}
};
-}
+};
rule.ruleName = ruleName;
rule.messages = messages;
diff --git a/node_modules/stylelint/lib/rules/no-empty-source/index.js b/node_modules/stylelint/lib/rules/no-empty-source/index.js
index 1400234..d7f0ae8 100644
--- a/node_modules/stylelint/lib/rules/no-empty-source/index.js
+++ b/node_modules/stylelint/lib/rules/no-empty-source/index.js
@@ -1,5 +1,3 @@
-// @ts-nocheck
-
'use strict';
const report = require('../../utils/report');
@@ -12,15 +10,16 @@
rejected: 'Unexpected empty source',
});
-function rule(actual, options, context) {
+/** @type {import('stylelint').Rule} */
+const rule = (primary, _secondaryOptions, context) => {
return (root, result) => {
- const validOptions = validateOptions(result, ruleName, { actual });
+ const validOptions = validateOptions(result, ruleName, { actual: primary });
if (!validOptions) {
return;
}
- const rootString = context.fix ? root.toString() : root.source.input.css;
+ const rootString = context.fix ? root.toString() : (root.source && root.source.input.css) || '';
if (rootString.trim()) {
return;
@@ -33,7 +32,7 @@
ruleName,
});
};
-}
+};
rule.ruleName = ruleName;
rule.messages = messages;
diff --git a/node_modules/stylelint/lib/rules/no-eol-whitespace/index.js b/node_modules/stylelint/lib/rules/no-eol-whitespace/index.js
index f5f7520..2c52ac6 100644
--- a/node_modules/stylelint/lib/rules/no-eol-whitespace/index.js
+++ b/node_modules/stylelint/lib/rules/no-eol-whitespace/index.js
@@ -1,12 +1,13 @@
-// @ts-nocheck
-
'use strict';
+const styleSearch = require('style-search');
+
const isOnlyWhitespace = require('../../utils/isOnlyWhitespace');
+const isStandardSyntaxComment = require('../../utils/isStandardSyntaxComment');
const optionsMatches = require('../../utils/optionsMatches');
const report = require('../../utils/report');
const ruleMessages = require('../../utils/ruleMessages');
-const styleSearch = require('style-search');
+const { isAtRule, isComment, isDeclaration, isRule } = require('../../utils/typeGuards');
const validateOptions = require('../../utils/validateOptions');
const ruleName = 'no-eol-whitespace';
@@ -17,10 +18,20 @@
const whitespacesToReject = new Set([' ', '\t']);
+/**
+ * @param {string} str
+ * @returns {string}
+ */
function fixString(str) {
return str.replace(/[ \t]+$/, '');
}
+/**
+ * @param {number} lastEOLIndex
+ * @param {string} string
+ * @param {{ ignoreEmptyLines?: boolean, isRootFirst?: boolean }} [options]
+ * @returns {number}
+ */
function findErrorStartIndex(
lastEOLIndex,
string,
@@ -53,17 +64,18 @@
return eolWhitespaceIndex;
}
-function rule(on, options, context) {
+/** @type {import('stylelint').Rule} */
+const rule = (primary, secondaryOptions, context) => {
return (root, result) => {
const validOptions = validateOptions(
result,
ruleName,
{
- actual: on,
+ actual: primary,
},
{
optional: true,
- actual: options,
+ actual: secondaryOptions,
possible: {
ignore: ['empty-lines'],
},
@@ -74,13 +86,17 @@
return;
}
- const ignoreEmptyLines = optionsMatches(options, 'ignore', 'empty-lines');
+ const ignoreEmptyLines = optionsMatches(secondaryOptions, 'ignore', 'empty-lines');
if (context.fix) {
fix(root);
}
- const rootString = context.fix ? root.toString() : root.source.input.css;
+ const rootString = context.fix ? root.toString() : (root.source && root.source.input.css) || '';
+
+ /**
+ * @param {number} index
+ */
const reportFromIndex = (index) => {
report({
message: messages.rejected,
@@ -104,9 +120,9 @@
/**
* Iterate each whitespace at the end of each line of the given string.
- * @param {string} string the source code string
- * @param {Function} callback callback the whitespace index at the end of each line.
- * @param {boolean} isRootFirst set `true` if the given string is the first token of the root.
+ * @param {string} string - the source code string
+ * @param {(index: number) => void} callback - callback the whitespace index at the end of each line.
+ * @param {boolean} isRootFirst - set `true` if the given string is the first token of the root.
* @returns {void}
*/
function eachEolWhitespace(string, callback, isRootFirst) {
@@ -129,6 +145,9 @@
);
}
+ /**
+ * @param {import('postcss').Root} rootNode
+ */
function fix(rootNode) {
let isRootFirst = true;
@@ -142,68 +161,79 @@
);
isRootFirst = false;
- // AtRule
- fixText(node.raws.afterName, (fixed) => {
- node.raws.afterName = fixed;
- });
-
- if (node.raws.params) {
- fixText(node.raws.params.raw, (fixed) => {
- node.raws.params.raw = fixed;
+ if (isAtRule(node)) {
+ fixText(node.raws.afterName, (fixed) => {
+ node.raws.afterName = fixed;
});
- } else {
- fixText(node.params, (fixed) => {
- node.params = fixed;
+
+ const rawsParams = node.raws.params;
+
+ if (rawsParams) {
+ fixText(rawsParams.raw, (fixed) => {
+ rawsParams.raw = fixed;
+ });
+ } else {
+ fixText(node.params, (fixed) => {
+ node.params = fixed;
+ });
+ }
+ }
+
+ if (isRule(node)) {
+ const rawsSelector = node.raws.selector;
+
+ if (rawsSelector) {
+ fixText(rawsSelector.raw, (fixed) => {
+ rawsSelector.raw = fixed;
+ });
+ } else {
+ fixText(node.selector, (fixed) => {
+ node.selector = fixed;
+ });
+ }
+ }
+
+ if (isAtRule(node) || isRule(node) || isDeclaration(node)) {
+ fixText(node.raws.between, (fixed) => {
+ node.raws.between = fixed;
});
}
- // Rule
- if (node.raws.selector) {
- fixText(node.raws.selector.raw, (fixed) => {
- node.raws.selector.raw = fixed;
+ if (isDeclaration(node)) {
+ if (node.raws.value) {
+ fixText(node.raws.value.raw, (fixed) => {
+ node.raws.value.raw = fixed;
+ });
+ } else {
+ fixText(node.value, (fixed) => {
+ node.value = fixed;
+ });
+ }
+ }
+
+ if (isComment(node)) {
+ fixText(node.raws.left, (fixed) => {
+ node.raws.left = fixed;
});
- } else {
- fixText(node.selector, (fixed) => {
- node.selector = fixed;
+
+ if (!isStandardSyntaxComment(node)) {
+ node.raws.right = node.raws.right && fixString(node.raws.right);
+ } else {
+ fixText(node.raws.right, (fixed) => {
+ node.raws.right = fixed;
+ });
+ }
+
+ fixText(node.text, (fixed) => {
+ node.text = fixed;
});
}
- // AtRule or Rule or Decl
- fixText(node.raws.between, (fixed) => {
- node.raws.between = fixed;
- });
-
- // Decl
- if (node.raws.value) {
- fixText(node.raws.value.raw, (fixed) => {
- node.raws.value.raw = fixed;
- });
- } else {
- fixText(node.value, (fixed) => {
- node.value = fixed;
+ if (isAtRule(node) || isRule(node)) {
+ fixText(node.raws.after, (fixed) => {
+ node.raws.after = fixed;
});
}
-
- // Comment
- fixText(node.raws.left, (fixed) => {
- node.raws.left = fixed;
- });
-
- if (node.raws.inline) {
- node.raws.right = fixString(node.raws.right);
- } else {
- fixText(node.raws.right, (fixed) => {
- node.raws.right = fixed;
- });
- }
-
- fixText(node.text, (fixed) => {
- node.text = fixed;
- });
-
- fixText(node.raws.after, (fixed) => {
- node.raws.after = fixed;
- });
});
fixText(
@@ -228,7 +258,12 @@
}
}
- function fixText(value, fixFn, isRootFirst) {
+ /**
+ * @param {string | undefined} value
+ * @param {(text: string) => void} fixFn
+ * @param {boolean} isRootFirst
+ */
+ function fixText(value, fixFn, isRootFirst = false) {
if (!value) {
return;
}
@@ -253,7 +288,7 @@
}
}
};
-}
+};
rule.ruleName = ruleName;
rule.messages = messages;
diff --git a/node_modules/stylelint/lib/rules/no-extra-semicolons/index.js b/node_modules/stylelint/lib/rules/no-extra-semicolons/index.js
index 52de368..341237d 100644
--- a/node_modules/stylelint/lib/rules/no-extra-semicolons/index.js
+++ b/node_modules/stylelint/lib/rules/no-extra-semicolons/index.js
@@ -1,5 +1,3 @@
-// @ts-nocheck
-
'use strict';
const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule');
@@ -15,12 +13,25 @@
rejected: 'Unexpected extra semicolon',
});
+/**
+ * @param {import('postcss').Node} node
+ * @returns {number}
+ */
function getOffsetByNode(node) {
+ // @ts-expect-error -- TS2339: Property 'document' does not exist on type 'Document | Container<ChildNode>'
if (node.parent && node.parent.document) {
return 0;
}
- const string = node.root().source.input.css;
+ const root = node.root();
+
+ if (!root.source) throw new Error('The root node must have a source');
+
+ if (!node.source) throw new Error('The node must have a source');
+
+ if (!node.source.start) throw new Error('The source must have a start position');
+
+ const string = root.source.input.css;
const nodeColumn = node.source.start.column;
const nodeLine = node.source.start.line;
let line = 1;
@@ -44,17 +55,19 @@
return index;
}
-function rule(actual, options, context) {
+/** @type {import('stylelint').Rule} */
+const rule = (primary, _secondaryOptions, context) => {
return (root, result) => {
- const validOptions = validateOptions(result, ruleName, { actual });
+ const validOptions = validateOptions(result, ruleName, { actual: primary });
if (!validOptions) {
return;
}
- const rawAfterRoot = root.raws.after;
+ if (root.raws.after && root.raws.after.trim().length !== 0) {
+ const rawAfterRoot = root.raws.after;
- if (rawAfterRoot && rawAfterRoot.trim().length !== 0) {
+ /** @type {number[]} */
const fixSemiIndices = [];
styleSearch({ source: rawAfterRoot, target: ';' }, (match) => {
@@ -64,6 +77,8 @@
return;
}
+ if (!root.source) throw new Error('The root node must have a source');
+
complain(root.source.input.css.length - rawAfterRoot.length + match.startIndex);
});
@@ -82,13 +97,13 @@
return;
}
- const rawBeforeNode = node.raws.before;
-
- if (rawBeforeNode && rawBeforeNode.trim().length !== 0) {
+ if (node.raws.before && node.raws.before.trim().length !== 0) {
+ const rawBeforeNode = node.raws.before;
const allowedSemi = 0;
const rawBeforeIndexStart = 0;
+ /** @type {number[]} */
const fixSemiIndices = [];
styleSearch({ source: rawBeforeNode, target: ';' }, (match, count) => {
@@ -107,22 +122,28 @@
// fix
if (fixSemiIndices.length) {
- node.raws.before = removeIndices(node.raws.before, fixSemiIndices);
+ node.raws.before = removeIndices(rawBeforeNode, fixSemiIndices);
}
}
- const rawAfterNode = node.raws.after;
+ if ('after' in node.raws && node.raws.after && node.raws.after.trim().length !== 0) {
+ const rawAfterNode = node.raws.after;
- if (rawAfterNode && rawAfterNode.trim().length !== 0) {
/**
* If the last child is a Less mixin followed by more than one semicolon,
* node.raws.after will be populated with that semicolon.
* Since we ignore Less mixins, exit here
*/
- if (node.last && node.last.type === 'atrule' && !isStandardSyntaxAtRule(node.last)) {
+ if (
+ 'last' in node &&
+ node.last &&
+ node.last.type === 'atrule' &&
+ !isStandardSyntaxAtRule(node.last)
+ ) {
return;
}
+ /** @type {number[]} */
const fixSemiIndices = [];
styleSearch({ source: rawAfterNode, target: ';' }, (match) => {
@@ -148,11 +169,11 @@
}
}
- const rawOwnSemicolon = node.raws.ownSemicolon;
-
- if (rawOwnSemicolon) {
+ if ('ownSemicolon' in node.raws && node.raws.ownSemicolon) {
+ const rawOwnSemicolon = node.raws.ownSemicolon;
const allowedSemi = 0;
+ /** @type {number[]} */
const fixSemiIndices = [];
styleSearch({ source: rawOwnSemicolon, target: ';' }, (match, count) => {
@@ -182,6 +203,9 @@
}
});
+ /**
+ * @param {number} index
+ */
function complain(index) {
report({
message: messages.rejected,
@@ -192,15 +216,20 @@
});
}
+ /**
+ * @param {string} str
+ * @param {number[]} indices
+ * @returns {string}
+ */
function removeIndices(str, indices) {
- indices.reverse().forEach((index) => {
+ for (const index of indices.reverse()) {
str = str.slice(0, index) + str.slice(index + 1);
- });
+ }
return str;
}
};
-}
+};
rule.ruleName = ruleName;
rule.messages = messages;
diff --git a/node_modules/stylelint/lib/rules/no-invalid-double-slash-comments/index.js b/node_modules/stylelint/lib/rules/no-invalid-double-slash-comments/index.js
index 606d459..00120dd 100644
--- a/node_modules/stylelint/lib/rules/no-invalid-double-slash-comments/index.js
+++ b/node_modules/stylelint/lib/rules/no-invalid-double-slash-comments/index.js
@@ -32,7 +32,7 @@
});
root.walkRules((ruleNode) => {
- ruleNode.selectors.forEach((selector) => {
+ for (const selector of ruleNode.selectors) {
if (selector.startsWith('//')) {
report({
message: messages.rejected,
@@ -41,7 +41,7 @@
ruleName,
});
}
- });
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/no-irregular-whitespace/index.js b/node_modules/stylelint/lib/rules/no-irregular-whitespace/index.js
index a0af350..b9f636d 100644
--- a/node_modules/stylelint/lib/rules/no-irregular-whitespace/index.js
+++ b/node_modules/stylelint/lib/rules/no-irregular-whitespace/index.js
@@ -77,12 +77,12 @@
const allKeys = Object.keys(nodeSchema);
const validatorForKey = {};
- allKeys.forEach((key) => {
+ for (const key of allKeys) {
if (typeof nodeSchema[key] === 'string') validatorForKey[key] = validator;
if (typeof nodeSchema[key] === 'object')
validatorForKey[key] = generateNodeValidator(nodeSchema[key], validator);
- });
+ }
// This will be called many times, so it's optimized for performance and not readibility.
// Surprisingly, this seem to be slightly faster then concatenating the params and running the validator once.
diff --git a/node_modules/stylelint/lib/rules/no-unknown-animations/index.js b/node_modules/stylelint/lib/rules/no-unknown-animations/index.js
index cd3d0a5..d1fd778 100644
--- a/node_modules/stylelint/lib/rules/no-unknown-animations/index.js
+++ b/node_modules/stylelint/lib/rules/no-unknown-animations/index.js
@@ -37,13 +37,13 @@
return;
}
- animationNames.forEach((animationNameNode) => {
+ for (const animationNameNode of animationNames) {
if (keywordSets.animationNameKeywords.has(animationNameNode.value.toLowerCase())) {
- return;
+ continue;
}
if (declaredAnimations.has(animationNameNode.value)) {
- return;
+ continue;
}
report({
@@ -53,7 +53,7 @@
node: decl,
index: declarationValueIndex(decl) + animationNameNode.sourceIndex,
});
- });
+ }
}
});
};
diff --git a/node_modules/stylelint/lib/rules/number-leading-zero/index.js b/node_modules/stylelint/lib/rules/number-leading-zero/index.js
index dcc17ef..27e3058 100644
--- a/node_modules/stylelint/lib/rules/number-leading-zero/index.js
+++ b/node_modules/stylelint/lib/rules/number-leading-zero/index.js
@@ -112,7 +112,7 @@
});
if (alwaysFixPositions.length) {
- alwaysFixPositions.forEach((fixPosition) => {
+ for (const fixPosition of alwaysFixPositions) {
const index = fixPosition.index;
if (node.type === 'atrule') {
@@ -120,11 +120,11 @@
} else {
node.value = addLeadingZero(node.value, index);
}
- });
+ }
}
if (neverFixPositions.length) {
- neverFixPositions.forEach((fixPosition) => {
+ for (const fixPosition of neverFixPositions) {
const startIndex = fixPosition.startIndex;
const endIndex = fixPosition.endIndex;
@@ -133,7 +133,7 @@
} else {
node.value = removeLeadingZeros(node.value, startIndex, endIndex);
}
- });
+ }
}
}
diff --git a/node_modules/stylelint/lib/rules/number-no-trailing-zeros/index.js b/node_modules/stylelint/lib/rules/number-no-trailing-zeros/index.js
index 3e10e25..597ebca 100644
--- a/node_modules/stylelint/lib/rules/number-no-trailing-zeros/index.js
+++ b/node_modules/stylelint/lib/rules/number-no-trailing-zeros/index.js
@@ -95,7 +95,7 @@
});
if (fixPositions.length) {
- fixPositions.forEach((fixPosition) => {
+ for (const fixPosition of fixPositions) {
const startIndex = fixPosition.startIndex;
const endIndex = fixPosition.endIndex;
@@ -104,7 +104,7 @@
} else {
node.value = removeTrailingZeros(node.value, startIndex, endIndex);
}
- });
+ }
}
}
};
diff --git a/node_modules/stylelint/lib/rules/rule-selector-property-disallowed-list/index.js b/node_modules/stylelint/lib/rules/rule-selector-property-disallowed-list/index.js
new file mode 100644
index 0000000..ef5e0cf
--- /dev/null
+++ b/node_modules/stylelint/lib/rules/rule-selector-property-disallowed-list/index.js
@@ -0,0 +1,66 @@
+'use strict';
+
+const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule');
+const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp');
+const report = require('../../utils/report');
+const ruleMessages = require('../../utils/ruleMessages');
+const validateOptions = require('../../utils/validateOptions');
+const { isPlainObject } = require('is-plain-object');
+
+const ruleName = 'rule-selector-property-disallowed-list';
+
+const messages = ruleMessages(ruleName, {
+ rejected: (property, selector) => `Unexpected property "${property}" for selector "${selector}"`,
+});
+
+/** @type {import('stylelint').Rule} */
+const rule = (primary) => {
+ return (root, result) => {
+ const validOptions = validateOptions(result, ruleName, {
+ actual: primary,
+ possible: [isPlainObject],
+ });
+
+ if (!validOptions) {
+ return;
+ }
+
+ const selectors = Object.keys(primary);
+
+ root.walkRules((ruleNode) => {
+ if (!isStandardSyntaxRule(ruleNode)) {
+ return;
+ }
+
+ const selectorKey = selectors.find((selector) =>
+ matchesStringOrRegExp(ruleNode.selector, selector),
+ );
+
+ if (!selectorKey) {
+ return;
+ }
+
+ const disallowedProperties = primary[selectorKey];
+
+ for (const node of ruleNode.nodes) {
+ const isDisallowedProperty =
+ node.type === 'decl' && matchesStringOrRegExp(node.prop, disallowedProperties);
+
+ if (isDisallowedProperty) {
+ report({
+ message: messages.rejected(node.prop, ruleNode.selector),
+ node,
+ result,
+ ruleName,
+ });
+ }
+ }
+ });
+ };
+};
+
+rule.primaryOptionArray = true;
+
+rule.ruleName = ruleName;
+rule.messages = messages;
+module.exports = rule;
diff --git a/node_modules/stylelint/lib/rules/selector-class-pattern/index.js b/node_modules/stylelint/lib/rules/selector-class-pattern/index.js
index a194b37..735476e 100644
--- a/node_modules/stylelint/lib/rules/selector-class-pattern/index.js
+++ b/node_modules/stylelint/lib/rules/selector-class-pattern/index.js
@@ -58,13 +58,13 @@
// Only bother resolving selectors that have an interpolating &
if (shouldResolveNestedSelectors && hasInterpolatingAmpersand(selector)) {
- resolveNestedSelector(selector, ruleNode).forEach((nestedSelector) => {
+ for (const nestedSelector of resolveNestedSelector(selector, ruleNode)) {
if (!isStandardSyntaxSelector(nestedSelector)) {
- return;
+ continue;
}
parseSelector(nestedSelector, result, ruleNode, (s) => checkSelector(s, ruleNode));
- });
+ }
} else {
parseSelector(selector, result, ruleNode, (s) => checkSelector(s, ruleNode));
}
diff --git a/node_modules/stylelint/lib/rules/selector-list-comma-newline-after/index.js b/node_modules/stylelint/lib/rules/selector-list-comma-newline-after/index.js
index 7a0a444..cb1bd4e 100644
--- a/node_modules/stylelint/lib/rules/selector-list-comma-newline-after/index.js
+++ b/node_modules/stylelint/lib/rules/selector-list-comma-newline-after/index.js
@@ -87,20 +87,18 @@
if (fixIndices.length) {
let fixedSelector = selector;
- fixIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeSelector = fixedSelector.slice(0, index);
- let afterSelector = fixedSelector.slice(index);
+ for (const index of fixIndices.sort((a, b) => b - a)) {
+ const beforeSelector = fixedSelector.slice(0, index);
+ let afterSelector = fixedSelector.slice(index);
- if (expectation.startsWith('always')) {
- afterSelector = context.newline + afterSelector;
- } else if (expectation.startsWith('never-multi-line')) {
- afterSelector = afterSelector.replace(/^\s*/, '');
- }
+ if (expectation.startsWith('always')) {
+ afterSelector = context.newline + afterSelector;
+ } else if (expectation.startsWith('never-multi-line')) {
+ afterSelector = afterSelector.replace(/^\s*/, '');
+ }
- fixedSelector = beforeSelector + afterSelector;
- });
+ fixedSelector = beforeSelector + afterSelector;
+ }
if (ruleNode.raws.selector) {
ruleNode.raws.selector.raw = fixedSelector;
diff --git a/node_modules/stylelint/lib/rules/selector-list-comma-newline-before/index.js b/node_modules/stylelint/lib/rules/selector-list-comma-newline-before/index.js
index 6eab502..a63d992 100644
--- a/node_modules/stylelint/lib/rules/selector-list-comma-newline-before/index.js
+++ b/node_modules/stylelint/lib/rules/selector-list-comma-newline-before/index.js
@@ -49,39 +49,37 @@
});
if (fixData) {
- fixData.forEach((commaIndices, ruleNode) => {
+ for (const [ruleNode, commaIndices] of fixData.entries()) {
let selector = ruleNode.raws.selector ? ruleNode.raws.selector.raw : ruleNode.selector;
- commaIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- let beforeSelector = selector.slice(0, index);
- const afterSelector = selector.slice(index);
+ for (const index of commaIndices.sort((a, b) => b - a)) {
+ let beforeSelector = selector.slice(0, index);
+ const afterSelector = selector.slice(index);
- if (expectation.startsWith('always')) {
- const spaceIndex = beforeSelector.search(/\s+$/);
+ if (expectation.startsWith('always')) {
+ const spaceIndex = beforeSelector.search(/\s+$/);
- if (spaceIndex >= 0) {
- beforeSelector =
- beforeSelector.slice(0, spaceIndex) +
- context.newline +
- beforeSelector.slice(spaceIndex);
- } else {
- beforeSelector += context.newline;
- }
- } else if (expectation === 'never-multi-line') {
- beforeSelector = beforeSelector.replace(/\s*$/, '');
+ if (spaceIndex >= 0) {
+ beforeSelector =
+ beforeSelector.slice(0, spaceIndex) +
+ context.newline +
+ beforeSelector.slice(spaceIndex);
+ } else {
+ beforeSelector += context.newline;
}
+ } else if (expectation === 'never-multi-line') {
+ beforeSelector = beforeSelector.replace(/\s*$/, '');
+ }
- selector = beforeSelector + afterSelector;
- });
+ selector = beforeSelector + afterSelector;
+ }
if (ruleNode.raws.selector) {
ruleNode.raws.selector.raw = selector;
} else {
ruleNode.selector = selector;
}
- });
+ }
}
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-list-comma-space-after/index.js b/node_modules/stylelint/lib/rules/selector-list-comma-space-after/index.js
index 4d61a97..269947a 100644
--- a/node_modules/stylelint/lib/rules/selector-list-comma-space-after/index.js
+++ b/node_modules/stylelint/lib/rules/selector-list-comma-space-after/index.js
@@ -50,30 +50,28 @@
});
if (fixData) {
- fixData.forEach((commaIndices, ruleNode) => {
+ for (const [ruleNode, commaIndices] of fixData.entries()) {
let selector = ruleNode.raws.selector ? ruleNode.raws.selector.raw : ruleNode.selector;
- commaIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const beforeSelector = selector.slice(0, index + 1);
- let afterSelector = selector.slice(index + 1);
+ for (const index of commaIndices.sort((a, b) => b - a)) {
+ const beforeSelector = selector.slice(0, index + 1);
+ let afterSelector = selector.slice(index + 1);
- if (expectation.startsWith('always')) {
- afterSelector = afterSelector.replace(/^\s*/, ' ');
- } else if (expectation.startsWith('never')) {
- afterSelector = afterSelector.replace(/^\s*/, '');
- }
+ if (expectation.startsWith('always')) {
+ afterSelector = afterSelector.replace(/^\s*/, ' ');
+ } else if (expectation.startsWith('never')) {
+ afterSelector = afterSelector.replace(/^\s*/, '');
+ }
- selector = beforeSelector + afterSelector;
- });
+ selector = beforeSelector + afterSelector;
+ }
if (ruleNode.raws.selector) {
ruleNode.raws.selector.raw = selector;
} else {
ruleNode.selector = selector;
}
- });
+ }
}
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-list-comma-space-before/index.js b/node_modules/stylelint/lib/rules/selector-list-comma-space-before/index.js
index 8f24a63..fe1c831 100644
--- a/node_modules/stylelint/lib/rules/selector-list-comma-space-before/index.js
+++ b/node_modules/stylelint/lib/rules/selector-list-comma-space-before/index.js
@@ -50,30 +50,28 @@
});
if (fixData) {
- fixData.forEach((commaIndices, ruleNode) => {
+ for (const [ruleNode, commaIndices] of fixData.entries()) {
let selector = ruleNode.raws.selector ? ruleNode.raws.selector.raw : ruleNode.selector;
- commaIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- let beforeSelector = selector.slice(0, index);
- const afterSelector = selector.slice(index);
+ for (const index of commaIndices.sort((a, b) => b - a)) {
+ let beforeSelector = selector.slice(0, index);
+ const afterSelector = selector.slice(index);
- if (expectation.includes('always')) {
- beforeSelector = beforeSelector.replace(/\s*$/, ' ');
- } else if (expectation.includes('never')) {
- beforeSelector = beforeSelector.replace(/\s*$/, '');
- }
+ if (expectation.includes('always')) {
+ beforeSelector = beforeSelector.replace(/\s*$/, ' ');
+ } else if (expectation.includes('never')) {
+ beforeSelector = beforeSelector.replace(/\s*$/, '');
+ }
- selector = beforeSelector + afterSelector;
- });
+ selector = beforeSelector + afterSelector;
+ }
if (ruleNode.raws.selector) {
ruleNode.raws.selector.raw = selector;
} else {
ruleNode.selector = selector;
}
- });
+ }
}
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-max-attribute/index.js b/node_modules/stylelint/lib/rules/selector-max-attribute/index.js
index 39ca04e..c112ca1 100644
--- a/node_modules/stylelint/lib/rules/selector-max-attribute/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-attribute/index.js
@@ -61,7 +61,9 @@
return total;
}
- return (total += 1);
+ total += 1;
+
+ return total;
}, 0);
if (selectorNode.type !== 'root' && selectorNode.type !== 'pseudo' && count > max) {
@@ -80,13 +82,13 @@
return;
}
- ruleNode.selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of ruleNode.selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
parseSelector(resolvedSelector, result, ruleNode, (container) =>
checkSelector(container, ruleNode),
);
- });
- });
+ }
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-max-class/index.js b/node_modules/stylelint/lib/rules/selector-max-class/index.js
index 696967a..2024e77 100644
--- a/node_modules/stylelint/lib/rules/selector-max-class/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-class/index.js
@@ -36,7 +36,9 @@
checkSelector(childNode, ruleNode);
}
- return (total += childNode.type === 'class' ? 1 : 0);
+ if (childNode.type === 'class') total += 1;
+
+ return total;
}, 0);
if (selectorNode.type !== 'root' && selectorNode.type !== 'pseudo' && count > max) {
@@ -55,13 +57,13 @@
return;
}
- ruleNode.selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of ruleNode.selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
parseSelector(resolvedSelector, result, ruleNode, (container) =>
checkSelector(container, ruleNode),
);
- });
- });
+ }
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-max-combinators/index.js b/node_modules/stylelint/lib/rules/selector-max-combinators/index.js
index 75a73ee..55d30db 100644
--- a/node_modules/stylelint/lib/rules/selector-max-combinators/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-combinators/index.js
@@ -37,7 +37,9 @@
checkSelector(childNode, ruleNode);
}
- return (total += childNode.type === 'combinator' ? 1 : 0);
+ if (childNode.type === 'combinator') total += 1;
+
+ return total;
}, 0);
if (selectorNode.type !== 'root' && selectorNode.type !== 'pseudo' && count > max) {
@@ -56,13 +58,13 @@
return;
}
- ruleNode.selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of ruleNode.selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
parseSelector(resolvedSelector, result, ruleNode, (container) =>
checkSelector(container, ruleNode),
);
- });
- });
+ }
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-max-compound-selectors/index.js b/node_modules/stylelint/lib/rules/selector-max-compound-selectors/index.js
index ff6b880..740376d 100644
--- a/node_modules/stylelint/lib/rules/selector-max-compound-selectors/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-compound-selectors/index.js
@@ -64,12 +64,12 @@
}
// Using `.selectors` gets us each selector if there is a comma separated set
- ruleNode.selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of ruleNode.selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
// Process each resolved selector with `checkSelector` via postcss-selector-parser
parseSelector(resolvedSelector, result, ruleNode, (s) => checkSelector(s, ruleNode));
- });
- });
+ }
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-max-id/index.js b/node_modules/stylelint/lib/rules/selector-max-id/index.js
index a52cf58..c329a19 100644
--- a/node_modules/stylelint/lib/rules/selector-max-id/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-id/index.js
@@ -53,7 +53,9 @@
checkSelector(childNode, ruleNode);
}
- return (total += childNode.type === 'id' ? 1 : 0);
+ if (childNode.type === 'id') total += 1;
+
+ return total;
}, 0);
if (selectorNode.type !== 'root' && selectorNode.type !== 'pseudo' && count > max) {
@@ -79,13 +81,13 @@
return;
}
- ruleNode.selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of ruleNode.selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
parseSelector(resolvedSelector, result, ruleNode, (container) =>
checkSelector(container, ruleNode),
);
- });
- });
+ }
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-max-pseudo-class/index.js b/node_modules/stylelint/lib/rules/selector-max-pseudo-class/index.js
index a485da3..42f6321 100644
--- a/node_modules/stylelint/lib/rules/selector-max-pseudo-class/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-pseudo-class/index.js
@@ -47,7 +47,7 @@
}
if (childNode.type === 'pseudo') {
- return (total += 1);
+ total += 1;
}
return total;
@@ -69,13 +69,13 @@
return;
}
- ruleNode.selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of ruleNode.selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
parseSelector(resolvedSelector, result, rule, (selectorTree) => {
checkSelector(selectorTree, ruleNode);
});
- });
- });
+ }
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-max-specificity/index.js b/node_modules/stylelint/lib/rules/selector-max-specificity/index.js
index 595eec1..6a9108a 100755
--- a/node_modules/stylelint/lib/rules/selector-max-specificity/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-specificity/index.js
@@ -27,11 +27,11 @@
const specificitySum = (specificities) => {
const sum = zeroSpecificity();
- specificities.forEach((specificityArray) => {
- specificityArray.forEach((value, i) => {
+ for (const specificityArray of specificities) {
+ for (const [i, value] of specificityArray.entries()) {
sum[i] += value;
- });
- });
+ }
+ }
return sum;
};
@@ -129,13 +129,13 @@
return pseudoSpecificity(node);
case 'selector':
// Calculate the sum of all the direct children
- return specificitySum(node.map(nodeSpecificity));
+ return specificitySum(node.map((n) => nodeSpecificity(n)));
default:
return zeroSpecificity();
}
};
- const maxSpecificityArray = `0,${max}`.split(',').map(parseFloat);
+ const maxSpecificityArray = `0,${max}`.split(',').map((s) => Number.parseFloat(s));
root.walkRules((ruleNode) => {
if (!isStandardSyntaxRule(ruleNode)) {
@@ -143,12 +143,12 @@
}
// Using `.selectors` gets us each selector in the eventuality we have a comma separated set
- ruleNode.selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of ruleNode.selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
try {
// Skip non-standard syntax selectors
if (!isStandardSyntaxSelector(resolvedSelector)) {
- return;
+ continue;
}
parseSelector(resolvedSelector, result, ruleNode, (selectorTree) => {
@@ -171,8 +171,8 @@
stylelintType: 'parseError',
});
}
- });
- });
+ }
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-max-type/index.js b/node_modules/stylelint/lib/rules/selector-max-type/index.js
index 5398705..c1d939e 100644
--- a/node_modules/stylelint/lib/rules/selector-max-type/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-type/index.js
@@ -110,17 +110,17 @@
return;
}
- ruleNode.selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of ruleNode.selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
if (!isStandardSyntaxSelector(resolvedSelector)) {
- return;
+ continue;
}
parseSelector(resolvedSelector, result, ruleNode, (container) =>
checkSelector(container, ruleNode),
);
- });
- });
+ }
+ }
});
};
}
@@ -128,13 +128,13 @@
function hasDescendantCombinatorBefore(node) {
const nodeIndex = node.parent.nodes.indexOf(node);
- return node.parent.nodes.slice(0, nodeIndex).some(isDescendantCombinator);
+ return node.parent.nodes.slice(0, nodeIndex).some((n) => isDescendantCombinator(n));
}
function hasChildCombinatorBefore(node) {
const nodeIndex = node.parent.nodes.indexOf(node);
- return node.parent.nodes.slice(0, nodeIndex).some(isChildCombinator);
+ return node.parent.nodes.slice(0, nodeIndex).some((n) => isChildCombinator(n));
}
function hasCompoundSelector(node) {
diff --git a/node_modules/stylelint/lib/rules/selector-max-universal/index.js b/node_modules/stylelint/lib/rules/selector-max-universal/index.js
index 940f88c..54d9cb7 100644
--- a/node_modules/stylelint/lib/rules/selector-max-universal/index.js
+++ b/node_modules/stylelint/lib/rules/selector-max-universal/index.js
@@ -39,7 +39,9 @@
checkSelector(childNode, ruleNode);
}
- return (total += childNode.type === 'universal' ? 1 : 0);
+ if (childNode.type === 'universal') total += 1;
+
+ return total;
}, 0);
if (selectorNode.type !== 'root' && selectorNode.type !== 'pseudo' && count > max) {
@@ -68,13 +70,13 @@
}
});
- selectors.forEach((selector) => {
- resolvedNestedSelector(selector, ruleNode).forEach((resolvedSelector) => {
+ for (const selector of selectors) {
+ for (const resolvedSelector of resolvedNestedSelector(selector, ruleNode)) {
parseSelector(resolvedSelector, result, ruleNode, (container) =>
checkSelector(container, ruleNode),
);
- });
- });
+ }
+ }
});
};
}
diff --git a/node_modules/stylelint/lib/rules/selector-no-qualifying-type/index.js b/node_modules/stylelint/lib/rules/selector-no-qualifying-type/index.js
index 84feeeb..8e3f8b7 100644
--- a/node_modules/stylelint/lib/rules/selector-no-qualifying-type/index.js
+++ b/node_modules/stylelint/lib/rules/selector-no-qualifying-type/index.js
@@ -89,7 +89,7 @@
const selectorNodes = getRightNodes(selector);
const index = selector.sourceIndex;
- selectorNodes.forEach((selectorNode) => {
+ for (const selectorNode of selectorNodes) {
if (selectorNode.type === 'id' && !optionsMatches(options, 'ignore', 'id')) {
complain(index);
}
@@ -104,17 +104,17 @@
) {
complain(index);
}
- });
+ }
});
}
- resolvedNestedSelector(ruleNode.selector, ruleNode).forEach((resolvedSelector) => {
+ for (const resolvedSelector of resolvedNestedSelector(ruleNode.selector, ruleNode)) {
if (!isStandardSyntaxSelector(resolvedSelector)) {
- return;
+ continue;
}
parseSelector(resolvedSelector, result, ruleNode, checkSelector);
- });
+ }
function complain(index) {
report({
diff --git a/node_modules/stylelint/lib/rules/selector-pseudo-class-parentheses-space-inside/index.js b/node_modules/stylelint/lib/rules/selector-pseudo-class-parentheses-space-inside/index.js
index 5042514..b181b12 100644
--- a/node_modules/stylelint/lib/rules/selector-pseudo-class-parentheses-space-inside/index.js
+++ b/node_modules/stylelint/lib/rules/selector-pseudo-class-parentheses-space-inside/index.js
@@ -45,7 +45,7 @@
return;
}
- const paramString = pseudoNode.map(String).join(',');
+ const paramString = pseudoNode.map((node) => String(node)).join(',');
const nextCharIsSpace = paramString.startsWith(' ');
const openIndex =
pseudoNode.sourceIndex + stringifyProperty(pseudoNode, 'value').length + 1;
diff --git a/node_modules/stylelint/lib/rules/selector-pseudo-element-colon-notation/index.js b/node_modules/stylelint/lib/rules/selector-pseudo-element-colon-notation/index.js
index 696d82f..657d8b4 100644
--- a/node_modules/stylelint/lib/rules/selector-pseudo-element-colon-notation/index.js
+++ b/node_modules/stylelint/lib/rules/selector-pseudo-element-colon-notation/index.js
@@ -78,12 +78,12 @@
const offset = expectedSingle ? 1 : 0;
const extraColon = expectedSingle ? '' : ':';
- fixPositions.forEach((fixPosition) => {
+ for (const fixPosition of fixPositions) {
ruleNode.selector =
ruleNode.selector.substring(0, fixPosition.startIndex - offset) +
extraColon +
ruleNode.selector.substring(fixPosition.startIndex);
- });
+ }
}
});
};
diff --git a/node_modules/stylelint/lib/rules/selector-type-case/index.js b/node_modules/stylelint/lib/rules/selector-type-case/index.js
index ca4d7d0..9f432b4 100644
--- a/node_modules/stylelint/lib/rules/selector-type-case/index.js
+++ b/node_modules/stylelint/lib/rules/selector-type-case/index.js
@@ -11,6 +11,7 @@
const ruleMessages = require('../../utils/ruleMessages');
const validateOptions = require('../../utils/validateOptions');
const { isString } = require('../../utils/validateTypes');
+const keywordSets = require('../../reference/keywordSets');
const ruleName = 'selector-type-case';
@@ -59,6 +60,10 @@
return;
}
+ if (keywordSets.validMixedCaseSvgElements.has(tag.value)) {
+ return;
+ }
+
if (optionsMatches(options, 'ignoreTypes', tag.value)) {
return;
}
diff --git a/node_modules/stylelint/lib/rules/string-quotes/index.js b/node_modules/stylelint/lib/rules/string-quotes/index.js
index 77dc710..2167efd 100644
--- a/node_modules/stylelint/lib/rules/string-quotes/index.js
+++ b/node_modules/stylelint/lib/rules/string-quotes/index.js
@@ -153,9 +153,9 @@
}
});
- fixPositions.forEach((fixIndex) => {
+ for (const fixIndex of fixPositions) {
ruleNode.selector = replaceQuote(ruleNode.selector, fixIndex, correctQuote);
- });
+ }
}
function checkDeclOrAtRule(node, value, getIndex) {
@@ -200,13 +200,13 @@
}
});
- fixPositions.forEach((fixIndex) => {
+ for (const fixIndex of fixPositions) {
if (node.type === 'atrule') {
node.params = replaceQuote(node.params, fixIndex, correctQuote);
} else {
node.value = replaceQuote(node.value, fixIndex, correctQuote);
}
- });
+ }
}
};
}
diff --git a/node_modules/stylelint/lib/rules/unit-case/index.js b/node_modules/stylelint/lib/rules/unit-case/index.js
index cbacf57..471e46e 100644
--- a/node_modules/stylelint/lib/rules/unit-case/index.js
+++ b/node_modules/stylelint/lib/rules/unit-case/index.js
@@ -85,7 +85,7 @@
node.value = parsedValue.toString();
}
} else {
- problems.forEach((err) => {
+ for (const err of problems) {
report({
index: err.index,
message: err.message,
@@ -93,7 +93,7 @@
result,
ruleName,
});
- });
+ }
}
}
}
diff --git a/node_modules/stylelint/lib/rules/value-keyword-case/index.js b/node_modules/stylelint/lib/rules/value-keyword-case/index.js
index 76a7aeb..21a9950 100644
--- a/node_modules/stylelint/lib/rules/value-keyword-case/index.js
+++ b/node_modules/stylelint/lib/rules/value-keyword-case/index.js
@@ -29,9 +29,9 @@
const mapLowercaseKeywordsToCamelCase = new Map();
-keywordSets.camelCaseKeywords.forEach((func) => {
+for (const func of keywordSets.camelCaseKeywords) {
mapLowercaseKeywordsToCamelCase.set(func.toLowerCase(), func);
-});
+}
function rule(expectation, options, context) {
return (root, result) => {
diff --git a/node_modules/stylelint/lib/rules/value-list-comma-newline-after/index.js b/node_modules/stylelint/lib/rules/value-list-comma-newline-after/index.js
index a090593..679bf67 100644
--- a/node_modules/stylelint/lib/rules/value-list-comma-newline-after/index.js
+++ b/node_modules/stylelint/lib/rules/value-list-comma-newline-after/index.js
@@ -72,25 +72,22 @@
});
if (fixData) {
- fixData.forEach((commaIndices, decl) => {
- commaIndices
- .sort((a, b) => a - b)
- .reverse()
- .forEach((index) => {
- const value = getDeclarationValue(decl);
- const valueIndex = index - declarationValueIndex(decl);
- const beforeValue = value.slice(0, valueIndex + 1);
- let afterValue = value.slice(valueIndex + 1);
+ for (const [decl, commaIndices] of fixData.entries()) {
+ for (const index of commaIndices.sort((a, b) => a - b).reverse()) {
+ const value = getDeclarationValue(decl);
+ const valueIndex = index - declarationValueIndex(decl);
+ const beforeValue = value.slice(0, valueIndex + 1);
+ let afterValue = value.slice(valueIndex + 1);
- if (expectation.startsWith('always')) {
- afterValue = context.newline + afterValue;
- } else if (expectation.startsWith('never-multi-line')) {
- afterValue = afterValue.replace(/^\s*/, '');
- }
+ if (expectation.startsWith('always')) {
+ afterValue = context.newline + afterValue;
+ } else if (expectation.startsWith('never-multi-line')) {
+ afterValue = afterValue.replace(/^\s*/, '');
+ }
- setDeclarationValue(decl, beforeValue + afterValue);
- });
- });
+ setDeclarationValue(decl, beforeValue + afterValue);
+ }
+ }
}
};
}
diff --git a/node_modules/stylelint/lib/rules/value-list-comma-space-after/index.js b/node_modules/stylelint/lib/rules/value-list-comma-space-after/index.js
index 3bfd1b7..10efd2f 100644
--- a/node_modules/stylelint/lib/rules/value-list-comma-space-after/index.js
+++ b/node_modules/stylelint/lib/rules/value-list-comma-space-after/index.js
@@ -59,24 +59,22 @@
});
if (fixData) {
- fixData.forEach((commaIndices, decl) => {
- commaIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const value = getDeclarationValue(decl);
- const valueIndex = index - declarationValueIndex(decl);
- const beforeValue = value.slice(0, valueIndex + 1);
- let afterValue = value.slice(valueIndex + 1);
+ for (const [decl, commaIndices] of fixData.entries()) {
+ for (const index of commaIndices.sort((a, b) => b - a)) {
+ const value = getDeclarationValue(decl);
+ const valueIndex = index - declarationValueIndex(decl);
+ const beforeValue = value.slice(0, valueIndex + 1);
+ let afterValue = value.slice(valueIndex + 1);
- if (expectation.startsWith('always')) {
- afterValue = afterValue.replace(/^\s*/, ' ');
- } else if (expectation.startsWith('never')) {
- afterValue = afterValue.replace(/^\s*/, '');
- }
+ if (expectation.startsWith('always')) {
+ afterValue = afterValue.replace(/^\s*/, ' ');
+ } else if (expectation.startsWith('never')) {
+ afterValue = afterValue.replace(/^\s*/, '');
+ }
- setDeclarationValue(decl, beforeValue + afterValue);
- });
- });
+ setDeclarationValue(decl, beforeValue + afterValue);
+ }
+ }
}
};
}
diff --git a/node_modules/stylelint/lib/rules/value-list-comma-space-before/index.js b/node_modules/stylelint/lib/rules/value-list-comma-space-before/index.js
index b16c99e..fff2086 100644
--- a/node_modules/stylelint/lib/rules/value-list-comma-space-before/index.js
+++ b/node_modules/stylelint/lib/rules/value-list-comma-space-before/index.js
@@ -59,24 +59,22 @@
});
if (fixData) {
- fixData.forEach((commaIndices, decl) => {
- commaIndices
- .sort((a, b) => b - a)
- .forEach((index) => {
- const value = getDeclarationValue(decl);
- const valueIndex = index - declarationValueIndex(decl);
- let beforeValue = value.slice(0, valueIndex);
- const afterValue = value.slice(valueIndex);
+ for (const [decl, commaIndices] of fixData.entries()) {
+ for (const index of commaIndices.sort((a, b) => b - a)) {
+ const value = getDeclarationValue(decl);
+ const valueIndex = index - declarationValueIndex(decl);
+ let beforeValue = value.slice(0, valueIndex);
+ const afterValue = value.slice(valueIndex);
- if (expectation.startsWith('always')) {
- beforeValue = beforeValue.replace(/\s*$/, ' ');
- } else if (expectation.startsWith('never')) {
- beforeValue = beforeValue.replace(/\s*$/, '');
- }
+ if (expectation.startsWith('always')) {
+ beforeValue = beforeValue.replace(/\s*$/, ' ');
+ } else if (expectation.startsWith('never')) {
+ beforeValue = beforeValue.replace(/\s*$/, '');
+ }
- setDeclarationValue(decl, beforeValue + afterValue);
- });
- });
+ setDeclarationValue(decl, beforeValue + afterValue);
+ }
+ }
}
};
}
diff --git a/node_modules/stylelint/lib/standalone.js b/node_modules/stylelint/lib/standalone.js
index 1037131..3b98b26 100644
--- a/node_modules/stylelint/lib/standalone.js
+++ b/node_modules/stylelint/lib/standalone.js
@@ -1,25 +1,24 @@
'use strict';
-const createStylelint = require('./createStylelint');
-const createStylelintResult = require('./createStylelintResult');
const debug = require('debug')('stylelint:standalone');
const fastGlob = require('fast-glob');
+const fs = require('fs');
+const globby = require('globby');
+const normalizePath = require('normalize-path');
+const path = require('path');
+
+const createStylelint = require('./createStylelint');
+const createStylelintResult = require('./createStylelintResult');
const FileCache = require('./utils/FileCache');
const filterFilePaths = require('./utils/filterFilePaths');
const formatters = require('./formatters');
-const fs = require('fs');
+const getFileIgnorer = require('./utils/getFileIgnorer');
const getFormatterOptionsText = require('./utils/getFormatterOptionsText');
-const globby = require('globby');
const hash = require('./utils/hash');
-const isPathNotFoundError = require('./utils/isPathNotFoundError');
const NoFilesFoundError = require('./utils/noFilesFoundError');
-const normalizePath = require('normalize-path');
-const path = require('path');
const pkg = require('../package.json');
const prepareReturnValue = require('./prepareReturnValue');
-const { default: ignore } = require('ignore');
-const DEFAULT_IGNORE_FILENAME = '.stylelintignore';
const ALWAYS_IGNORED_GLOBS = ['**/node_modules/**'];
const writeFileAtomic = require('write-file-atomic');
@@ -44,14 +43,15 @@
configBasedir,
configFile,
customSyntax,
+ cwd = process.cwd(),
disableDefaultIgnores,
files,
fix,
formatter,
globbyOptions,
ignoreDisables,
- ignorePath = DEFAULT_IGNORE_FILENAME,
- ignorePattern = [],
+ ignorePath,
+ ignorePattern,
maxWarnings,
quiet,
reportDescriptionlessDisables,
@@ -73,21 +73,16 @@
// The ignorer will be used to filter file paths after the glob is checked,
// before any files are actually read
- const absoluteIgnoreFilePath = path.isAbsolute(ignorePath)
- ? ignorePath
- : path.resolve(process.cwd(), ignorePath);
- let ignoreText = '';
+
+ /** @type {import('ignore').Ignore} */
+ let ignorer;
try {
- ignoreText = fs.readFileSync(absoluteIgnoreFilePath, 'utf8');
- } catch (readError) {
- if (!isPathNotFoundError(readError)) {
- return Promise.reject(readError);
- }
+ ignorer = getFileIgnorer({ cwd, ignorePath, ignorePattern });
+ } catch (error) {
+ return Promise.reject(error);
}
- const ignorer = ignore().add(ignoreText).add(ignorePattern);
-
/** @type {Formatter} */
let formatterFunction;
@@ -101,6 +96,7 @@
config,
configFile,
configBasedir,
+ cwd,
ignoreDisables,
ignorePath,
reportNeedlessDisables,
@@ -115,15 +111,15 @@
if (!files) {
const absoluteCodeFilename =
codeFilename !== undefined && !path.isAbsolute(codeFilename)
- ? path.join(process.cwd(), codeFilename)
+ ? path.join(cwd, codeFilename)
: codeFilename;
// if file is ignored, return nothing
if (
absoluteCodeFilename &&
- !filterFilePaths(ignorer, [path.relative(process.cwd(), absoluteCodeFilename)]).length
+ !filterFilePaths(ignorer, [path.relative(cwd, absoluteCodeFilename)]).length
) {
- return prepareReturnValue([], maxWarnings, formatterFunction);
+ return prepareReturnValue([], maxWarnings, formatterFunction, cwd);
}
let stylelintResult;
@@ -140,7 +136,7 @@
}
const postcssResult = stylelintResult._postcssResult;
- const returnValue = prepareReturnValue([stylelintResult], maxWarnings, formatterFunction);
+ const returnValue = prepareReturnValue([stylelintResult], maxWarnings, formatterFunction, cwd);
if (
fix &&
@@ -160,8 +156,10 @@
}
let fileList = [files].flat().map((entry) => {
- const cwd = (globbyOptions && globbyOptions.cwd) || process.cwd();
- const absolutePath = !path.isAbsolute(entry) ? path.join(cwd, entry) : path.normalize(entry);
+ const globCWD = (globbyOptions && globbyOptions.cwd) || cwd;
+ const absolutePath = !path.isAbsolute(entry)
+ ? path.join(globCWD, entry)
+ : path.normalize(entry);
if (fs.existsSync(absolutePath)) {
// This path points to a file. Return an escaped path to avoid globbing
@@ -179,29 +177,36 @@
const stylelintVersion = pkg.version;
const hashOfConfig = hash(`${stylelintVersion}_${JSON.stringify(config || {})}`);
- fileCache = new FileCache(cacheLocation, hashOfConfig);
+ fileCache = new FileCache(cacheLocation, cwd, hashOfConfig);
} else {
// No need to calculate hash here, we just want to delete cache file.
- fileCache = new FileCache(cacheLocation);
+ fileCache = new FileCache(cacheLocation, cwd);
// Remove cache file if cache option is disabled
fileCache.destroy();
}
- let filePaths = await globby(fileList, globbyOptions);
+ const effectiveGlobbyOptions = {
+ cwd,
+ ...(globbyOptions || {}),
+ absolute: true,
+ };
+
+ const globCWD = effectiveGlobbyOptions.cwd;
+
+ let filePaths = await globby(fileList, effectiveGlobbyOptions);
// The ignorer filter needs to check paths relative to cwd
filePaths = filterFilePaths(
ignorer,
- filePaths.map((p) => path.relative(process.cwd(), p)),
+ filePaths.map((p) => path.relative(globCWD, p)),
);
let stylelintResults;
if (filePaths.length) {
- const cwd = (globbyOptions && globbyOptions.cwd) || process.cwd();
let absoluteFilePaths = filePaths.map((filePath) => {
const absoluteFilepath = !path.isAbsolute(filePath)
- ? path.join(cwd, filePath)
+ ? path.join(globCWD, filePath)
: path.normalize(filePath);
return absoluteFilepath;
@@ -265,7 +270,7 @@
fileCache.reconcile();
}
- const result = prepareReturnValue(stylelintResults, maxWarnings, formatterFunction);
+ const result = prepareReturnValue(stylelintResults, maxWarnings, formatterFunction, cwd);
debug(`Linting complete in ${Date.now() - startTime}ms`);
diff --git a/node_modules/stylelint/lib/utils/FileCache.js b/node_modules/stylelint/lib/utils/FileCache.js
index 0474a6c..698b310 100644
--- a/node_modules/stylelint/lib/utils/FileCache.js
+++ b/node_modules/stylelint/lib/utils/FileCache.js
@@ -16,8 +16,12 @@
* @constructor
*/
class FileCache {
- constructor(cacheLocation = DEFAULT_CACHE_LOCATION, hashOfConfig = DEFAULT_HASH) {
- const cacheFile = path.resolve(getCacheFile(cacheLocation, process.cwd()));
+ constructor(
+ cacheLocation = DEFAULT_CACHE_LOCATION,
+ cwd = process.cwd(),
+ hashOfConfig = DEFAULT_HASH,
+ ) {
+ const cacheFile = path.resolve(getCacheFile(cacheLocation, cwd));
debug(`Cache file is created at ${cacheFile}`);
this._fileCache = fileEntryCache.create(cacheFile);
diff --git a/node_modules/stylelint/lib/utils/beforeBlockString.js b/node_modules/stylelint/lib/utils/beforeBlockString.js
index b17b856..3ae7830 100644
--- a/node_modules/stylelint/lib/utils/beforeBlockString.js
+++ b/node_modules/stylelint/lib/utils/beforeBlockString.js
@@ -1,10 +1,9 @@
'use strict';
-/** @typedef {import('postcss').Rule} Rule */
-/** @typedef {import('postcss').AtRule} AtRule */
+const { isAtRule, isRule } = require('./typeGuards');
/**
- * @param {Rule | AtRule} statement
+ * @param {import('postcss').Container} statement
* @returns {string}
*/
module.exports = function beforeBlockString(statement, { noRawBefore } = { noRawBefore: false }) {
@@ -16,15 +15,12 @@
result += before;
}
- switch (statement.type) {
- case 'rule':
- result += statement.selector;
- break;
- case 'atrule':
- result += `@${statement.name}${statement.raws.afterName || ''}${statement.params}`;
- break;
- default:
- return '';
+ if (isRule(statement)) {
+ result += statement.selector;
+ } else if (isAtRule(statement)) {
+ result += `@${statement.name}${statement.raws.afterName || ''}${statement.params}`;
+ } else {
+ return '';
}
result += statement.raws.between || '';
diff --git a/node_modules/stylelint/lib/utils/blockString.js b/node_modules/stylelint/lib/utils/blockString.js
index 5a96442..6ebd81a 100644
--- a/node_modules/stylelint/lib/utils/blockString.js
+++ b/node_modules/stylelint/lib/utils/blockString.js
@@ -4,15 +4,12 @@
const hasBlock = require('./hasBlock');
const rawNodeString = require('./rawNodeString');
-/** @typedef {import('postcss').Rule} Rule */
-/** @typedef {import('postcss').AtRule} AtRule */
-
/**
* Return a CSS statement's block -- the string that starts and `{` and ends with `}`.
*
* If the statement has no block (e.g. `@import url(foo.css);`), returns an empty string.
*
- * @param {Rule | AtRule} statement - postcss rule or at-rule node
+ * @param {import('postcss').Container} statement
* @returns {string}
*/
module.exports = function blockString(statement) {
diff --git a/node_modules/stylelint/lib/utils/checkAgainstRule.js b/node_modules/stylelint/lib/utils/checkAgainstRule.js
index 494569e..ef8a8b3 100644
--- a/node_modules/stylelint/lib/utils/checkAgainstRule.js
+++ b/node_modules/stylelint/lib/utils/checkAgainstRule.js
@@ -48,7 +48,8 @@
/** @type {O} */ (settings[1]),
{},
)(options.root, tmpPostcssResult);
- tmpPostcssResult.warnings().forEach(callback);
+
+ for (const warning of tmpPostcssResult.warnings()) callback(warning);
}
module.exports = /** @type {typeof import('stylelint').utils.checkAgainstRule} */ (
diff --git a/node_modules/stylelint/lib/utils/checkInvalidCLIOptions.js b/node_modules/stylelint/lib/utils/checkInvalidCLIOptions.js
index 6f8bb5e..24099f9 100644
--- a/node_modules/stylelint/lib/utils/checkInvalidCLIOptions.js
+++ b/node_modules/stylelint/lib/utils/checkInvalidCLIOptions.js
@@ -97,7 +97,7 @@
return Object.keys(inputOptions)
.filter((opt) => !allOptions.includes(opt))
- .map(kebabCase)
+ .map((opt) => kebabCase(opt))
.reduce((msg, invalid) => {
// NOTE: No suggestion for shortcut options because it's too difficult
const suggestion = invalid.length >= 2 ? suggest(allOptions, invalid) : null;
diff --git a/node_modules/stylelint/lib/utils/configurationError.js b/node_modules/stylelint/lib/utils/configurationError.js
index c65b083..1e190c4 100644
--- a/node_modules/stylelint/lib/utils/configurationError.js
+++ b/node_modules/stylelint/lib/utils/configurationError.js
@@ -1,13 +1,14 @@
'use strict';
+/** @typedef {import('stylelint').ConfigurationError} ConfigurationError */
+
/**
* Create configurationError from text and set CLI exit code
* @param {string} text
- * @returns {Object}
+ * @returns {ConfigurationError}
*/
-module.exports = function (text) /* Object */ {
- /** @type {Error & {code?: number}} */
- const err = new Error(text);
+module.exports = function (text) {
+ const err = /** @type {ConfigurationError} */ (new Error(text));
err.code = 78;
diff --git a/node_modules/stylelint/lib/utils/eachDeclarationBlock.js b/node_modules/stylelint/lib/utils/eachDeclarationBlock.js
index 66fac80..25f2b69 100644
--- a/node_modules/stylelint/lib/utils/eachDeclarationBlock.js
+++ b/node_modules/stylelint/lib/utils/eachDeclarationBlock.js
@@ -43,13 +43,13 @@
/** @type {Declaration[]} */
const decls = [];
- statement.nodes.forEach((node) => {
+ for (const node of statement.nodes) {
if (node.type === 'decl') {
decls.push(node);
}
each(node);
- });
+ }
if (decls.length) {
callback(decls.forEach.bind(decls));
diff --git a/node_modules/stylelint/lib/utils/getFileIgnorer.js b/node_modules/stylelint/lib/utils/getFileIgnorer.js
index 3f9ecb5..d083987 100644
--- a/node_modules/stylelint/lib/utils/getFileIgnorer.js
+++ b/node_modules/stylelint/lib/utils/getFileIgnorer.js
@@ -9,27 +9,26 @@
const DEFAULT_IGNORE_FILENAME = '.stylelintignore';
-/** @typedef {import('stylelint').LinterOptions} StylelintOptions */
-
/**
- * @param {StylelintOptions} options
+ * @param {{ cwd: string, ignorePath?: string, ignorePattern?: string[] }} options
* @return {import('ignore').Ignore}
*/
-module.exports = function (options) {
+module.exports = function getFileIgnorer(options) {
const ignoreFilePath = options.ignorePath || DEFAULT_IGNORE_FILENAME;
const absoluteIgnoreFilePath = path.isAbsolute(ignoreFilePath)
? ignoreFilePath
- : path.resolve(process.cwd(), ignoreFilePath);
+ : path.resolve(options.cwd, ignoreFilePath);
let ignoreText = '';
try {
ignoreText = fs.readFileSync(absoluteIgnoreFilePath, 'utf8');
} catch (readError) {
- if (!isPathNotFoundError(readError)) throw readError;
+ if (!isPathNotFoundError(readError)) {
+ throw readError;
+ }
}
- const ignorePattern = options.ignorePattern || [];
- const ignorer = ignore().add(ignoreText).add(ignorePattern);
-
- return ignorer;
+ return ignore()
+ .add(ignoreText)
+ .add(options.ignorePattern || []);
};
diff --git a/node_modules/stylelint/lib/utils/getModulePath.js b/node_modules/stylelint/lib/utils/getModulePath.js
index 68fa9b1..8960279 100644
--- a/node_modules/stylelint/lib/utils/getModulePath.js
+++ b/node_modules/stylelint/lib/utils/getModulePath.js
@@ -7,16 +7,17 @@
/**
* @param {string} basedir
* @param {string} lookup
+ * @param {string} [cwd]
* @return {string}
*/
-module.exports = function getModulePath(basedir, lookup) {
+module.exports = function getModulePath(basedir, lookup, cwd = process.cwd()) {
// 1. Try to resolve from the provided directory
- // 2. Try to resolve from `process.cwd`
+ // 2. Try to resolve from `cwd` or `process.cwd()`
// 3. Try to resolve from global `node_modules` directory
let path = resolveFrom.silent(basedir, lookup);
if (!path) {
- path = resolveFrom.silent(process.cwd(), lookup);
+ path = resolveFrom.silent(cwd, lookup);
}
if (!path) {
diff --git a/node_modules/stylelint/lib/utils/hasBlock.js b/node_modules/stylelint/lib/utils/hasBlock.js
index 0873ec3..09e3b1f 100644
--- a/node_modules/stylelint/lib/utils/hasBlock.js
+++ b/node_modules/stylelint/lib/utils/hasBlock.js
@@ -3,9 +3,9 @@
/**
* Check if a statement has an block (empty or otherwise).
*
- * @param {import('postcss').Rule | import('postcss').AtRule} statement - postcss rule or at-rule node
+ * @param {import('postcss').Container} statement
* @return {boolean} True if `statement` has a block (empty or otherwise)
*/
-module.exports = function (statement) {
+module.exports = function hasBlock(statement) {
return statement.nodes !== undefined;
};
diff --git a/node_modules/stylelint/lib/utils/isStandardSyntaxColorFunction.js b/node_modules/stylelint/lib/utils/isStandardSyntaxColorFunction.js
new file mode 100644
index 0000000..734b208
--- /dev/null
+++ b/node_modules/stylelint/lib/utils/isStandardSyntaxColorFunction.js
@@ -0,0 +1,23 @@
+'use strict';
+
+const isStandardSyntaxFunction = require('./isStandardSyntaxFunction');
+
+/**
+ * Check whether a function is standard syntax color function
+ *
+ * @param {import('postcss-value-parser').FunctionNode} node
+ * @returns {boolean}
+ */
+module.exports = function isStandardSyntaxColorFunction(node) {
+ if (!isStandardSyntaxFunction(node)) return false;
+
+ // scss can accept a #hex, or $var variables and we need to check all nested fn nodes
+ for (const fnNode of node.nodes) {
+ if (fnNode.type === 'function') return isStandardSyntaxColorFunction(fnNode);
+
+ if (fnNode.type === 'word' && (fnNode.value.startsWith('#') || fnNode.value.startsWith('$')))
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/stylelint/lib/utils/isStandardSyntaxDeclaration.js b/node_modules/stylelint/lib/utils/isStandardSyntaxDeclaration.js
index 89894bd..d8291be 100644
--- a/node_modules/stylelint/lib/utils/isStandardSyntaxDeclaration.js
+++ b/node_modules/stylelint/lib/utils/isStandardSyntaxDeclaration.js
@@ -18,7 +18,6 @@
module.exports = function (decl) {
const prop = decl.prop;
const parent = decl.parent;
- const value = decl.value;
// Declarations belong in a declaration block or standard CSS source
if (
@@ -32,16 +31,11 @@
return false;
}
- // SCSS var
+ // SCSS var; covers map and list declarations
if (isScssVariable(prop)) {
return false;
}
- // SCSS map and list declarations
- if (value.startsWith('(') && value.endsWith(')')) {
- return false;
- }
-
// Less var (e.g. @var: x), but exclude variable interpolation (e.g. @{var})
if (prop[0] === '@' && prop[1] !== '{') {
return false;
@@ -52,6 +46,17 @@
return false;
}
+ // Less map (e.g. #my-map() { myprop: red; })
+ if (
+ parent &&
+ isRule(parent) &&
+ parent.selector &&
+ parent.selector.startsWith('#') &&
+ parent.selector.endsWith('()')
+ ) {
+ return false;
+ }
+
// Sass nested properties (e.g. border: { style: solid; color: red; })
if (
parent &&
diff --git a/node_modules/stylelint/lib/utils/isStandardSyntaxHexColor.js b/node_modules/stylelint/lib/utils/isStandardSyntaxHexColor.js
new file mode 100644
index 0000000..71a7581
--- /dev/null
+++ b/node_modules/stylelint/lib/utils/isStandardSyntaxHexColor.js
@@ -0,0 +1,16 @@
+'use strict';
+
+/**
+ * Check whether a hex color is standard
+ *
+ * @param {string} hex
+ * @returns {boolean}
+ */
+module.exports = function isStandardSyntaxHexColor(hex) {
+ // Less map usage (e.g. .myclass { color: #colors[somecolor]; })
+ if (hex.includes('[')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/stylelint/lib/utils/typeGuards.js b/node_modules/stylelint/lib/utils/typeGuards.js
index 7f41b2b..2bf6a46 100644
--- a/node_modules/stylelint/lib/utils/typeGuards.js
+++ b/node_modules/stylelint/lib/utils/typeGuards.js
@@ -44,6 +44,14 @@
};
/**
+ * @param {import('postcss-value-parser').Node} node
+ * @returns {node is import('postcss-value-parser').FunctionNode}
+ */
+module.exports.isValueFunction = function isValueFunction(node) {
+ return node.type === 'function';
+};
+
+/**
* @param {Node} node
* @returns {node is (Node & {source: NodeSource})}
*/
diff --git a/node_modules/stylelint/lib/utils/validateOptions.js b/node_modules/stylelint/lib/utils/validateOptions.js
index 12cc139..f94a274 100644
--- a/node_modules/stylelint/lib/utils/validateOptions.js
+++ b/node_modules/stylelint/lib/utils/validateOptions.js
@@ -32,9 +32,9 @@
function validateOptions(result, ruleName, ...optionDescriptions) {
let noErrors = true;
- optionDescriptions.forEach((optionDescription) => {
+ for (const optionDescription of optionDescriptions) {
validate(optionDescription, ruleName, complain);
- });
+ }
/**
* @param {string} message
diff --git a/node_modules/stylelint/lib/writeOutputFile.js b/node_modules/stylelint/lib/writeOutputFile.js
index a495f45..40590d7 100644
--- a/node_modules/stylelint/lib/writeOutputFile.js
+++ b/node_modules/stylelint/lib/writeOutputFile.js
@@ -1,6 +1,7 @@
'use strict';
const path = require('path');
+const { mkdir } = require('fs').promises;
const stripAnsi = require('strip-ansi');
const writeFileAtomic = require('write-file-atomic');
@@ -10,4 +11,6 @@
* @returns {Promise<void>}
*/
module.exports = (content, filePath) =>
- writeFileAtomic(path.normalize(filePath), stripAnsi(content));
+ mkdir(path.dirname(filePath), { recursive: true }).then(() =>
+ writeFileAtomic(path.normalize(filePath), stripAnsi(content)),
+ );
diff --git a/node_modules/stylelint/package.json b/node_modules/stylelint/package.json
index efa57d2..5877174 100644
--- a/node_modules/stylelint/package.json
+++ b/node_modules/stylelint/package.json
@@ -1,6 +1,6 @@
{
"name": "stylelint",
- "version": "14.0.1",
+ "version": "14.2.0",
"description": "A mighty, modern CSS linter.",
"keywords": [
"css-in-js",
@@ -35,7 +35,7 @@
"types/stylelint/index.d.ts"
],
"scripts": {
- "benchmark-rule": "node scripts/benchmark-rule.js",
+ "benchmark-rule": "node scripts/benchmark-rule.mjs",
"format": "prettier . --write",
"jest": "jest",
"lint": "npm-run-all --parallel --continue-on-error lint:*",
@@ -76,7 +76,7 @@
"collectCoverage": false,
"collectCoverageFrom": [
"lib/**/*.js",
- "!lib/vendor/**/*.js"
+ "!lib/**/{__tests__,testUtils}/**/*.js"
],
"coverageDirectory": "./.coverage/",
"coverageReporters": [
@@ -109,8 +109,9 @@
},
"dependencies": {
"balanced-match": "^2.0.0",
+ "colord": "^2.9.2",
"cosmiconfig": "^7.0.1",
- "debug": "^4.3.2",
+ "debug": "^4.3.3",
"execall": "^2.0.0",
"fast-glob": "^3.2.7",
"fastest-levenshtein": "^1.0.12",
@@ -120,11 +121,11 @@
"globby": "^11.0.4",
"globjoin": "^0.1.4",
"html-tags": "^3.1.0",
- "ignore": "^5.1.8",
+ "ignore": "^5.2.0",
"import-lazy": "^4.0.0",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.23.0",
+ "known-css-properties": "^0.24.0",
"mathml-tag-names": "^2.1.3",
"meow": "^9.0.0",
"micromatch": "^4.0.4",
@@ -135,7 +136,7 @@
"postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.0.6",
+ "postcss-selector-parser": "^6.0.7",
"postcss-value-parser": "^4.1.0",
"resolve-from": "^5.0.0",
"specificity": "^0.4.1",
@@ -143,7 +144,7 @@
"strip-ansi": "^6.0.1",
"style-search": "^0.1.0",
"svg-tags": "^1.0.0",
- "table": "^6.7.2",
+ "table": "^6.7.5",
"v8-compile-cache": "^2.3.0",
"write-file-atomic": "^3.0.3"
},
@@ -164,26 +165,28 @@
"@types/svg-tags": "^1.0.0",
"@types/write-file-atomic": "^3.0.2",
"benchmark": "^2.1.4",
- "common-tags": "^1.8.0",
+ "common-tags": "^1.8.2",
"deepmerge": "^4.2.2",
- "eslint": "^7.32.0",
- "eslint-config-stylelint": "^14.0.0",
- "got": "^11.8.2",
+ "eslint": "^8.5.0",
+ "eslint-config-stylelint": "^15.0.0",
+ "eslint-plugin-jest": "^25.3.0",
"husky": "^7.0.4",
- "jest": "^27.3.1",
- "jest-preset-stylelint": "^4.1.1",
+ "jest": "^27.4.5",
+ "jest-preset-stylelint": "^4.2.0",
"jest-watch-typeahead": "^1.0.0",
- "lint-staged": "^11.2.4",
- "np": "^7.5.0",
+ "lint-staged": "^12.1.3",
+ "node-fetch": "^3.1.0",
+ "np": "^7.6.0",
"npm-run-all": "^4.1.5",
+ "postcss-html": "^1.2.0",
"postcss-import": "^14.0.2",
"postcss-less": "^5.0.0",
"postcss-sass": "^0.5.0",
- "postcss-scss": "^4.0.1",
- "prettier": "2.4.1",
- "remark-cli": "^10.0.0",
+ "postcss-scss": "^4.0.2",
+ "prettier": "2.5.1",
+ "remark-cli": "^10.0.1",
"sugarss": "^4.0.1",
- "typescript": "^4.4.4"
+ "typescript": "^4.5.4"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
diff --git a/node_modules/stylelint/types/stylelint/index.d.ts b/node_modules/stylelint/types/stylelint/index.d.ts
index d2914c1..b762147 100644
--- a/node_modules/stylelint/types/stylelint/index.d.ts
+++ b/node_modules/stylelint/types/stylelint/index.d.ts
@@ -30,6 +30,8 @@
};
export type DisableSettings = ConfigRuleSettings<boolean, DisableOptions>;
+ export type ResultProcessor = (result: LintResult, file: string | undefined) => LintResult;
+
export type Config = {
extends?: ConfigExtends;
plugins?: ConfigPlugins;
@@ -41,8 +43,8 @@
ignoreFiles?: ConfigIgnoreFiles;
ignorePatterns?: string;
rules?: ConfigRules;
- codeProcessors?: Function[];
- resultProcessors?: Function[];
+ codeProcessors?: CodeProcessor[];
+ resultProcessors?: ResultProcessor[];
quiet?: boolean;
defaultSeverity?: Severity;
ignoreDisables?: DisableSettings;
@@ -67,6 +69,8 @@
isEmpty?: boolean;
} | null;
+ export type ConfigurationError = Error & { code: 78 };
+
export type DisabledRange = {
comment: PostCSS.Comment;
start: number;
@@ -161,11 +165,13 @@
export type Plugin<P = any, S = any> = RuleBase<P, S>;
+ export type CodeProcessor = (code: string, file: string | undefined) => string;
+
export type GetPostcssOptions = {
code?: string;
codeFilename?: string;
filePath?: string;
- codeProcessors?: Function[];
+ codeProcessors?: CodeProcessor[];
syntax?: string;
customSyntax?: CustomSyntax;
};
@@ -184,6 +190,11 @@
config?: Config;
configFile?: string;
configBasedir?: string;
+ /**
+ * The working directory to resolve files from. Defaults to the
+ * current working directory.
+ */
+ cwd?: string;
ignoreDisables?: boolean;
ignorePath?: string;
ignorePattern?: string[];
@@ -261,6 +272,11 @@
};
export type LinterResult = {
+ /**
+ * The working directory from which the linter was run when the
+ * results were generated.
+ */
+ cwd: string;
results: LintResult[];
errored: boolean;
output: any;
@@ -308,6 +324,16 @@
* @internal
*/
createLinter: (options: LinterOptions) => InternalApi;
+ /**
+ * Resolves the effective configuation for a given file. Resolves to
+ * `undefined` if no config is found.
+ * @param filePath - The path to the file to get the config for.
+ * @param options - The options to use when creating the Stylelint instance.
+ */
+ resolveConfig: (
+ filePath: string,
+ options?: Pick<LinterOptions, 'cwd' | 'config' | 'configBasedir' | 'configFile'>,
+ ) => Promise<stylelint.Config | undefined>;
utils: {
/**
* Report a problem.
@@ -358,7 +384,7 @@
* @internal
*/
export type InternalApi = {
- _options: LinterOptions;
+ _options: LinterOptions & { cwd: string };
_extendExplorer: ReturnType<typeof cosmiconfig>;
_specifiedConfigCache: Map<Config, Promise<CosmiconfigResult>>;
_postcssResultCache: Map<string, PostCSS.Result>;
diff --git a/node_modules/table/README.md b/node_modules/table/README.md
index b96006e..a0f5147 100644
--- a/node_modules/table/README.md
+++ b/node_modules/table/README.md
@@ -3,7 +3,7 @@
> Produces a string that represents array data in a text table.
-[](https://travis-ci.org/gajus/table)
+[](https://github.com/gajus/table/actions)
[](https://coveralls.io/github/gajus/table)
[](https://www.npmjs.org/package/table)
[](https://github.com/gajus/canonical)
@@ -548,6 +548,8 @@
Header configuration.
+*Deprecated in favor of the new spanning cells API.*
+
The header configuration inherits the most of the column's, except:
- `content` **{string}**: the header content.
- `width:` calculate based on the content width automatically.
@@ -589,6 +591,82 @@
```
+<a name="table-api-table-1-config-spanningcells"></a>
+##### config.spanningCells
+
+Type: `SpanningCellConfig[]`
+
+Spanning cells configuration.
+
+The configuration should be straightforward: just specify an array of minimal cell configurations including the position of top-left cell
+and the number of columns and/or rows will be expanded from it.
+
+The content of overlap cells will be ignored to make the `data` shape be consistent.
+
+By default, the configuration of column that the top-left cell belongs to will be applied to the whole spanning cell, except:
+* The `width` will be summed up of all spanning columns.
+* The `paddingRight` will be received from the right-most column intentionally.
+
+Advances customized column-like styles can be configurable to each spanning cell to overwrite the default behavior.
+
+```js
+const data = [
+ ['Test Coverage Report', '', '', '', '', ''],
+ ['Module', 'Component', 'Test Cases', 'Failures', 'Durations', 'Success Rate'],
+ ['Services', 'User', '50', '30', '3m 7s', '60.0%'],
+ ['', 'Payment', '100', '80', '7m 15s', '80.0%'],
+ ['Subtotal', '', '150', '110', '10m 22s', '73.3%'],
+ ['Controllers', 'User', '24', '18', '1m 30s', '75.0%'],
+ ['', 'Payment', '30', '24', '50s', '80.0%'],
+ ['Subtotal', '', '54', '42', '2m 20s', '77.8%'],
+ ['Total', '', '204', '152', '12m 42s', '74.5%'],
+];
+
+const config = {
+ columns: [
+ { alignment: 'center', width: 12 },
+ { alignment: 'center', width: 10 },
+ { alignment: 'right' },
+ { alignment: 'right' },
+ { alignment: 'right' },
+ { alignment: 'right' }
+ ],
+ spanningCells: [
+ { col: 0, row: 0, colSpan: 6 },
+ { col: 0, row: 2, rowSpan: 2, verticalAlignment: 'middle'},
+ { col: 0, row: 4, colSpan: 2, alignment: 'right'},
+ { col: 0, row: 5, rowSpan: 2, verticalAlignment: 'middle'},
+ { col: 0, row: 7, colSpan: 2, alignment: 'right' },
+ { col: 0, row: 8, colSpan: 2, alignment: 'right' }
+ ],
+};
+
+console.log(table(data, config));
+```
+
+```
+╔══════════════════════════════════════════════════════════════════════════════╗
+║ Test Coverage Report ║
+╟──────────────┬────────────┬────────────┬──────────┬───────────┬──────────────╢
+║ Module │ Component │ Test Cases │ Failures │ Durations │ Success Rate ║
+╟──────────────┼────────────┼────────────┼──────────┼───────────┼──────────────╢
+║ │ User │ 50 │ 30 │ 3m 7s │ 60.0% ║
+║ Services ├────────────┼────────────┼──────────┼───────────┼──────────────╢
+║ │ Payment │ 100 │ 80 │ 7m 15s │ 80.0% ║
+╟──────────────┴────────────┼────────────┼──────────┼───────────┼──────────────╢
+║ Subtotal │ 150 │ 110 │ 10m 22s │ 73.3% ║
+╟──────────────┬────────────┼────────────┼──────────┼───────────┼──────────────╢
+║ │ User │ 24 │ 18 │ 1m 30s │ 75.0% ║
+║ Controllers ├────────────┼────────────┼──────────┼───────────┼──────────────╢
+║ │ Payment │ 30 │ 24 │ 50s │ 80.0% ║
+╟──────────────┴────────────┼────────────┼──────────┼───────────┼──────────────╢
+║ Subtotal │ 54 │ 42 │ 2m 20s │ 77.8% ║
+╟───────────────────────────┼────────────┼──────────┼───────────┼──────────────╢
+║ Total │ 204 │ 152 │ 12m 42s │ 74.5% ║
+╚═══════════════════════════╧════════════╧══════════╧═══════════╧══════════════╝
+```
+
+
<a name="table-api-createstream"></a>
### createStream
diff --git a/node_modules/table/dist/alignTableData.js b/node_modules/table/dist/alignTableData.js
deleted file mode 100644
index 5daa581..0000000
--- a/node_modules/table/dist/alignTableData.js
+++ /dev/null
@@ -1,13 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.alignTableData = void 0;
-const alignString_1 = require("./alignString");
-const alignTableData = (rows, config) => {
- return rows.map((row) => {
- return row.map((cell, cellIndex) => {
- const { width, alignment } = config.columns[cellIndex];
- return alignString_1.alignString(cell, width, alignment);
- });
- });
-};
-exports.alignTableData = alignTableData;
diff --git a/node_modules/table/dist/calculateCellWidths.d.ts b/node_modules/table/dist/calculateCellWidths.d.ts
deleted file mode 100644
index 677ca4e..0000000
--- a/node_modules/table/dist/calculateCellWidths.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import type { Cell } from './types/internal';
-/**
- * Calculates width of each cell contents in a row.
- */
-export declare const calculateCellWidths: (cells: Cell[]) => number[];
diff --git a/node_modules/table/dist/calculateCellWidths.js b/node_modules/table/dist/calculateCellWidths.js
deleted file mode 100644
index 684115d..0000000
--- a/node_modules/table/dist/calculateCellWidths.js
+++ /dev/null
@@ -1,16 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.calculateCellWidths = void 0;
-const string_width_1 = __importDefault(require("string-width"));
-/**
- * Calculates width of each cell contents in a row.
- */
-const calculateCellWidths = (cells) => {
- return cells.map((cell) => {
- return Math.max(...cell.split('\n').map(string_width_1.default));
- });
-};
-exports.calculateCellWidths = calculateCellWidths;
diff --git a/node_modules/table/dist/calculateColumnWidths.d.ts b/node_modules/table/dist/calculateColumnWidths.d.ts
deleted file mode 100644
index 7d0b006..0000000
--- a/node_modules/table/dist/calculateColumnWidths.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { Row } from './types/internal';
-declare const _default: (rows: Row[]) => number[];
-/**
- * Produces an array of values that describe the largest value length (width) in every column.
- */
-export default _default;
diff --git a/node_modules/table/dist/calculateColumnWidths.js b/node_modules/table/dist/calculateColumnWidths.js
deleted file mode 100644
index b4f80a3..0000000
--- a/node_modules/table/dist/calculateColumnWidths.js
+++ /dev/null
@@ -1,16 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const calculateCellWidths_1 = require("./calculateCellWidths");
-/**
- * Produces an array of values that describe the largest value length (width) in every column.
- */
-exports.default = (rows) => {
- const columnWidths = new Array(rows[0].length).fill(0);
- rows.forEach((row) => {
- const cellWidths = calculateCellWidths_1.calculateCellWidths(row);
- cellWidths.forEach((cellWidth, cellIndex) => {
- columnWidths[cellIndex] = Math.max(columnWidths[cellIndex], cellWidth);
- });
- });
- return columnWidths;
-};
diff --git a/node_modules/table/dist/calculateRowHeights.js b/node_modules/table/dist/calculateRowHeights.js
deleted file mode 100644
index d3411f8..0000000
--- a/node_modules/table/dist/calculateRowHeights.js
+++ /dev/null
@@ -1,18 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.calculateRowHeights = void 0;
-const calculateCellHeight_1 = require("./calculateCellHeight");
-/**
- * Produces an array of values that describe the largest value length (height) in every row.
- */
-const calculateRowHeights = (rows, config) => {
- return rows.map((row) => {
- let rowHeight = 1;
- row.forEach((cell, cellIndex) => {
- const cellHeight = calculateCellHeight_1.calculateCellHeight(cell, config.columns[cellIndex].width, config.columns[cellIndex].wrapWord);
- rowHeight = Math.max(rowHeight, cellHeight);
- });
- return rowHeight;
- });
-};
-exports.calculateRowHeights = calculateRowHeights;
diff --git a/node_modules/table/dist/drawBorder.d.ts b/node_modules/table/dist/drawBorder.d.ts
deleted file mode 100644
index 9ad5d28..0000000
--- a/node_modules/table/dist/drawBorder.d.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import type { DrawVerticalLine } from './types/api';
-import type { TableConfig, SeparatorGetter, TopBorderConfig, JoinBorderConfig, BottomBorderConfig } from './types/internal';
-declare type Separator = {
- readonly left: string;
- readonly right: string;
- readonly body: string;
- readonly join: string;
-};
-declare const drawBorder: (columnWidths: number[], config: {
- separator: Separator;
- drawVerticalLine: DrawVerticalLine;
-}) => string;
-declare const drawBorderTop: (columnWidths: number[], config: {
- border: TopBorderConfig;
- drawVerticalLine: DrawVerticalLine;
-}) => string;
-declare const drawBorderJoin: (columnWidths: number[], config: {
- border: JoinBorderConfig;
- drawVerticalLine: DrawVerticalLine;
-}) => string;
-declare const drawBorderBottom: (columnWidths: number[], config: {
- border: BottomBorderConfig;
- drawVerticalLine: DrawVerticalLine;
-}) => string;
-export declare const createTableBorderGetter: (columnWidths: number[], config: TableConfig) => SeparatorGetter;
-export { drawBorder, drawBorderBottom, drawBorderJoin, drawBorderTop, };
diff --git a/node_modules/table/dist/drawBorder.js b/node_modules/table/dist/drawBorder.js
deleted file mode 100644
index 1b158d9..0000000
--- a/node_modules/table/dist/drawBorder.js
+++ /dev/null
@@ -1,100 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.drawBorderTop = exports.drawBorderJoin = exports.drawBorderBottom = exports.drawBorder = exports.createTableBorderGetter = void 0;
-const drawContent_1 = require("./drawContent");
-const drawBorder = (columnWidths, config) => {
- const { separator, drawVerticalLine } = config;
- const columns = columnWidths.map((size) => {
- return config.separator.body.repeat(size);
- });
- return drawContent_1.drawContent(columns, {
- drawSeparator: drawVerticalLine,
- separatorGetter: (index, columnCount) => {
- if (index === 0) {
- return separator.left;
- }
- if (index === columnCount) {
- return separator.right;
- }
- return separator.join;
- },
- }) + '\n';
-};
-exports.drawBorder = drawBorder;
-const drawBorderTop = (columnWidths, config) => {
- const result = drawBorder(columnWidths, {
- ...config,
- separator: {
- body: config.border.topBody,
- join: config.border.topJoin,
- left: config.border.topLeft,
- right: config.border.topRight,
- },
- });
- if (result === '\n') {
- return '';
- }
- return result;
-};
-exports.drawBorderTop = drawBorderTop;
-const drawBorderJoin = (columnWidths, config) => {
- return drawBorder(columnWidths, {
- ...config,
- separator: {
- body: config.border.joinBody,
- join: config.border.joinJoin,
- left: config.border.joinLeft,
- right: config.border.joinRight,
- },
- });
-};
-exports.drawBorderJoin = drawBorderJoin;
-const drawBorderBottom = (columnWidths, config) => {
- return drawBorder(columnWidths, {
- ...config,
- separator: {
- body: config.border.bottomBody,
- join: config.border.bottomJoin,
- left: config.border.bottomLeft,
- right: config.border.bottomRight,
- },
- });
-};
-exports.drawBorderBottom = drawBorderBottom;
-const createTableBorderGetter = (columnWidths, config) => {
- return (index, size) => {
- if (!config.header) {
- if (index === 0) {
- return drawBorderTop(columnWidths, config);
- }
- if (index === size) {
- return drawBorderBottom(columnWidths, config);
- }
- return drawBorderJoin(columnWidths, config);
- }
- // Deal with the header
- if (index === 0) {
- return drawBorderTop(columnWidths, {
- ...config,
- border: {
- ...config.border,
- topJoin: config.border.topBody,
- },
- });
- }
- if (index === 1) {
- return drawBorderJoin(columnWidths, {
- ...config,
- border: {
- ...config.border,
- joinJoin: config.border.headerJoin,
- },
- });
- }
- if (index === size) {
- return drawBorderBottom(columnWidths, config);
- }
- return drawBorderJoin(columnWidths, config);
- };
-};
-exports.createTableBorderGetter = createTableBorderGetter;
diff --git a/node_modules/table/dist/drawContent.d.ts b/node_modules/table/dist/drawContent.d.ts
deleted file mode 100644
index 6785dfe..0000000
--- a/node_modules/table/dist/drawContent.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-declare type SeparatorConfig = {
- drawSeparator: (index: number, size: number) => boolean;
- separatorGetter: (index: number, size: number) => string;
-};
-/**
- * Shared function to draw horizontal borders, rows or the entire table
- */
-export declare const drawContent: (contents: string[], separatorConfig: SeparatorConfig) => string;
-export {};
diff --git a/node_modules/table/dist/drawContent.js b/node_modules/table/dist/drawContent.js
deleted file mode 100644
index ce084dc..0000000
--- a/node_modules/table/dist/drawContent.js
+++ /dev/null
@@ -1,26 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.drawContent = void 0;
-/**
- * Shared function to draw horizontal borders, rows or the entire table
- */
-const drawContent = (contents, separatorConfig) => {
- const { separatorGetter, drawSeparator } = separatorConfig;
- const contentSize = contents.length;
- const result = [];
- if (drawSeparator(0, contentSize)) {
- result.push(separatorGetter(0, contentSize));
- }
- contents.forEach((content, contentIndex) => {
- result.push(content);
- // Only append the middle separator if the content is not the last
- if (contentIndex + 1 < contentSize && drawSeparator(contentIndex + 1, contentSize)) {
- result.push(separatorGetter(contentIndex + 1, contentSize));
- }
- });
- if (drawSeparator(contentSize, contentSize)) {
- result.push(separatorGetter(contentSize, contentSize));
- }
- return result.join('');
-};
-exports.drawContent = drawContent;
diff --git a/node_modules/table/dist/drawHeader.d.ts b/node_modules/table/dist/drawHeader.d.ts
deleted file mode 100644
index 4407b38..0000000
--- a/node_modules/table/dist/drawHeader.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import type { TableConfig } from './types/internal';
-export declare const drawHeader: (width: number, config: TableConfig) => string;
diff --git a/node_modules/table/dist/drawHeader.js b/node_modules/table/dist/drawHeader.js
deleted file mode 100644
index 4ef46e9..0000000
--- a/node_modules/table/dist/drawHeader.js
+++ /dev/null
@@ -1,29 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.drawHeader = void 0;
-const alignString_1 = require("./alignString");
-const drawRow_1 = require("./drawRow");
-const padTableData_1 = require("./padTableData");
-const truncateTableData_1 = require("./truncateTableData");
-const wrapCell_1 = require("./wrapCell");
-const drawHeader = (width, config) => {
- if (!config.header) {
- throw new Error('Can not draw header without header configuration');
- }
- const { alignment, paddingRight, paddingLeft, wrapWord } = config.header;
- let content = config.header.content;
- content = truncateTableData_1.truncateString(content, config.header.truncate);
- const headerLines = wrapCell_1.wrapCell(content, width, wrapWord);
- return headerLines.map((headerLine) => {
- let line = alignString_1.alignString(headerLine, width, alignment);
- line = padTableData_1.padString(line, paddingLeft, paddingRight);
- return drawRow_1.drawRow([line], {
- ...config,
- drawVerticalLine: (index) => {
- const columnCount = config.columns.length;
- return config.drawVerticalLine(index === 0 ? 0 : columnCount, columnCount);
- },
- });
- }).join('');
-};
-exports.drawHeader = drawHeader;
diff --git a/node_modules/table/dist/drawRow.d.ts b/node_modules/table/dist/drawRow.d.ts
deleted file mode 100644
index 1a8e3ac..0000000
--- a/node_modules/table/dist/drawRow.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { DrawVerticalLine } from './types/api';
-import type { BodyBorderConfig, Row } from './types/internal';
-export declare const drawRow: (row: Row, config: {
- border: BodyBorderConfig;
- drawVerticalLine: DrawVerticalLine;
-}) => string;
diff --git a/node_modules/table/dist/drawTable.d.ts b/node_modules/table/dist/drawTable.d.ts
deleted file mode 100644
index 357d6fe..0000000
--- a/node_modules/table/dist/drawTable.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import type { TableConfig, Row } from './types/internal';
-export declare const drawTable: (rows: Row[], columnWidths: number[], rowHeights: number[], config: TableConfig) => string;
diff --git a/node_modules/table/dist/drawTable.js b/node_modules/table/dist/drawTable.js
deleted file mode 100644
index 60685dd..0000000
--- a/node_modules/table/dist/drawTable.js
+++ /dev/null
@@ -1,38 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.drawTable = void 0;
-const string_width_1 = __importDefault(require("string-width"));
-const drawBorder_1 = require("./drawBorder");
-const drawContent_1 = require("./drawContent");
-const drawHeader_1 = require("./drawHeader");
-const drawRow_1 = require("./drawRow");
-const utils_1 = require("./utils");
-const drawTable = (rows, columnWidths, rowHeights, config) => {
- const { drawHorizontalLine, singleLine, } = config;
- const contents = utils_1.groupBySizes(rows, rowHeights).map((group) => {
- return group.map((row) => {
- return drawRow_1.drawRow(row, config);
- }).join('');
- });
- if (config.header) {
- // assume that topLeft/right border have width = 1
- const headerWidth = string_width_1.default(drawRow_1.drawRow(rows[0], config)) - 2 -
- config.header.paddingLeft - config.header.paddingRight;
- const header = drawHeader_1.drawHeader(headerWidth, config);
- contents.unshift(header);
- }
- return drawContent_1.drawContent(contents, {
- drawSeparator: (index, size) => {
- // Top/bottom border
- if (index === 0 || index === size) {
- return drawHorizontalLine(index, size);
- }
- return !singleLine && drawHorizontalLine(index, size);
- },
- separatorGetter: drawBorder_1.createTableBorderGetter(columnWidths, config),
- });
-};
-exports.drawTable = drawTable;
diff --git a/node_modules/table/dist/makeTableConfig.d.ts b/node_modules/table/dist/makeTableConfig.d.ts
deleted file mode 100644
index fe5bd9f..0000000
--- a/node_modules/table/dist/makeTableConfig.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import type { TableUserConfig } from './types/api';
-import type { Row, TableConfig } from './types/internal';
-/**
- * Makes a new configuration object out of the userConfig object
- * using default values for the missing configuration properties.
- */
-export declare const makeTableConfig: (rows: Row[], userConfig?: TableUserConfig) => TableConfig;
diff --git a/node_modules/table/dist/makeTableConfig.js b/node_modules/table/dist/makeTableConfig.js
deleted file mode 100644
index e37dd75..0000000
--- a/node_modules/table/dist/makeTableConfig.js
+++ /dev/null
@@ -1,66 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.makeTableConfig = void 0;
-const lodash_clonedeep_1 = __importDefault(require("lodash.clonedeep"));
-const calculateColumnWidths_1 = __importDefault(require("./calculateColumnWidths"));
-const utils_1 = require("./utils");
-const validateConfig_1 = require("./validateConfig");
-/**
- * Creates a configuration for every column using default
- * values for the missing configuration properties.
- */
-const makeColumnsConfig = (rows, columns, columnDefault) => {
- const columnWidths = calculateColumnWidths_1.default(rows);
- return rows[0].map((_, columnIndex) => {
- return {
- alignment: 'left',
- paddingLeft: 1,
- paddingRight: 1,
- truncate: Number.POSITIVE_INFINITY,
- verticalAlignment: 'top',
- width: columnWidths[columnIndex],
- wrapWord: false,
- ...columnDefault,
- ...columns === null || columns === void 0 ? void 0 : columns[columnIndex],
- };
- });
-};
-const makeHeaderConfig = (config) => {
- if (!config.header) {
- return undefined;
- }
- return {
- alignment: 'center',
- paddingLeft: 1,
- paddingRight: 1,
- truncate: Number.POSITIVE_INFINITY,
- wrapWord: false,
- ...config.header,
- };
-};
-/**
- * Makes a new configuration object out of the userConfig object
- * using default values for the missing configuration properties.
- */
-const makeTableConfig = (rows, userConfig = {}) => {
- var _a, _b, _c;
- validateConfig_1.validateConfig('config.json', userConfig);
- const config = lodash_clonedeep_1.default(userConfig);
- return {
- ...config,
- border: utils_1.makeBorderConfig(config.border),
- columns: makeColumnsConfig(rows, config.columns, config.columnDefault),
- drawHorizontalLine: (_a = config.drawHorizontalLine) !== null && _a !== void 0 ? _a : (() => {
- return true;
- }),
- drawVerticalLine: (_b = config.drawVerticalLine) !== null && _b !== void 0 ? _b : (() => {
- return true;
- }),
- header: makeHeaderConfig(config),
- singleLine: (_c = config.singleLine) !== null && _c !== void 0 ? _c : false,
- };
-};
-exports.makeTableConfig = makeTableConfig;
diff --git a/node_modules/table/dist/mapDataUsingRowHeights.d.ts b/node_modules/table/dist/mapDataUsingRowHeights.d.ts
deleted file mode 100644
index 38c9bbb..0000000
--- a/node_modules/table/dist/mapDataUsingRowHeights.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import type { BaseConfig, Row } from './types/internal';
-export declare const mapDataUsingRowHeights: (unmappedRows: Row[], rowHeights: number[], config: BaseConfig) => Row[];
diff --git a/node_modules/table/dist/mapDataUsingRowHeights.js b/node_modules/table/dist/mapDataUsingRowHeights.js
deleted file mode 100644
index 5727681..0000000
--- a/node_modules/table/dist/mapDataUsingRowHeights.js
+++ /dev/null
@@ -1,44 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.mapDataUsingRowHeights = void 0;
-const wrapCell_1 = require("./wrapCell");
-const createEmptyStrings = (length) => {
- return new Array(length).fill('');
-};
-const padCellVertically = (lines, rowHeight, columnConfig) => {
- const { verticalAlignment } = columnConfig;
- const availableLines = rowHeight - lines.length;
- if (verticalAlignment === 'top') {
- return [...lines, ...createEmptyStrings(availableLines)];
- }
- if (verticalAlignment === 'bottom') {
- return [...createEmptyStrings(availableLines), ...lines];
- }
- return [
- ...createEmptyStrings(Math.floor(availableLines / 2)),
- ...lines,
- ...createEmptyStrings(Math.ceil(availableLines / 2)),
- ];
-};
-const flatten = (array) => {
- return [].concat(...array);
-};
-const mapDataUsingRowHeights = (unmappedRows, rowHeights, config) => {
- const tableWidth = unmappedRows[0].length;
- const mappedRows = unmappedRows.map((unmappedRow, unmappedRowIndex) => {
- const outputRowHeight = rowHeights[unmappedRowIndex];
- const outputRow = Array.from({ length: outputRowHeight }, () => {
- return new Array(tableWidth).fill('');
- });
- unmappedRow.forEach((cell, cellIndex) => {
- const cellLines = wrapCell_1.wrapCell(cell, config.columns[cellIndex].width, config.columns[cellIndex].wrapWord);
- const paddedCellLines = padCellVertically(cellLines, outputRowHeight, config.columns[cellIndex]);
- paddedCellLines.forEach((cellLine, cellLineIndex) => {
- outputRow[cellLineIndex][cellIndex] = cellLine;
- });
- });
- return outputRow;
- });
- return flatten(mappedRows);
-};
-exports.mapDataUsingRowHeights = mapDataUsingRowHeights;
diff --git a/node_modules/table/dist/padTableData.js b/node_modules/table/dist/padTableData.js
deleted file mode 100644
index c0016ab..0000000
--- a/node_modules/table/dist/padTableData.js
+++ /dev/null
@@ -1,16 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.padTableData = exports.padString = void 0;
-const padString = (input, paddingLeft, paddingRight) => {
- return ' '.repeat(paddingLeft) + input + ' '.repeat(paddingRight);
-};
-exports.padString = padString;
-const padTableData = (rows, config) => {
- return rows.map((cells) => {
- return cells.map((cell, cellIndex) => {
- const { paddingLeft, paddingRight } = config.columns[cellIndex];
- return exports.padString(cell, paddingLeft, paddingRight);
- });
- });
-};
-exports.padTableData = padTableData;
diff --git a/node_modules/table/dist/src/alignSpanningCell.d.ts b/node_modules/table/dist/src/alignSpanningCell.d.ts
new file mode 100644
index 0000000..a1b6e29
--- /dev/null
+++ b/node_modules/table/dist/src/alignSpanningCell.d.ts
@@ -0,0 +1,7 @@
+import type { SpanningCellContext } from './spanningCellManager';
+import type { RangeConfig } from './types/internal';
+/**
+ * Fill content into all cells in range in order to calculate total height
+ */
+export declare const wrapRangeContent: (rangeConfig: RangeConfig, rangeWidth: number, context: SpanningCellContext) => string[];
+export declare const alignVerticalRangeContent: (range: RangeConfig, content: string[], context: SpanningCellContext) => string[];
diff --git a/node_modules/table/dist/src/alignSpanningCell.js b/node_modules/table/dist/src/alignSpanningCell.js
new file mode 100644
index 0000000..09e0325
--- /dev/null
+++ b/node_modules/table/dist/src/alignSpanningCell.js
@@ -0,0 +1,44 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.alignVerticalRangeContent = exports.wrapRangeContent = void 0;
+const alignString_1 = require("./alignString");
+const mapDataUsingRowHeights_1 = require("./mapDataUsingRowHeights");
+const padTableData_1 = require("./padTableData");
+const truncateTableData_1 = require("./truncateTableData");
+const utils_1 = require("./utils");
+const wrapCell_1 = require("./wrapCell");
+/**
+ * Fill content into all cells in range in order to calculate total height
+ */
+const wrapRangeContent = (rangeConfig, rangeWidth, context) => {
+ const { topLeft, paddingRight, paddingLeft, truncate, wrapWord, alignment } = rangeConfig;
+ const originalContent = context.rows[topLeft.row][topLeft.col];
+ const contentWidth = rangeWidth - paddingLeft - paddingRight;
+ return (0, wrapCell_1.wrapCell)((0, truncateTableData_1.truncateString)(originalContent, truncate), contentWidth, wrapWord).map((line) => {
+ const alignedLine = (0, alignString_1.alignString)(line, contentWidth, alignment);
+ return (0, padTableData_1.padString)(alignedLine, paddingLeft, paddingRight);
+ });
+};
+exports.wrapRangeContent = wrapRangeContent;
+const alignVerticalRangeContent = (range, content, context) => {
+ const { rows, drawHorizontalLine, rowHeights } = context;
+ const { topLeft, bottomRight, verticalAlignment } = range;
+ // They are empty before calculateRowHeights function run
+ if (rowHeights.length === 0) {
+ return [];
+ }
+ const totalCellHeight = (0, utils_1.sumArray)(rowHeights.slice(topLeft.row, bottomRight.row + 1));
+ const totalBorderHeight = bottomRight.row - topLeft.row;
+ const hiddenHorizontalBorderCount = (0, utils_1.sequence)(topLeft.row + 1, bottomRight.row).filter((horizontalBorderIndex) => {
+ return !drawHorizontalLine(horizontalBorderIndex, rows.length);
+ }).length;
+ const availableRangeHeight = totalCellHeight + totalBorderHeight - hiddenHorizontalBorderCount;
+ return (0, mapDataUsingRowHeights_1.padCellVertically)(content, availableRangeHeight, verticalAlignment).map((line) => {
+ if (line.length === 0) {
+ return ' '.repeat(content[0].length);
+ }
+ return line;
+ });
+};
+exports.alignVerticalRangeContent = alignVerticalRangeContent;
+//# sourceMappingURL=alignSpanningCell.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/alignSpanningCell.js.map b/node_modules/table/dist/src/alignSpanningCell.js.map
new file mode 100644
index 0000000..dbbfaa4
--- /dev/null
+++ b/node_modules/table/dist/src/alignSpanningCell.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"alignSpanningCell.js","sourceRoot":"","sources":["../../src/alignSpanningCell.ts"],"names":[],"mappings":";;;AAAA,+CAEuB;AACvB,qEAEkC;AAClC,iDAEwB;AAIxB,2DAE6B;AAI7B,mCAEiB;AACjB,yCAEoB;AAEpB;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,WAAwB,EAAE,UAAkB,EAAE,OAA4B,EAAY,EAAE;IACvH,MAAM,EAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAC,GAAG,WAAW,CAAC;IAExF,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;IAE7D,OAAO,IAAA,mBAAQ,EAAC,IAAA,kCAAc,EAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9F,MAAM,WAAW,GAAG,IAAA,yBAAW,EAAC,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAE/D,OAAO,IAAA,wBAAS,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAXW,QAAA,gBAAgB,oBAW3B;AAEK,MAAM,yBAAyB,GAAG,CAAC,KAAkB,EAAE,OAAiB,EAAE,OAA4B,EAAE,EAAE;IAC/G,MAAM,EAAC,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAC,GAAG,OAAO,CAAC;IACvD,MAAM,EAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAC,GAAG,KAAK,CAAC;IAExD,yDAAyD;IACzD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,EAAE,CAAC;KACX;IAED,MAAM,eAAe,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxD,MAAM,2BAA2B,GAAG,IAAA,gBAAQ,EAAC,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,qBAAqB,EAAE,EAAE;QAC9G,OAAO,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC,MAAM,CAAC;IAEV,MAAM,oBAAoB,GAAG,eAAe,GAAG,iBAAiB,GAAG,2BAA2B,CAAC;IAE/F,OAAO,IAAA,0CAAiB,EAAC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SACtC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAxBW,QAAA,yBAAyB,6BAwBpC"}
\ No newline at end of file
diff --git a/node_modules/table/dist/alignString.d.ts b/node_modules/table/dist/src/alignString.d.ts
similarity index 100%
rename from node_modules/table/dist/alignString.d.ts
rename to node_modules/table/dist/src/alignString.d.ts
diff --git a/node_modules/table/dist/alignString.js b/node_modules/table/dist/src/alignString.js
similarity index 88%
rename from node_modules/table/dist/alignString.js
rename to node_modules/table/dist/src/alignString.js
index 61dc552..a15231a 100644
--- a/node_modules/table/dist/alignString.js
+++ b/node_modules/table/dist/src/alignString.js
@@ -16,11 +16,11 @@
return ' '.repeat(Math.floor(width / 2)) + subject + ' '.repeat(Math.ceil(width / 2));
};
const alignJustify = (subject, width) => {
- const spaceSequenceCount = utils_1.countSpaceSequence(subject);
+ const spaceSequenceCount = (0, utils_1.countSpaceSequence)(subject);
if (spaceSequenceCount === 0) {
return alignLeft(subject, width);
}
- const addingSpaces = utils_1.distributeUnevenly(width, spaceSequenceCount);
+ const addingSpaces = (0, utils_1.distributeUnevenly)(width, spaceSequenceCount);
if (Math.max(...addingSpaces) > 3) {
return alignLeft(subject, width);
}
@@ -34,7 +34,7 @@
* text in a desired alignment within a container.
*/
const alignString = (subject, containerWidth, alignment) => {
- const subjectWidth = string_width_1.default(subject);
+ const subjectWidth = (0, string_width_1.default)(subject);
if (subjectWidth === containerWidth) {
return subject;
}
@@ -57,3 +57,4 @@
return alignCenter(subject, availableWidth);
};
exports.alignString = alignString;
+//# sourceMappingURL=alignString.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/alignString.js.map b/node_modules/table/dist/src/alignString.js.map
new file mode 100644
index 0000000..8324952
--- /dev/null
+++ b/node_modules/table/dist/src/alignString.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"alignString.js","sourceRoot":"","sources":["../../src/alignString.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAuC;AAIvC,mCAEiB;AAEjB,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,KAAa,EAAU,EAAE;IAC3D,OAAO,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,KAAa,EAAU,EAAE;IAC5D,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,KAAa,EAAU,EAAE;IAC7D,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,KAAa,EAAU,EAAE;IAC9D,MAAM,kBAAkB,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;IAEvD,IAAI,kBAAkB,KAAK,CAAC,EAAE;QAC5B,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KAClC;IAED,MAAM,YAAY,GAAG,IAAA,0BAAkB,EAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAEnE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE;QACjC,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KAClC;IAED,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAE3B,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE;QAC5C,OAAO,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,cAAsB,EAAE,SAAoB,EAAU,EAAE;IACnG,MAAM,YAAY,GAAG,IAAA,sBAAW,EAAC,OAAO,CAAC,CAAC;IAE1C,IAAI,YAAY,KAAK,cAAc,EAAE;QACnC,OAAO,OAAO,CAAC;KAChB;IAED,IAAI,YAAY,GAAG,cAAc,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;KAC9F;IAED,IAAI,YAAY,KAAK,CAAC,EAAE;QACtB,OAAO,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;KACnC;IAED,MAAM,cAAc,GAAG,cAAc,GAAG,YAAY,CAAC;IAErD,IAAI,SAAS,KAAK,MAAM,EAAE;QACxB,OAAO,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;KAC3C;IAED,IAAI,SAAS,KAAK,OAAO,EAAE;QACzB,OAAO,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;KAC5C;IAED,IAAI,SAAS,KAAK,SAAS,EAAE;QAC3B,OAAO,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;KAC9C;IAED,OAAO,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC9C,CAAC,CAAC;AA9BW,QAAA,WAAW,eA8BtB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/alignTableData.d.ts b/node_modules/table/dist/src/alignTableData.d.ts
similarity index 100%
rename from node_modules/table/dist/alignTableData.d.ts
rename to node_modules/table/dist/src/alignTableData.d.ts
diff --git a/node_modules/table/dist/src/alignTableData.js b/node_modules/table/dist/src/alignTableData.js
new file mode 100644
index 0000000..942cb3b
--- /dev/null
+++ b/node_modules/table/dist/src/alignTableData.js
@@ -0,0 +1,20 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.alignTableData = void 0;
+const alignString_1 = require("./alignString");
+const alignTableData = (rows, config) => {
+ return rows.map((row, rowIndex) => {
+ return row.map((cell, cellIndex) => {
+ var _a;
+ const { width, alignment } = config.columns[cellIndex];
+ const containingRange = (_a = config.spanningCellManager) === null || _a === void 0 ? void 0 : _a.getContainingRange({ col: cellIndex,
+ row: rowIndex }, { mapped: true });
+ if (containingRange) {
+ return cell;
+ }
+ return (0, alignString_1.alignString)(cell, width, alignment);
+ });
+ });
+};
+exports.alignTableData = alignTableData;
+//# sourceMappingURL=alignTableData.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/alignTableData.js.map b/node_modules/table/dist/src/alignTableData.js.map
new file mode 100644
index 0000000..c7a9ba3
--- /dev/null
+++ b/node_modules/table/dist/src/alignTableData.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"alignTableData.js","sourceRoot":"","sources":["../../src/alignTableData.ts"],"names":[],"mappings":";;;AAAA,+CAEuB;AAMhB,MAAM,cAAc,GAAG,CAAC,IAAW,EAAE,MAAkB,EAAS,EAAE;IACvE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAChC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;;YACjC,MAAM,EAAC,KAAK,EAAE,SAAS,EAAC,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAErD,MAAM,eAAe,GAAG,MAAA,MAAM,CAAC,mBAAmB,0CAAE,kBAAkB,CAAC,EAAC,GAAG,EAAE,SAAS;gBACpF,GAAG,EAAE,QAAQ,EAAC,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;YAClC,IAAI,eAAe,EAAE;gBACnB,OAAO,IAAI,CAAC;aACb;YAED,OAAO,IAAA,yBAAW,EAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,cAAc,kBAczB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/calculateCellHeight.d.ts b/node_modules/table/dist/src/calculateCellHeight.d.ts
similarity index 100%
rename from node_modules/table/dist/calculateCellHeight.d.ts
rename to node_modules/table/dist/src/calculateCellHeight.d.ts
diff --git a/node_modules/table/dist/calculateCellHeight.js b/node_modules/table/dist/src/calculateCellHeight.js
similarity index 75%
rename from node_modules/table/dist/calculateCellHeight.js
rename to node_modules/table/dist/src/calculateCellHeight.js
index 372943a..010c41f 100644
--- a/node_modules/table/dist/calculateCellHeight.js
+++ b/node_modules/table/dist/src/calculateCellHeight.js
@@ -6,6 +6,7 @@
* Calculates height of cell content in regard to its width and word wrapping.
*/
const calculateCellHeight = (value, columnWidth, useWrapWord = false) => {
- return wrapCell_1.wrapCell(value, columnWidth, useWrapWord).length;
+ return (0, wrapCell_1.wrapCell)(value, columnWidth, useWrapWord).length;
};
exports.calculateCellHeight = calculateCellHeight;
+//# sourceMappingURL=calculateCellHeight.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/calculateCellHeight.js.map b/node_modules/table/dist/src/calculateCellHeight.js.map
new file mode 100644
index 0000000..61af121
--- /dev/null
+++ b/node_modules/table/dist/src/calculateCellHeight.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"calculateCellHeight.js","sourceRoot":"","sources":["../../src/calculateCellHeight.ts"],"names":[],"mappings":";;;AAAA,yCAEoB;AAEpB;;GAEG;AACI,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,WAAmB,EAAE,WAAW,GAAG,KAAK,EAAU,EAAE;IACrG,OAAO,IAAA,mBAAQ,EAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC,CAAC;AAFW,QAAA,mBAAmB,uBAE9B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/calculateMaximumColumnWidths.d.ts b/node_modules/table/dist/src/calculateMaximumColumnWidths.d.ts
new file mode 100644
index 0000000..d1de524
--- /dev/null
+++ b/node_modules/table/dist/src/calculateMaximumColumnWidths.d.ts
@@ -0,0 +1,7 @@
+import type { SpanningCellConfig } from './types/api';
+import type { Row, Cell } from './types/internal';
+export declare const calculateMaximumCellWidth: (cell: Cell) => number;
+/**
+ * Produces an array of values that describe the largest value length (width) in every column.
+ */
+export declare const calculateMaximumColumnWidths: (rows: Row[], spanningCellConfigs?: SpanningCellConfig[]) => number[];
diff --git a/node_modules/table/dist/src/calculateMaximumColumnWidths.js b/node_modules/table/dist/src/calculateMaximumColumnWidths.js
new file mode 100644
index 0000000..5b677ed
--- /dev/null
+++ b/node_modules/table/dist/src/calculateMaximumColumnWidths.js
@@ -0,0 +1,36 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.calculateMaximumColumnWidths = exports.calculateMaximumCellWidth = void 0;
+const string_width_1 = __importDefault(require("string-width"));
+const utils_1 = require("./utils");
+const calculateMaximumCellWidth = (cell) => {
+ return Math.max(...cell.split('\n').map(string_width_1.default));
+};
+exports.calculateMaximumCellWidth = calculateMaximumCellWidth;
+/**
+ * Produces an array of values that describe the largest value length (width) in every column.
+ */
+const calculateMaximumColumnWidths = (rows, spanningCellConfigs = []) => {
+ const columnWidths = new Array(rows[0].length).fill(0);
+ const rangeCoordinates = spanningCellConfigs.map(utils_1.calculateRangeCoordinate);
+ const isSpanningCell = (rowIndex, columnIndex) => {
+ return rangeCoordinates.some((rangeCoordinate) => {
+ return (0, utils_1.isCellInRange)({ col: columnIndex,
+ row: rowIndex }, rangeCoordinate);
+ });
+ };
+ rows.forEach((row, rowIndex) => {
+ row.forEach((cell, cellIndex) => {
+ if (isSpanningCell(rowIndex, cellIndex)) {
+ return;
+ }
+ columnWidths[cellIndex] = Math.max(columnWidths[cellIndex], (0, exports.calculateMaximumCellWidth)(cell));
+ });
+ });
+ return columnWidths;
+};
+exports.calculateMaximumColumnWidths = calculateMaximumColumnWidths;
+//# sourceMappingURL=calculateMaximumColumnWidths.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/calculateMaximumColumnWidths.js.map b/node_modules/table/dist/src/calculateMaximumColumnWidths.js.map
new file mode 100644
index 0000000..5cb01fc
--- /dev/null
+++ b/node_modules/table/dist/src/calculateMaximumColumnWidths.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"calculateMaximumColumnWidths.js","sourceRoot":"","sources":["../../src/calculateMaximumColumnWidths.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAuC;AAQvC,mCAEiB;AAEV,MAAM,yBAAyB,GAAG,CAAC,IAAU,EAAU,EAAE;IAC9D,OAAO,IAAI,CAAC,GAAG,CACb,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,sBAAW,CAAC,CACrC,CAAC;AACJ,CAAC,CAAC;AAJW,QAAA,yBAAyB,6BAIpC;AAEF;;GAEG;AACI,MAAM,4BAA4B,GAAG,CAAC,IAAW,EAAE,sBAA4C,EAAE,EAAY,EAAE;IACpH,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,GAAG,CAAC,gCAAwB,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,WAAmB,EAAW,EAAE;QACxE,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,EAAE;YAC/C,OAAO,IAAA,qBAAa,EAAC,EAAC,GAAG,EAAE,WAAW;gBACpC,GAAG,EAAE,QAAQ,EAAC,EAAE,eAAe,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAC7B,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;gBACvC,OAAO;aACR;YACD,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,IAAA,iCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AApBW,QAAA,4BAA4B,gCAoBvC"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/calculateOutputColumnWidths.d.ts b/node_modules/table/dist/src/calculateOutputColumnWidths.d.ts
new file mode 100644
index 0000000..f16bb54
--- /dev/null
+++ b/node_modules/table/dist/src/calculateOutputColumnWidths.d.ts
@@ -0,0 +1,2 @@
+import type { TableConfig } from './types/internal';
+export declare const calculateOutputColumnWidths: (config: TableConfig) => number[];
diff --git a/node_modules/table/dist/src/calculateOutputColumnWidths.js b/node_modules/table/dist/src/calculateOutputColumnWidths.js
new file mode 100644
index 0000000..7a41929
--- /dev/null
+++ b/node_modules/table/dist/src/calculateOutputColumnWidths.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.calculateOutputColumnWidths = void 0;
+const calculateOutputColumnWidths = (config) => {
+ return config.columns.map((col) => {
+ return col.paddingLeft + col.width + col.paddingRight;
+ });
+};
+exports.calculateOutputColumnWidths = calculateOutputColumnWidths;
+//# sourceMappingURL=calculateOutputColumnWidths.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/calculateOutputColumnWidths.js.map b/node_modules/table/dist/src/calculateOutputColumnWidths.js.map
new file mode 100644
index 0000000..dafe774
--- /dev/null
+++ b/node_modules/table/dist/src/calculateOutputColumnWidths.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"calculateOutputColumnWidths.js","sourceRoot":"","sources":["../../src/calculateOutputColumnWidths.ts"],"names":[],"mappings":";;;AAIO,MAAM,2BAA2B,GAAG,CAAC,MAAmB,EAAY,EAAE;IAC3E,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAChC,OAAO,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAJW,QAAA,2BAA2B,+BAItC"}
\ No newline at end of file
diff --git a/node_modules/table/dist/calculateRowHeights.d.ts b/node_modules/table/dist/src/calculateRowHeights.d.ts
similarity index 100%
rename from node_modules/table/dist/calculateRowHeights.d.ts
rename to node_modules/table/dist/src/calculateRowHeights.d.ts
diff --git a/node_modules/table/dist/src/calculateRowHeights.js b/node_modules/table/dist/src/calculateRowHeights.js
new file mode 100644
index 0000000..72ec05a
--- /dev/null
+++ b/node_modules/table/dist/src/calculateRowHeights.js
@@ -0,0 +1,42 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.calculateRowHeights = void 0;
+const calculateCellHeight_1 = require("./calculateCellHeight");
+const utils_1 = require("./utils");
+/**
+ * Produces an array of values that describe the largest value length (height) in every row.
+ */
+const calculateRowHeights = (rows, config) => {
+ const rowHeights = [];
+ for (const [rowIndex, row] of rows.entries()) {
+ let rowHeight = 1;
+ row.forEach((cell, cellIndex) => {
+ var _a;
+ const containingRange = (_a = config.spanningCellManager) === null || _a === void 0 ? void 0 : _a.getContainingRange({ col: cellIndex,
+ row: rowIndex });
+ if (!containingRange) {
+ const cellHeight = (0, calculateCellHeight_1.calculateCellHeight)(cell, config.columns[cellIndex].width, config.columns[cellIndex].wrapWord);
+ rowHeight = Math.max(rowHeight, cellHeight);
+ return;
+ }
+ const { topLeft, bottomRight, height } = containingRange;
+ // bottom-most cell of a range needs to contain all remain lines of spanning cells
+ if (rowIndex === bottomRight.row) {
+ const totalOccupiedSpanningCellHeight = (0, utils_1.sumArray)(rowHeights.slice(topLeft.row));
+ const totalHorizontalBorderHeight = bottomRight.row - topLeft.row;
+ const totalHiddenHorizontalBorderHeight = (0, utils_1.sequence)(topLeft.row + 1, bottomRight.row).filter((horizontalBorderIndex) => {
+ var _a;
+ /* istanbul ignore next */
+ return !((_a = config.drawHorizontalLine) === null || _a === void 0 ? void 0 : _a.call(config, horizontalBorderIndex, rows.length));
+ }).length;
+ const cellHeight = height - totalOccupiedSpanningCellHeight - totalHorizontalBorderHeight + totalHiddenHorizontalBorderHeight;
+ rowHeight = Math.max(rowHeight, cellHeight);
+ }
+ // otherwise, just depend on other sibling cell heights in the row
+ });
+ rowHeights.push(rowHeight);
+ }
+ return rowHeights;
+};
+exports.calculateRowHeights = calculateRowHeights;
+//# sourceMappingURL=calculateRowHeights.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/calculateRowHeights.js.map b/node_modules/table/dist/src/calculateRowHeights.js.map
new file mode 100644
index 0000000..1a7a2d9
--- /dev/null
+++ b/node_modules/table/dist/src/calculateRowHeights.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"calculateRowHeights.js","sourceRoot":"","sources":["../../src/calculateRowHeights.ts"],"names":[],"mappings":";;;AAAA,+DAE+B;AAK/B,mCAGiB;AAEjB;;GAEG;AACI,MAAM,mBAAmB,GAAG,CAAC,IAAW,EAAE,MAAkB,EAAY,EAAE;IAC/E,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;;YAC9B,MAAM,eAAe,GAAG,MAAA,MAAM,CAAC,mBAAmB,0CAAE,kBAAkB,CAAC,EAAC,GAAG,EAAE,SAAS;gBACpF,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAC;YAElB,IAAI,CAAC,eAAe,EAAE;gBACpB,MAAM,UAAU,GAAG,IAAA,yCAAmB,EAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAClH,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBAE5C,OAAO;aACR;YACD,MAAM,EAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAC,GAAG,eAAe,CAAC;YAEvD,kFAAkF;YAClF,IAAI,QAAQ,KAAK,WAAW,CAAC,GAAG,EAAE;gBAChC,MAAM,+BAA+B,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChF,MAAM,2BAA2B,GAAG,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;gBAClE,MAAM,iCAAiC,GAAG,IAAA,gBAAQ,EAAC,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,qBAAqB,EAAE,EAAE;;oBACpH,0BAA0B;oBAC1B,OAAO,CAAC,CAAA,MAAA,MAAM,CAAC,kBAAkB,+CAAzB,MAAM,EAAsB,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC;gBAC1E,CAAC,CAAC,CAAC,MAAM,CAAC;gBAEV,MAAM,UAAU,GAAG,MAAM,GAAG,+BAA+B,GAAG,2BAA2B,GAAG,iCAAiC,CAAC;gBAC9H,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;aAC7C;YAED,kEAAkE;QACpE,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC5B;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAtCW,QAAA,mBAAmB,uBAsC9B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/calculateSpanningCellWidth.d.ts b/node_modules/table/dist/src/calculateSpanningCellWidth.d.ts
new file mode 100644
index 0000000..8a2820d
--- /dev/null
+++ b/node_modules/table/dist/src/calculateSpanningCellWidth.d.ts
@@ -0,0 +1,3 @@
+import type { SpanningCellParameters } from './spanningCellManager';
+import type { RangeConfig } from './types/internal';
+export declare const calculateSpanningCellWidth: (rangeConfig: RangeConfig, dependencies: SpanningCellParameters) => number;
diff --git a/node_modules/table/dist/src/calculateSpanningCellWidth.js b/node_modules/table/dist/src/calculateSpanningCellWidth.js
new file mode 100644
index 0000000..fc8866c
--- /dev/null
+++ b/node_modules/table/dist/src/calculateSpanningCellWidth.js
@@ -0,0 +1,26 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.calculateSpanningCellWidth = void 0;
+const utils_1 = require("./utils");
+const calculateSpanningCellWidth = (rangeConfig, dependencies) => {
+ const { columnsConfig, drawVerticalLine } = dependencies;
+ const { topLeft, bottomRight } = rangeConfig;
+ const totalWidth = (0, utils_1.sumArray)(columnsConfig.slice(topLeft.col, bottomRight.col + 1).map(({ width }) => {
+ return width;
+ }));
+ const totalPadding = topLeft.col === bottomRight.col ?
+ columnsConfig[topLeft.col].paddingRight +
+ columnsConfig[bottomRight.col].paddingLeft :
+ (0, utils_1.sumArray)(columnsConfig
+ .slice(topLeft.col, bottomRight.col + 1)
+ .map(({ paddingLeft, paddingRight }) => {
+ return paddingLeft + paddingRight;
+ }));
+ const totalBorderWidths = bottomRight.col - topLeft.col;
+ const totalHiddenVerticalBorders = (0, utils_1.sequence)(topLeft.col + 1, bottomRight.col).filter((verticalBorderIndex) => {
+ return !drawVerticalLine(verticalBorderIndex, columnsConfig.length);
+ }).length;
+ return totalWidth + totalPadding + totalBorderWidths - totalHiddenVerticalBorders;
+};
+exports.calculateSpanningCellWidth = calculateSpanningCellWidth;
+//# sourceMappingURL=calculateSpanningCellWidth.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/calculateSpanningCellWidth.js.map b/node_modules/table/dist/src/calculateSpanningCellWidth.js.map
new file mode 100644
index 0000000..b0de977
--- /dev/null
+++ b/node_modules/table/dist/src/calculateSpanningCellWidth.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"calculateSpanningCellWidth.js","sourceRoot":"","sources":["../../src/calculateSpanningCellWidth.ts"],"names":[],"mappings":";;;AAMA,mCAEiB;AAEV,MAAM,0BAA0B,GAAG,CAAC,WAAwB,EAAE,YAAoC,EAAU,EAAE;IACnH,MAAM,EAAC,aAAa,EAAE,gBAAgB,EAAC,GAAG,YAAY,CAAC;IACvD,MAAM,EAAC,OAAO,EAAE,WAAW,EAAC,GAAG,WAAW,CAAC;IAE3C,MAAM,UAAU,GAAG,IAAA,gBAAQ,EACzB,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;QACpE,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY;YACvC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAA,gBAAQ,EACN,aAAa;aACV,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;aACvC,GAAG,CAAC,CAAC,EAAC,WAAW,EAAE,YAAY,EAAC,EAAE,EAAE;YACnC,OAAO,WAAW,GAAG,YAAY,CAAC;QACpC,CAAC,CAAC,CACL,CAAC;IACN,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAExD,MAAM,0BAA0B,GAAG,IAAA,gBAAQ,EAAC,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,mBAAmB,EAAE,EAAE;QAC3G,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC,MAAM,CAAC;IAEV,OAAO,UAAU,GAAG,YAAY,GAAG,iBAAiB,GAAG,0BAA0B,CAAC;AACpF,CAAC,CAAC;AA5BW,QAAA,0BAA0B,8BA4BrC"}
\ No newline at end of file
diff --git a/node_modules/table/dist/createStream.d.ts b/node_modules/table/dist/src/createStream.d.ts
similarity index 100%
rename from node_modules/table/dist/createStream.d.ts
rename to node_modules/table/dist/src/createStream.d.ts
diff --git a/node_modules/table/dist/createStream.js b/node_modules/table/dist/src/createStream.js
similarity index 66%
rename from node_modules/table/dist/createStream.js
rename to node_modules/table/dist/src/createStream.js
index d941b4b..d526161 100644
--- a/node_modules/table/dist/createStream.js
+++ b/node_modules/table/dist/src/createStream.js
@@ -10,46 +10,47 @@
const padTableData_1 = require("./padTableData");
const stringifyTableData_1 = require("./stringifyTableData");
const truncateTableData_1 = require("./truncateTableData");
+const utils_1 = require("./utils");
const prepareData = (data, config) => {
- let rows = stringifyTableData_1.stringifyTableData(data);
- rows = truncateTableData_1.truncateTableData(rows, config);
- const rowHeights = calculateRowHeights_1.calculateRowHeights(rows, config);
- rows = mapDataUsingRowHeights_1.mapDataUsingRowHeights(rows, rowHeights, config);
- rows = alignTableData_1.alignTableData(rows, config);
- rows = padTableData_1.padTableData(rows, config);
+ let rows = (0, stringifyTableData_1.stringifyTableData)(data);
+ rows = (0, truncateTableData_1.truncateTableData)(rows, (0, utils_1.extractTruncates)(config));
+ const rowHeights = (0, calculateRowHeights_1.calculateRowHeights)(rows, config);
+ rows = (0, mapDataUsingRowHeights_1.mapDataUsingRowHeights)(rows, rowHeights, config);
+ rows = (0, alignTableData_1.alignTableData)(rows, config);
+ rows = (0, padTableData_1.padTableData)(rows, config);
return rows;
};
const create = (row, columnWidths, config) => {
const rows = prepareData([row], config);
const body = rows.map((literalRow) => {
- return drawRow_1.drawRow(literalRow, config);
+ return (0, drawRow_1.drawRow)(literalRow, config);
}).join('');
let output;
output = '';
- output += drawBorder_1.drawBorderTop(columnWidths, config);
+ output += (0, drawBorder_1.drawBorderTop)(columnWidths, config);
output += body;
- output += drawBorder_1.drawBorderBottom(columnWidths, config);
+ output += (0, drawBorder_1.drawBorderBottom)(columnWidths, config);
output = output.trimEnd();
process.stdout.write(output);
};
const append = (row, columnWidths, config) => {
const rows = prepareData([row], config);
const body = rows.map((literalRow) => {
- return drawRow_1.drawRow(literalRow, config);
+ return (0, drawRow_1.drawRow)(literalRow, config);
}).join('');
let output = '';
- const bottom = drawBorder_1.drawBorderBottom(columnWidths, config);
+ const bottom = (0, drawBorder_1.drawBorderBottom)(columnWidths, config);
if (bottom !== '\n') {
output = '\r\u001B[K';
}
- output += drawBorder_1.drawBorderJoin(columnWidths, config);
+ output += (0, drawBorder_1.drawBorderJoin)(columnWidths, config);
output += body;
output += bottom;
output = output.trimEnd();
process.stdout.write(output);
};
const createStream = (userConfig) => {
- const config = makeStreamConfig_1.makeStreamConfig(userConfig);
+ const config = (0, makeStreamConfig_1.makeStreamConfig)(userConfig);
const columnWidths = Object.values(config.columns).map((column) => {
return column.width + column.paddingLeft + column.paddingRight;
});
@@ -70,3 +71,4 @@
};
};
exports.createStream = createStream;
+//# sourceMappingURL=createStream.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/createStream.js.map b/node_modules/table/dist/src/createStream.js.map
new file mode 100644
index 0000000..7ec269c
--- /dev/null
+++ b/node_modules/table/dist/src/createStream.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createStream.js","sourceRoot":"","sources":["../../src/createStream.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/drawBorder.d.ts b/node_modules/table/dist/src/drawBorder.d.ts
new file mode 100644
index 0000000..82b4dc5
--- /dev/null
+++ b/node_modules/table/dist/src/drawBorder.d.ts
@@ -0,0 +1,34 @@
+import type { SpanningCellManager } from './spanningCellManager';
+import type { BorderConfig, DrawVerticalLine } from './types/api';
+import type { SeparatorGetter } from './types/internal';
+declare type Separator = {
+ readonly left: string;
+ readonly right: string;
+ readonly body: string;
+ readonly bodyJoinOuter?: string;
+ readonly bodyJoinInner?: string;
+ readonly join: string;
+ readonly joinUp?: string;
+ readonly joinDown?: string;
+ readonly joinLeft?: string;
+ readonly joinRight?: string;
+};
+export declare const drawBorderSegments: (columnWidths: number[], parameters: Parameters<typeof drawBorder>[1]) => string[];
+export declare const createSeparatorGetter: (dependencies: Parameters<typeof drawBorder>[1]) => (verticalBorderIndex: number, columnCount: number) => string;
+export declare const drawBorder: (columnWidths: number[], parameters: Omit<DrawBorderParameters, 'border'> & {
+ separator: Separator;
+}) => string;
+export declare const drawBorderTop: (columnWidths: number[], parameters: DrawBorderParameters) => string;
+export declare const drawBorderJoin: (columnWidths: number[], parameters: DrawBorderParameters) => string;
+export declare const drawBorderBottom: (columnWidths: number[], parameters: DrawBorderParameters) => string;
+export declare type BorderGetterParameters = {
+ border: BorderConfig;
+ drawVerticalLine: DrawVerticalLine;
+ spanningCellManager?: SpanningCellManager;
+ rowCount?: number;
+};
+export declare type DrawBorderParameters = Omit<BorderGetterParameters, 'outputColumnWidths'> & {
+ horizontalBorderIndex?: number;
+};
+export declare const createTableBorderGetter: (columnWidths: number[], parameters: BorderGetterParameters) => SeparatorGetter;
+export {};
diff --git a/node_modules/table/dist/src/drawBorder.js b/node_modules/table/dist/src/drawBorder.js
new file mode 100644
index 0000000..81ede50
--- /dev/null
+++ b/node_modules/table/dist/src/drawBorder.js
@@ -0,0 +1,202 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createTableBorderGetter = exports.drawBorderBottom = exports.drawBorderJoin = exports.drawBorderTop = exports.drawBorder = exports.createSeparatorGetter = exports.drawBorderSegments = void 0;
+const drawContent_1 = require("./drawContent");
+const drawBorderSegments = (columnWidths, parameters) => {
+ const { separator, horizontalBorderIndex, spanningCellManager } = parameters;
+ return columnWidths.map((columnWidth, columnIndex) => {
+ const normalSegment = separator.body.repeat(columnWidth);
+ if (horizontalBorderIndex === undefined) {
+ return normalSegment;
+ }
+ /* istanbul ignore next */
+ const range = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.getContainingRange({ col: columnIndex,
+ row: horizontalBorderIndex });
+ if (!range) {
+ return normalSegment;
+ }
+ const { topLeft } = range;
+ // draw border segments as usual for top border of spanning cell
+ if (horizontalBorderIndex === topLeft.row) {
+ return normalSegment;
+ }
+ // if for first column/row of spanning cell, just skip
+ if (columnIndex !== topLeft.col) {
+ return '';
+ }
+ return range.extractBorderContent(horizontalBorderIndex);
+ });
+};
+exports.drawBorderSegments = drawBorderSegments;
+const createSeparatorGetter = (dependencies) => {
+ const { separator, spanningCellManager, horizontalBorderIndex, rowCount } = dependencies;
+ // eslint-disable-next-line complexity
+ return (verticalBorderIndex, columnCount) => {
+ const inSameRange = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.inSameRange;
+ if (horizontalBorderIndex !== undefined && inSameRange) {
+ const topCell = { col: verticalBorderIndex,
+ row: horizontalBorderIndex - 1 };
+ const leftCell = { col: verticalBorderIndex - 1,
+ row: horizontalBorderIndex };
+ const oppositeCell = { col: verticalBorderIndex - 1,
+ row: horizontalBorderIndex - 1 };
+ const currentCell = { col: verticalBorderIndex,
+ row: horizontalBorderIndex };
+ const pairs = [
+ [oppositeCell, topCell],
+ [topCell, currentCell],
+ [currentCell, leftCell],
+ [leftCell, oppositeCell],
+ ];
+ // left side of horizontal border
+ if (verticalBorderIndex === 0) {
+ if (inSameRange(currentCell, topCell) && separator.bodyJoinOuter) {
+ return separator.bodyJoinOuter;
+ }
+ return separator.left;
+ }
+ // right side of horizontal border
+ if (verticalBorderIndex === columnCount) {
+ if (inSameRange(oppositeCell, leftCell) && separator.bodyJoinOuter) {
+ return separator.bodyJoinOuter;
+ }
+ return separator.right;
+ }
+ // top horizontal border
+ if (horizontalBorderIndex === 0) {
+ if (inSameRange(currentCell, leftCell)) {
+ return separator.body;
+ }
+ return separator.join;
+ }
+ // bottom horizontal border
+ if (horizontalBorderIndex === rowCount) {
+ if (inSameRange(topCell, oppositeCell)) {
+ return separator.body;
+ }
+ return separator.join;
+ }
+ const sameRangeCount = pairs.map((pair) => {
+ return inSameRange(...pair);
+ }).filter(Boolean).length;
+ // four cells are belongs to different spanning cells
+ if (sameRangeCount === 0) {
+ return separator.join;
+ }
+ // belong to one spanning cell
+ if (sameRangeCount === 4) {
+ return '';
+ }
+ // belongs to two spanning cell
+ if (sameRangeCount === 2) {
+ if (inSameRange(...pairs[1]) && inSameRange(...pairs[3]) && separator.bodyJoinInner) {
+ return separator.bodyJoinInner;
+ }
+ return separator.body;
+ }
+ /* istanbul ignore next */
+ if (sameRangeCount === 1) {
+ if (!separator.joinRight || !separator.joinLeft || !separator.joinUp || !separator.joinDown) {
+ throw new Error(`Can not get border separator for position [${horizontalBorderIndex}, ${verticalBorderIndex}]`);
+ }
+ if (inSameRange(...pairs[0])) {
+ return separator.joinDown;
+ }
+ if (inSameRange(...pairs[1])) {
+ return separator.joinLeft;
+ }
+ if (inSameRange(...pairs[2])) {
+ return separator.joinUp;
+ }
+ return separator.joinRight;
+ }
+ /* istanbul ignore next */
+ throw new Error('Invalid case');
+ }
+ if (verticalBorderIndex === 0) {
+ return separator.left;
+ }
+ if (verticalBorderIndex === columnCount) {
+ return separator.right;
+ }
+ return separator.join;
+ };
+};
+exports.createSeparatorGetter = createSeparatorGetter;
+const drawBorder = (columnWidths, parameters) => {
+ const borderSegments = (0, exports.drawBorderSegments)(columnWidths, parameters);
+ const { drawVerticalLine, horizontalBorderIndex, spanningCellManager } = parameters;
+ return (0, drawContent_1.drawContent)({
+ contents: borderSegments,
+ drawSeparator: drawVerticalLine,
+ elementType: 'border',
+ rowIndex: horizontalBorderIndex,
+ separatorGetter: (0, exports.createSeparatorGetter)(parameters),
+ spanningCellManager,
+ }) + '\n';
+};
+exports.drawBorder = drawBorder;
+const drawBorderTop = (columnWidths, parameters) => {
+ const { border } = parameters;
+ const result = (0, exports.drawBorder)(columnWidths, {
+ ...parameters,
+ separator: {
+ body: border.topBody,
+ join: border.topJoin,
+ left: border.topLeft,
+ right: border.topRight,
+ },
+ });
+ if (result === '\n') {
+ return '';
+ }
+ return result;
+};
+exports.drawBorderTop = drawBorderTop;
+const drawBorderJoin = (columnWidths, parameters) => {
+ const { border } = parameters;
+ return (0, exports.drawBorder)(columnWidths, {
+ ...parameters,
+ separator: {
+ body: border.joinBody,
+ bodyJoinInner: border.bodyJoin,
+ bodyJoinOuter: border.bodyLeft,
+ join: border.joinJoin,
+ joinDown: border.joinMiddleDown,
+ joinLeft: border.joinMiddleLeft,
+ joinRight: border.joinMiddleRight,
+ joinUp: border.joinMiddleUp,
+ left: border.joinLeft,
+ right: border.joinRight,
+ },
+ });
+};
+exports.drawBorderJoin = drawBorderJoin;
+const drawBorderBottom = (columnWidths, parameters) => {
+ const { border } = parameters;
+ return (0, exports.drawBorder)(columnWidths, {
+ ...parameters,
+ separator: {
+ body: border.bottomBody,
+ join: border.bottomJoin,
+ left: border.bottomLeft,
+ right: border.bottomRight,
+ },
+ });
+};
+exports.drawBorderBottom = drawBorderBottom;
+const createTableBorderGetter = (columnWidths, parameters) => {
+ return (index, size) => {
+ const drawBorderParameters = { ...parameters,
+ horizontalBorderIndex: index };
+ if (index === 0) {
+ return (0, exports.drawBorderTop)(columnWidths, drawBorderParameters);
+ }
+ else if (index === size) {
+ return (0, exports.drawBorderBottom)(columnWidths, drawBorderParameters);
+ }
+ return (0, exports.drawBorderJoin)(columnWidths, drawBorderParameters);
+ };
+};
+exports.createTableBorderGetter = createTableBorderGetter;
+//# sourceMappingURL=drawBorder.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/drawBorder.js.map b/node_modules/table/dist/src/drawBorder.js.map
new file mode 100644
index 0000000..c14af9b
--- /dev/null
+++ b/node_modules/table/dist/src/drawBorder.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"drawBorder.js","sourceRoot":"","sources":["../../src/drawBorder.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/drawContent.d.ts b/node_modules/table/dist/src/drawContent.d.ts
new file mode 100644
index 0000000..3ac2f8c
--- /dev/null
+++ b/node_modules/table/dist/src/drawContent.d.ts
@@ -0,0 +1,14 @@
+import type { SpanningCellManager } from './spanningCellManager';
+/**
+ * Shared function to draw horizontal borders, rows or the entire table
+ */
+declare type DrawContentParameters = {
+ contents: string[];
+ drawSeparator: (index: number, size: number) => boolean;
+ separatorGetter: (index: number, size: number) => string;
+ spanningCellManager?: SpanningCellManager;
+ rowIndex?: number;
+ elementType?: 'border' | 'cell' | 'row';
+};
+export declare const drawContent: (parameters: DrawContentParameters) => string;
+export {};
diff --git a/node_modules/table/dist/src/drawContent.js b/node_modules/table/dist/src/drawContent.js
new file mode 100644
index 0000000..98d494e
--- /dev/null
+++ b/node_modules/table/dist/src/drawContent.js
@@ -0,0 +1,51 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.drawContent = void 0;
+const drawContent = (parameters) => {
+ const { contents, separatorGetter, drawSeparator, spanningCellManager, rowIndex, elementType } = parameters;
+ const contentSize = contents.length;
+ const result = [];
+ if (drawSeparator(0, contentSize)) {
+ result.push(separatorGetter(0, contentSize));
+ }
+ contents.forEach((content, contentIndex) => {
+ if (!elementType || elementType === 'border' || elementType === 'row') {
+ result.push(content);
+ }
+ if (elementType === 'cell' && rowIndex === undefined) {
+ result.push(content);
+ }
+ if (elementType === 'cell' && rowIndex !== undefined) {
+ /* istanbul ignore next */
+ const containingRange = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.getContainingRange({ col: contentIndex,
+ row: rowIndex });
+ // when drawing content row, just add a cell when it is a normal cell
+ // or belongs to first column of spanning cell
+ if (!containingRange || contentIndex === containingRange.topLeft.col) {
+ result.push(content);
+ }
+ }
+ // Only append the middle separator if the content is not the last
+ if (contentIndex + 1 < contentSize && drawSeparator(contentIndex + 1, contentSize)) {
+ const separator = separatorGetter(contentIndex + 1, contentSize);
+ if (elementType === 'cell' && rowIndex !== undefined) {
+ const currentCell = { col: contentIndex + 1,
+ row: rowIndex };
+ /* istanbul ignore next */
+ const containingRange = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.getContainingRange(currentCell);
+ if (!containingRange || containingRange.topLeft.col === currentCell.col) {
+ result.push(separator);
+ }
+ }
+ else {
+ result.push(separator);
+ }
+ }
+ });
+ if (drawSeparator(contentSize, contentSize)) {
+ result.push(separatorGetter(contentSize, contentSize));
+ }
+ return result.join('');
+};
+exports.drawContent = drawContent;
+//# sourceMappingURL=drawContent.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/drawContent.js.map b/node_modules/table/dist/src/drawContent.js.map
new file mode 100644
index 0000000..991c2a5
--- /dev/null
+++ b/node_modules/table/dist/src/drawContent.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"drawContent.js","sourceRoot":"","sources":["../../src/drawContent.ts"],"names":[],"mappings":";;;AAmBO,MAAM,WAAW,GAAG,CAAC,UAAiC,EAAU,EAAE;IACvE,MAAM,EAAC,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAC,GAAG,UAAU,CAAC;IAC1G,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;IACpC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE;QACjC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;KAC9C;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE;QACzC,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,KAAK,EAAE;YACrE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACtB;QAED,IAAI,WAAW,KAAK,MAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;YACpD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACtB;QAED,IAAI,WAAW,KAAK,MAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;YACpD,0BAA0B;YAC1B,MAAM,eAAe,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,kBAAkB,CAAC,EAAC,GAAG,EAAE,YAAY;gBAChF,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAC;YAElB,qEAAqE;YACrE,8CAA8C;YAC9C,IAAI,CAAC,eAAe,IAAI,YAAY,KAAK,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE;gBACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtB;SACF;QAED,kEAAkE;QAClE,IAAI,YAAY,GAAG,CAAC,GAAG,WAAW,IAAI,aAAa,CAAC,YAAY,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE;YAClF,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;YAEjE,IAAI,WAAW,KAAK,MAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACpD,MAAM,WAAW,GAAoB,EAAC,GAAG,EAAE,YAAY,GAAG,CAAC;oBACzD,GAAG,EAAE,QAAQ,EAAC,CAAC;gBACjB,0BAA0B;gBAC1B,MAAM,eAAe,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBAC7E,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,EAAE;oBACvE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACxB;aACF;iBAAM;gBACL,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACxB;SACF;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;QAC3C,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;KACxD;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC,CAAC;AArDW,QAAA,WAAW,eAqDtB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/drawRow.d.ts b/node_modules/table/dist/src/drawRow.d.ts
new file mode 100644
index 0000000..c0238a8
--- /dev/null
+++ b/node_modules/table/dist/src/drawRow.d.ts
@@ -0,0 +1,10 @@
+import type { SpanningCellManager } from './spanningCellManager';
+import type { DrawVerticalLine } from './types/api';
+import type { BodyBorderConfig, Row } from './types/internal';
+export declare type DrawRowConfig = {
+ border: BodyBorderConfig;
+ drawVerticalLine: DrawVerticalLine;
+ spanningCellManager?: SpanningCellManager;
+ rowIndex?: number;
+};
+export declare const drawRow: (row: Row, config: DrawRowConfig) => string;
diff --git a/node_modules/table/dist/drawRow.js b/node_modules/table/dist/src/drawRow.js
similarity index 68%
rename from node_modules/table/dist/drawRow.js
rename to node_modules/table/dist/src/drawRow.js
index 7d5756b..a86a279 100644
--- a/node_modules/table/dist/drawRow.js
+++ b/node_modules/table/dist/src/drawRow.js
@@ -3,9 +3,12 @@
exports.drawRow = void 0;
const drawContent_1 = require("./drawContent");
const drawRow = (row, config) => {
- const { border, drawVerticalLine } = config;
- return drawContent_1.drawContent(row, {
+ const { border, drawVerticalLine, rowIndex, spanningCellManager } = config;
+ return (0, drawContent_1.drawContent)({
+ contents: row,
drawSeparator: drawVerticalLine,
+ elementType: 'cell',
+ rowIndex,
separatorGetter: (index, columnCount) => {
if (index === 0) {
return border.bodyLeft;
@@ -15,6 +18,8 @@
}
return border.bodyJoin;
},
+ spanningCellManager,
}) + '\n';
};
exports.drawRow = drawRow;
+//# sourceMappingURL=drawRow.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/drawRow.js.map b/node_modules/table/dist/src/drawRow.js.map
new file mode 100644
index 0000000..ca3c5bd
--- /dev/null
+++ b/node_modules/table/dist/src/drawRow.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"drawRow.js","sourceRoot":"","sources":["../../src/drawRow.ts"],"names":[],"mappings":";;;AAAA,+CAEuB;AAmBhB,MAAM,OAAO,GAAG,CAAC,GAAQ,EAAE,MAAqB,EAAU,EAAE;IACjE,MAAM,EAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,mBAAmB,EAAC,GAAG,MAAM,CAAC;IAEzE,OAAO,IAAA,yBAAW,EAAC;QACjB,QAAQ,EAAE,GAAG;QACb,aAAa,EAAE,gBAAgB;QAC/B,WAAW,EAAE,MAAM;QACnB,QAAQ;QACR,eAAe,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;YACtC,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,OAAO,MAAM,CAAC,QAAQ,CAAC;aACxB;YAED,IAAI,KAAK,KAAK,WAAW,EAAE;gBACzB,OAAO,MAAM,CAAC,SAAS,CAAC;aACzB;YAED,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;QACD,mBAAmB;KACpB,CAAC,GAAG,IAAI,CAAC;AACZ,CAAC,CAAC;AArBW,QAAA,OAAO,WAqBlB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/drawTable.d.ts b/node_modules/table/dist/src/drawTable.d.ts
new file mode 100644
index 0000000..f234f30
--- /dev/null
+++ b/node_modules/table/dist/src/drawTable.d.ts
@@ -0,0 +1,2 @@
+import type { TableConfig, Row } from './types/internal';
+export declare const drawTable: (rows: Row[], outputColumnWidths: number[], rowHeights: number[], config: TableConfig) => string;
diff --git a/node_modules/table/dist/src/drawTable.js b/node_modules/table/dist/src/drawTable.js
new file mode 100644
index 0000000..dab8f98
--- /dev/null
+++ b/node_modules/table/dist/src/drawTable.js
@@ -0,0 +1,31 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.drawTable = void 0;
+const drawBorder_1 = require("./drawBorder");
+const drawContent_1 = require("./drawContent");
+const drawRow_1 = require("./drawRow");
+const utils_1 = require("./utils");
+const drawTable = (rows, outputColumnWidths, rowHeights, config) => {
+ const { drawHorizontalLine, singleLine, } = config;
+ const contents = (0, utils_1.groupBySizes)(rows, rowHeights).map((group, groupIndex) => {
+ return group.map((row) => {
+ return (0, drawRow_1.drawRow)(row, { ...config,
+ rowIndex: groupIndex });
+ }).join('');
+ });
+ return (0, drawContent_1.drawContent)({ contents,
+ drawSeparator: (index, size) => {
+ // Top/bottom border
+ if (index === 0 || index === size) {
+ return drawHorizontalLine(index, size);
+ }
+ return !singleLine && drawHorizontalLine(index, size);
+ },
+ elementType: 'row',
+ rowIndex: -1,
+ separatorGetter: (0, drawBorder_1.createTableBorderGetter)(outputColumnWidths, { ...config,
+ rowCount: contents.length }),
+ spanningCellManager: config.spanningCellManager });
+};
+exports.drawTable = drawTable;
+//# sourceMappingURL=drawTable.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/drawTable.js.map b/node_modules/table/dist/src/drawTable.js.map
new file mode 100644
index 0000000..882d6e3
--- /dev/null
+++ b/node_modules/table/dist/src/drawTable.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"drawTable.js","sourceRoot":"","sources":["../../src/drawTable.ts"],"names":[],"mappings":";;;AAAA,6CAEsB;AACtB,+CAEuB;AACvB,uCAEmB;AAInB,mCAEiB;AAEV,MAAM,SAAS,GAAG,CAAC,IAAW,EAAE,kBAA4B,EAAE,UAAoB,EAAE,MAAmB,EAAU,EAAE;IACxH,MAAM,EACJ,kBAAkB,EAClB,UAAU,GACX,GAAG,MAAM,CAAC;IAEX,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACxE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACvB,OAAO,IAAA,iBAAO,EAAC,GAAG,EAAE,EAAC,GAAG,MAAM;gBAC5B,QAAQ,EAAE,UAAU,EAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,IAAA,yBAAW,EAAC,EAAC,QAAQ;QAC1B,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7B,oBAAoB;YACpB,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE;gBACjC,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aACxC;YAED,OAAO,CAAC,UAAU,IAAI,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,WAAW,EAAE,KAAK;QAClB,QAAQ,EAAE,CAAC,CAAC;QACZ,eAAe,EAAE,IAAA,oCAAuB,EAAC,kBAAkB,EAAE,EAAC,GAAG,MAAM;YACrE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAC,CAAC;QAC7B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAAC,CAAC,CAAC;AACtD,CAAC,CAAC;AA3BW,QAAA,SAAS,aA2BpB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/generated/validators.d.ts b/node_modules/table/dist/src/generated/validators.d.ts
similarity index 75%
rename from node_modules/table/dist/generated/validators.d.ts
rename to node_modules/table/dist/src/generated/validators.d.ts
index 54e3584..bec42e4 100644
--- a/node_modules/table/dist/generated/validators.d.ts
+++ b/node_modules/table/dist/src/generated/validators.d.ts
@@ -4,10 +4,10 @@
parentDataProperty: any;
rootData?: any;
}): boolean;
-declare function validate76(data: any, { instancePath, parentData, parentDataProperty, rootData }?: {
+declare function validate86(data: any, { instancePath, parentData, parentDataProperty, rootData }?: {
instancePath?: string | undefined;
parentData: any;
parentDataProperty: any;
rootData?: any;
}): boolean;
-export { validate43 as _config_json, validate76 as _streamConfig_json };
+export { validate43 as _config_json, validate86 as _streamConfig_json };
diff --git a/node_modules/table/dist/generated/validators.js b/node_modules/table/dist/src/generated/validators.js
similarity index 67%
rename from node_modules/table/dist/generated/validators.js
rename to node_modules/table/dist/src/generated/validators.js
index 7438c70..6e5fc66 100644
--- a/node_modules/table/dist/generated/validators.js
+++ b/node_modules/table/dist/src/generated/validators.js
@@ -47,6 +47,50 @@
},
"singleLine": {
"typeof": "boolean"
+ },
+ "spanningCells": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "col": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "row": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "colSpan": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "rowSpan": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "alignment": {
+ "$ref": "shared.json#/definitions/alignment"
+ },
+ "verticalAlignment": {
+ "$ref": "shared.json#/definitions/verticalAlignment"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "integer"
+ },
+ "paddingLeft": {
+ "type": "integer"
+ },
+ "paddingRight": {
+ "type": "integer"
+ }
+ },
+ "required": ["row", "col"],
+ "additionalProperties": false
+ }
}
},
"additionalProperties": false
@@ -101,6 +145,18 @@
},
"joinJoin": {
"$ref": "#/definitions/border"
+ },
+ "joinMiddleUp": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleDown": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleRight": {
+ "$ref": "#/definitions/border"
}
},
"additionalProperties": false
@@ -333,6 +389,50 @@
errors = vErrors.length;
}
}
+ if (data.joinMiddleUp !== undefined) {
+ if (!(validate46(data.joinMiddleUp, {
+ instancePath: instancePath + "/joinMiddleUp",
+ parentData: data,
+ parentDataProperty: "joinMiddleUp",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleDown !== undefined) {
+ if (!(validate46(data.joinMiddleDown, {
+ instancePath: instancePath + "/joinMiddleDown",
+ parentData: data,
+ parentDataProperty: "joinMiddleDown",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleLeft !== undefined) {
+ if (!(validate46(data.joinMiddleLeft, {
+ instancePath: instancePath + "/joinMiddleLeft",
+ parentData: data,
+ parentDataProperty: "joinMiddleLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleRight !== undefined) {
+ if (!(validate46(data.joinMiddleRight, {
+ instancePath: instancePath + "/joinMiddleRight",
+ parentData: data,
+ parentDataProperty: "joinMiddleRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
}
else {
const err1 = {
@@ -360,94 +460,6 @@
"enum": ["left", "right", "center", "justify"]
};
const func0 = require("ajv/dist/runtime/equal").default;
-function validate64(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
- let vErrors = null;
- let errors = 0;
- if (typeof data !== "string") {
- const err0 = {
- instancePath,
- schemaPath: "#/type",
- keyword: "type",
- params: {
- type: "string"
- },
- message: "must be string"
- };
- if (vErrors === null) {
- vErrors = [err0];
- }
- else {
- vErrors.push(err0);
- }
- errors++;
- }
- if (!((((data === "left") || (data === "right")) || (data === "center")) || (data === "justify"))) {
- const err1 = {
- instancePath,
- schemaPath: "#/enum",
- keyword: "enum",
- params: {
- allowedValues: schema17.enum
- },
- message: "must be equal to one of the allowed values"
- };
- if (vErrors === null) {
- vErrors = [err1];
- }
- else {
- vErrors.push(err1);
- }
- errors++;
- }
- validate64.errors = vErrors;
- return errors === 0;
-}
-const schema18 = {
- "oneOf": [{
- "type": "object",
- "patternProperties": {
- "^[0-9]+$": {
- "$ref": "#/definitions/column"
- }
- },
- "additionalProperties": false
- }, {
- "type": "array",
- "items": {
- "$ref": "#/definitions/column"
- }
- }]
-};
-const pattern0 = new RegExp("^[0-9]+$", "u");
-const schema19 = {
- "type": "object",
- "properties": {
- "alignment": {
- "$ref": "#/definitions/alignment"
- },
- "verticalAlignment": {
- "type": "string",
- "enum": ["top", "middle", "bottom"]
- },
- "width": {
- "type": "integer",
- "minimum": 1
- },
- "wrapWord": {
- "type": "boolean"
- },
- "truncate": {
- "type": "integer"
- },
- "paddingLeft": {
- "type": "integer"
- },
- "paddingRight": {
- "type": "integer"
- }
- },
- "additionalProperties": false
-};
function validate68(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
let vErrors = null;
let errors = 0;
@@ -490,7 +502,140 @@
validate68.errors = vErrors;
return errors === 0;
}
-function validate67(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+const schema18 = {
+ "oneOf": [{
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ }, {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/column"
+ }
+ }]
+};
+const pattern0 = new RegExp("^[0-9]+$", "u");
+const schema19 = {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "$ref": "#/definitions/alignment"
+ },
+ "verticalAlignment": {
+ "$ref": "#/definitions/verticalAlignment"
+ },
+ "width": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "integer"
+ },
+ "paddingLeft": {
+ "type": "integer"
+ },
+ "paddingRight": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+};
+function validate72(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (typeof data !== "string") {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ if (!((((data === "left") || (data === "right")) || (data === "center")) || (data === "justify"))) {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/enum",
+ keyword: "enum",
+ params: {
+ allowedValues: schema17.enum
+ },
+ message: "must be equal to one of the allowed values"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate72.errors = vErrors;
+ return errors === 0;
+}
+const schema21 = {
+ "type": "string",
+ "enum": ["top", "middle", "bottom"]
+};
+function validate74(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (typeof data !== "string") {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ if (!(((data === "top") || (data === "middle")) || (data === "bottom"))) {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/enum",
+ keyword: "enum",
+ params: {
+ allowedValues: schema21.enum
+ },
+ message: "must be equal to one of the allowed values"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate74.errors = vErrors;
+ return errors === 0;
+}
+function validate71(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
let vErrors = null;
let errors = 0;
if (data && typeof data == "object" && !Array.isArray(data)) {
@@ -515,59 +660,31 @@
}
}
if (data.alignment !== undefined) {
- if (!(validate68(data.alignment, {
+ if (!(validate72(data.alignment, {
instancePath: instancePath + "/alignment",
parentData: data,
parentDataProperty: "alignment",
rootData
}))) {
- vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors);
+ vErrors = vErrors === null ? validate72.errors : vErrors.concat(validate72.errors);
errors = vErrors.length;
}
}
if (data.verticalAlignment !== undefined) {
- let data1 = data.verticalAlignment;
- if (typeof data1 !== "string") {
- const err1 = {
- instancePath: instancePath + "/verticalAlignment",
- schemaPath: "#/properties/verticalAlignment/type",
- keyword: "type",
- params: {
- type: "string"
- },
- message: "must be string"
- };
- if (vErrors === null) {
- vErrors = [err1];
- }
- else {
- vErrors.push(err1);
- }
- errors++;
- }
- if (!(((data1 === "top") || (data1 === "middle")) || (data1 === "bottom"))) {
- const err2 = {
- instancePath: instancePath + "/verticalAlignment",
- schemaPath: "#/properties/verticalAlignment/enum",
- keyword: "enum",
- params: {
- allowedValues: schema19.properties.verticalAlignment.enum
- },
- message: "must be equal to one of the allowed values"
- };
- if (vErrors === null) {
- vErrors = [err2];
- }
- else {
- vErrors.push(err2);
- }
- errors++;
+ if (!(validate74(data.verticalAlignment, {
+ instancePath: instancePath + "/verticalAlignment",
+ parentData: data,
+ parentDataProperty: "verticalAlignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate74.errors : vErrors.concat(validate74.errors);
+ errors = vErrors.length;
}
}
if (data.width !== undefined) {
let data2 = data.width;
if (!(((typeof data2 == "number") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))) {
- const err3 = {
+ const err1 = {
instancePath: instancePath + "/width",
schemaPath: "#/properties/width/type",
keyword: "type",
@@ -577,16 +694,16 @@
message: "must be integer"
};
if (vErrors === null) {
- vErrors = [err3];
+ vErrors = [err1];
}
else {
- vErrors.push(err3);
+ vErrors.push(err1);
}
errors++;
}
if ((typeof data2 == "number") && (isFinite(data2))) {
if (data2 < 1 || isNaN(data2)) {
- const err4 = {
+ const err2 = {
instancePath: instancePath + "/width",
schemaPath: "#/properties/width/minimum",
keyword: "minimum",
@@ -597,10 +714,10 @@
message: "must be >= 1"
};
if (vErrors === null) {
- vErrors = [err4];
+ vErrors = [err2];
}
else {
- vErrors.push(err4);
+ vErrors.push(err2);
}
errors++;
}
@@ -608,7 +725,7 @@
}
if (data.wrapWord !== undefined) {
if (typeof data.wrapWord !== "boolean") {
- const err5 = {
+ const err3 = {
instancePath: instancePath + "/wrapWord",
schemaPath: "#/properties/wrapWord/type",
keyword: "type",
@@ -618,6 +735,48 @@
message: "must be boolean"
};
if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ }
+ if (data.truncate !== undefined) {
+ let data4 = data.truncate;
+ if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ const err4 = {
+ instancePath: instancePath + "/truncate",
+ schemaPath: "#/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err4];
+ }
+ else {
+ vErrors.push(err4);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingLeft !== undefined) {
+ let data5 = data.paddingLeft;
+ if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
+ const err5 = {
+ instancePath: instancePath + "/paddingLeft",
+ schemaPath: "#/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
vErrors = [err5];
}
else {
@@ -626,12 +785,12 @@
errors++;
}
}
- if (data.truncate !== undefined) {
- let data4 = data.truncate;
- if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ if (data.paddingRight !== undefined) {
+ let data6 = data.paddingRight;
+ if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
const err6 = {
- instancePath: instancePath + "/truncate",
- schemaPath: "#/properties/truncate/type",
+ instancePath: instancePath + "/paddingRight",
+ schemaPath: "#/properties/paddingRight/type",
keyword: "type",
params: {
type: "integer"
@@ -647,51 +806,9 @@
errors++;
}
}
- if (data.paddingLeft !== undefined) {
- let data5 = data.paddingLeft;
- if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
- const err7 = {
- instancePath: instancePath + "/paddingLeft",
- schemaPath: "#/properties/paddingLeft/type",
- keyword: "type",
- params: {
- type: "integer"
- },
- message: "must be integer"
- };
- if (vErrors === null) {
- vErrors = [err7];
- }
- else {
- vErrors.push(err7);
- }
- errors++;
- }
- }
- if (data.paddingRight !== undefined) {
- let data6 = data.paddingRight;
- if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
- const err8 = {
- instancePath: instancePath + "/paddingRight",
- schemaPath: "#/properties/paddingRight/type",
- keyword: "type",
- params: {
- type: "integer"
- },
- message: "must be integer"
- };
- if (vErrors === null) {
- vErrors = [err8];
- }
- else {
- vErrors.push(err8);
- }
- errors++;
- }
- }
}
else {
- const err9 = {
+ const err7 = {
instancePath,
schemaPath: "#/type",
keyword: "type",
@@ -701,17 +818,17 @@
message: "must be object"
};
if (vErrors === null) {
- vErrors = [err9];
+ vErrors = [err7];
}
else {
- vErrors.push(err9);
+ vErrors.push(err7);
}
errors++;
}
- validate67.errors = vErrors;
+ validate71.errors = vErrors;
return errors === 0;
}
-function validate66(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+function validate70(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
let vErrors = null;
let errors = 0;
const _errs0 = errors;
@@ -741,13 +858,13 @@
}
for (const key1 in data) {
if (pattern0.test(key1)) {
- if (!(validate67(data[key1], {
+ if (!(validate71(data[key1], {
instancePath: instancePath + "/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"),
parentData: data,
parentDataProperty: key1,
rootData
}))) {
- vErrors = vErrors === null ? validate67.errors : vErrors.concat(validate67.errors);
+ vErrors = vErrors === null ? validate71.errors : vErrors.concat(validate71.errors);
errors = vErrors.length;
}
}
@@ -780,13 +897,13 @@
if (Array.isArray(data)) {
const len0 = data.length;
for (let i0 = 0; i0 < len0; i0++) {
- if (!(validate67(data[i0], {
+ if (!(validate71(data[i0], {
instancePath: instancePath + "/" + i0,
parentData: data,
parentDataProperty: i0,
rootData
}))) {
- vErrors = vErrors === null ? validate67.errors : vErrors.concat(validate67.errors);
+ vErrors = vErrors === null ? validate71.errors : vErrors.concat(validate71.errors);
errors = vErrors.length;
}
}
@@ -849,10 +966,10 @@
}
}
}
- validate66.errors = vErrors;
+ validate70.errors = vErrors;
return errors === 0;
}
-function validate73(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+function validate79(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
let vErrors = null;
let errors = 0;
if (data && typeof data == "object" && !Array.isArray(data)) {
@@ -877,59 +994,31 @@
}
}
if (data.alignment !== undefined) {
- if (!(validate68(data.alignment, {
+ if (!(validate72(data.alignment, {
instancePath: instancePath + "/alignment",
parentData: data,
parentDataProperty: "alignment",
rootData
}))) {
- vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors);
+ vErrors = vErrors === null ? validate72.errors : vErrors.concat(validate72.errors);
errors = vErrors.length;
}
}
if (data.verticalAlignment !== undefined) {
- let data1 = data.verticalAlignment;
- if (typeof data1 !== "string") {
- const err1 = {
- instancePath: instancePath + "/verticalAlignment",
- schemaPath: "#/properties/verticalAlignment/type",
- keyword: "type",
- params: {
- type: "string"
- },
- message: "must be string"
- };
- if (vErrors === null) {
- vErrors = [err1];
- }
- else {
- vErrors.push(err1);
- }
- errors++;
- }
- if (!(((data1 === "top") || (data1 === "middle")) || (data1 === "bottom"))) {
- const err2 = {
- instancePath: instancePath + "/verticalAlignment",
- schemaPath: "#/properties/verticalAlignment/enum",
- keyword: "enum",
- params: {
- allowedValues: schema19.properties.verticalAlignment.enum
- },
- message: "must be equal to one of the allowed values"
- };
- if (vErrors === null) {
- vErrors = [err2];
- }
- else {
- vErrors.push(err2);
- }
- errors++;
+ if (!(validate74(data.verticalAlignment, {
+ instancePath: instancePath + "/verticalAlignment",
+ parentData: data,
+ parentDataProperty: "verticalAlignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate74.errors : vErrors.concat(validate74.errors);
+ errors = vErrors.length;
}
}
if (data.width !== undefined) {
let data2 = data.width;
if (!(((typeof data2 == "number") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))) {
- const err3 = {
+ const err1 = {
instancePath: instancePath + "/width",
schemaPath: "#/properties/width/type",
keyword: "type",
@@ -939,16 +1028,16 @@
message: "must be integer"
};
if (vErrors === null) {
- vErrors = [err3];
+ vErrors = [err1];
}
else {
- vErrors.push(err3);
+ vErrors.push(err1);
}
errors++;
}
if ((typeof data2 == "number") && (isFinite(data2))) {
if (data2 < 1 || isNaN(data2)) {
- const err4 = {
+ const err2 = {
instancePath: instancePath + "/width",
schemaPath: "#/properties/width/minimum",
keyword: "minimum",
@@ -959,10 +1048,10 @@
message: "must be >= 1"
};
if (vErrors === null) {
- vErrors = [err4];
+ vErrors = [err2];
}
else {
- vErrors.push(err4);
+ vErrors.push(err2);
}
errors++;
}
@@ -970,7 +1059,7 @@
}
if (data.wrapWord !== undefined) {
if (typeof data.wrapWord !== "boolean") {
- const err5 = {
+ const err3 = {
instancePath: instancePath + "/wrapWord",
schemaPath: "#/properties/wrapWord/type",
keyword: "type",
@@ -980,6 +1069,48 @@
message: "must be boolean"
};
if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ }
+ if (data.truncate !== undefined) {
+ let data4 = data.truncate;
+ if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ const err4 = {
+ instancePath: instancePath + "/truncate",
+ schemaPath: "#/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err4];
+ }
+ else {
+ vErrors.push(err4);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingLeft !== undefined) {
+ let data5 = data.paddingLeft;
+ if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
+ const err5 = {
+ instancePath: instancePath + "/paddingLeft",
+ schemaPath: "#/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
vErrors = [err5];
}
else {
@@ -988,12 +1119,12 @@
errors++;
}
}
- if (data.truncate !== undefined) {
- let data4 = data.truncate;
- if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ if (data.paddingRight !== undefined) {
+ let data6 = data.paddingRight;
+ if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
const err6 = {
- instancePath: instancePath + "/truncate",
- schemaPath: "#/properties/truncate/type",
+ instancePath: instancePath + "/paddingRight",
+ schemaPath: "#/properties/paddingRight/type",
keyword: "type",
params: {
type: "integer"
@@ -1009,51 +1140,9 @@
errors++;
}
}
- if (data.paddingLeft !== undefined) {
- let data5 = data.paddingLeft;
- if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
- const err7 = {
- instancePath: instancePath + "/paddingLeft",
- schemaPath: "#/properties/paddingLeft/type",
- keyword: "type",
- params: {
- type: "integer"
- },
- message: "must be integer"
- };
- if (vErrors === null) {
- vErrors = [err7];
- }
- else {
- vErrors.push(err7);
- }
- errors++;
- }
- }
- if (data.paddingRight !== undefined) {
- let data6 = data.paddingRight;
- if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
- const err8 = {
- instancePath: instancePath + "/paddingRight",
- schemaPath: "#/properties/paddingRight/type",
- keyword: "type",
- params: {
- type: "integer"
- },
- message: "must be integer"
- };
- if (vErrors === null) {
- vErrors = [err8];
- }
- else {
- vErrors.push(err8);
- }
- errors++;
- }
- }
}
else {
- const err9 = {
+ const err7 = {
instancePath,
schemaPath: "#/type",
keyword: "type",
@@ -1063,14 +1152,56 @@
message: "must be object"
};
if (vErrors === null) {
- vErrors = [err9];
+ vErrors = [err7];
}
else {
- vErrors.push(err9);
+ vErrors.push(err7);
}
errors++;
}
- validate73.errors = vErrors;
+ validate79.errors = vErrors;
+ return errors === 0;
+}
+function validate84(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+ let vErrors = null;
+ let errors = 0;
+ if (typeof data !== "string") {
+ const err0 = {
+ instancePath,
+ schemaPath: "#/type",
+ keyword: "type",
+ params: {
+ type: "string"
+ },
+ message: "must be string"
+ };
+ if (vErrors === null) {
+ vErrors = [err0];
+ }
+ else {
+ vErrors.push(err0);
+ }
+ errors++;
+ }
+ if (!(((data === "top") || (data === "middle")) || (data === "bottom"))) {
+ const err1 = {
+ instancePath,
+ schemaPath: "#/enum",
+ keyword: "enum",
+ params: {
+ allowedValues: schema21.enum
+ },
+ message: "must be equal to one of the allowed values"
+ };
+ if (vErrors === null) {
+ vErrors = [err1];
+ }
+ else {
+ vErrors.push(err1);
+ }
+ errors++;
+ }
+ validate84.errors = vErrors;
return errors === 0;
}
function validate43(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
@@ -1079,7 +1210,7 @@
let errors = 0;
if (data && typeof data == "object" && !Array.isArray(data)) {
for (const key0 in data) {
- if (!(((((((key0 === "border") || (key0 === "header")) || (key0 === "columns")) || (key0 === "columnDefault")) || (key0 === "drawVerticalLine")) || (key0 === "drawHorizontalLine")) || (key0 === "singleLine"))) {
+ if (!((((((((key0 === "border") || (key0 === "header")) || (key0 === "columns")) || (key0 === "columnDefault")) || (key0 === "drawVerticalLine")) || (key0 === "drawHorizontalLine")) || (key0 === "singleLine")) || (key0 === "spanningCells"))) {
const err0 = {
instancePath,
schemaPath: "#/additionalProperties",
@@ -1171,13 +1302,13 @@
}
}
if (data1.alignment !== undefined) {
- if (!(validate64(data1.alignment, {
+ if (!(validate68(data1.alignment, {
instancePath: instancePath + "/header/alignment",
parentData: data1,
parentDataProperty: "alignment",
rootData
}))) {
- vErrors = vErrors === null ? validate64.errors : vErrors.concat(validate64.errors);
+ vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors);
errors = vErrors.length;
}
}
@@ -1285,24 +1416,24 @@
}
}
if (data.columns !== undefined) {
- if (!(validate66(data.columns, {
+ if (!(validate70(data.columns, {
instancePath: instancePath + "/columns",
parentData: data,
parentDataProperty: "columns",
rootData
}))) {
- vErrors = vErrors === null ? validate66.errors : vErrors.concat(validate66.errors);
+ vErrors = vErrors === null ? validate70.errors : vErrors.concat(validate70.errors);
errors = vErrors.length;
}
}
if (data.columnDefault !== undefined) {
- if (!(validate73(data.columnDefault, {
+ if (!(validate79(data.columnDefault, {
instancePath: instancePath + "/columnDefault",
parentData: data,
parentDataProperty: "columnDefault",
rootData
}))) {
- vErrors = vErrors === null ? validate73.errors : vErrors.concat(validate73.errors);
+ vErrors = vErrors === null ? validate79.errors : vErrors.concat(validate79.errors);
errors = vErrors.length;
}
}
@@ -1360,9 +1491,385 @@
errors++;
}
}
+ if (data.spanningCells !== undefined) {
+ let data13 = data.spanningCells;
+ if (Array.isArray(data13)) {
+ const len0 = data13.length;
+ for (let i0 = 0; i0 < len0; i0++) {
+ let data14 = data13[i0];
+ if (data14 && typeof data14 == "object" && !Array.isArray(data14)) {
+ if (data14.row === undefined) {
+ const err12 = {
+ instancePath: instancePath + "/spanningCells/" + i0,
+ schemaPath: "#/properties/spanningCells/items/required",
+ keyword: "required",
+ params: {
+ missingProperty: "row"
+ },
+ message: "must have required property '" + "row" + "'"
+ };
+ if (vErrors === null) {
+ vErrors = [err12];
+ }
+ else {
+ vErrors.push(err12);
+ }
+ errors++;
+ }
+ if (data14.col === undefined) {
+ const err13 = {
+ instancePath: instancePath + "/spanningCells/" + i0,
+ schemaPath: "#/properties/spanningCells/items/required",
+ keyword: "required",
+ params: {
+ missingProperty: "col"
+ },
+ message: "must have required property '" + "col" + "'"
+ };
+ if (vErrors === null) {
+ vErrors = [err13];
+ }
+ else {
+ vErrors.push(err13);
+ }
+ errors++;
+ }
+ for (const key2 in data14) {
+ if (!(func8.call(schema13.properties.spanningCells.items.properties, key2))) {
+ const err14 = {
+ instancePath: instancePath + "/spanningCells/" + i0,
+ schemaPath: "#/properties/spanningCells/items/additionalProperties",
+ keyword: "additionalProperties",
+ params: {
+ additionalProperty: key2
+ },
+ message: "must NOT have additional properties"
+ };
+ if (vErrors === null) {
+ vErrors = [err14];
+ }
+ else {
+ vErrors.push(err14);
+ }
+ errors++;
+ }
+ }
+ if (data14.col !== undefined) {
+ let data15 = data14.col;
+ if (!(((typeof data15 == "number") && (!(data15 % 1) && !isNaN(data15))) && (isFinite(data15)))) {
+ const err15 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/col",
+ schemaPath: "#/properties/spanningCells/items/properties/col/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err15];
+ }
+ else {
+ vErrors.push(err15);
+ }
+ errors++;
+ }
+ if ((typeof data15 == "number") && (isFinite(data15))) {
+ if (data15 < 0 || isNaN(data15)) {
+ const err16 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/col",
+ schemaPath: "#/properties/spanningCells/items/properties/col/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 0
+ },
+ message: "must be >= 0"
+ };
+ if (vErrors === null) {
+ vErrors = [err16];
+ }
+ else {
+ vErrors.push(err16);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data14.row !== undefined) {
+ let data16 = data14.row;
+ if (!(((typeof data16 == "number") && (!(data16 % 1) && !isNaN(data16))) && (isFinite(data16)))) {
+ const err17 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/row",
+ schemaPath: "#/properties/spanningCells/items/properties/row/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err17];
+ }
+ else {
+ vErrors.push(err17);
+ }
+ errors++;
+ }
+ if ((typeof data16 == "number") && (isFinite(data16))) {
+ if (data16 < 0 || isNaN(data16)) {
+ const err18 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/row",
+ schemaPath: "#/properties/spanningCells/items/properties/row/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 0
+ },
+ message: "must be >= 0"
+ };
+ if (vErrors === null) {
+ vErrors = [err18];
+ }
+ else {
+ vErrors.push(err18);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data14.colSpan !== undefined) {
+ let data17 = data14.colSpan;
+ if (!(((typeof data17 == "number") && (!(data17 % 1) && !isNaN(data17))) && (isFinite(data17)))) {
+ const err19 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/colSpan",
+ schemaPath: "#/properties/spanningCells/items/properties/colSpan/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err19];
+ }
+ else {
+ vErrors.push(err19);
+ }
+ errors++;
+ }
+ if ((typeof data17 == "number") && (isFinite(data17))) {
+ if (data17 < 1 || isNaN(data17)) {
+ const err20 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/colSpan",
+ schemaPath: "#/properties/spanningCells/items/properties/colSpan/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 1
+ },
+ message: "must be >= 1"
+ };
+ if (vErrors === null) {
+ vErrors = [err20];
+ }
+ else {
+ vErrors.push(err20);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data14.rowSpan !== undefined) {
+ let data18 = data14.rowSpan;
+ if (!(((typeof data18 == "number") && (!(data18 % 1) && !isNaN(data18))) && (isFinite(data18)))) {
+ const err21 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/rowSpan",
+ schemaPath: "#/properties/spanningCells/items/properties/rowSpan/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err21];
+ }
+ else {
+ vErrors.push(err21);
+ }
+ errors++;
+ }
+ if ((typeof data18 == "number") && (isFinite(data18))) {
+ if (data18 < 1 || isNaN(data18)) {
+ const err22 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/rowSpan",
+ schemaPath: "#/properties/spanningCells/items/properties/rowSpan/minimum",
+ keyword: "minimum",
+ params: {
+ comparison: ">=",
+ limit: 1
+ },
+ message: "must be >= 1"
+ };
+ if (vErrors === null) {
+ vErrors = [err22];
+ }
+ else {
+ vErrors.push(err22);
+ }
+ errors++;
+ }
+ }
+ }
+ if (data14.alignment !== undefined) {
+ if (!(validate68(data14.alignment, {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/alignment",
+ parentData: data14,
+ parentDataProperty: "alignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data14.verticalAlignment !== undefined) {
+ if (!(validate84(data14.verticalAlignment, {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/verticalAlignment",
+ parentData: data14,
+ parentDataProperty: "verticalAlignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate84.errors : vErrors.concat(validate84.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data14.wrapWord !== undefined) {
+ if (typeof data14.wrapWord !== "boolean") {
+ const err23 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/wrapWord",
+ schemaPath: "#/properties/spanningCells/items/properties/wrapWord/type",
+ keyword: "type",
+ params: {
+ type: "boolean"
+ },
+ message: "must be boolean"
+ };
+ if (vErrors === null) {
+ vErrors = [err23];
+ }
+ else {
+ vErrors.push(err23);
+ }
+ errors++;
+ }
+ }
+ if (data14.truncate !== undefined) {
+ let data22 = data14.truncate;
+ if (!(((typeof data22 == "number") && (!(data22 % 1) && !isNaN(data22))) && (isFinite(data22)))) {
+ const err24 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/truncate",
+ schemaPath: "#/properties/spanningCells/items/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err24];
+ }
+ else {
+ vErrors.push(err24);
+ }
+ errors++;
+ }
+ }
+ if (data14.paddingLeft !== undefined) {
+ let data23 = data14.paddingLeft;
+ if (!(((typeof data23 == "number") && (!(data23 % 1) && !isNaN(data23))) && (isFinite(data23)))) {
+ const err25 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/paddingLeft",
+ schemaPath: "#/properties/spanningCells/items/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err25];
+ }
+ else {
+ vErrors.push(err25);
+ }
+ errors++;
+ }
+ }
+ if (data14.paddingRight !== undefined) {
+ let data24 = data14.paddingRight;
+ if (!(((typeof data24 == "number") && (!(data24 % 1) && !isNaN(data24))) && (isFinite(data24)))) {
+ const err26 = {
+ instancePath: instancePath + "/spanningCells/" + i0 + "/paddingRight",
+ schemaPath: "#/properties/spanningCells/items/properties/paddingRight/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err26];
+ }
+ else {
+ vErrors.push(err26);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err27 = {
+ instancePath: instancePath + "/spanningCells/" + i0,
+ schemaPath: "#/properties/spanningCells/items/type",
+ keyword: "type",
+ params: {
+ type: "object"
+ },
+ message: "must be object"
+ };
+ if (vErrors === null) {
+ vErrors = [err27];
+ }
+ else {
+ vErrors.push(err27);
+ }
+ errors++;
+ }
+ }
+ }
+ else {
+ const err28 = {
+ instancePath: instancePath + "/spanningCells",
+ schemaPath: "#/properties/spanningCells/type",
+ keyword: "type",
+ params: {
+ type: "array"
+ },
+ message: "must be array"
+ };
+ if (vErrors === null) {
+ vErrors = [err28];
+ }
+ else {
+ vErrors.push(err28);
+ }
+ errors++;
+ }
+ }
}
else {
- const err12 = {
+ const err29 = {
instancePath,
schemaPath: "#/type",
keyword: "type",
@@ -1372,18 +1879,18 @@
message: "must be object"
};
if (vErrors === null) {
- vErrors = [err12];
+ vErrors = [err29];
}
else {
- vErrors.push(err12);
+ vErrors.push(err29);
}
errors++;
}
validate43.errors = vErrors;
return errors === 0;
}
-exports["streamConfig.json"] = validate76;
-const schema22 = {
+exports["streamConfig.json"] = validate86;
+const schema24 = {
"$id": "streamConfig.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
@@ -1408,7 +1915,7 @@
"required": ["columnDefault", "columnCount"],
"additionalProperties": false
};
-function validate77(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+function validate87(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
let vErrors = null;
let errors = 0;
if (data && typeof data == "object" && !Array.isArray(data)) {
@@ -1608,6 +2115,50 @@
errors = vErrors.length;
}
}
+ if (data.joinMiddleUp !== undefined) {
+ if (!(validate46(data.joinMiddleUp, {
+ instancePath: instancePath + "/joinMiddleUp",
+ parentData: data,
+ parentDataProperty: "joinMiddleUp",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleDown !== undefined) {
+ if (!(validate46(data.joinMiddleDown, {
+ instancePath: instancePath + "/joinMiddleDown",
+ parentData: data,
+ parentDataProperty: "joinMiddleDown",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleLeft !== undefined) {
+ if (!(validate46(data.joinMiddleLeft, {
+ instancePath: instancePath + "/joinMiddleLeft",
+ parentData: data,
+ parentDataProperty: "joinMiddleLeft",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
+ if (data.joinMiddleRight !== undefined) {
+ if (!(validate46(data.joinMiddleRight, {
+ instancePath: instancePath + "/joinMiddleRight",
+ parentData: data,
+ parentDataProperty: "joinMiddleRight",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate46.errors : vErrors.concat(validate46.errors);
+ errors = vErrors.length;
+ }
+ }
}
else {
const err1 = {
@@ -1627,10 +2178,10 @@
}
errors++;
}
- validate77.errors = vErrors;
+ validate87.errors = vErrors;
return errors === 0;
}
-function validate95(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+function validate109(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
let vErrors = null;
let errors = 0;
const _errs0 = errors;
@@ -1660,13 +2211,13 @@
}
for (const key1 in data) {
if (pattern0.test(key1)) {
- if (!(validate67(data[key1], {
+ if (!(validate71(data[key1], {
instancePath: instancePath + "/" + key1.replace(/~/g, "~0").replace(/\//g, "~1"),
parentData: data,
parentDataProperty: key1,
rootData
}))) {
- vErrors = vErrors === null ? validate67.errors : vErrors.concat(validate67.errors);
+ vErrors = vErrors === null ? validate71.errors : vErrors.concat(validate71.errors);
errors = vErrors.length;
}
}
@@ -1699,13 +2250,13 @@
if (Array.isArray(data)) {
const len0 = data.length;
for (let i0 = 0; i0 < len0; i0++) {
- if (!(validate67(data[i0], {
+ if (!(validate71(data[i0], {
instancePath: instancePath + "/" + i0,
parentData: data,
parentDataProperty: i0,
rootData
}))) {
- vErrors = vErrors === null ? validate67.errors : vErrors.concat(validate67.errors);
+ vErrors = vErrors === null ? validate71.errors : vErrors.concat(validate71.errors);
errors = vErrors.length;
}
}
@@ -1768,10 +2319,10 @@
}
}
}
- validate95.errors = vErrors;
+ validate109.errors = vErrors;
return errors === 0;
}
-function validate99(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+function validate113(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
let vErrors = null;
let errors = 0;
if (data && typeof data == "object" && !Array.isArray(data)) {
@@ -1796,59 +2347,31 @@
}
}
if (data.alignment !== undefined) {
- if (!(validate68(data.alignment, {
+ if (!(validate72(data.alignment, {
instancePath: instancePath + "/alignment",
parentData: data,
parentDataProperty: "alignment",
rootData
}))) {
- vErrors = vErrors === null ? validate68.errors : vErrors.concat(validate68.errors);
+ vErrors = vErrors === null ? validate72.errors : vErrors.concat(validate72.errors);
errors = vErrors.length;
}
}
if (data.verticalAlignment !== undefined) {
- let data1 = data.verticalAlignment;
- if (typeof data1 !== "string") {
- const err1 = {
- instancePath: instancePath + "/verticalAlignment",
- schemaPath: "#/properties/verticalAlignment/type",
- keyword: "type",
- params: {
- type: "string"
- },
- message: "must be string"
- };
- if (vErrors === null) {
- vErrors = [err1];
- }
- else {
- vErrors.push(err1);
- }
- errors++;
- }
- if (!(((data1 === "top") || (data1 === "middle")) || (data1 === "bottom"))) {
- const err2 = {
- instancePath: instancePath + "/verticalAlignment",
- schemaPath: "#/properties/verticalAlignment/enum",
- keyword: "enum",
- params: {
- allowedValues: schema19.properties.verticalAlignment.enum
- },
- message: "must be equal to one of the allowed values"
- };
- if (vErrors === null) {
- vErrors = [err2];
- }
- else {
- vErrors.push(err2);
- }
- errors++;
+ if (!(validate74(data.verticalAlignment, {
+ instancePath: instancePath + "/verticalAlignment",
+ parentData: data,
+ parentDataProperty: "verticalAlignment",
+ rootData
+ }))) {
+ vErrors = vErrors === null ? validate74.errors : vErrors.concat(validate74.errors);
+ errors = vErrors.length;
}
}
if (data.width !== undefined) {
let data2 = data.width;
if (!(((typeof data2 == "number") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))) {
- const err3 = {
+ const err1 = {
instancePath: instancePath + "/width",
schemaPath: "#/properties/width/type",
keyword: "type",
@@ -1858,16 +2381,16 @@
message: "must be integer"
};
if (vErrors === null) {
- vErrors = [err3];
+ vErrors = [err1];
}
else {
- vErrors.push(err3);
+ vErrors.push(err1);
}
errors++;
}
if ((typeof data2 == "number") && (isFinite(data2))) {
if (data2 < 1 || isNaN(data2)) {
- const err4 = {
+ const err2 = {
instancePath: instancePath + "/width",
schemaPath: "#/properties/width/minimum",
keyword: "minimum",
@@ -1878,10 +2401,10 @@
message: "must be >= 1"
};
if (vErrors === null) {
- vErrors = [err4];
+ vErrors = [err2];
}
else {
- vErrors.push(err4);
+ vErrors.push(err2);
}
errors++;
}
@@ -1889,7 +2412,7 @@
}
if (data.wrapWord !== undefined) {
if (typeof data.wrapWord !== "boolean") {
- const err5 = {
+ const err3 = {
instancePath: instancePath + "/wrapWord",
schemaPath: "#/properties/wrapWord/type",
keyword: "type",
@@ -1899,6 +2422,48 @@
message: "must be boolean"
};
if (vErrors === null) {
+ vErrors = [err3];
+ }
+ else {
+ vErrors.push(err3);
+ }
+ errors++;
+ }
+ }
+ if (data.truncate !== undefined) {
+ let data4 = data.truncate;
+ if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ const err4 = {
+ instancePath: instancePath + "/truncate",
+ schemaPath: "#/properties/truncate/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
+ vErrors = [err4];
+ }
+ else {
+ vErrors.push(err4);
+ }
+ errors++;
+ }
+ }
+ if (data.paddingLeft !== undefined) {
+ let data5 = data.paddingLeft;
+ if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
+ const err5 = {
+ instancePath: instancePath + "/paddingLeft",
+ schemaPath: "#/properties/paddingLeft/type",
+ keyword: "type",
+ params: {
+ type: "integer"
+ },
+ message: "must be integer"
+ };
+ if (vErrors === null) {
vErrors = [err5];
}
else {
@@ -1907,12 +2472,12 @@
errors++;
}
}
- if (data.truncate !== undefined) {
- let data4 = data.truncate;
- if (!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))) {
+ if (data.paddingRight !== undefined) {
+ let data6 = data.paddingRight;
+ if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
const err6 = {
- instancePath: instancePath + "/truncate",
- schemaPath: "#/properties/truncate/type",
+ instancePath: instancePath + "/paddingRight",
+ schemaPath: "#/properties/paddingRight/type",
keyword: "type",
params: {
type: "integer"
@@ -1928,51 +2493,9 @@
errors++;
}
}
- if (data.paddingLeft !== undefined) {
- let data5 = data.paddingLeft;
- if (!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))) {
- const err7 = {
- instancePath: instancePath + "/paddingLeft",
- schemaPath: "#/properties/paddingLeft/type",
- keyword: "type",
- params: {
- type: "integer"
- },
- message: "must be integer"
- };
- if (vErrors === null) {
- vErrors = [err7];
- }
- else {
- vErrors.push(err7);
- }
- errors++;
- }
- }
- if (data.paddingRight !== undefined) {
- let data6 = data.paddingRight;
- if (!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))) {
- const err8 = {
- instancePath: instancePath + "/paddingRight",
- schemaPath: "#/properties/paddingRight/type",
- keyword: "type",
- params: {
- type: "integer"
- },
- message: "must be integer"
- };
- if (vErrors === null) {
- vErrors = [err8];
- }
- else {
- vErrors.push(err8);
- }
- errors++;
- }
- }
}
else {
- const err9 = {
+ const err7 = {
instancePath,
schemaPath: "#/type",
keyword: "type",
@@ -1982,17 +2505,17 @@
message: "must be object"
};
if (vErrors === null) {
- vErrors = [err9];
+ vErrors = [err7];
}
else {
- vErrors.push(err9);
+ vErrors.push(err7);
}
errors++;
}
- validate99.errors = vErrors;
+ validate113.errors = vErrors;
return errors === 0;
}
-function validate76(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
+function validate86(data, { instancePath = "", parentData, parentDataProperty, rootData = data } = {}) {
/*# sourceURL="streamConfig.json" */ ;
let vErrors = null;
let errors = 0;
@@ -2054,35 +2577,35 @@
}
}
if (data.border !== undefined) {
- if (!(validate77(data.border, {
+ if (!(validate87(data.border, {
instancePath: instancePath + "/border",
parentData: data,
parentDataProperty: "border",
rootData
}))) {
- vErrors = vErrors === null ? validate77.errors : vErrors.concat(validate77.errors);
+ vErrors = vErrors === null ? validate87.errors : vErrors.concat(validate87.errors);
errors = vErrors.length;
}
}
if (data.columns !== undefined) {
- if (!(validate95(data.columns, {
+ if (!(validate109(data.columns, {
instancePath: instancePath + "/columns",
parentData: data,
parentDataProperty: "columns",
rootData
}))) {
- vErrors = vErrors === null ? validate95.errors : vErrors.concat(validate95.errors);
+ vErrors = vErrors === null ? validate109.errors : vErrors.concat(validate109.errors);
errors = vErrors.length;
}
}
if (data.columnDefault !== undefined) {
- if (!(validate99(data.columnDefault, {
+ if (!(validate113(data.columnDefault, {
instancePath: instancePath + "/columnDefault",
parentData: data,
parentDataProperty: "columnDefault",
rootData
}))) {
- vErrors = vErrors === null ? validate99.errors : vErrors.concat(validate99.errors);
+ vErrors = vErrors === null ? validate113.errors : vErrors.concat(validate113.errors);
errors = vErrors.length;
}
}
@@ -2165,6 +2688,7 @@
}
errors++;
}
- validate76.errors = vErrors;
+ validate86.errors = vErrors;
return errors === 0;
}
+//# sourceMappingURL=validators.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/generated/validators.js.map b/node_modules/table/dist/src/generated/validators.js.map
new file mode 100644
index 0000000..0436fc2
--- /dev/null
+++ b/node_modules/table/dist/src/generated/validators.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/generated/validators.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;AACpC,MAAM,QAAQ,GAAG;IACb,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,yCAAyC;IACpD,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE;QACV,QAAQ,EAAE;YACN,MAAM,EAAE,kCAAkC;SAC7C;QACD,QAAQ,EAAE;YACN,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE;gBACV,SAAS,EAAE;oBACP,MAAM,EAAE,QAAQ;iBACnB;gBACD,WAAW,EAAE;oBACT,MAAM,EAAE,oCAAoC;iBAC/C;gBACD,UAAU,EAAE;oBACR,MAAM,EAAE,SAAS;iBACpB;gBACD,UAAU,EAAE;oBACR,MAAM,EAAE,SAAS;iBACpB;gBACD,aAAa,EAAE;oBACX,MAAM,EAAE,SAAS;iBACpB;gBACD,cAAc,EAAE;oBACZ,MAAM,EAAE,SAAS;iBACpB;aACJ;YACD,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,sBAAsB,EAAE,KAAK;SAChC;QACD,SAAS,EAAE;YACP,MAAM,EAAE,kCAAkC;SAC7C;QACD,eAAe,EAAE;YACb,MAAM,EAAE,iCAAiC;SAC5C;QACD,kBAAkB,EAAE;YAChB,QAAQ,EAAE,UAAU;SACvB;QACD,oBAAoB,EAAE;YAClB,QAAQ,EAAE,UAAU;SACvB;QACD,YAAY,EAAE;YACV,QAAQ,EAAE,SAAS;SACtB;QACD,eAAe,EAAE;YACb,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACL,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE;oBACV,KAAK,EAAE;wBACH,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,CAAC;qBACf;oBACD,KAAK,EAAE;wBACH,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,CAAC;qBACf;oBACD,SAAS,EAAE;wBACP,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,CAAC;qBACf;oBACD,SAAS,EAAE;wBACP,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,CAAC;qBACf;oBACD,WAAW,EAAE;wBACT,MAAM,EAAE,oCAAoC;qBAC/C;oBACD,mBAAmB,EAAE;wBACjB,MAAM,EAAE,4CAA4C;qBACvD;oBACD,UAAU,EAAE;wBACR,MAAM,EAAE,SAAS;qBACpB;oBACD,UAAU,EAAE;wBACR,MAAM,EAAE,SAAS;qBACpB;oBACD,aAAa,EAAE;wBACX,MAAM,EAAE,SAAS;qBACpB;oBACD,cAAc,EAAE;wBACZ,MAAM,EAAE,SAAS;qBACpB;iBACJ;gBACD,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC1B,sBAAsB,EAAE,KAAK;aAChC;SACJ;KACJ;IACD,sBAAsB,EAAE,KAAK;CAChC,CAAC;AACF,MAAM,QAAQ,GAAG;IACb,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE;QACV,SAAS,EAAE;YACP,MAAM,EAAE,sBAAsB;SACjC;QACD,SAAS,EAAE;YACP,MAAM,EAAE,sBAAsB;SACjC;QACD,SAAS,EAAE;YACP,MAAM,EAAE,sBAAsB;SACjC;QACD,UAAU,EAAE;YACR,MAAM,EAAE,sBAAsB;SACjC;QACD,YAAY,EAAE;YACV,MAAM,EAAE,sBAAsB;SACjC;QACD,YAAY,EAAE;YACV,MAAM,EAAE,sBAAsB;SACjC;QACD,YAAY,EAAE;YACV,MAAM,EAAE,sBAAsB;SACjC;QACD,aAAa,EAAE;YACX,MAAM,EAAE,sBAAsB;SACjC;QACD,UAAU,EAAE;YACR,MAAM,EAAE,sBAAsB;SACjC;QACD,WAAW,EAAE;YACT,MAAM,EAAE,sBAAsB;SACjC;QACD,UAAU,EAAE;YACR,MAAM,EAAE,sBAAsB;SACjC;QACD,YAAY,EAAE;YACV,MAAM,EAAE,sBAAsB;SACjC;QACD,UAAU,EAAE;YACR,MAAM,EAAE,sBAAsB;SACjC;QACD,UAAU,EAAE;YACR,MAAM,EAAE,sBAAsB;SACjC;QACD,WAAW,EAAE;YACT,MAAM,EAAE,sBAAsB;SACjC;QACD,UAAU,EAAE;YACR,MAAM,EAAE,sBAAsB;SACjC;QACD,cAAc,EAAE;YACZ,MAAM,EAAE,sBAAsB;SACjC;QACD,gBAAgB,EAAE;YACd,MAAM,EAAE,sBAAsB;SACjC;QACD,gBAAgB,EAAE;YACd,MAAM,EAAE,sBAAsB;SACjC;QACD,iBAAiB,EAAE;YACf,MAAM,EAAE,sBAAsB;SACjC;KACJ;IACD,sBAAsB,EAAE,KAAK;CAChC,CAAC;AACF,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AAC9C,MAAM,QAAQ,GAAG;IACb,MAAM,EAAE,QAAQ;CACnB,CAAC;AAEF,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE;gBAC1C,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB,YAAY,EAAE,YAAY,GAAG,UAAU;gBACvC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,SAAS;gBAC7B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB,YAAY,EAAE,YAAY,GAAG,UAAU;gBACvC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,SAAS;gBAC7B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB,YAAY,EAAE,YAAY,GAAG,UAAU;gBACvC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,SAAS;gBAC7B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,YAAY,EAAE,YAAY,GAAG,aAAa;gBAC1C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,YAAY;gBAChC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,YAAY,EAAE,YAAY,GAAG,aAAa;gBAC1C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,YAAY;gBAChC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,YAAY,EAAE,YAAY,GAAG,aAAa;gBAC1C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,YAAY;gBAChC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC3B,YAAY,EAAE,YAAY,GAAG,cAAc;gBAC3C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,aAAa;gBACjC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;gBACzB,YAAY,EAAE,YAAY,GAAG,YAAY;gBACzC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,YAAY,EAAE,YAAY,GAAG,aAAa;gBAC1C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,YAAY;gBAChC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;gBACzB,YAAY,EAAE,YAAY,GAAG,YAAY;gBACzC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACjC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC5B,YAAY,EAAE,YAAY,GAAG,eAAe;gBAC5C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,cAAc;gBAClC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC9B,YAAY,EAAE,YAAY,GAAG,iBAAiB;gBAC9C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,gBAAgB;gBACpC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC9B,YAAY,EAAE,YAAY,GAAG,iBAAiB;gBAC9C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,gBAAgB;gBACpC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;YACpC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC/B,YAAY,EAAE,YAAY,GAAG,kBAAkB;gBAC/C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,iBAAiB;gBACrC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AACD,MAAM,QAAQ,GAAG;IACb,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;CACjD,CAAC;AACF,MAAM,KAAK,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC;AAExD,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,EAAE;QAC/F,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,aAAa,EAAE,QAAQ,CAAC,IAAI;aAC/B;YACD,OAAO,EAAE,4CAA4C;SACxD,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AACD,MAAM,QAAQ,GAAG;IACb,OAAO,EAAE,CAAC;YACN,MAAM,EAAE,QAAQ;YAChB,mBAAmB,EAAE;gBACjB,UAAU,EAAE;oBACR,MAAM,EAAE,sBAAsB;iBACjC;aACJ;YACD,sBAAsB,EAAE,KAAK;SAChC,EAAE;YACC,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACL,MAAM,EAAE,sBAAsB;aACjC;SACJ,CAAC;CACL,CAAC;AACF,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC7C,MAAM,QAAQ,GAAG;IACb,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE;QACV,WAAW,EAAE;YACT,MAAM,EAAE,yBAAyB;SACpC;QACD,mBAAmB,EAAE;YACjB,MAAM,EAAE,iCAAiC;SAC5C;QACD,OAAO,EAAE;YACL,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,CAAC;SACf;QACD,UAAU,EAAE;YACR,MAAM,EAAE,SAAS;SACpB;QACD,UAAU,EAAE;YACR,MAAM,EAAE,SAAS;SACpB;QACD,aAAa,EAAE;YACX,MAAM,EAAE,SAAS;SACpB;QACD,cAAc,EAAE;YACZ,MAAM,EAAE,SAAS;SACpB;KACJ;IACD,sBAAsB,EAAE,KAAK;CAChC,CAAC;AAEF,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,EAAE;QAC/F,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,aAAa,EAAE,QAAQ,CAAC,IAAI;aAC/B;YACD,OAAO,EAAE,4CAA4C;SACxD,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AACD,MAAM,QAAQ,GAAG;IACb,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;CACtC,CAAC;AAEF,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;QACrE,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,aAAa,EAAE,QAAQ,CAAC,IAAI;aAC/B;YACD,OAAO,EAAE,4CAA4C;SACxD,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,EAAE;gBACxM,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;gBACzB,YAAY,EAAE,YAAY,GAAG,YAAY;gBACzC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACtC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACjC,YAAY,EAAE,YAAY,GAAG,oBAAoB;gBACjD,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,mBAAmB;gBACvC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,QAAQ;oBACrC,UAAU,EAAE,yBAAyB;oBACrC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;YACD,IAAI,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC3B,MAAM,IAAI,GAAG;wBACT,YAAY,EAAE,YAAY,GAAG,QAAQ;wBACrC,UAAU,EAAE,4BAA4B;wBACxC,OAAO,EAAE,SAAS;wBAClB,MAAM,EAAE;4BACJ,UAAU,EAAE,IAAI;4BAChB,KAAK,EAAE,CAAC;yBACX;wBACD,OAAO,EAAE,cAAc;qBAC1B,CAAC;oBACF,IAAI,OAAO,KAAK,IAAI,EAAE;wBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;qBACpB;yBAAM;wBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACtB;oBACD,MAAM,EAAE,CAAC;iBACZ;aACJ;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;gBACpC,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,WAAW;oBACxC,UAAU,EAAE,4BAA4B;oBACxC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,WAAW;oBACxC,UAAU,EAAE,4BAA4B;oBACxC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,cAAc;oBAC3C,UAAU,EAAE,+BAA+B;oBAC3C,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACjC,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,eAAe;oBAC5C,UAAU,EAAE,gCAAgC;oBAC5C,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBACxB,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,gCAAgC;oBAC5C,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACrB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACrB,YAAY,EAAE,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;oBAChF,UAAU,EAAE,IAAI;oBAChB,kBAAkB,EAAE,IAAI;oBACxB,QAAQ;iBACX,CAAC,CAAC,EAAE;oBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;iBAC3B;aACJ;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,gBAAgB;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,IAAI,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC;IAChC,IAAI,OAAO,EAAE;QACT,MAAM,GAAG,IAAI,CAAC;QACd,QAAQ,GAAG,CAAC,CAAC;KAChB;IACD,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACnB,YAAY,EAAE,YAAY,GAAG,GAAG,GAAG,EAAE;gBACrC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,EAAE;gBACtB,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,gBAAgB;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,OAAO;aAChB;YACD,OAAO,EAAE,eAAe;SAC3B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,IAAI,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC;IAChC,IAAI,OAAO,IAAI,MAAM,EAAE;QACnB,MAAM,GAAG,KAAK,CAAC;QACf,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAC5B;SAAM;QACH,IAAI,OAAO,EAAE;YACT,MAAM,GAAG,IAAI,CAAC;YACd,QAAQ,GAAG,CAAC,CAAC;SAChB;KACJ;IACD,IAAI,CAAC,MAAM,EAAE;QACT,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE;gBACJ,cAAc,EAAE,QAAQ;aAC3B;YACD,OAAO,EAAE,wCAAwC;SACpD,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;SAAM;QACH,MAAM,GAAG,MAAM,CAAC;QAChB,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,EAAE;gBACR,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;aAC3B;iBAAM;gBACH,OAAO,GAAG,IAAI,CAAC;aAClB;SACJ;KACJ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,EAAE;gBACxM,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;gBACzB,YAAY,EAAE,YAAY,GAAG,YAAY;gBACzC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACtC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACjC,YAAY,EAAE,YAAY,GAAG,oBAAoB;gBACjD,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,mBAAmB;gBACvC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,QAAQ;oBACrC,UAAU,EAAE,yBAAyB;oBACrC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;YACD,IAAI,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC3B,MAAM,IAAI,GAAG;wBACT,YAAY,EAAE,YAAY,GAAG,QAAQ;wBACrC,UAAU,EAAE,4BAA4B;wBACxC,OAAO,EAAE,SAAS;wBAClB,MAAM,EAAE;4BACJ,UAAU,EAAE,IAAI;4BAChB,KAAK,EAAE,CAAC;yBACX;wBACD,OAAO,EAAE,cAAc;qBAC1B,CAAC;oBACF,IAAI,OAAO,KAAK,IAAI,EAAE;wBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;qBACpB;yBAAM;wBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACtB;oBACD,MAAM,EAAE,CAAC;iBACZ;aACJ;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;gBACpC,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,WAAW;oBACxC,UAAU,EAAE,4BAA4B;oBACxC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,WAAW;oBACxC,UAAU,EAAE,4BAA4B;oBACxC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,cAAc;oBAC3C,UAAU,EAAE,+BAA+B;oBAC3C,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACjC,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,eAAe;oBAC5C,UAAU,EAAE,gCAAgC;oBAC5C,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;QACrE,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,aAAa,EAAE,QAAQ,CAAC,IAAI;aAC/B;YACD,OAAO,EAAE,4CAA4C;SACxD,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,8BAA8B,CAAC,CAAC;IAChC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,EAAE;gBAC9O,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE;gBACtB,YAAY,EAAE,YAAY,GAAG,SAAS;gBACtC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,QAAQ;gBAC5B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,IAAI,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC5D,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;oBAC7B,MAAM,IAAI,GAAG;wBACT,YAAY,EAAE,YAAY,GAAG,SAAS;wBACtC,UAAU,EAAE,8BAA8B;wBAC1C,OAAO,EAAE,UAAU;wBACnB,MAAM,EAAE;4BACJ,eAAe,EAAE,SAAS;yBAC7B;wBACD,OAAO,EAAE,+BAA+B,GAAG,SAAS,GAAG,GAAG;qBAC7D,CAAC;oBACF,IAAI,OAAO,KAAK,IAAI,EAAE;wBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;qBACpB;yBAAM;wBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACtB;oBACD,MAAM,EAAE,CAAC;iBACZ;gBACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;oBACtB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,EAAE;wBACtK,MAAM,IAAI,GAAG;4BACT,YAAY,EAAE,YAAY,GAAG,SAAS;4BACtC,UAAU,EAAE,0CAA0C;4BACtD,OAAO,EAAE,sBAAsB;4BAC/B,MAAM,EAAE;gCACJ,kBAAkB,EAAE,IAAI;6BAC3B;4BACD,OAAO,EAAE,qCAAqC;yBACjD,CAAC;wBACF,IAAI,OAAO,KAAK,IAAI,EAAE;4BAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;yBACpB;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACtB;wBACD,MAAM,EAAE,CAAC;qBACZ;iBACJ;gBACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;oBAC7B,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;wBACnC,MAAM,IAAI,GAAG;4BACT,YAAY,EAAE,YAAY,GAAG,iBAAiB;4BAC9C,UAAU,EAAE,6CAA6C;4BACzD,OAAO,EAAE,MAAM;4BACf,MAAM,EAAE;gCACJ,IAAI,EAAE,QAAQ;6BACjB;4BACD,OAAO,EAAE,gBAAgB;yBAC5B,CAAC;wBACF,IAAI,OAAO,KAAK,IAAI,EAAE;4BAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;yBACpB;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACtB;wBACD,MAAM,EAAE,CAAC;qBACZ;iBACJ;gBACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE;oBAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE;wBAC1B,YAAY,EAAE,YAAY,GAAG,mBAAmB;wBAChD,UAAU,EAAE,KAAK;wBACjB,kBAAkB,EAAE,WAAW;wBAC/B,QAAQ;qBACX,CAAC,CAAC,EAAE;wBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;qBAC3B;iBACJ;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE;oBAC9B,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE;wBACrC,MAAM,IAAI,GAAG;4BACT,YAAY,EAAE,YAAY,GAAG,kBAAkB;4BAC/C,UAAU,EAAE,8CAA8C;4BAC1D,OAAO,EAAE,MAAM;4BACf,MAAM,EAAE;gCACJ,IAAI,EAAE,SAAS;6BAClB;4BACD,OAAO,EAAE,iBAAiB;yBAC7B,CAAC;wBACF,IAAI,OAAO,KAAK,IAAI,EAAE;4BAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;yBACpB;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACtB;wBACD,MAAM,EAAE,CAAC;qBACZ;iBACJ;gBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE;oBAC9B,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;wBACzF,MAAM,IAAI,GAAG;4BACT,YAAY,EAAE,YAAY,GAAG,kBAAkB;4BAC/C,UAAU,EAAE,8CAA8C;4BAC1D,OAAO,EAAE,MAAM;4BACf,MAAM,EAAE;gCACJ,IAAI,EAAE,SAAS;6BAClB;4BACD,OAAO,EAAE,iBAAiB;yBAC7B,CAAC;wBACF,IAAI,OAAO,KAAK,IAAI,EAAE;4BAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;yBACpB;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACtB;wBACD,MAAM,EAAE,CAAC;qBACZ;iBACJ;gBACD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE;oBACjC,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;oBAC9B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;wBACzF,MAAM,IAAI,GAAG;4BACT,YAAY,EAAE,YAAY,GAAG,qBAAqB;4BAClD,UAAU,EAAE,iDAAiD;4BAC7D,OAAO,EAAE,MAAM;4BACf,MAAM,EAAE;gCACJ,IAAI,EAAE,SAAS;6BAClB;4BACD,OAAO,EAAE,iBAAiB;yBAC7B,CAAC;wBACF,IAAI,OAAO,KAAK,IAAI,EAAE;4BAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;yBACpB;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACtB;wBACD,MAAM,EAAE,CAAC;qBACZ;iBACJ;gBACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE;oBAClC,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;oBAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;wBACzF,MAAM,IAAI,GAAG;4BACT,YAAY,EAAE,YAAY,GAAG,sBAAsB;4BACnD,UAAU,EAAE,kDAAkD;4BAC9D,OAAO,EAAE,MAAM;4BACf,MAAM,EAAE;gCACJ,IAAI,EAAE,SAAS;6BAClB;4BACD,OAAO,EAAE,iBAAiB;yBAC7B,CAAC;wBACF,IAAI,OAAO,KAAK,IAAI,EAAE;4BAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;yBACpB;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBACtB;wBACD,MAAM,EAAE,CAAC;qBACZ;iBACJ;aACJ;iBAAM;gBACH,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,SAAS;oBACtC,UAAU,EAAE,0BAA0B;oBACtC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,QAAQ;qBACjB;oBACD,OAAO,EAAE,gBAAgB;iBAC5B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB,YAAY,EAAE,YAAY,GAAG,UAAU;gBACvC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,SAAS;gBAC7B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC7B,YAAY,EAAE,YAAY,GAAG,gBAAgB;gBAC7C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,eAAe;gBACnC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACrC,IAAI,OAAO,IAAI,CAAC,gBAAgB,IAAI,UAAU,EAAE;gBAC5C,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,mBAAmB;oBAChD,UAAU,EAAE,sCAAsC;oBAClD,OAAO,EAAE,QAAQ;oBACjB,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,yCAAyC;iBACrD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACvC,IAAI,OAAO,IAAI,CAAC,kBAAkB,IAAI,UAAU,EAAE;gBAC9C,MAAM,KAAK,GAAG;oBACV,YAAY,EAAE,YAAY,GAAG,qBAAqB;oBAClD,UAAU,EAAE,wCAAwC;oBACpD,OAAO,EAAE,QAAQ;oBACjB,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,yCAAyC;iBACrD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iBACrB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACvB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,OAAO,IAAI,CAAC,UAAU,IAAI,SAAS,EAAE;gBACrC,MAAM,KAAK,GAAG;oBACV,YAAY,EAAE,YAAY,GAAG,aAAa;oBAC1C,UAAU,EAAE,gCAAgC;oBAC5C,OAAO,EAAE,QAAQ;oBACjB,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,yCAAyC;iBACrD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iBACrB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACvB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YAClC,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;YAChC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC3B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE;oBAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;oBACxB,IAAI,MAAM,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBAC/D,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;4BAC1B,MAAM,KAAK,GAAG;gCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE;gCACnD,UAAU,EAAE,2CAA2C;gCACvD,OAAO,EAAE,UAAU;gCACnB,MAAM,EAAE;oCACJ,eAAe,EAAE,KAAK;iCACzB;gCACD,OAAO,EAAE,+BAA+B,GAAG,KAAK,GAAG,GAAG;6BACzD,CAAC;4BACF,IAAI,OAAO,KAAK,IAAI,EAAE;gCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;6BACrB;iCAAM;gCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;6BACvB;4BACD,MAAM,EAAE,CAAC;yBACZ;wBACD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;4BAC1B,MAAM,KAAK,GAAG;gCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE;gCACnD,UAAU,EAAE,2CAA2C;gCACvD,OAAO,EAAE,UAAU;gCACnB,MAAM,EAAE;oCACJ,eAAe,EAAE,KAAK;iCACzB;gCACD,OAAO,EAAE,+BAA+B,GAAG,KAAK,GAAG,GAAG;6BACzD,CAAC;4BACF,IAAI,OAAO,KAAK,IAAI,EAAE;gCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;6BACrB;iCAAM;gCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;6BACvB;4BACD,MAAM,EAAE,CAAC;yBACZ;wBACD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;4BACvB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE;gCACzE,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE;oCACnD,UAAU,EAAE,uDAAuD;oCACnE,OAAO,EAAE,sBAAsB;oCAC/B,MAAM,EAAE;wCACJ,kBAAkB,EAAE,IAAI;qCAC3B;oCACD,OAAO,EAAE,qCAAqC;iCACjD,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;yBACJ;wBACD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;4BAC1B,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;4BACxB,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gCAC7F,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,MAAM;oCAC5D,UAAU,EAAE,sDAAsD;oCAClE,OAAO,EAAE,MAAM;oCACf,MAAM,EAAE;wCACJ,IAAI,EAAE,SAAS;qCAClB;oCACD,OAAO,EAAE,iBAAiB;iCAC7B,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;4BACD,IAAI,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gCACnD,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;oCAC7B,MAAM,KAAK,GAAG;wCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,MAAM;wCAC5D,UAAU,EAAE,yDAAyD;wCACrE,OAAO,EAAE,SAAS;wCAClB,MAAM,EAAE;4CACJ,UAAU,EAAE,IAAI;4CAChB,KAAK,EAAE,CAAC;yCACX;wCACD,OAAO,EAAE,cAAc;qCAC1B,CAAC;oCACF,IAAI,OAAO,KAAK,IAAI,EAAE;wCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;qCACrB;yCAAM;wCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qCACvB;oCACD,MAAM,EAAE,CAAC;iCACZ;6BACJ;yBACJ;wBACD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;4BAC1B,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;4BACxB,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gCAC7F,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,MAAM;oCAC5D,UAAU,EAAE,sDAAsD;oCAClE,OAAO,EAAE,MAAM;oCACf,MAAM,EAAE;wCACJ,IAAI,EAAE,SAAS;qCAClB;oCACD,OAAO,EAAE,iBAAiB;iCAC7B,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;4BACD,IAAI,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gCACnD,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;oCAC7B,MAAM,KAAK,GAAG;wCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,MAAM;wCAC5D,UAAU,EAAE,yDAAyD;wCACrE,OAAO,EAAE,SAAS;wCAClB,MAAM,EAAE;4CACJ,UAAU,EAAE,IAAI;4CAChB,KAAK,EAAE,CAAC;yCACX;wCACD,OAAO,EAAE,cAAc;qCAC1B,CAAC;oCACF,IAAI,OAAO,KAAK,IAAI,EAAE;wCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;qCACrB;yCAAM;wCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qCACvB;oCACD,MAAM,EAAE,CAAC;iCACZ;6BACJ;yBACJ;wBACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;4BAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;4BAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gCAC7F,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,UAAU;oCAChE,UAAU,EAAE,0DAA0D;oCACtE,OAAO,EAAE,MAAM;oCACf,MAAM,EAAE;wCACJ,IAAI,EAAE,SAAS;qCAClB;oCACD,OAAO,EAAE,iBAAiB;iCAC7B,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;4BACD,IAAI,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gCACnD,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;oCAC7B,MAAM,KAAK,GAAG;wCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,UAAU;wCAChE,UAAU,EAAE,6DAA6D;wCACzE,OAAO,EAAE,SAAS;wCAClB,MAAM,EAAE;4CACJ,UAAU,EAAE,IAAI;4CAChB,KAAK,EAAE,CAAC;yCACX;wCACD,OAAO,EAAE,cAAc;qCAC1B,CAAC;oCACF,IAAI,OAAO,KAAK,IAAI,EAAE;wCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;qCACrB;yCAAM;wCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qCACvB;oCACD,MAAM,EAAE,CAAC;iCACZ;6BACJ;yBACJ;wBACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;4BAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;4BAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gCAC7F,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,UAAU;oCAChE,UAAU,EAAE,0DAA0D;oCACtE,OAAO,EAAE,MAAM;oCACf,MAAM,EAAE;wCACJ,IAAI,EAAE,SAAS;qCAClB;oCACD,OAAO,EAAE,iBAAiB;iCAC7B,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;4BACD,IAAI,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gCACnD,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;oCAC7B,MAAM,KAAK,GAAG;wCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,UAAU;wCAChE,UAAU,EAAE,6DAA6D;wCACzE,OAAO,EAAE,SAAS;wCAClB,MAAM,EAAE;4CACJ,UAAU,EAAE,IAAI;4CAChB,KAAK,EAAE,CAAC;yCACX;wCACD,OAAO,EAAE,cAAc;qCAC1B,CAAC;oCACF,IAAI,OAAO,KAAK,IAAI,EAAE;wCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;qCACrB;yCAAM;wCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qCACvB;oCACD,MAAM,EAAE,CAAC;iCACZ;6BACJ;yBACJ;wBACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;4BAChC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE;gCAC3B,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,YAAY;gCAClE,UAAU,EAAE,MAAM;gCAClB,kBAAkB,EAAE,WAAW;gCAC/B,QAAQ;6BACX,CAAC,CAAC,EAAE;gCACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gCACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;6BAC3B;yBACJ;wBACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE;4BACxC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,iBAAiB,EAAE;gCACnC,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,oBAAoB;gCAC1E,UAAU,EAAE,MAAM;gCAClB,kBAAkB,EAAE,mBAAmB;gCACvC,QAAQ;6BACX,CAAC,CAAC,EAAE;gCACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gCACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;6BAC3B;yBACJ;wBACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;4BAC/B,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;gCACtC,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,WAAW;oCACjE,UAAU,EAAE,2DAA2D;oCACvE,OAAO,EAAE,MAAM;oCACf,MAAM,EAAE;wCACJ,IAAI,EAAE,SAAS;qCAClB;oCACD,OAAO,EAAE,iBAAiB;iCAC7B,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;yBACJ;wBACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;4BAC/B,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;4BAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gCAC7F,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,WAAW;oCACjE,UAAU,EAAE,2DAA2D;oCACvE,OAAO,EAAE,MAAM;oCACf,MAAM,EAAE;wCACJ,IAAI,EAAE,SAAS;qCAClB;oCACD,OAAO,EAAE,iBAAiB;iCAC7B,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;yBACJ;wBACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;4BAClC,IAAI,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;4BAChC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gCAC7F,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,cAAc;oCACpE,UAAU,EAAE,8DAA8D;oCAC1E,OAAO,EAAE,MAAM;oCACf,MAAM,EAAE;wCACJ,IAAI,EAAE,SAAS;qCAClB;oCACD,OAAO,EAAE,iBAAiB;iCAC7B,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;yBACJ;wBACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE;4BACnC,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;4BACjC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gCAC7F,MAAM,KAAK,GAAG;oCACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE,GAAG,eAAe;oCACrE,UAAU,EAAE,+DAA+D;oCAC3E,OAAO,EAAE,MAAM;oCACf,MAAM,EAAE;wCACJ,IAAI,EAAE,SAAS;qCAClB;oCACD,OAAO,EAAE,iBAAiB;iCAC7B,CAAC;gCACF,IAAI,OAAO,KAAK,IAAI,EAAE;oCAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iCACrB;qCAAM;oCACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iCACvB;gCACD,MAAM,EAAE,CAAC;6BACZ;yBACJ;qBACJ;yBAAM;wBACH,MAAM,KAAK,GAAG;4BACV,YAAY,EAAE,YAAY,GAAG,iBAAiB,GAAG,EAAE;4BACnD,UAAU,EAAE,uCAAuC;4BACnD,OAAO,EAAE,MAAM;4BACf,MAAM,EAAE;gCACJ,IAAI,EAAE,QAAQ;6BACjB;4BACD,OAAO,EAAE,gBAAgB;yBAC5B,CAAC;wBACF,IAAI,OAAO,KAAK,IAAI,EAAE;4BAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;yBACrB;6BAAM;4BACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBACvB;wBACD,MAAM,EAAE,CAAC;qBACZ;iBACJ;aACJ;iBAAM;gBACH,MAAM,KAAK,GAAG;oBACV,YAAY,EAAE,YAAY,GAAG,gBAAgB;oBAC7C,UAAU,EAAE,iCAAiC;oBAC7C,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,OAAO;qBAChB;oBACD,OAAO,EAAE,eAAe;iBAC3B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;iBACrB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACvB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;KACJ;SAAM;QACH,MAAM,KAAK,GAAG;YACV,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;SACrB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AACD,OAAO,CAAC,mBAAmB,CAAC,GAAG,UAAU,CAAC;AAC1C,MAAM,QAAQ,GAAG;IACb,KAAK,EAAE,mBAAmB;IAC1B,SAAS,EAAE,yCAAyC;IACpD,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE;QACV,QAAQ,EAAE;YACN,MAAM,EAAE,kCAAkC;SAC7C;QACD,SAAS,EAAE;YACP,MAAM,EAAE,kCAAkC;SAC7C;QACD,eAAe,EAAE;YACb,MAAM,EAAE,iCAAiC;SAC5C;QACD,aAAa,EAAE;YACX,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,CAAC;SACf;QACD,kBAAkB,EAAE;YAChB,QAAQ,EAAE,UAAU;SACvB;KACJ;IACD,UAAU,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC;IAC5C,sBAAsB,EAAE,KAAK;CAChC,CAAC;AAEF,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE;gBAC1C,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB,YAAY,EAAE,YAAY,GAAG,UAAU;gBACvC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,SAAS;gBAC7B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB,YAAY,EAAE,YAAY,GAAG,UAAU;gBACvC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,SAAS;gBAC7B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB,YAAY,EAAE,YAAY,GAAG,UAAU;gBACvC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,SAAS;gBAC7B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,YAAY,EAAE,YAAY,GAAG,aAAa;gBAC1C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,YAAY;gBAChC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,YAAY,EAAE,YAAY,GAAG,aAAa;gBAC1C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,YAAY;gBAChC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,YAAY,EAAE,YAAY,GAAG,aAAa;gBAC1C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,YAAY;gBAChC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC3B,YAAY,EAAE,YAAY,GAAG,cAAc;gBAC3C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,aAAa;gBACjC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;gBACzB,YAAY,EAAE,YAAY,GAAG,YAAY;gBACzC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,YAAY,EAAE,YAAY,GAAG,aAAa;gBAC1C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,YAAY;gBAChC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;gBACzB,YAAY,EAAE,YAAY,GAAG,YAAY;gBACzC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,WAAW;gBACxC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,UAAU;gBAC9B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACjC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC5B,YAAY,EAAE,YAAY,GAAG,eAAe;gBAC5C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,cAAc;gBAClC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC9B,YAAY,EAAE,YAAY,GAAG,iBAAiB;gBAC9C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,gBAAgB;gBACpC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC9B,YAAY,EAAE,YAAY,GAAG,iBAAiB;gBAC9C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,gBAAgB;gBACpC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;YACpC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC/B,YAAY,EAAE,YAAY,GAAG,kBAAkB;gBAC/C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,iBAAiB;gBACrC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,IAAI,EAAE,EACvB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBACxB,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,gCAAgC;oBAC5C,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACrB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACrB,YAAY,EAAE,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;oBAChF,UAAU,EAAE,IAAI;oBAChB,kBAAkB,EAAE,IAAI;oBACxB,QAAQ;iBACX,CAAC,CAAC,EAAE;oBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;iBAC3B;aACJ;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,gBAAgB;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,IAAI,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC;IAChC,IAAI,OAAO,EAAE;QACT,MAAM,GAAG,IAAI,CAAC;QACd,QAAQ,GAAG,CAAC,CAAC;KAChB;IACD,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACnB,YAAY,EAAE,YAAY,GAAG,GAAG,GAAG,EAAE;gBACrC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,EAAE;gBACtB,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,gBAAgB;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,OAAO;aAChB;YACD,OAAO,EAAE,eAAe;SAC3B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,IAAI,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC;IAChC,IAAI,OAAO,IAAI,MAAM,EAAE;QACnB,MAAM,GAAG,KAAK,CAAC;QACf,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAC5B;SAAM;QACH,IAAI,OAAO,EAAE;YACT,MAAM,GAAG,IAAI,CAAC;YACd,QAAQ,GAAG,CAAC,CAAC;SAChB;KACJ;IACD,IAAI,CAAC,MAAM,EAAE;QACT,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE;gBACJ,cAAc,EAAE,QAAQ;aAC3B;YACD,OAAO,EAAE,wCAAwC;SACpD,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;SAAM;QACH,MAAM,GAAG,MAAM,CAAC;QAChB,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,EAAE;gBACR,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;aAC3B;iBAAM;gBACH,OAAO,GAAG,IAAI,CAAC;aAClB;SACJ;KACJ;IACD,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC;IAC7B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,IAAI,EAAE,EACvB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,EAAE;gBACxM,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;gBACzB,YAAY,EAAE,YAAY,GAAG,YAAY;gBACzC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACtC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACjC,YAAY,EAAE,YAAY,GAAG,oBAAoB;gBACjD,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,mBAAmB;gBACvC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,QAAQ;oBACrC,UAAU,EAAE,yBAAyB;oBACrC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;YACD,IAAI,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC3B,MAAM,IAAI,GAAG;wBACT,YAAY,EAAE,YAAY,GAAG,QAAQ;wBACrC,UAAU,EAAE,4BAA4B;wBACxC,OAAO,EAAE,SAAS;wBAClB,MAAM,EAAE;4BACJ,UAAU,EAAE,IAAI;4BAChB,KAAK,EAAE,CAAC;yBACX;wBACD,OAAO,EAAE,cAAc;qBAC1B,CAAC;oBACF,IAAI,OAAO,KAAK,IAAI,EAAE;wBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;qBACpB;yBAAM;wBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACtB;oBACD,MAAM,EAAE,CAAC;iBACZ;aACJ;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;gBACpC,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,WAAW;oBACxC,UAAU,EAAE,4BAA4B;oBACxC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,WAAW;oBACxC,UAAU,EAAE,4BAA4B;oBACxC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,cAAc;oBAC3C,UAAU,EAAE,+BAA+B;oBAC3C,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACjC,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,eAAe;oBAC5C,UAAU,EAAE,gCAAgC;oBAC5C,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC;IAC7B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,IAAI,EAAE,EACtB,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,kBAAkB,EAClB,QAAQ,GAAG,IAAI,EAClB,GAAG,EAAE;IACF,oCAAoC,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACzD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YAClC,MAAM,IAAI,GAAG;gBACT,YAAY;gBACZ,UAAU,EAAE,YAAY;gBACxB,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE;oBACJ,eAAe,EAAE,eAAe;iBACnC;gBACD,OAAO,EAAE,+BAA+B,GAAG,eAAe,GAAG,GAAG;aACnE,CAAC;YACF,IAAI,OAAO,KAAK,IAAI,EAAE;gBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;aACpB;iBAAM;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtB;YACD,MAAM,EAAE,CAAC;SACZ;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,GAAG;gBACT,YAAY;gBACZ,UAAU,EAAE,YAAY;gBACxB,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE;oBACJ,eAAe,EAAE,aAAa;iBACjC;gBACD,OAAO,EAAE,+BAA+B,GAAG,aAAa,GAAG,GAAG;aACjE,CAAC;YACF,IAAI,OAAO,KAAK,IAAI,EAAE;gBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;aACpB;iBAAM;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtB;YACD,MAAM,EAAE,CAAC;SACZ;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,EAAE;gBACjJ,MAAM,IAAI,GAAG;oBACT,YAAY;oBACZ,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,sBAAsB;oBAC/B,MAAM,EAAE;wBACJ,kBAAkB,EAAE,IAAI;qBAC3B;oBACD,OAAO,EAAE,qCAAqC;iBACjD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE;gBACtB,YAAY,EAAE,YAAY,GAAG,SAAS;gBACtC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,QAAQ;gBAC5B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC5B,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE;gBACxB,YAAY,EAAE,YAAY,GAAG,UAAU;gBACvC,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,SAAS;gBAC7B,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACrF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC9B,YAAY,EAAE,YAAY,GAAG,gBAAgB;gBAC7C,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,eAAe;gBACnC,QAAQ;aACX,CAAC,CAAC,EAAE;gBACL,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACrF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3B;SACJ;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,cAAc;oBAC3C,UAAU,EAAE,+BAA+B;oBAC3C,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE;wBACJ,IAAI,EAAE,SAAS;qBAClB;oBACD,OAAO,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;YACD,IAAI,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC3B,MAAM,IAAI,GAAG;wBACT,YAAY,EAAE,YAAY,GAAG,cAAc;wBAC3C,UAAU,EAAE,kCAAkC;wBAC9C,OAAO,EAAE,SAAS;wBAClB,MAAM,EAAE;4BACJ,UAAU,EAAE,IAAI;4BAChB,KAAK,EAAE,CAAC;yBACX;wBACD,OAAO,EAAE,cAAc;qBAC1B,CAAC;oBACF,IAAI,OAAO,KAAK,IAAI,EAAE;wBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;qBACpB;yBAAM;wBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACtB;oBACD,MAAM,EAAE,CAAC;iBACZ;aACJ;SACJ;QACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACrC,IAAI,OAAO,IAAI,CAAC,gBAAgB,IAAI,UAAU,EAAE;gBAC5C,MAAM,IAAI,GAAG;oBACT,YAAY,EAAE,YAAY,GAAG,mBAAmB;oBAChD,UAAU,EAAE,sCAAsC;oBAClD,OAAO,EAAE,QAAQ;oBACjB,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,yCAAyC;iBACrD,CAAC;gBACF,IAAI,OAAO,KAAK,IAAI,EAAE;oBAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,MAAM,EAAE,CAAC;aACZ;SACJ;KACJ;SAAM;QACH,MAAM,IAAI,GAAG;YACT,YAAY;YACZ,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,gBAAgB;SAC5B,CAAC;QACF,IAAI,OAAO,KAAK,IAAI,EAAE;YAClB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,MAAM,EAAE,CAAC;KACZ;IACD,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC;IAC5B,OAAO,MAAM,KAAK,CAAC,CAAC;AACxB,CAAC"}
\ No newline at end of file
diff --git a/node_modules/table/dist/getBorderCharacters.d.ts b/node_modules/table/dist/src/getBorderCharacters.d.ts
similarity index 100%
rename from node_modules/table/dist/getBorderCharacters.d.ts
rename to node_modules/table/dist/src/getBorderCharacters.d.ts
diff --git a/node_modules/table/dist/getBorderCharacters.js b/node_modules/table/dist/src/getBorderCharacters.js
similarity index 80%
rename from node_modules/table/dist/getBorderCharacters.js
rename to node_modules/table/dist/src/getBorderCharacters.js
index 3662a8a..24b2612 100644
--- a/node_modules/table/dist/getBorderCharacters.js
+++ b/node_modules/table/dist/src/getBorderCharacters.js
@@ -21,6 +21,10 @@
joinLeft: '╟',
joinRight: '╢',
joinJoin: '┼',
+ joinMiddleDown: '┬',
+ joinMiddleUp: '┴',
+ joinMiddleLeft: '┤',
+ joinMiddleRight: '├',
};
}
if (name === 'norc') {
@@ -41,6 +45,10 @@
joinLeft: '├',
joinRight: '┤',
joinJoin: '┼',
+ joinMiddleDown: '┬',
+ joinMiddleUp: '┴',
+ joinMiddleLeft: '┤',
+ joinMiddleRight: '├',
};
}
if (name === 'ramac') {
@@ -61,6 +69,10 @@
joinLeft: '|',
joinRight: '|',
joinJoin: '|',
+ joinMiddleDown: '+',
+ joinMiddleUp: '+',
+ joinMiddleLeft: '+',
+ joinMiddleRight: '+',
};
}
if (name === 'void') {
@@ -81,8 +93,13 @@
joinLeft: '',
joinRight: '',
joinJoin: '',
+ joinMiddleDown: '',
+ joinMiddleUp: '',
+ joinMiddleLeft: '',
+ joinMiddleRight: '',
};
}
throw new Error('Unknown border template "' + name + '".');
};
exports.getBorderCharacters = getBorderCharacters;
+//# sourceMappingURL=getBorderCharacters.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/getBorderCharacters.js.map b/node_modules/table/dist/src/getBorderCharacters.js.map
new file mode 100644
index 0000000..848b993
--- /dev/null
+++ b/node_modules/table/dist/src/getBorderCharacters.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getBorderCharacters.js","sourceRoot":"","sources":["../../src/getBorderCharacters.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/table/dist/index.d.ts b/node_modules/table/dist/src/index.d.ts
similarity index 100%
rename from node_modules/table/dist/index.d.ts
rename to node_modules/table/dist/src/index.d.ts
diff --git a/node_modules/table/dist/index.js b/node_modules/table/dist/src/index.js
similarity index 97%
rename from node_modules/table/dist/index.js
rename to node_modules/table/dist/src/index.js
index f8f8402..6271ec6 100644
--- a/node_modules/table/dist/index.js
+++ b/node_modules/table/dist/src/index.js
@@ -18,3 +18,4 @@
const table_1 = require("./table");
Object.defineProperty(exports, "table", { enumerable: true, get: function () { return table_1.table; } });
__exportStar(require("./types/api"), exports);
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/index.js.map b/node_modules/table/dist/src/index.js.map
new file mode 100644
index 0000000..9344306
--- /dev/null
+++ b/node_modules/table/dist/src/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,iDAEwB;AAUtB,6FAXA,2BAAY,OAWA;AATd,+DAE+B;AAQ7B,oGATA,yCAAmB,OASA;AAPrB,mCAEiB;AAGf,sFAJA,aAAK,OAIA;AAKP,8CAA4B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/injectHeaderConfig.d.ts b/node_modules/table/dist/src/injectHeaderConfig.d.ts
new file mode 100644
index 0000000..8acf707
--- /dev/null
+++ b/node_modules/table/dist/src/injectHeaderConfig.d.ts
@@ -0,0 +1,3 @@
+import type { SpanningCellConfig, TableUserConfig } from './types/api';
+import type { Row } from './types/internal';
+export declare const injectHeaderConfig: (rows: Row[], config: TableUserConfig) => [Row[], SpanningCellConfig[]];
diff --git a/node_modules/table/dist/src/injectHeaderConfig.js b/node_modules/table/dist/src/injectHeaderConfig.js
new file mode 100644
index 0000000..2e82d12
--- /dev/null
+++ b/node_modules/table/dist/src/injectHeaderConfig.js
@@ -0,0 +1,29 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.injectHeaderConfig = void 0;
+const injectHeaderConfig = (rows, config) => {
+ var _a;
+ let spanningCellConfig = (_a = config.spanningCells) !== null && _a !== void 0 ? _a : [];
+ const headerConfig = config.header;
+ const adjustedRows = [...rows];
+ if (headerConfig) {
+ spanningCellConfig = spanningCellConfig.map(({ row, ...rest }) => {
+ return { ...rest,
+ row: row + 1 };
+ });
+ const { content, ...headerStyles } = headerConfig;
+ spanningCellConfig.unshift({ alignment: 'center',
+ col: 0,
+ colSpan: rows[0].length,
+ paddingLeft: 1,
+ paddingRight: 1,
+ row: 0,
+ wrapWord: false,
+ ...headerStyles });
+ adjustedRows.unshift([content, ...Array.from({ length: rows[0].length - 1 }).fill('')]);
+ }
+ return [adjustedRows,
+ spanningCellConfig];
+};
+exports.injectHeaderConfig = injectHeaderConfig;
+//# sourceMappingURL=injectHeaderConfig.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/injectHeaderConfig.js.map b/node_modules/table/dist/src/injectHeaderConfig.js.map
new file mode 100644
index 0000000..29eead9
--- /dev/null
+++ b/node_modules/table/dist/src/injectHeaderConfig.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"injectHeaderConfig.js","sourceRoot":"","sources":["../../src/injectHeaderConfig.ts"],"names":[],"mappings":";;;AAQO,MAAM,kBAAkB,GAAG,CAAC,IAAW,EAAE,MAAuB,EAAiC,EAAE;;IACxG,IAAI,kBAAkB,GAAG,MAAA,MAAM,CAAC,aAAa,mCAAI,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAE/B,IAAI,YAAY,EAAE;QAChB,kBAAkB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,EAAE,GAAG,IAAI,EAAC,EAAE,EAAE;YAC7D,OAAO,EAAC,GAAG,IAAI;gBACb,GAAG,EAAE,GAAG,GAAG,CAAC,EAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,EAAC,OAAO,EAAE,GAAG,YAAY,EAAC,GAAG,YAAY,CAAC;QAEhD,kBAAkB,CAAC,OAAO,CAAC,EAAC,SAAS,EAAE,QAAQ;YAC7C,GAAG,EAAE,CAAC;YACN,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;YACvB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,KAAK;YACf,GAAG,YAAY,EAAC,CAAC,CAAC;QAEpB,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,CAAS,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC/F;IAED,OAAO,CAAC,YAAY;QAClB,kBAAkB,CAAC,CAAC;AACxB,CAAC,CAAC;AA3BW,QAAA,kBAAkB,sBA2B7B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/makeRangeConfig.d.ts b/node_modules/table/dist/src/makeRangeConfig.d.ts
new file mode 100644
index 0000000..b2d2c33
--- /dev/null
+++ b/node_modules/table/dist/src/makeRangeConfig.d.ts
@@ -0,0 +1,3 @@
+import type { SpanningCellConfig } from './types/api';
+import type { ColumnConfig, RangeConfig } from './types/internal';
+export declare const makeRangeConfig: (spanningCellConfig: SpanningCellConfig, columnsConfig: ColumnConfig[]) => RangeConfig;
diff --git a/node_modules/table/dist/src/makeRangeConfig.js b/node_modules/table/dist/src/makeRangeConfig.js
new file mode 100644
index 0000000..2acd824
--- /dev/null
+++ b/node_modules/table/dist/src/makeRangeConfig.js
@@ -0,0 +1,18 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.makeRangeConfig = void 0;
+const utils_1 = require("./utils");
+const makeRangeConfig = (spanningCellConfig, columnsConfig) => {
+ var _a;
+ const { topLeft, bottomRight } = (0, utils_1.calculateRangeCoordinate)(spanningCellConfig);
+ const cellConfig = {
+ ...columnsConfig[topLeft.col],
+ ...spanningCellConfig,
+ paddingRight: (_a = spanningCellConfig.paddingRight) !== null && _a !== void 0 ? _a : columnsConfig[bottomRight.col].paddingRight,
+ };
+ return { ...cellConfig,
+ bottomRight,
+ topLeft };
+};
+exports.makeRangeConfig = makeRangeConfig;
+//# sourceMappingURL=makeRangeConfig.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/makeRangeConfig.js.map b/node_modules/table/dist/src/makeRangeConfig.js.map
new file mode 100644
index 0000000..c37642e
--- /dev/null
+++ b/node_modules/table/dist/src/makeRangeConfig.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"makeRangeConfig.js","sourceRoot":"","sources":["../../src/makeRangeConfig.ts"],"names":[],"mappings":";;;AAMA,mCAEiB;AAEV,MAAM,eAAe,GAAG,CAAC,kBAAsC,EAAE,aAA6B,EAAe,EAAE;;IACpH,MAAM,EAAC,OAAO,EAAE,WAAW,EAAC,GAAG,IAAA,gCAAwB,EAAC,kBAAkB,CAAC,CAAC;IAE5E,MAAM,UAAU,GAA6B;QAC3C,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;QAC7B,GAAG,kBAAkB;QACrB,YAAY,EACV,MAAA,kBAAkB,CAAC,YAAY,mCAC/B,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY;KAC9C,CAAC;IAEF,OAAO,EAAC,GAAG,UAAU;QACnB,WAAW;QACX,OAAO,EAAC,CAAC;AACb,CAAC,CAAC;AAdW,QAAA,eAAe,mBAc1B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/makeStreamConfig.d.ts b/node_modules/table/dist/src/makeStreamConfig.d.ts
similarity index 73%
rename from node_modules/table/dist/makeStreamConfig.d.ts
rename to node_modules/table/dist/src/makeStreamConfig.d.ts
index 177ca27..cdd1f04 100644
--- a/node_modules/table/dist/makeStreamConfig.d.ts
+++ b/node_modules/table/dist/src/makeStreamConfig.d.ts
@@ -4,4 +4,4 @@
* Makes a new configuration object out of the userConfig object
* using default values for the missing configuration properties.
*/
-export declare const makeStreamConfig: (userConfig: StreamUserConfig) => StreamConfig;
+export declare const makeStreamConfig: (config: StreamUserConfig) => StreamConfig;
diff --git a/node_modules/table/dist/makeStreamConfig.js b/node_modules/table/dist/src/makeStreamConfig.js
similarity index 74%
rename from node_modules/table/dist/makeStreamConfig.js
rename to node_modules/table/dist/src/makeStreamConfig.js
index b8ae96f..227b579 100644
--- a/node_modules/table/dist/makeStreamConfig.js
+++ b/node_modules/table/dist/src/makeStreamConfig.js
@@ -1,10 +1,6 @@
"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeStreamConfig = void 0;
-const lodash_clonedeep_1 = __importDefault(require("lodash.clonedeep"));
const utils_1 = require("./utils");
const validateConfig_1 = require("./validateConfig");
/**
@@ -29,9 +25,8 @@
* Makes a new configuration object out of the userConfig object
* using default values for the missing configuration properties.
*/
-const makeStreamConfig = (userConfig) => {
- validateConfig_1.validateConfig('streamConfig.json', userConfig);
- const config = lodash_clonedeep_1.default(userConfig);
+const makeStreamConfig = (config) => {
+ (0, validateConfig_1.validateConfig)('streamConfig.json', config);
if (config.columnDefault.width === undefined) {
throw new Error('Must provide config.columnDefault.width when creating a stream.');
}
@@ -40,8 +35,9 @@
return true;
},
...config,
- border: utils_1.makeBorderConfig(config.border),
+ border: (0, utils_1.makeBorderConfig)(config.border),
columns: makeColumnsConfig(config.columnCount, config.columns, config.columnDefault),
};
};
exports.makeStreamConfig = makeStreamConfig;
+//# sourceMappingURL=makeStreamConfig.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/makeStreamConfig.js.map b/node_modules/table/dist/src/makeStreamConfig.js.map
new file mode 100644
index 0000000..715a3fe
--- /dev/null
+++ b/node_modules/table/dist/src/makeStreamConfig.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"makeStreamConfig.js","sourceRoot":"","sources":["../../src/makeStreamConfig.ts"],"names":[],"mappings":";;;AASA,mCAEiB;AACjB,qDAE0B;AAE1B;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAC5C,UAAuC,EAAE,EACzC,aAAgD,EAAkB,EAAE;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,WAAW,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QACxD,OAAO;YACL,SAAS,EAAE,MAAM;YACjB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC,iBAAiB;YAClC,iBAAiB,EAAE,KAAK;YACxB,QAAQ,EAAE,KAAK;YACf,GAAG,aAAa;YAChB,GAAG,OAAO,CAAC,KAAK,CAAC;SAClB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,gBAAgB,GAAG,CAAC,MAAwB,EAAgB,EAAE;IACzE,IAAA,+BAAc,EAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;KACpF;IAED,OAAO;QACL,gBAAgB,EAAE,GAAG,EAAE;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,MAAM;QACT,MAAM,EAAE,IAAA,wBAAgB,EAAC,MAAM,CAAC,MAAM,CAAC;QACvC,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC;KACrF,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,gBAAgB,oBAe3B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/makeTableConfig.d.ts b/node_modules/table/dist/src/makeTableConfig.d.ts
new file mode 100644
index 0000000..599c018
--- /dev/null
+++ b/node_modules/table/dist/src/makeTableConfig.d.ts
@@ -0,0 +1,7 @@
+import type { SpanningCellConfig, TableUserConfig } from './types/api';
+import type { Row, TableConfig } from './types/internal';
+/**
+ * Makes a new configuration object out of the userConfig object
+ * using default values for the missing configuration properties.
+ */
+export declare const makeTableConfig: (rows: Row[], config?: TableUserConfig, injectedSpanningCellConfig?: SpanningCellConfig[] | undefined) => TableConfig;
diff --git a/node_modules/table/dist/src/makeTableConfig.js b/node_modules/table/dist/src/makeTableConfig.js
new file mode 100644
index 0000000..8b858ae
--- /dev/null
+++ b/node_modules/table/dist/src/makeTableConfig.js
@@ -0,0 +1,62 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.makeTableConfig = void 0;
+const calculateMaximumColumnWidths_1 = require("./calculateMaximumColumnWidths");
+const spanningCellManager_1 = require("./spanningCellManager");
+const utils_1 = require("./utils");
+const validateConfig_1 = require("./validateConfig");
+const validateSpanningCellConfig_1 = require("./validateSpanningCellConfig");
+/**
+ * Creates a configuration for every column using default
+ * values for the missing configuration properties.
+ */
+const makeColumnsConfig = (rows, columns, columnDefault, spanningCellConfigs) => {
+ const columnWidths = (0, calculateMaximumColumnWidths_1.calculateMaximumColumnWidths)(rows, spanningCellConfigs);
+ return rows[0].map((_, columnIndex) => {
+ return {
+ alignment: 'left',
+ paddingLeft: 1,
+ paddingRight: 1,
+ truncate: Number.POSITIVE_INFINITY,
+ verticalAlignment: 'top',
+ width: columnWidths[columnIndex],
+ wrapWord: false,
+ ...columnDefault,
+ ...columns === null || columns === void 0 ? void 0 : columns[columnIndex],
+ };
+ });
+};
+/**
+ * Makes a new configuration object out of the userConfig object
+ * using default values for the missing configuration properties.
+ */
+const makeTableConfig = (rows, config = {}, injectedSpanningCellConfig) => {
+ var _a, _b, _c, _d, _e;
+ (0, validateConfig_1.validateConfig)('config.json', config);
+ (0, validateSpanningCellConfig_1.validateSpanningCellConfig)(rows, (_a = config.spanningCells) !== null && _a !== void 0 ? _a : []);
+ const spanningCellConfigs = (_b = injectedSpanningCellConfig !== null && injectedSpanningCellConfig !== void 0 ? injectedSpanningCellConfig : config.spanningCells) !== null && _b !== void 0 ? _b : [];
+ const columnsConfig = makeColumnsConfig(rows, config.columns, config.columnDefault, spanningCellConfigs);
+ const drawVerticalLine = (_c = config.drawVerticalLine) !== null && _c !== void 0 ? _c : (() => {
+ return true;
+ });
+ const drawHorizontalLine = (_d = config.drawHorizontalLine) !== null && _d !== void 0 ? _d : (() => {
+ return true;
+ });
+ return {
+ ...config,
+ border: (0, utils_1.makeBorderConfig)(config.border),
+ columns: columnsConfig,
+ drawHorizontalLine,
+ drawVerticalLine,
+ singleLine: (_e = config.singleLine) !== null && _e !== void 0 ? _e : false,
+ spanningCellManager: (0, spanningCellManager_1.createSpanningCellManager)({
+ columnsConfig,
+ drawHorizontalLine,
+ drawVerticalLine,
+ rows,
+ spanningCellConfigs,
+ }),
+ };
+};
+exports.makeTableConfig = makeTableConfig;
+//# sourceMappingURL=makeTableConfig.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/makeTableConfig.js.map b/node_modules/table/dist/src/makeTableConfig.js.map
new file mode 100644
index 0000000..11617bf
--- /dev/null
+++ b/node_modules/table/dist/src/makeTableConfig.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"makeTableConfig.js","sourceRoot":"","sources":["../../src/makeTableConfig.ts"],"names":[],"mappings":";;;AAAA,iFAEwC;AACxC,+DAE+B;AAS/B,mCAEiB;AACjB,qDAE0B;AAC1B,6EAEsC;AAEtC;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAAW,EACpC,OAAqC,EACrC,aAAgC,EAChC,mBAA0C,EAAkB,EAAE;IAC9D,MAAM,YAAY,GAAG,IAAA,2DAA4B,EAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAE7E,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE;QACpC,OAAO;YACL,SAAS,EAAE,MAAM;YACjB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC,iBAAiB;YAClC,iBAAiB,EAAE,KAAK;YACxB,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC;YAChC,QAAQ,EAAE,KAAK;YACf,GAAG,aAAa;YAChB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,WAAW,CAAC;SAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;GAGG;AAEI,MAAM,eAAe,GAAG,CAAC,IAAW,EAAE,SAA0B,EAAE,EAAE,0BAAiD,EAAe,EAAE;;IAC3I,IAAA,+BAAc,EAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACtC,IAAA,uDAA0B,EAAC,IAAI,EAAE,MAAA,MAAM,CAAC,aAAa,mCAAI,EAAE,CAAC,CAAC;IAE7D,MAAM,mBAAmB,GAAG,MAAA,0BAA0B,aAA1B,0BAA0B,cAA1B,0BAA0B,GAAI,MAAM,CAAC,aAAa,mCAAI,EAAE,CAAC;IAErF,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAEzG,MAAM,gBAAgB,GAAG,MAAA,MAAM,CAAC,gBAAgB,mCAAI,CAAC,GAAG,EAAE;QACxD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,MAAA,MAAM,CAAC,kBAAkB,mCAAI,CAAC,GAAG,EAAE;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,IAAA,wBAAgB,EAAC,MAAM,CAAC,MAAM,CAAC;QACvC,OAAO,EAAE,aAAa;QACtB,kBAAkB;QAClB,gBAAgB;QAChB,UAAU,EAAE,MAAA,MAAM,CAAC,UAAU,mCAAI,KAAK;QACtC,mBAAmB,EAAE,IAAA,+CAAyB,EAAC;YAC7C,aAAa;YACb,kBAAkB;YAClB,gBAAgB;YAChB,IAAI;YACJ,mBAAmB;SACpB,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AA9BW,QAAA,eAAe,mBA8B1B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/mapDataUsingRowHeights.d.ts b/node_modules/table/dist/src/mapDataUsingRowHeights.d.ts
new file mode 100644
index 0000000..1508e90
--- /dev/null
+++ b/node_modules/table/dist/src/mapDataUsingRowHeights.d.ts
@@ -0,0 +1,4 @@
+import type { VerticalAlignment } from './types/api';
+import type { BaseConfig, Row } from './types/internal';
+export declare const padCellVertically: (lines: string[], rowHeight: number, verticalAlignment: VerticalAlignment) => string[];
+export declare const mapDataUsingRowHeights: (unmappedRows: Row[], rowHeights: number[], config: BaseConfig) => Row[];
diff --git a/node_modules/table/dist/src/mapDataUsingRowHeights.js b/node_modules/table/dist/src/mapDataUsingRowHeights.js
new file mode 100644
index 0000000..c13003d
--- /dev/null
+++ b/node_modules/table/dist/src/mapDataUsingRowHeights.js
@@ -0,0 +1,52 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.mapDataUsingRowHeights = exports.padCellVertically = void 0;
+const utils_1 = require("./utils");
+const wrapCell_1 = require("./wrapCell");
+const createEmptyStrings = (length) => {
+ return new Array(length).fill('');
+};
+const padCellVertically = (lines, rowHeight, verticalAlignment) => {
+ const availableLines = rowHeight - lines.length;
+ if (verticalAlignment === 'top') {
+ return [...lines, ...createEmptyStrings(availableLines)];
+ }
+ if (verticalAlignment === 'bottom') {
+ return [...createEmptyStrings(availableLines), ...lines];
+ }
+ return [
+ ...createEmptyStrings(Math.floor(availableLines / 2)),
+ ...lines,
+ ...createEmptyStrings(Math.ceil(availableLines / 2)),
+ ];
+};
+exports.padCellVertically = padCellVertically;
+const mapDataUsingRowHeights = (unmappedRows, rowHeights, config) => {
+ const nColumns = unmappedRows[0].length;
+ const mappedRows = unmappedRows.map((unmappedRow, unmappedRowIndex) => {
+ const outputRowHeight = rowHeights[unmappedRowIndex];
+ const outputRow = Array.from({ length: outputRowHeight }, () => {
+ return new Array(nColumns).fill('');
+ });
+ unmappedRow.forEach((cell, cellIndex) => {
+ var _a;
+ const containingRange = (_a = config.spanningCellManager) === null || _a === void 0 ? void 0 : _a.getContainingRange({ col: cellIndex,
+ row: unmappedRowIndex });
+ if (containingRange) {
+ containingRange.extractCellContent(unmappedRowIndex).forEach((cellLine, cellLineIndex) => {
+ outputRow[cellLineIndex][cellIndex] = cellLine;
+ });
+ return;
+ }
+ const cellLines = (0, wrapCell_1.wrapCell)(cell, config.columns[cellIndex].width, config.columns[cellIndex].wrapWord);
+ const paddedCellLines = (0, exports.padCellVertically)(cellLines, outputRowHeight, config.columns[cellIndex].verticalAlignment);
+ paddedCellLines.forEach((cellLine, cellLineIndex) => {
+ outputRow[cellLineIndex][cellIndex] = cellLine;
+ });
+ });
+ return outputRow;
+ });
+ return (0, utils_1.flatten)(mappedRows);
+};
+exports.mapDataUsingRowHeights = mapDataUsingRowHeights;
+//# sourceMappingURL=mapDataUsingRowHeights.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/mapDataUsingRowHeights.js.map b/node_modules/table/dist/src/mapDataUsingRowHeights.js.map
new file mode 100644
index 0000000..7bbe0f8
--- /dev/null
+++ b/node_modules/table/dist/src/mapDataUsingRowHeights.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mapDataUsingRowHeights.js","sourceRoot":"","sources":["../../src/mapDataUsingRowHeights.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/table/dist/padTableData.d.ts b/node_modules/table/dist/src/padTableData.d.ts
similarity index 100%
rename from node_modules/table/dist/padTableData.d.ts
rename to node_modules/table/dist/src/padTableData.d.ts
diff --git a/node_modules/table/dist/src/padTableData.js b/node_modules/table/dist/src/padTableData.js
new file mode 100644
index 0000000..38580f8
--- /dev/null
+++ b/node_modules/table/dist/src/padTableData.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.padTableData = exports.padString = void 0;
+const padString = (input, paddingLeft, paddingRight) => {
+ return ' '.repeat(paddingLeft) + input + ' '.repeat(paddingRight);
+};
+exports.padString = padString;
+const padTableData = (rows, config) => {
+ return rows.map((cells, rowIndex) => {
+ return cells.map((cell, cellIndex) => {
+ var _a;
+ const containingRange = (_a = config.spanningCellManager) === null || _a === void 0 ? void 0 : _a.getContainingRange({ col: cellIndex,
+ row: rowIndex }, { mapped: true });
+ if (containingRange) {
+ return cell;
+ }
+ const { paddingLeft, paddingRight } = config.columns[cellIndex];
+ return (0, exports.padString)(cell, paddingLeft, paddingRight);
+ });
+ });
+};
+exports.padTableData = padTableData;
+//# sourceMappingURL=padTableData.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/padTableData.js.map b/node_modules/table/dist/src/padTableData.js.map
new file mode 100644
index 0000000..2cf9c94
--- /dev/null
+++ b/node_modules/table/dist/src/padTableData.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"padTableData.js","sourceRoot":"","sources":["../../src/padTableData.ts"],"names":[],"mappings":";;;AAKO,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,WAAmB,EAAE,YAAoB,EAAU,EAAE;IAC5F,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACpE,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB;AAEK,MAAM,YAAY,GAAG,CAAC,IAAW,EAAE,MAAkB,EAAS,EAAE;IACrE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAClC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;;YACnC,MAAM,eAAe,GAAG,MAAA,MAAM,CAAC,mBAAmB,0CAAE,kBAAkB,CAAC,EAAC,GAAG,EAAE,SAAS;gBACpF,GAAG,EAAE,QAAQ,EAAC,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;YAClC,IAAI,eAAe,EAAE;gBACnB,OAAO,IAAI,CAAC;aACb;YAED,MAAM,EAAC,WAAW,EAAE,YAAY,EAAC,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE9D,OAAO,IAAA,iBAAS,EAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,YAAY,gBAcvB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/schemas/config.json b/node_modules/table/dist/src/schemas/config.json
new file mode 100644
index 0000000..cccb5ac
--- /dev/null
+++ b/node_modules/table/dist/src/schemas/config.json
@@ -0,0 +1,95 @@
+{
+ "$id": "config.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "properties": {
+ "border": {
+ "$ref": "shared.json#/definitions/borders"
+ },
+ "header": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "alignment": {
+ "$ref": "shared.json#/definitions/alignment"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "integer"
+ },
+ "paddingLeft": {
+ "type": "integer"
+ },
+ "paddingRight": {
+ "type": "integer"
+ }
+ },
+ "required": ["content"],
+ "additionalProperties": false
+ },
+ "columns": {
+ "$ref": "shared.json#/definitions/columns"
+ },
+ "columnDefault": {
+ "$ref": "shared.json#/definitions/column"
+ },
+ "drawVerticalLine": {
+ "typeof": "function"
+ },
+ "drawHorizontalLine": {
+ "typeof": "function"
+ },
+ "singleLine": {
+ "typeof": "boolean"
+ },
+ "spanningCells": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "col": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "row": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "colSpan": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "rowSpan": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "alignment": {
+ "$ref": "shared.json#/definitions/alignment"
+ },
+ "verticalAlignment": {
+ "$ref": "shared.json#/definitions/verticalAlignment"
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "integer"
+ },
+ "paddingLeft": {
+ "type": "integer"
+ },
+ "paddingRight": {
+ "type": "integer"
+ }
+ },
+ "required": ["row", "col"],
+ "additionalProperties": false
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/node_modules/table/dist/src/schemas/shared.json b/node_modules/table/dist/src/schemas/shared.json
new file mode 100644
index 0000000..52a2d3a
--- /dev/null
+++ b/node_modules/table/dist/src/schemas/shared.json
@@ -0,0 +1,139 @@
+{
+ "$id": "shared.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "definitions": {
+ "columns": {
+ "oneOf": [
+ {
+ "type": "object",
+ "patternProperties": {
+ "^[0-9]+$": {
+ "$ref": "#/definitions/column"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/column"
+ }
+ }
+ ]
+ },
+ "column": {
+ "type": "object",
+ "properties": {
+ "alignment": {
+ "$ref": "#/definitions/alignment"
+ },
+ "verticalAlignment": {
+ "$ref": "#/definitions/verticalAlignment"
+ },
+ "width": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "wrapWord": {
+ "type": "boolean"
+ },
+ "truncate": {
+ "type": "integer"
+ },
+ "paddingLeft": {
+ "type": "integer"
+ },
+ "paddingRight": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false
+ },
+ "borders": {
+ "type": "object",
+ "properties": {
+ "topBody": {
+ "$ref": "#/definitions/border"
+ },
+ "topJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "topLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "topRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomBody": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bottomRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyRight": {
+ "$ref": "#/definitions/border"
+ },
+ "bodyJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "headerJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinBody": {
+ "$ref": "#/definitions/border"
+ },
+ "joinLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinRight": {
+ "$ref": "#/definitions/border"
+ },
+ "joinJoin": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleUp": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleDown": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleLeft": {
+ "$ref": "#/definitions/border"
+ },
+ "joinMiddleRight": {
+ "$ref": "#/definitions/border"
+ }
+ },
+ "additionalProperties": false
+ },
+ "border": {
+ "type": "string"
+ },
+ "alignment": {
+ "type": "string",
+ "enum": [
+ "left",
+ "right",
+ "center",
+ "justify"
+ ]
+ },
+ "verticalAlignment": {
+ "type": "string",
+ "enum": [
+ "top",
+ "middle",
+ "bottom"
+ ]
+ }
+ }
+}
diff --git a/node_modules/table/dist/src/schemas/streamConfig.json b/node_modules/table/dist/src/schemas/streamConfig.json
new file mode 100644
index 0000000..94d3514
--- /dev/null
+++ b/node_modules/table/dist/src/schemas/streamConfig.json
@@ -0,0 +1,25 @@
+{
+ "$id": "streamConfig.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "properties": {
+ "border": {
+ "$ref": "shared.json#/definitions/borders"
+ },
+ "columns": {
+ "$ref": "shared.json#/definitions/columns"
+ },
+ "columnDefault": {
+ "$ref": "shared.json#/definitions/column"
+ },
+ "columnCount": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "drawVerticalLine": {
+ "typeof": "function"
+ }
+ },
+ "required": ["columnDefault", "columnCount"],
+ "additionalProperties": false
+}
diff --git a/node_modules/table/dist/src/spanningCellManager.d.ts b/node_modules/table/dist/src/spanningCellManager.d.ts
new file mode 100644
index 0000000..a865f6a
--- /dev/null
+++ b/node_modules/table/dist/src/spanningCellManager.d.ts
@@ -0,0 +1,21 @@
+import type { DrawHorizontalLine, DrawVerticalLine, SpanningCellConfig } from './types/api';
+import type { CellCoordinates, ColumnConfig, ResolvedRangeConfig, Row } from './types/internal';
+export declare type SpanningCellManager = {
+ getContainingRange: (cell: CellCoordinates, options?: {
+ mapped: true;
+ }) => ResolvedRangeConfig | undefined;
+ inSameRange: (cell1: CellCoordinates, cell2: CellCoordinates) => boolean;
+ rowHeights: number[];
+ setRowHeights: (rowHeights: number[]) => void;
+};
+export declare type SpanningCellParameters = {
+ spanningCellConfigs: SpanningCellConfig[];
+ rows: Row[];
+ columnsConfig: ColumnConfig[];
+ drawVerticalLine: DrawVerticalLine;
+ drawHorizontalLine: DrawHorizontalLine;
+};
+export declare type SpanningCellContext = SpanningCellParameters & {
+ rowHeights: number[];
+};
+export declare const createSpanningCellManager: (parameters: SpanningCellParameters) => SpanningCellManager;
diff --git a/node_modules/table/dist/src/spanningCellManager.js b/node_modules/table/dist/src/spanningCellManager.js
new file mode 100644
index 0000000..d74345d
--- /dev/null
+++ b/node_modules/table/dist/src/spanningCellManager.js
@@ -0,0 +1,86 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createSpanningCellManager = void 0;
+const alignSpanningCell_1 = require("./alignSpanningCell");
+const calculateSpanningCellWidth_1 = require("./calculateSpanningCellWidth");
+const makeRangeConfig_1 = require("./makeRangeConfig");
+const utils_1 = require("./utils");
+const findRangeConfig = (cell, rangeConfigs) => {
+ return rangeConfigs.find((rangeCoordinate) => {
+ return (0, utils_1.isCellInRange)(cell, rangeCoordinate);
+ });
+};
+const getContainingRange = (rangeConfig, context) => {
+ const width = (0, calculateSpanningCellWidth_1.calculateSpanningCellWidth)(rangeConfig, context);
+ const wrappedContent = (0, alignSpanningCell_1.wrapRangeContent)(rangeConfig, width, context);
+ const alignedContent = (0, alignSpanningCell_1.alignVerticalRangeContent)(rangeConfig, wrappedContent, context);
+ const getCellContent = (rowIndex) => {
+ const { topLeft } = rangeConfig;
+ const { drawHorizontalLine, rowHeights } = context;
+ const totalWithinHorizontalBorderHeight = rowIndex - topLeft.row;
+ const totalHiddenHorizontalBorderHeight = (0, utils_1.sequence)(topLeft.row + 1, rowIndex).filter((index) => {
+ /* istanbul ignore next */
+ return !(drawHorizontalLine === null || drawHorizontalLine === void 0 ? void 0 : drawHorizontalLine(index, rowHeights.length));
+ }).length;
+ const offset = (0, utils_1.sumArray)(rowHeights.slice(topLeft.row, rowIndex)) + totalWithinHorizontalBorderHeight - totalHiddenHorizontalBorderHeight;
+ return alignedContent.slice(offset, offset + rowHeights[rowIndex]);
+ };
+ const getBorderContent = (borderIndex) => {
+ const { topLeft } = rangeConfig;
+ const offset = (0, utils_1.sumArray)(context.rowHeights.slice(topLeft.row, borderIndex)) + (borderIndex - topLeft.row - 1);
+ return alignedContent[offset];
+ };
+ return {
+ ...rangeConfig,
+ extractBorderContent: getBorderContent,
+ extractCellContent: getCellContent,
+ height: wrappedContent.length,
+ width,
+ };
+};
+const inSameRange = (cell1, cell2, ranges) => {
+ const range1 = findRangeConfig(cell1, ranges);
+ const range2 = findRangeConfig(cell2, ranges);
+ if (range1 && range2) {
+ return (0, utils_1.areCellEqual)(range1.topLeft, range2.topLeft);
+ }
+ return false;
+};
+const hashRange = (range) => {
+ const { row, col } = range.topLeft;
+ return `${row}/${col}`;
+};
+const createSpanningCellManager = (parameters) => {
+ const { spanningCellConfigs, columnsConfig } = parameters;
+ const ranges = spanningCellConfigs.map((config) => {
+ return (0, makeRangeConfig_1.makeRangeConfig)(config, columnsConfig);
+ });
+ const rangeCache = {};
+ let rowHeights = [];
+ return { getContainingRange: (cell, options) => {
+ var _a;
+ const originalRow = (options === null || options === void 0 ? void 0 : options.mapped) ? (0, utils_1.findOriginalRowIndex)(rowHeights, cell.row) : cell.row;
+ const range = findRangeConfig({ ...cell,
+ row: originalRow }, ranges);
+ if (!range) {
+ return undefined;
+ }
+ if (rowHeights.length === 0) {
+ return getContainingRange(range, { ...parameters,
+ rowHeights });
+ }
+ const hash = hashRange(range);
+ (_a = rangeCache[hash]) !== null && _a !== void 0 ? _a : (rangeCache[hash] = getContainingRange(range, { ...parameters,
+ rowHeights }));
+ return rangeCache[hash];
+ },
+ inSameRange: (cell1, cell2) => {
+ return inSameRange(cell1, cell2, ranges);
+ },
+ rowHeights,
+ setRowHeights: (_rowHeights) => {
+ rowHeights = _rowHeights;
+ } };
+};
+exports.createSpanningCellManager = createSpanningCellManager;
+//# sourceMappingURL=spanningCellManager.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/spanningCellManager.js.map b/node_modules/table/dist/src/spanningCellManager.js.map
new file mode 100644
index 0000000..4c58a5d
--- /dev/null
+++ b/node_modules/table/dist/src/spanningCellManager.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"spanningCellManager.js","sourceRoot":"","sources":["../../src/spanningCellManager.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/table/dist/stringifyTableData.d.ts b/node_modules/table/dist/src/stringifyTableData.d.ts
similarity index 100%
rename from node_modules/table/dist/stringifyTableData.d.ts
rename to node_modules/table/dist/src/stringifyTableData.d.ts
diff --git a/node_modules/table/dist/stringifyTableData.js b/node_modules/table/dist/src/stringifyTableData.js
similarity index 75%
rename from node_modules/table/dist/stringifyTableData.js
rename to node_modules/table/dist/src/stringifyTableData.js
index 961b78d..177141a 100644
--- a/node_modules/table/dist/stringifyTableData.js
+++ b/node_modules/table/dist/src/stringifyTableData.js
@@ -5,8 +5,9 @@
const stringifyTableData = (rows) => {
return rows.map((cells) => {
return cells.map((cell) => {
- return utils_1.normalizeString(String(cell));
+ return (0, utils_1.normalizeString)(String(cell));
});
});
};
exports.stringifyTableData = stringifyTableData;
+//# sourceMappingURL=stringifyTableData.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/stringifyTableData.js.map b/node_modules/table/dist/src/stringifyTableData.js.map
new file mode 100644
index 0000000..84a4b12
--- /dev/null
+++ b/node_modules/table/dist/src/stringifyTableData.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"stringifyTableData.js","sourceRoot":"","sources":["../../src/stringifyTableData.ts"],"names":[],"mappings":";;;AAGA,mCAEiB;AAEV,MAAM,kBAAkB,GAAG,CAAC,IAAiB,EAAS,EAAE;IAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,IAAA,uBAAe,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AANW,QAAA,kBAAkB,sBAM7B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/table.d.ts b/node_modules/table/dist/src/table.d.ts
similarity index 100%
rename from node_modules/table/dist/table.d.ts
rename to node_modules/table/dist/src/table.d.ts
diff --git a/node_modules/table/dist/src/table.js b/node_modules/table/dist/src/table.js
new file mode 100644
index 0000000..0a86227
--- /dev/null
+++ b/node_modules/table/dist/src/table.js
@@ -0,0 +1,31 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.table = void 0;
+const alignTableData_1 = require("./alignTableData");
+const calculateOutputColumnWidths_1 = require("./calculateOutputColumnWidths");
+const calculateRowHeights_1 = require("./calculateRowHeights");
+const drawTable_1 = require("./drawTable");
+const injectHeaderConfig_1 = require("./injectHeaderConfig");
+const makeTableConfig_1 = require("./makeTableConfig");
+const mapDataUsingRowHeights_1 = require("./mapDataUsingRowHeights");
+const padTableData_1 = require("./padTableData");
+const stringifyTableData_1 = require("./stringifyTableData");
+const truncateTableData_1 = require("./truncateTableData");
+const utils_1 = require("./utils");
+const validateTableData_1 = require("./validateTableData");
+const table = (data, userConfig = {}) => {
+ (0, validateTableData_1.validateTableData)(data);
+ let rows = (0, stringifyTableData_1.stringifyTableData)(data);
+ const [injectedRows, injectedSpanningCellConfig] = (0, injectHeaderConfig_1.injectHeaderConfig)(rows, userConfig);
+ const config = (0, makeTableConfig_1.makeTableConfig)(injectedRows, userConfig, injectedSpanningCellConfig);
+ rows = (0, truncateTableData_1.truncateTableData)(injectedRows, (0, utils_1.extractTruncates)(config));
+ const rowHeights = (0, calculateRowHeights_1.calculateRowHeights)(rows, config);
+ config.spanningCellManager.setRowHeights(rowHeights);
+ rows = (0, mapDataUsingRowHeights_1.mapDataUsingRowHeights)(rows, rowHeights, config);
+ rows = (0, alignTableData_1.alignTableData)(rows, config);
+ rows = (0, padTableData_1.padTableData)(rows, config);
+ const outputColumnWidths = (0, calculateOutputColumnWidths_1.calculateOutputColumnWidths)(config);
+ return (0, drawTable_1.drawTable)(rows, outputColumnWidths, rowHeights, config);
+};
+exports.table = table;
+//# sourceMappingURL=table.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/table.js.map b/node_modules/table/dist/src/table.js.map
new file mode 100644
index 0000000..bb03676
--- /dev/null
+++ b/node_modules/table/dist/src/table.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/table.ts"],"names":[],"mappings":";;;AAAA,qDAE0B;AAC1B,+EAEuC;AACvC,+DAE+B;AAC/B,2CAEqB;AACrB,6DAE8B;AAC9B,uDAE2B;AAC3B,qEAEkC;AAClC,iDAEwB;AACxB,6DAE8B;AAC9B,2DAE6B;AAI7B,mCAEiB;AACjB,2DAE6B;AAEtB,MAAM,KAAK,GAAG,CAAC,IAAiB,EAAE,aAA8B,EAAE,EAAU,EAAE;IACnF,IAAA,qCAAiB,EAAC,IAAI,CAAC,CAAC;IAExB,IAAI,IAAI,GAAG,IAAA,uCAAkB,EAAC,IAAI,CAAC,CAAC;IAEpC,MAAM,CAAC,YAAY,EAAE,0BAA0B,CAAC,GAAG,IAAA,uCAAkB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAExF,MAAM,MAAM,GAAG,IAAA,iCAAe,EAAC,YAAY,EAAE,UAAU,EAAE,0BAA0B,CAAC,CAAC;IAErF,IAAI,GAAG,IAAA,qCAAiB,EAAC,YAAY,EAAE,IAAA,wBAAgB,EAAC,MAAM,CAAC,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAG,IAAA,yCAAmB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAErD,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAErD,IAAI,GAAG,IAAA,+CAAsB,EAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,GAAG,IAAA,+BAAc,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,GAAG,IAAA,2BAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAElC,MAAM,kBAAkB,GAAG,IAAA,yDAA2B,EAAC,MAAM,CAAC,CAAC;IAE/D,OAAO,IAAA,qBAAS,EAAC,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC,CAAC;AAtBW,QAAA,KAAK,SAsBhB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/truncateTableData.d.ts b/node_modules/table/dist/src/truncateTableData.d.ts
new file mode 100644
index 0000000..e88e1ad
--- /dev/null
+++ b/node_modules/table/dist/src/truncateTableData.d.ts
@@ -0,0 +1,6 @@
+import type { Row } from './types/internal';
+export declare const truncateString: (input: string, length: number) => string;
+/**
+ * @todo Make it work with ASCII content.
+ */
+export declare const truncateTableData: (rows: Row[], truncates: number[]) => Row[];
diff --git a/node_modules/table/dist/truncateTableData.js b/node_modules/table/dist/src/truncateTableData.js
similarity index 74%
rename from node_modules/table/dist/truncateTableData.js
rename to node_modules/table/dist/src/truncateTableData.js
index 5810242..1f7980f 100644
--- a/node_modules/table/dist/truncateTableData.js
+++ b/node_modules/table/dist/src/truncateTableData.js
@@ -6,18 +6,19 @@
exports.truncateTableData = exports.truncateString = void 0;
const lodash_truncate_1 = __importDefault(require("lodash.truncate"));
const truncateString = (input, length) => {
- return lodash_truncate_1.default(input, { length,
+ return (0, lodash_truncate_1.default)(input, { length,
omission: '…' });
};
exports.truncateString = truncateString;
/**
* @todo Make it work with ASCII content.
*/
-const truncateTableData = (rows, config) => {
+const truncateTableData = (rows, truncates) => {
return rows.map((cells) => {
return cells.map((cell, cellIndex) => {
- return exports.truncateString(cell, config.columns[cellIndex].truncate);
+ return (0, exports.truncateString)(cell, truncates[cellIndex]);
});
});
};
exports.truncateTableData = truncateTableData;
+//# sourceMappingURL=truncateTableData.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/truncateTableData.js.map b/node_modules/table/dist/src/truncateTableData.js.map
new file mode 100644
index 0000000..921869f
--- /dev/null
+++ b/node_modules/table/dist/src/truncateTableData.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"truncateTableData.js","sourceRoot":"","sources":["../../src/truncateTableData.ts"],"names":[],"mappings":";;;;;;AAAA,sEAAuC;AAKhC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,MAAc,EAAU,EAAE;IACtE,OAAO,IAAA,yBAAQ,EAAC,KAAK,EAAE,EAAC,MAAM;QAC5B,QAAQ,EAAE,GAAG,EAAC,CAAC,CAAC;AACpB,CAAC,CAAC;AAHW,QAAA,cAAc,kBAGzB;AAEF;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,IAAW,EAAE,SAAmB,EAAS,EAAE;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;YACnC,OAAO,IAAA,sBAAc,EAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AANW,QAAA,iBAAiB,qBAM5B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/types/api.d.ts b/node_modules/table/dist/src/types/api.d.ts
similarity index 87%
rename from node_modules/table/dist/types/api.d.ts
rename to node_modules/table/dist/src/types/api.d.ts
index 165549a..f76c51e 100644
--- a/node_modules/table/dist/types/api.d.ts
+++ b/node_modules/table/dist/src/types/api.d.ts
@@ -14,6 +14,10 @@
readonly joinRight?: string;
readonly joinBody?: string;
readonly joinJoin?: string;
+ readonly joinMiddleUp?: string;
+ readonly joinMiddleDown?: string;
+ readonly joinMiddleLeft?: string;
+ readonly joinMiddleRight?: string;
readonly headerJoin?: string;
readonly bodyRight?: string;
readonly bodyLeft?: string;
@@ -22,7 +26,7 @@
export declare type BorderConfig = Required<BorderUserConfig>;
export declare type Alignment = 'center' | 'justify' | 'left' | 'right';
export declare type VerticalAlignment = 'bottom' | 'middle' | 'top';
-export declare type ColumnUserConfig = {
+export declare type CellUserConfig = {
/**
* Cell content horizontal alignment (default: left)
*/
@@ -32,10 +36,6 @@
*/
readonly verticalAlignment?: VerticalAlignment;
/**
- * Column width (default: auto calculation based on the cell content)
- */
- readonly width?: number;
- /**
* Number of characters are which the content will be truncated (default: Infinity)
*/
readonly truncate?: number;
@@ -52,6 +52,15 @@
*/
readonly wrapWord?: boolean;
};
+export declare type ColumnUserConfig = CellUserConfig & {
+ /**
+ * Column width (default: auto calculation based on the cell content)
+ */
+ readonly width?: number;
+};
+/**
+ * @deprecated Use spanning cell API instead
+ */
export declare type HeaderUserConfig = Omit<ColumnUserConfig, 'verticalAlignment' | 'width'> & {
readonly content: string;
};
@@ -90,6 +99,13 @@
* Horizontal lines inside the table are not drawn.
*/
readonly singleLine?: boolean;
+ readonly spanningCells?: SpanningCellConfig[];
+};
+export declare type SpanningCellConfig = CellUserConfig & {
+ readonly row: number;
+ readonly col: number;
+ readonly rowSpan?: number;
+ readonly colSpan?: number;
};
export declare type StreamUserConfig = BaseUserConfig & {
/**
diff --git a/node_modules/table/dist/types/api.js b/node_modules/table/dist/src/types/api.js
similarity index 71%
rename from node_modules/table/dist/types/api.js
rename to node_modules/table/dist/src/types/api.js
index c8ad2e5..57bf49a 100644
--- a/node_modules/table/dist/types/api.js
+++ b/node_modules/table/dist/src/types/api.js
@@ -1,2 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=api.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/types/api.js.map b/node_modules/table/dist/src/types/api.js.map
new file mode 100644
index 0000000..f396fdb
--- /dev/null
+++ b/node_modules/table/dist/src/types/api.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/node_modules/table/dist/types/internal.d.ts b/node_modules/table/dist/src/types/internal.d.ts
similarity index 100%
rename from node_modules/table/dist/types/internal.d.ts
rename to node_modules/table/dist/src/types/internal.d.ts
diff --git a/node_modules/table/dist/types/internal.js b/node_modules/table/dist/src/types/internal.js
similarity index 68%
rename from node_modules/table/dist/types/internal.js
rename to node_modules/table/dist/src/types/internal.js
index c8ad2e5..f8a3d3e 100644
--- a/node_modules/table/dist/types/internal.js
+++ b/node_modules/table/dist/src/types/internal.js
@@ -1,2 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=internal.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/types/internal.js.map b/node_modules/table/dist/src/types/internal.js.map
new file mode 100644
index 0000000..b612aad
--- /dev/null
+++ b/node_modules/table/dist/src/types/internal.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/types/internal.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/utils.d.ts b/node_modules/table/dist/src/utils.d.ts
new file mode 100644
index 0000000..a165ace
--- /dev/null
+++ b/node_modules/table/dist/src/utils.d.ts
@@ -0,0 +1,10 @@
+import type { SpanningCellConfig } from './types/api';
+import type { BaseConfig, CellCoordinates, RangeCoordinate } from './types/internal';
+export declare const sequence: (start: number, end: number) => number[];
+export declare const sumArray: (array: number[]) => number;
+export declare const extractTruncates: (config: BaseConfig) => number[];
+export declare const flatten: <T>(array: T[][]) => T[];
+export declare const findOriginalRowIndex: (mappedRowHeights: number[], mappedRowIndex: number) => number;
+export declare const calculateRangeCoordinate: (spanningCellConfig: SpanningCellConfig) => RangeCoordinate;
+export declare const areCellEqual: (cell1: CellCoordinates, cell2: CellCoordinates) => boolean;
+export declare const isCellInRange: (cell: CellCoordinates, { topLeft, bottomRight }: RangeCoordinate) => boolean;
diff --git a/node_modules/table/dist/src/utils.js b/node_modules/table/dist/src/utils.js
new file mode 100644
index 0000000..f2f25b0
--- /dev/null
+++ b/node_modules/table/dist/src/utils.js
@@ -0,0 +1,143 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isCellInRange = exports.areCellEqual = exports.calculateRangeCoordinate = exports.findOriginalRowIndex = exports.flatten = exports.extractTruncates = exports.sumArray = exports.sequence = exports.distributeUnevenly = exports.countSpaceSequence = exports.groupBySizes = exports.makeBorderConfig = exports.splitAnsi = exports.normalizeString = void 0;
+const slice_ansi_1 = __importDefault(require("slice-ansi"));
+const string_width_1 = __importDefault(require("string-width"));
+const strip_ansi_1 = __importDefault(require("strip-ansi"));
+const getBorderCharacters_1 = require("./getBorderCharacters");
+/**
+ * Converts Windows-style newline to Unix-style
+ *
+ * @internal
+ */
+const normalizeString = (input) => {
+ return input.replace(/\r\n/g, '\n');
+};
+exports.normalizeString = normalizeString;
+/**
+ * Splits ansi string by newlines
+ *
+ * @internal
+ */
+const splitAnsi = (input) => {
+ const lengths = (0, strip_ansi_1.default)(input).split('\n').map(string_width_1.default);
+ const result = [];
+ let startIndex = 0;
+ lengths.forEach((length) => {
+ result.push(length === 0 ? '' : (0, slice_ansi_1.default)(input, startIndex, startIndex + length));
+ // Plus 1 for the newline character itself
+ startIndex += length + 1;
+ });
+ return result;
+};
+exports.splitAnsi = splitAnsi;
+/**
+ * Merges user provided border characters with the default border ("honeywell") characters.
+ *
+ * @internal
+ */
+const makeBorderConfig = (border) => {
+ return {
+ ...(0, getBorderCharacters_1.getBorderCharacters)('honeywell'),
+ ...border,
+ };
+};
+exports.makeBorderConfig = makeBorderConfig;
+/**
+ * Groups the array into sub-arrays by sizes.
+ *
+ * @internal
+ * @example
+ * groupBySizes(['a', 'b', 'c', 'd', 'e'], [2, 1, 2]) = [ ['a', 'b'], ['c'], ['d', 'e'] ]
+ */
+const groupBySizes = (array, sizes) => {
+ let startIndex = 0;
+ return sizes.map((size) => {
+ const group = array.slice(startIndex, startIndex + size);
+ startIndex += size;
+ return group;
+ });
+};
+exports.groupBySizes = groupBySizes;
+/**
+ * Counts the number of continuous spaces in a string
+ *
+ * @internal
+ * @example
+ * countGroupSpaces('a bc de f') = 3
+ */
+const countSpaceSequence = (input) => {
+ var _a, _b;
+ return (_b = (_a = input.match(/\s+/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
+};
+exports.countSpaceSequence = countSpaceSequence;
+/**
+ * Creates the non-increasing number array given sum and length
+ * whose the difference between maximum and minimum is not greater than 1
+ *
+ * @internal
+ * @example
+ * distributeUnevenly(6, 3) = [2, 2, 2]
+ * distributeUnevenly(8, 3) = [3, 3, 2]
+ */
+const distributeUnevenly = (sum, length) => {
+ const result = Array.from({ length }).fill(Math.floor(sum / length));
+ return result.map((element, index) => {
+ return element + (index < sum % length ? 1 : 0);
+ });
+};
+exports.distributeUnevenly = distributeUnevenly;
+const sequence = (start, end) => {
+ return Array.from({ length: end - start + 1 }, (_, index) => {
+ return index + start;
+ });
+};
+exports.sequence = sequence;
+const sumArray = (array) => {
+ return array.reduce((accumulator, element) => {
+ return accumulator + element;
+ }, 0);
+};
+exports.sumArray = sumArray;
+const extractTruncates = (config) => {
+ return config.columns.map(({ truncate }) => {
+ return truncate;
+ });
+};
+exports.extractTruncates = extractTruncates;
+const flatten = (array) => {
+ return [].concat(...array);
+};
+exports.flatten = flatten;
+const findOriginalRowIndex = (mappedRowHeights, mappedRowIndex) => {
+ const rowIndexMapping = (0, exports.flatten)(mappedRowHeights.map((height, index) => {
+ return Array.from({ length: height }, () => {
+ return index;
+ });
+ }));
+ return rowIndexMapping[mappedRowIndex];
+};
+exports.findOriginalRowIndex = findOriginalRowIndex;
+const calculateRangeCoordinate = (spanningCellConfig) => {
+ const { row, col, colSpan = 1, rowSpan = 1 } = spanningCellConfig;
+ return { bottomRight: { col: col + colSpan - 1,
+ row: row + rowSpan - 1 },
+ topLeft: { col,
+ row } };
+};
+exports.calculateRangeCoordinate = calculateRangeCoordinate;
+const areCellEqual = (cell1, cell2) => {
+ return cell1.row === cell2.row && cell1.col === cell2.col;
+};
+exports.areCellEqual = areCellEqual;
+const isCellInRange = (cell, { topLeft, bottomRight }) => {
+ return (topLeft.row <= cell.row &&
+ cell.row <= bottomRight.row &&
+ topLeft.col <= cell.col &&
+ cell.col <= bottomRight.col);
+};
+exports.isCellInRange = isCellInRange;
+//# sourceMappingURL=utils.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/utils.js.map b/node_modules/table/dist/src/utils.js.map
new file mode 100644
index 0000000..dee1173
--- /dev/null
+++ b/node_modules/table/dist/src/utils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/table/dist/validateConfig.d.ts b/node_modules/table/dist/src/validateConfig.d.ts
similarity index 100%
rename from node_modules/table/dist/validateConfig.d.ts
rename to node_modules/table/dist/src/validateConfig.d.ts
diff --git a/node_modules/table/dist/validateConfig.js b/node_modules/table/dist/src/validateConfig.js
similarity index 89%
rename from node_modules/table/dist/validateConfig.js
rename to node_modules/table/dist/src/validateConfig.js
index f1a743b..2df152e 100644
--- a/node_modules/table/dist/validateConfig.js
+++ b/node_modules/table/dist/src/validateConfig.js
@@ -8,6 +8,7 @@
const validateConfig = (schemaId, config) => {
const validate = validators_1.default[schemaId];
if (!validate(config) && validate.errors) {
+ // eslint-disable-next-line promise/prefer-await-to-callbacks
const errors = validate.errors.map((error) => {
return {
message: error.message,
@@ -23,3 +24,4 @@
}
};
exports.validateConfig = validateConfig;
+//# sourceMappingURL=validateConfig.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/validateConfig.js.map b/node_modules/table/dist/src/validateConfig.js.map
new file mode 100644
index 0000000..db240b3
--- /dev/null
+++ b/node_modules/table/dist/src/validateConfig.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"validateConfig.js","sourceRoot":"","sources":["../../src/validateConfig.ts"],"names":[],"mappings":";;;;;;AAIA,wEAAgD;AAKzC,MAAM,cAAc,GAAG,CAAC,QAA6C,EAAE,MAAuB,EAAQ,EAAE;IAC7G,MAAM,QAAQ,GAAG,oBAAU,CAAC,QAAQ,CAAqB,CAAC;IAC1D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE;QACxC,6DAA6D;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAE,EAAE;YACxD,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,8BAA8B;QAE9B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;KACpC;AACH,CAAC,CAAC;AAnBW,QAAA,cAAc,kBAmBzB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/src/validateSpanningCellConfig.d.ts b/node_modules/table/dist/src/validateSpanningCellConfig.d.ts
new file mode 100644
index 0000000..d04bd34
--- /dev/null
+++ b/node_modules/table/dist/src/validateSpanningCellConfig.d.ts
@@ -0,0 +1,3 @@
+import type { SpanningCellConfig } from './types/api';
+import type { Row } from './types/internal';
+export declare const validateSpanningCellConfig: (rows: Row[], configs: SpanningCellConfig[]) => void;
diff --git a/node_modules/table/dist/src/validateSpanningCellConfig.js b/node_modules/table/dist/src/validateSpanningCellConfig.js
new file mode 100644
index 0000000..e2859ad
--- /dev/null
+++ b/node_modules/table/dist/src/validateSpanningCellConfig.js
@@ -0,0 +1,46 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.validateSpanningCellConfig = void 0;
+const utils_1 = require("./utils");
+const inRange = (start, end, value) => {
+ return start <= value && value <= end;
+};
+const validateSpanningCellConfig = (rows, configs) => {
+ const [nRow, nCol] = [rows.length, rows[0].length];
+ configs.forEach((config, configIndex) => {
+ const { colSpan, rowSpan } = config;
+ if (colSpan === undefined && rowSpan === undefined) {
+ throw new Error(`Expect at least colSpan or rowSpan is provided in config.spanningCells[${configIndex}]`);
+ }
+ if (colSpan !== undefined && colSpan < 1) {
+ throw new Error(`Expect colSpan is not equal zero, instead got: ${colSpan} in config.spanningCells[${configIndex}]`);
+ }
+ if (rowSpan !== undefined && rowSpan < 1) {
+ throw new Error(`Expect rowSpan is not equal zero, instead got: ${rowSpan} in config.spanningCells[${configIndex}]`);
+ }
+ });
+ const rangeCoordinates = configs.map(utils_1.calculateRangeCoordinate);
+ rangeCoordinates.forEach(({ topLeft, bottomRight }, rangeIndex) => {
+ if (!inRange(0, nCol - 1, topLeft.col) ||
+ !inRange(0, nRow - 1, topLeft.row) ||
+ !inRange(0, nCol - 1, bottomRight.col) ||
+ !inRange(0, nRow - 1, bottomRight.row)) {
+ throw new Error(`Some cells in config.spanningCells[${rangeIndex}] are out of the table`);
+ }
+ });
+ const configOccupy = Array.from({ length: nRow }, () => {
+ return Array.from({ length: nCol });
+ });
+ rangeCoordinates.forEach(({ topLeft, bottomRight }, rangeIndex) => {
+ (0, utils_1.sequence)(topLeft.row, bottomRight.row).forEach((row) => {
+ (0, utils_1.sequence)(topLeft.col, bottomRight.col).forEach((col) => {
+ if (configOccupy[row][col] !== undefined) {
+ throw new Error(`Spanning cells in config.spanningCells[${configOccupy[row][col]}] and config.spanningCells[${rangeIndex}] are overlap each other`);
+ }
+ configOccupy[row][col] = rangeIndex;
+ });
+ });
+ });
+};
+exports.validateSpanningCellConfig = validateSpanningCellConfig;
+//# sourceMappingURL=validateSpanningCellConfig.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/validateSpanningCellConfig.js.map b/node_modules/table/dist/src/validateSpanningCellConfig.js.map
new file mode 100644
index 0000000..d5097be
--- /dev/null
+++ b/node_modules/table/dist/src/validateSpanningCellConfig.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"validateSpanningCellConfig.js","sourceRoot":"","sources":["../../src/validateSpanningCellConfig.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/table/dist/validateTableData.d.ts b/node_modules/table/dist/src/validateTableData.d.ts
similarity index 100%
rename from node_modules/table/dist/validateTableData.d.ts
rename to node_modules/table/dist/src/validateTableData.d.ts
diff --git a/node_modules/table/dist/validateTableData.js b/node_modules/table/dist/src/validateTableData.js
similarity index 92%
rename from node_modules/table/dist/validateTableData.js
rename to node_modules/table/dist/src/validateTableData.js
index 60ae307..a85e807 100644
--- a/node_modules/table/dist/validateTableData.js
+++ b/node_modules/table/dist/src/validateTableData.js
@@ -22,10 +22,11 @@
}
for (const cell of row) {
// eslint-disable-next-line no-control-regex
- if (/[\u0001-\u0006\u0008\u0009\u000B-\u001A]/.test(utils_1.normalizeString(String(cell)))) {
+ if (/[\u0001-\u0006\u0008\u0009\u000B-\u001A]/.test((0, utils_1.normalizeString)(String(cell)))) {
throw new Error('Table data must not contain control characters.');
}
}
}
};
exports.validateTableData = validateTableData;
+//# sourceMappingURL=validateTableData.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/validateTableData.js.map b/node_modules/table/dist/src/validateTableData.js.map
new file mode 100644
index 0000000..568fb10
--- /dev/null
+++ b/node_modules/table/dist/src/validateTableData.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"validateTableData.js","sourceRoot":"","sources":["../../src/validateTableData.ts"],"names":[],"mappings":";;;AAAA,mCAEiB;AAEV,MAAM,iBAAiB,GAAG,CAAC,IAAiB,EAAQ,EAAE;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACxB,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;KACrD;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;KACxD;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC3D;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvB,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;SACzD;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;SAClE;QAED,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;YACtB,4CAA4C;YAC5C,IAAI,0CAA0C,CAAC,IAAI,CAAC,IAAA,uBAAe,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAClF,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;aACpE;SACF;KACF;AACH,CAAC,CAAC;AA/BW,QAAA,iBAAiB,qBA+B5B"}
\ No newline at end of file
diff --git a/node_modules/table/dist/wrapCell.d.ts b/node_modules/table/dist/src/wrapCell.d.ts
similarity index 100%
rename from node_modules/table/dist/wrapCell.d.ts
rename to node_modules/table/dist/src/wrapCell.d.ts
diff --git a/node_modules/table/dist/wrapCell.js b/node_modules/table/dist/src/wrapCell.js
similarity index 78%
rename from node_modules/table/dist/wrapCell.js
rename to node_modules/table/dist/src/wrapCell.js
index 64229d25..b2ce8de 100644
--- a/node_modules/table/dist/wrapCell.js
+++ b/node_modules/table/dist/src/wrapCell.js
@@ -13,15 +13,15 @@
*/
const wrapCell = (cellValue, cellWidth, useWrapWord) => {
// First split on literal newlines
- const cellLines = utils_1.splitAnsi(cellValue);
+ const cellLines = (0, utils_1.splitAnsi)(cellValue);
// Then iterate over the list and word-wrap every remaining line if necessary.
for (let lineNr = 0; lineNr < cellLines.length;) {
let lineChunks;
if (useWrapWord) {
- lineChunks = wrapWord_1.wrapWord(cellLines[lineNr], cellWidth);
+ lineChunks = (0, wrapWord_1.wrapWord)(cellLines[lineNr], cellWidth);
}
else {
- lineChunks = wrapString_1.wrapString(cellLines[lineNr], cellWidth);
+ lineChunks = (0, wrapString_1.wrapString)(cellLines[lineNr], cellWidth);
}
// Replace our original array element with whatever the wrapping returned
cellLines.splice(lineNr, 1, ...lineChunks);
@@ -30,3 +30,4 @@
return cellLines;
};
exports.wrapCell = wrapCell;
+//# sourceMappingURL=wrapCell.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/wrapCell.js.map b/node_modules/table/dist/src/wrapCell.js.map
new file mode 100644
index 0000000..9ce0736
--- /dev/null
+++ b/node_modules/table/dist/src/wrapCell.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"wrapCell.js","sourceRoot":"","sources":["../../src/wrapCell.ts"],"names":[],"mappings":";;;AAAA,mCAEiB;AACjB,6CAEsB;AACtB,yCAEoB;AAEpB;;;;;;GAMG;AACI,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,WAAoB,EAAY,EAAE;IAC/F,kCAAkC;IAClC,MAAM,SAAS,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IAEvC,8EAA8E;IAC9E,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG;QAC/C,IAAI,UAAU,CAAC;QAEf,IAAI,WAAW,EAAE;YACf,UAAU,GAAG,IAAA,mBAAQ,EAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;SACrD;aAAM;YACL,UAAU,GAAG,IAAA,uBAAU,EAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;SACvD;QAED,yEAAyE;QACzE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;QAC3C,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;KAC7B;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AApBW,QAAA,QAAQ,YAoBnB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/wrapString.d.ts b/node_modules/table/dist/src/wrapString.d.ts
similarity index 100%
rename from node_modules/table/dist/wrapString.d.ts
rename to node_modules/table/dist/src/wrapString.d.ts
diff --git a/node_modules/table/dist/wrapString.js b/node_modules/table/dist/src/wrapString.js
similarity index 77%
rename from node_modules/table/dist/wrapString.js
rename to node_modules/table/dist/src/wrapString.js
index 08fcc3f..b09bd17 100644
--- a/node_modules/table/dist/wrapString.js
+++ b/node_modules/table/dist/src/wrapString.js
@@ -18,9 +18,10 @@
let subjectSlice = subject;
const chunks = [];
do {
- chunks.push(slice_ansi_1.default(subjectSlice, 0, size));
- subjectSlice = slice_ansi_1.default(subjectSlice, size).trim();
- } while (string_width_1.default(subjectSlice));
+ chunks.push((0, slice_ansi_1.default)(subjectSlice, 0, size));
+ subjectSlice = (0, slice_ansi_1.default)(subjectSlice, size).trim();
+ } while ((0, string_width_1.default)(subjectSlice));
return chunks;
};
exports.wrapString = wrapString;
+//# sourceMappingURL=wrapString.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/wrapString.js.map b/node_modules/table/dist/src/wrapString.js.map
new file mode 100644
index 0000000..c1c2a5b
--- /dev/null
+++ b/node_modules/table/dist/src/wrapString.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"wrapString.js","sourceRoot":"","sources":["../../src/wrapString.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAC/B,gEAAuC;AAEvC;;;;;;;GAOG;AACI,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,IAAY,EAAY,EAAE;IACpE,IAAI,YAAY,GAAG,OAAO,CAAC;IAE3B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,GAAG;QACD,MAAM,CAAC,IAAI,CAAC,IAAA,oBAAK,EAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAE1C,YAAY,GAAG,IAAA,oBAAK,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;KACjD,QAAQ,IAAA,sBAAW,EAAC,YAAY,CAAC,EAAE;IAEpC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAZW,QAAA,UAAU,cAYrB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/wrapWord.d.ts b/node_modules/table/dist/src/wrapWord.d.ts
similarity index 100%
rename from node_modules/table/dist/wrapWord.d.ts
rename to node_modules/table/dist/src/wrapWord.d.ts
diff --git a/node_modules/table/dist/wrapWord.js b/node_modules/table/dist/src/wrapWord.js
similarity index 79%
rename from node_modules/table/dist/wrapWord.js
rename to node_modules/table/dist/src/wrapWord.js
index 1f2da3c..7571aa6 100644
--- a/node_modules/table/dist/wrapWord.js
+++ b/node_modules/table/dist/src/wrapWord.js
@@ -7,10 +7,10 @@
const slice_ansi_1 = __importDefault(require("slice-ansi"));
const strip_ansi_1 = __importDefault(require("strip-ansi"));
const calculateStringLengths = (input, size) => {
- let subject = strip_ansi_1.default(input);
+ let subject = (0, strip_ansi_1.default)(input);
const chunks = [];
// https://regex101.com/r/gY5kZ1/1
- const re = new RegExp('(^.{1,' + String(size) + '}(\\s+|$))|(^.{1,' + String(size - 1) + '}(\\\\|/|_|\\.|,|;|-))');
+ const re = new RegExp('(^.{1,' + String(Math.max(size, 1)) + '}(\\s+|$))|(^.{1,' + String(Math.max(size - 1, 1)) + '}(\\\\|/|_|\\.|,|;|-))');
do {
let chunk;
const match = re.exec(subject);
@@ -33,9 +33,10 @@
const result = [];
let startIndex = 0;
calculateStringLengths(input, size).forEach(([length, offset]) => {
- result.push(slice_ansi_1.default(input, startIndex, startIndex + length));
+ result.push((0, slice_ansi_1.default)(input, startIndex, startIndex + length));
startIndex += length + offset;
});
return result;
};
exports.wrapWord = wrapWord;
+//# sourceMappingURL=wrapWord.js.map
\ No newline at end of file
diff --git a/node_modules/table/dist/src/wrapWord.js.map b/node_modules/table/dist/src/wrapWord.js.map
new file mode 100644
index 0000000..fc61519
--- /dev/null
+++ b/node_modules/table/dist/src/wrapWord.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"wrapWord.js","sourceRoot":"","sources":["../../src/wrapWord.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAC/B,4DAAmC;AAEnC,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,IAAY,EAA0C,EAAE;IACrG,IAAI,OAAO,GAAG,IAAA,oBAAS,EAAC,KAAK,CAAC,CAAC;IAE/B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,kCAAkC;IAClC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC;IAE7I,GAAG;QACD,IAAI,KAAa,CAAC;QAElB,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/B,IAAI,KAAK,EAAE;YACT,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEtC,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;YAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC;YAE5C,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;SACtC;aAAM;YACL,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE9B,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;SAChC;KACF,QAAQ,OAAO,CAAC,MAAM,EAAE;IAEzB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,IAAY,EAAY,EAAE;IAChE,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;QAC/D,MAAM,CAAC,IAAI,CAAC,IAAA,oBAAK,EAAC,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QAE3D,UAAU,IAAI,MAAM,GAAG,MAAM,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAXW,QAAA,QAAQ,YAWnB"}
\ No newline at end of file
diff --git a/node_modules/table/dist/table.js b/node_modules/table/dist/table.js
deleted file mode 100644
index 72c879d..0000000
--- a/node_modules/table/dist/table.js
+++ /dev/null
@@ -1,26 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.table = void 0;
-const alignTableData_1 = require("./alignTableData");
-const calculateCellWidths_1 = require("./calculateCellWidths");
-const calculateRowHeights_1 = require("./calculateRowHeights");
-const drawTable_1 = require("./drawTable");
-const makeTableConfig_1 = require("./makeTableConfig");
-const mapDataUsingRowHeights_1 = require("./mapDataUsingRowHeights");
-const padTableData_1 = require("./padTableData");
-const stringifyTableData_1 = require("./stringifyTableData");
-const truncateTableData_1 = require("./truncateTableData");
-const validateTableData_1 = require("./validateTableData");
-const table = (data, userConfig = {}) => {
- validateTableData_1.validateTableData(data);
- let rows = stringifyTableData_1.stringifyTableData(data);
- const config = makeTableConfig_1.makeTableConfig(rows, userConfig);
- rows = truncateTableData_1.truncateTableData(rows, config);
- const rowHeights = calculateRowHeights_1.calculateRowHeights(rows, config);
- rows = mapDataUsingRowHeights_1.mapDataUsingRowHeights(rows, rowHeights, config);
- rows = alignTableData_1.alignTableData(rows, config);
- rows = padTableData_1.padTableData(rows, config);
- const cellWidths = calculateCellWidths_1.calculateCellWidths(rows[0]);
- return drawTable_1.drawTable(rows, cellWidths, rowHeights, config);
-};
-exports.table = table;
diff --git a/node_modules/table/dist/truncateTableData.d.ts b/node_modules/table/dist/truncateTableData.d.ts
deleted file mode 100644
index 60bc368..0000000
--- a/node_modules/table/dist/truncateTableData.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { BaseConfig, Row } from './types/internal';
-export declare const truncateString: (input: string, length: number) => string;
-/**
- * @todo Make it work with ASCII content.
- */
-export declare const truncateTableData: (rows: Row[], config: BaseConfig) => Row[];
diff --git a/node_modules/table/dist/utils.d.ts b/node_modules/table/dist/utils.d.ts
deleted file mode 100644
index cb0ff5c..0000000
--- a/node_modules/table/dist/utils.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
diff --git a/node_modules/table/dist/utils.js b/node_modules/table/dist/utils.js
deleted file mode 100644
index 46d1585..0000000
--- a/node_modules/table/dist/utils.js
+++ /dev/null
@@ -1,92 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.distributeUnevenly = exports.countSpaceSequence = exports.groupBySizes = exports.makeBorderConfig = exports.splitAnsi = exports.normalizeString = void 0;
-const slice_ansi_1 = __importDefault(require("slice-ansi"));
-const string_width_1 = __importDefault(require("string-width"));
-const strip_ansi_1 = __importDefault(require("strip-ansi"));
-const getBorderCharacters_1 = require("./getBorderCharacters");
-/**
- * Converts Windows-style newline to Unix-style
- *
- * @internal
- */
-const normalizeString = (input) => {
- return input.replace(/\r\n/g, '\n');
-};
-exports.normalizeString = normalizeString;
-/**
- * Splits ansi string by newlines
- *
- * @internal
- */
-const splitAnsi = (input) => {
- const lengths = strip_ansi_1.default(input).split('\n').map(string_width_1.default);
- const result = [];
- let startIndex = 0;
- lengths.forEach((length) => {
- result.push(length === 0 ? '' : slice_ansi_1.default(input, startIndex, startIndex + length));
- // Plus 1 for the newline character itself
- startIndex += length + 1;
- });
- return result;
-};
-exports.splitAnsi = splitAnsi;
-/**
- * Merges user provided border characters with the default border ("honeywell") characters.
- *
- * @internal
- */
-const makeBorderConfig = (border) => {
- return {
- ...getBorderCharacters_1.getBorderCharacters('honeywell'),
- ...border,
- };
-};
-exports.makeBorderConfig = makeBorderConfig;
-/**
- * Groups the array into sub-arrays by sizes.
- *
- * @internal
- * @example
- * groupBySizes(['a', 'b', 'c', 'd', 'e'], [2, 1, 2]) = [ ['a', 'b'], ['c'], ['d', 'e'] ]
- */
-const groupBySizes = (array, sizes) => {
- let startIndex = 0;
- return sizes.map((size) => {
- const group = array.slice(startIndex, startIndex + size);
- startIndex += size;
- return group;
- });
-};
-exports.groupBySizes = groupBySizes;
-/**
- * Counts the number of continuous spaces in a string
- *
- * @internal
- * @example
- * countGroupSpaces('a bc de f') = 3
- */
-const countSpaceSequence = (input) => {
- var _a, _b;
- return (_b = (_a = input.match(/\s+/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
-};
-exports.countSpaceSequence = countSpaceSequence;
-/**
- * Creates the non-increasing number array given sum and length
- * whose the difference between maximum and minimum is not greater than 1
- *
- * @internal
- * @example
- * distributeUnevenly(6, 3) = [2, 2, 2]
- * distributeUnevenly(8, 3) = [3, 3, 2]
- */
-const distributeUnevenly = (sum, length) => {
- const result = Array.from({ length }).fill(Math.floor(sum / length));
- return result.map((element, index) => {
- return element + (index < sum % length ? 1 : 0);
- });
-};
-exports.distributeUnevenly = distributeUnevenly;
diff --git a/node_modules/table/package.json b/node_modules/table/package.json
index 64944ac..43cc41a 100644
--- a/node_modules/table/package.json
+++ b/node_modules/table/package.json
@@ -6,7 +6,6 @@
},
"dependencies": {
"ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
"lodash.truncate": "^4.4.2",
"slice-ansi": "^4.0.0",
"string-width": "^4.2.3",
@@ -15,10 +14,9 @@
"description": "Formats data into a string table.",
"devDependencies": {
"@types/chai": "^4.2.16",
- "@types/lodash.clonedeep": "^4.5.6",
"@types/lodash.mapvalues": "^4.6.6",
"@types/lodash.truncate": "^4.4.6",
- "@types/mocha": "^8.2.2",
+ "@types/mocha": "^9.0.0",
"@types/node": "^14.14.37",
"@types/sinon": "^10.0.0",
"@types/slice-ansi": "^4.0.0",
@@ -27,19 +25,19 @@
"chai": "^4.2.0",
"chalk": "^4.1.0",
"coveralls": "^3.1.0",
- "eslint": "^7.16.0",
+ "eslint": "^7.32.0",
"eslint-config-canonical": "^25.0.0",
- "gitdown": "^3.1.3",
+ "gitdown": "^3.1.4",
"husky": "^4.3.6",
- "js-beautify": "^1.13.0",
+ "js-beautify": "^1.14.0",
"lodash.mapvalues": "^4.6.0",
"mkdirp": "^1.0.4",
"mocha": "^8.2.1",
"nyc": "^15.1.0",
"semantic-release": "^17.3.1",
- "sinon": "^9.2.2",
+ "sinon": "^12.0.1",
"ts-node": "^9.1.1",
- "typescript": "4.2.4"
+ "typescript": "4.5.2"
},
"engines": {
"node": ">=10.0.0"
@@ -58,37 +56,22 @@
"ansi"
],
"license": "BSD-3-Clause",
- "main": "./dist/index.js",
+ "main": "./dist/src/index.js",
"files": [
- "dist/**/*.js",
- "dist/**/*.d.ts"
+ "dist/src/"
],
"name": "table",
- "nyc": {
- "extensions": [
- ".ts"
- ],
- "exclude": [
- "src/generated/validators.js",
- "test/**/*.ts"
- ],
- "reporter": [
- "text-lcov",
- "text"
- ]
- },
"repository": {
"type": "git",
"url": "https://github.com/gajus/table"
},
"scripts": {
- "compile": "tsc",
- "prebuild": "rm -fr ./dist && mkdirp dist",
- "build": "npm run create-validators && npm run compile",
+ "prebuild": "rm -fr ./src/generated && mkdirp ./src/generated",
+ "build": "npm run create-validators && tsc",
"create-readme": "gitdown ./.README/README.md --output-file ./README.md",
- "create-validators": "rm -fr ./src/generated && mkdirp ./src/generated && ajv compile --all-errors --inline-refs=false -s src/schemas/config -s src/schemas/streamConfig -r src/schemas/shared -c ajv-keywords/dist/keywords/typeof -o | js-beautify > ./src/generated/validators.js",
- "lint": "eslint --ignore-path .gitignore ./src ./test",
- "test": "npm run create-validators && mocha --require ts-node/register \"./test/**/*.ts\""
+ "create-validators": "ajv compile --all-errors --inline-refs=false -s src/schemas/config -s src/schemas/streamConfig -r src/schemas/shared -c ajv-keywords/dist/keywords/typeof -o | js-beautify > ./src/generated/validators.js",
+ "lint": "eslint ./src ./test",
+ "test": "nyc mocha && nyc check-coverage --lines 95"
},
- "version": "6.7.2"
+ "version": "6.8.0"
}