diff --git a/.husky/pre-commit b/.husky/pre-commit
index 47156192..eadaa672 100644
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,7 +1,6 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
-git add . && npm run lint
diff --git a/.husky/pre-push b/.husky/pre-push
index dbd71066..f43af809 100644
--- a/.husky/pre-push
+++ b/.husky/pre-push
@@ -2,4 +2,4 @@
. "$(dirname -- "$0")/_/husky.sh"
# We cant push code that doesn't build.
- npm test && npm run format
+# npm run format
diff --git a/CHANGELOG.md b/CHANGELOG.md
index df920632..6977b46c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -32,25 +32,39 @@ All utilities guarded to convert all input to hex
Added better type definitions for richer IntelliSense in the editor
Changed docs to docsify
-### 1.8.0 (stable)
+### 1.7.9 (unstable)
- Fully treeshakable
- Core-utils directory was split to submodules.
- Added the `load()` utility to create read-manipulate-output chain with all the utilities that take a collection of colos as first input. The chain is lazy.
-- Added the Color class which is aliased as `color()` which has all the utilities that take a color as the first argument bound to its prototype as methods. Calling color() simply calls `new IColor()` under the hood.
-- Added the `toHex` utility which parses all known color tokens similar to chroma-js
+- Added the Color class which is aliased as `color()` which has all the utilities that take a color as the first argument bound to its prototype as methods. Calling color() simply calls `new Color()` under the hood.
+- Added the `toHex` utility which parses all known color tokens similar to chroma-js `chroma()` constructor.
- Eliminated dependancy on lodash.
- Used treeshaken Culori modules to reduce bundle size. Only 20KB when minified!
- Created the `fp` directory with helper functions used in the library grouped by input type.
- More modular codebase
- Simplified code to make it more readable and easier to understand for other developers who may want to contribute
Over 50 utilities in the API now!
-- All palette functions have easings for internal computations
+- All palette functions (generators) have easing function support.
Updated the docs!
-- Improved the accuracy of temperature based utilities.
-- Rewrote the type declarations to make them simpler and more generic.
- All palette functions now take an optional overrides object to fine tune parameters like easing methods, fixups etc.
-- Temperature utilities are marked as experiental until a more effecient way of predicting color temperature is discovered
- Rewrote the README and CONTRIBUTING. Added missing licenses for borrowed code.
+### 1.79.91 (stable)
+- Deprecated temperature based utilities due to inconsistent results.
+- Rewrote the type declarations to make them simpler and more generic.
+- Lightness and chroma channels are now normalized against passed in extremums in the filtering utilities.
+- `toHex` now supports RGB channel in the [0,255] range and [0,1] as well. Values above 1 are normalized using a simple formula. `ch / 255`.
+- Removed unnecessary submodules and joined them into grouped modules
+- Added Typedoc as the documentation generator of choice.
+- New simpler docs writen in GFM.
+- Added `getNearestColor` which uses the differenceHyab metric to get the nearest color against a collection.
+- Collection based utilities that took arrays of colors are now generic! If an object is passed its keys are passsed as an index and the values are treated as valid color tokens. Objects can only have a depth of 1 ie nested properties are not supported (yet).
+- Added color vision deficiency simulation support (stable)
+- Added a ColorArray class that has all collection based methods on its prototype as methods. The chain is lazy and requires `output()` to be called to retun the final result. Its aliased as `load()` which simply wraps around the class and invoking a new instance under the hood.
+-Added some notes to the docs explaining how some of the utilities work as well as other behaviours of the library.
+- Slimmer bundle size.
+- Fixed import errors. The library is now fully ESM with a UMD build for CDN and minified version for browser.
+- Added support for more uniform colorspaces in hueShift. Jch is currently unsupported because of lightness mapping issues. Support is coming soon though.
+- Removed cyclic dependencies that caused a stackoverflow error.
diff --git a/README.md b/README.md
index bdb359ac..df96afe5 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ TypeScript library for general purpose color manipulations and generating custom
### Node
-The library🧾 is available on npm as a package📦 for use in Node:
+The library🧾 is on npm as a package📦 for use in NodeJS:
```bash
npm i huetiful-js
@@ -29,342 +29,9 @@ Or load the library as a UMD glabal (`huetiful`) in your HTML file using a ` Is an object whose properties have the value 'true'
-when they will be absent when used in a 'with' statement. Gets or sets the length of the array. This is a number one higher than the highest index in the array. Gets or sets the length of the array. This is a number one higher than the highest index in the array. Combines two or more arrays.
-This method returns a new array without modifying any existing arrays. Additional arrays and/or items to add to the end of the array. Combines two or more arrays.
-This method returns a new array without modifying any existing arrays. Additional arrays and/or items to add to the end of the array. Returns the this object after copying a section of the array identified by start and end
-to the same array starting at position target If target is negative, it is treated as length+target where length is the
-length of the array. If start is negative, it is treated as length+start. If end is negative, it
-is treated as length+end. If not specified, length of the this object is used as its default value. Takes an array of colors and finds the best matches for a set of predefined palettes. The function does not work on achromatic colors, you may use isAchromatic to filter grays from your collection before passing it to the function. (Optional) The palette type you want to return. An array of colors if the scheme parameter is specified else it returns an object of all the palette types as keys and their values as an array of colors. If no colors are valid for the palette types it returns an empty array for the palette results. Determines whether all the members of an array satisfy the specified test. A function that accepts up to three arguments. The every method calls
-the predicate function for each element in the array until the predicate returns a value
-which is coercible to the Boolean value false, or until the end of the array. An object to which the this keyword can refer in the predicate function.
-If thisArg is omitted, undefined is used as the this value. Determines whether all the members of an array satisfy the specified test. A function that accepts up to three arguments. The every method calls
-the predicate function for each element in the array until the predicate returns a value
-which is coercible to the Boolean value false, or until the end of the array. An object to which the this keyword can refer in the predicate function.
-If thisArg is omitted, undefined is used as the this value. Changes all array elements from value to fill array section with index to start filling the array at. If start is negative, it is treated as
-length+start where length is the length of the array. index to stop filling the array at. If end is negative, it is treated as
-length+end. Returns the elements of an array that meet the condition specified in a callback function. A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. Returns the elements of an array that meet the condition specified in a callback function. A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array. An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value. Returns an array of colors with the specified contrast range. The contrast is tested against a comparison color (the 'against' param) and the specified contrast ranges. The minimum end of the contrast range. The maximum end of the contrast range. Array of filtered colors. Returns an array of colors with the specified distance range. The distance is tested against a comparison color (the 'against' param) and the specified distance ranges. The minimum end of the distance range. The maximum end of the distance range. The color space to calculate the distance in . The weighting values to pass to the Euclidean function. Default is [1,1,1,0]. Array of filtered colors. Returns colors in the specified hue ranges between 0 to 360. The minimum end of the hue range. The maximum end of the hue range. Array of the filtered colors. Returns an array of colors in the specified lightness range. The range is between 0 and 100. The minimum end of the lightness range. The maximum end of the lightness range. Array of filtered colors. Returns an array of colors in the specified luminance range. The range is normalised to [0,1]. The minimum end of the luminance range. The maximum end of the luminance range. Array of filtered colors. Returns an array of colors in the specified saturation range. The range is normalised to [0,1]. The minimum end of the saturation range. The maximum end of the saturation range. The color space to fetch the saturation value from. Any color space with a chroma channel e.g 'lch' or 'hsl' will do. Array of filtered colors. Returns the value of the first element in the array where predicate is true, and undefined
-otherwise. find calls predicate once for each element of the array, in ascending
-order, until it finds one where predicate returns true. If such an element is found, find
-immediately returns that element value. Otherwise, find returns undefined. If provided, it will be used as the this value for each invocation of
-predicate. If it is not provided, undefined is used instead. Returns the index of the first element in the array where predicate is true, and -1
-otherwise. find calls predicate once for each element of the array, in ascending
-order, until it finds one where predicate returns true. If such an element is found,
-findIndex immediately returns that element index. Otherwise, findIndex returns -1. If provided, it will be used as the this value for each invocation of
-predicate. If it is not provided, undefined is used instead. Performs the specified action for each element in an array. A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. Gets the largest hue value from the passed in colors. The mode color space to perform the computation in. Optional boolean that makes the function return a custom object with factor (hue) and name of the color as keys. Default is false. The largest hue value in the colors passed in or a custom object. Gets the largest lightness value from the passed in colors. Optional boolean that makes the function return a custom object with factor (lightness) and name of the color as keys. Default is false. The largest lightness value in the colors passed in or a custom object. Gets the smallest hue value from the passed in colors. The mode color space to perform the computation in. Optional boolean that makes the function return a custom object with factor (hue) and name of the color as keys. Default is false. The smallest hue value in the colors passed in or a custom object. Gets the smallest lightness value from the passed in colors. Optional boolean that makes the function return a custom object with factor (lightness) and name of the color as keys. Default is false. The smallest lightness value in the colors passed in or a custom object. Returns the index of the first occurrence of a value in an array, or -1 if it is not present. The value to locate in the array. The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. Returns a spline based interpolator function with customizable interpolation methods (passed in as 'kind') and optional channel specific overrides.If a color has a falsy channel for example black has an undefined hue channel some interpolation methods may return NaN affecting the final result. The colorspace to perform the color space in. Prefer uniform color spaces for better results such as Lch or Jch. The type of the spline interpolation method. Default is basis. Optional parameter to return the 'closed' variant of the 'kind' of interpolation method which can be useful for cyclical color scales. Default is false Optional channel specific overrides. A hexadecimal representation of the resultant color. Adds all the elements of an array into a string, separated by the specified separator string. A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma. Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present. The value to locate in the array. The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array. Calls a defined callback function on each element of an array, and returns an array that contains the results. A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. Returns the result value from the chain. Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. Returns a copy of a section of an array.
-For both start and end, a negative index can be used to indicate an offset from the end of the array.
-For example, -2 refers to the second to last element of the array. The beginning index of the specified portion of the array.
-If start is undefined, then the slice begins at index 0. The end index of the specified portion of the array. This is exclusive of the element at the index 'end'.
-If end is undefined, then the slice extends to the end of the array. Determines whether the specified callback function returns true for any element of an array. A function that accepts up to three arguments. The some method calls
-the predicate function for each element in the array until the predicate returns a value
-which is coercible to the Boolean value true, or until the end of the array. An object to which the this keyword can refer in the predicate function.
-If thisArg is omitted, undefined is used as the this value. Sorts an array in place.
-This method mutates the array and returns a reference to the same array. Function used to determine the order of the elements. It is expected to return
-a negative value if the first argument is less than the second argument, zero if they're equal, and a positive
-value otherwise. If omitted, the elements are sorted in ascending, ASCII character order. Sorts colors according to their contrast value as defined by WCAG. The contrast is tested against a comparison color (the 'against' param) The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') An array of the sorted color values. Sorts colors according to their Euclidean distance. The distance factor is determined by the color space used (some color spaces are not symmetrical meaning that the distance between colorA and colorB is not equal to the distance between colorB and colorA ). The distance is computed from against a color which is used for comparison for all the colors in the array i.e it sorts the colors against the dist The color to compare the distance with. All the distances are calculated between this color and the ones in the colors array. The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') An array of the sorted color values. Sorts colors according to hue values. It works with any color space with a hue channel. Note that hue values between HSL and Lch do not align. Achromatic colors are not supported The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') The color space to compute the color distances in. All colors within the collection will be converted to mode. Also note that because differences in hue mapping certain color spaces such as HSL and LCH hue values do not align. Keep such quirks in mind to avoid weird results. An array of the sorted color values. Sorts colors according to their lightness. The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') An array of the sorted color values. Sorts colors according to the relative brightness as defined by WCAG definition. The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') An array of the sorted color values. Sorts colors according to their saturation. The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') The mode color space to compute the saturation value in. The default is jch . An array of the sorted color values. Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. The zero-based location in the array from which to start removing elements. The number of elements to remove. An array containing the elements that were deleted. Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. The zero-based location in the array from which to start removing elements. The number of elements to remove. Elements to insert into the array in place of the deleted elements. An array containing the elements that were deleted. Creates an array from an array-like object. An array-like object to convert to an array. Creates an array from an iterable object. An array-like object to convert to an array. A mapping function to call on every element of the array. Value of 'this' used to invoke the mapfn. Creates an array from an iterable object. An iterable object to convert to an array. Creates an array from an iterable object. An iterable object to convert to an array. A mapping function to call on every element of the array. Value of 'this' used to invoke the mapfn. Generated using TypeDoc Returns the color as a simulation of the passed in type of color vision deficiency with the deficiency filter's intensity determined by the severity value. The type of color vision deficiency. To avoid writing the long types, the expected parameters are simply the colors that are hard to perceive for the type of color blindness. For example those with 'tritanopia' are unable to perceive 'blue' light. Default is 'red' when the defeciency parameter is undefined or any falsy value. The intensity of the filter. The exepected value is between [0,1]. For example 0.5 The color as its simulated variant as a hexadecimal string. For a deep dive on color vision deficiency go to The easing function to use. Any value between 0 and 1 A number. Generated using TypeDoc Generated using TypeDoc A wrapper function for the default Tailwind palette. If called with both parameters it return the hex code at the specified shade and value. Else, if called with the shade parameter as "all" it will return all colors from the shades in the palette map at the specified value (if value is undefined it will default to "500"). When called with the shade parameter only it will return all the colors from 100 to 900 of the specified shade. Any shade in the default TailwindCSS palette e.g amber,blue. Any value from 100 to 900 in increments of 100 e.g "200". color Returns a hex code string or array of hex codes depending on how the function is called. Generated using TypeDoc A wrapper function for ColorBrewer's map of diverging color schemes. The name of the scheme. An array of colors in hex represantation. Generated using TypeDoc An array of colors to chain the array methods on. Every element in the array will be parsed as a color token. Generated using TypeDoc A wrapper function for ColorBrewer's map of qualitative color schemes. The name of the scheme An array of colors in hex represantation. Generated using TypeDoc A wrapper function for ColorBrewer's map of sequential color schemes. The name of the scheme An array of colors in hex represantation. Generated using TypeDoc Wrapper function that returns TailwindCSS color value(s) of the specified shade. If invoked with no parameters it returns an array of colors from 100 to 900. If invoked with parameter will return the specified shade vale, color A hex string value or array of hex strings. Generated using TypeDoc Returns the RGB color equivalent of any number between 0 and 16,777,215. The number to convert to RGB color An RGB color object or hex string. Generated using TypeDoc Returns the numerical equivalent of a color. The color to convert to its numerical equivalent. value The numerical value of the color from 0 to 16,777,215. Generated using TypeDoc Converts the temperature value (in Kelvins) to an RGB color. The number of Kelvins. From 0 to 30,000 . Optional boolean parameter to either return an RGB color object or hexadecimal string. Default is true. color The color as a hexadecimal or RGB color object. Generated using TypeDoc Returns an array of channel values in the mode color space. Any recognizable color token. The mode color space to return channel values for An array of channel values with the colorspace as first element and the alpha channel if its explicitly defined in the passed in color. Generated using TypeDoc Converts a wide range of color tokens which are color objects, and CSS named colors (for example 'red'), numbers from 0 to 166,777,215 and arrays in the form of [string,number,number,number,numer?] the first element in the array being the mode color space and the fourth optional number element as the opacity value to hexadecimal. The color to convert to hexadecimal. Works on color objects and CSS named colors. A hexadecimal representation of the passed in color. Generated using TypeDoc Converter function with mode definitions for uniform color spaces. The function is curried to return a converter in the passed colospace. The mode converter to return. The converter function in the mode colorspace. Generated using TypeDoc Returns an array of colors with the specified contrast range. The contrast is tested against a comparison color (the 'against' param) and the specified contrast ranges. The array of colors to filter. The minimum end of the contrast range. The maximum end of the contrast range. Array of filtered colors. Generated using TypeDoc Returns an array of colors with the specified distance range. The distance is tested against a comparison color (the 'against' param) and the specified distance ranges. The array of colors to filter. The minimum end of the distance range. The maximum end of the distance range. The color space to calculate the distance in . The weighting values to pass to the Euclidean function. Default is [1,1,1,0]. Array of filtered colors. Generated using TypeDoc Returns colors in the specified hue ranges between 0 to 360. The array of colors to filter. The minimum end of the hue range. The maximum end of the hue range. Array of the filtered colors. Generated using TypeDoc Returns an array of colors in the specified lightness range. The range is between 0 and 100. The array of colors to filter. The minimum end of the lightness range. The maximum end of the lightness range. The mode colorspace to retrieve the lightness value from. The default is lch65 Array of filtered colors. Generated using TypeDoc Returns an array of colors in the specified luminance range. The range is normalised to [0,1]. The array of colors to filter. The minimum end of the luminance range. The maximum end of the luminance range. Array of filtered colors. Generated using TypeDoc Returns an array of colors in the specified saturation range. The range is normalised to [0,1]. The array of colors to filter. The minimum end of the saturation range. The maximum end of the saturation range. The color space to fetch the saturation value from. Any color space with a chroma channel e.g 'lch' or 'hsl' will do. Array of filtered colors. Generated using TypeDoc Takes an array of colors and finds the best matches for a set of predefined palettes. The function does not work on achromatic colors, you may use isAchromatic to filter grays from your collection before passing it to the function. The array of colors to create palettes from. Preferably use 5 or more colors for better results. (Optional) The palette type you want to return. An array of colors if the scheme parameter is specified else it returns an object of all the palette types as keys and their values as an array of colors. If no colors are valid for the palette types it returns an empty array for the palette results. Generated using TypeDoc Creates a scale of a spline based interpolation between an earthtone and a color. The color to interpolate an earth tone with.
- * Optional overrides for customising interpolation and easing functions. The array of colors resulting from the earthtone interpolation as hex codes. Generated using TypeDoc Generates a palette of hue shifted colors (as a color becomes lighter, its hue shifts up and darker when its hue shifts down. ) from a single base color. Min and max lightness value determine how light or dark our colour will be at either extreme. The color to use as the base of the hueshift. Colors are internally converted to LCH. The optional overrides object to customize per channel options like interpolation methods and channel fixups. An array of colors in hex. The length of the resultant array is the number of iterations multiplied by 2 plus the base color passed or (iterations*2)+1 Generated using TypeDoc Returns a spline based interpolator function with customizable interpolation methods (passed in as 'kind') and optional channel specific overrides. The array of colors to interpolate. If a color has a falsy channel for example black has an undefined hue channel some interpolation methods may return NaN affecting the final result. The colorspace to perform the color space in. Prefer uniform color spaces for better results such as Lch or Jch. The type of the spline interpolation method. Default is basis. Optional parameter to return the 'closed' variant of the 'kind' of interpolation method which can be useful for cyclical color scales. Default is false Optional channel specific overrides. A hexadecimal representation of the resultant color. Generated using TypeDoc Generated using TypeDoc pairedScheme
- Creates a scheme that consists of a base color that is incremented by a hueStep to get the final hue to pair with.The colors are interpolated via white or black. The color to return a paired color scheme from. The optional overrides object to customize per channel options like interpolation methods and channel fixups. An array containing the paired scheme. Generated using TypeDoc Returns a random pastel variant of the passed in color. The color to return a pastel variant of. A random pastel color. Generated using TypeDoc Generates a randomised classic color scheme from a single base color. Any classic color scheme either "analogous"|"triadic"|"tetradic"|"complementary"|"splitComplementary". An array of 8 character hex codes. Elements in the array depend on the number of sample colors in the targeted scheme. Generated using TypeDoc Sorts colors according to their contrast value as defined by WCAG. The contrast is tested against a comparison color (the 'against' param) The array of colors to sort The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') An array of the sorted color values. Generated using TypeDoc Sorts colors according to their Euclidean distance. The distance factor is determined by the color space used (some color spaces are not symmetrical meaning that the distance between colorA and colorB is not equal to the distance between colorB and colorA ). The distance is computed from against a color which is used for comparison for all the colors in the array i.e it sorts the colors against the dist The array of colors to sort. The color to compare the distance with. All the distances are calculated between this color and the ones in the colors array. The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') An array of the sorted color values. Generated using TypeDoc Sorts colors according to hue values. It works with any color space with a hue channel. Note that hue values between HSL and Lch do not align. Achromatic colors are not supported The array of colors to sort The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') The color space to compute the color distances in. All colors within the collection will be converted to mode. Also note that because differences in hue mapping certain color spaces such as HSL and LCH hue values do not align. Keep such quirks in mind to avoid weird results. An array of the sorted color values. Generated using TypeDoc Sorts colors according to their lightness. The array of colors to sort The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') The mode colorspace to use for filtering color lightness. Defaut is lch65 An array of the sorted color values. Generated using TypeDoc Sorts colors according to the relative brightness as defined by WCAG definition. The array of colors to sort The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') An array of the sorted color values. Generated using TypeDoc Sorts colors according to their saturation. The array of colors to sort The expected order of arrangement. Either 'asc' or 'desc'. Default is ascending ('asc') The mode color space to compute the saturation value in. The default is jch . An array of the sorted color values. Generated using TypeDoc Sets the opacity of a color. Also gets the alpha value of the color if the value param is omitted The color with the targeted opacity/alpha channel. The value to apply to the opacity channel. The value is between [0,1] color The resulting color. Returns an 8 character hex code. Generated using TypeDoc The color to brighten. The amount to brighten with. Also supports expressions as strings e.g darken("#fc23a1","*0.5") Generated using TypeDoc Returns the color as a simulation of the passed in type of color vision deficiency with the deficiency filter's intensity determined by the severity value. The type of color vision deficiency. To avoid writing the long types, the expected parameters are simply the colors that are hard to perceive for the type of color blindness. For example those with 'tritanopia' are unable to perceive 'blue' light. Default is 'red' when the defeciency parameter is undefined or any falsy value. The color as its simulated variant as a hexadecimal string. For a deep dive on color vision deficiency go to Generated using TypeDoc Darkens the color by reducing the lightness channel. . The color to darken. The amount to darken with. Also supports expressions as strings e.g darken("#fc23a1","*0.5") color The darkened color. Generated using TypeDoc Gets the value specifified channel on the color. The mode and channel to be retrieved. For example "rgb.b" will return the value of the blue channel in the RGB color space of that color. value The value of the queried channel. Generated using TypeDoc Gets the complementary hue of the passed in color. The function is internally guarded against achromatic colors. The color to retrieve its complimentary hue. Optional boolean whether to return an object with the result color hue family or just the result color. Default is false. An object with the hue family and complimentary color as keys. Generated using TypeDoc Gets the contrast between the passed in colors. The relative luminance of the lightest color. Generated using TypeDoc Gets the largest saturation value from the passed in colors. The array of colors to query the color with the largest saturation value. Optional boolean that makes the function return a custom object with factor (saturation) and name of the color as keys. Default is false. The largest saturation value in the colors passed in or a custom object. Generated using TypeDoc Gets the largest contrast value from the passed in colors compared against a sample color. The array of colors to query the color with the largest contrast value. Optional boolean that makes the function return a custom object with factor (contrast) and name of the color as keys. Default is false. The largest contrast value in the colors passed in or a custom object. Generated using TypeDoc Gets the largest hue value from the passed in colors. The array of colors to query the color with the largest hue value. The mode color space to perform the computation in. Optional boolean that makes the function return a custom object with factor (hue) and name of the color as keys. Default is false. The largest hue value in the colors passed in or a custom object. Generated using TypeDoc Gets the largest lightness value from the passed in colors. The array of colors to query the color with the largest lightness value. THe mode colorspace to retrieve the lightness value from. Optional boolean that makes the function return a custom object with factor (lightness) and name of the color as keys. Default is false. The largest lightness value in the colors passed in or a custom object. Generated using TypeDoc Gets the hue family which a a color belongs to with the overtone included (if it has one.). For achromatic colors it returns the string "gray". The color to query its shade or hue family. The name of the hue family for example red or green. Generated using TypeDoc The color to query. value The color's luminance value. Gets the luminance value of that color as defined by WCAG. Generated using TypeDoc Gets the smallest chroma/saturation value from the passed in colors. The array of colors to query the color with the smallest chroma/saturation value. The mode color space to perform the computation in. Optional boolean that makes the function return a custom object with factor (saturation) and name of the color as keys. Default is false. The smallest chroma/saturation value in the colors passed in or a custom object. Generated using TypeDoc The collection of colors to search for nearest colors The color to use for distance comparison The number of colors to return, if the value is above the colors in the available sample, the entire collection is returned with colors ordered in ascending order. An array of colors. Generated using TypeDoc Gets the smallest contrast value from the passed in colors compared against a sample color. The array of colors to query the color with the smallest contrast value. Optional boolean that makes the function return a custom object with factor (contrast) and name of the color as keys. Default is false. The smallest contrast value in the colors passed in or a custom object. Generated using TypeDoc Gets the smallest hue value from the passed in colors. The array of colors to query the color with the smallest hue value. The mode color space to perform the computation in. Optional boolean that makes the function return a custom object with factor (hue) and name of the color as keys. Default is false. The smallest hue value in the colors passed in or a custom object. Generated using TypeDoc Gets the smallest lightness value from the passed in colors. The array of colors to query the color with the smallest lightness value. Optional boolean that makes the function return a custom object with factor (lightness) and name of the color as keys. Default is false. The smallest lightness value in the colors passed in or a custom object. Generated using TypeDoc Checks if a color is achromatic(without hue or simply grayscale). The color to test if it is achromatic or not. boolean Returns true if the color is achromatic else false Generated using TypeDoc Checks if a color can be roughly classified as a cool color. Returns true if color is a cool color else false. The color to check the temperature. True or false. Generated using TypeDoc Checks if a color can be roughly classified as a warm color. Returns true if color is a warm color else false. The color to check the temperature. True or false. Generated using TypeDoc Returns the hue which is biasing the passed in color The color to query its overtone. The name of the overtone hue. If an achromatic color is passed in it return the string gray otherwise if the color has no bias it returns false. Generated using TypeDoc Sets the value for the specified channel in a color. The mode and channel to work with. For example 'rgb.b'. color The mutated color. Generated using TypeDoc Sets the luminance by interpolating the color with black (to decrease luminance) or white (to increase the luminance). The color to set luminance The amount of luminance to set. The value range is normalised between [0,1] The mutated color with the modified properties. Generated using TypeDoc
-TypeScript library for general purpose color manipulations and generating custom color scales. The library🧾 is available on npm as a package📦 for use in Node: You can use a CDN in this example, jsdelivr to load the library remotely: Or load the library as a UMD glabal ( A color can be defined using different data types(arrays, strings, numbers plain objects). This allows us to work with color in almost any format and flexibility in how we want to define our color. Below are some examples listing all the supported formats of passing in color values and their respective conversion functions: ℹ️ See here and the expected channel ranges or more on converter functions page 🔗. As a starting point the library comes along with the default TailwindCSS palette included. This helps you get started easier when you're using palette functions such as The Tailwind colors can be accessed from two wrapper functions, We can sort and filter colors using their property or channel values values like saturation,lightness and even contrast!
-Here are some example using the filtering and sorting functions on an array of colors: An example of sorting colors by the relative luminance as defined by the WCAG 2.0 formula An example of filtering colors by the value of the hue angle. The function uses the Jch colorspace because of its perceptual uniformity. George Francis explains this phenomena in detail here. See more about the parameter types and other filtering functions A few simple palette generator functions are included in the library. One of my favourites is See more palette generator functions Is this color cool🥶 or warm 🥵, is it achromatic (grayscale) or chromatic? Though its easy to tell colors apart visually when they're displayed on the screen📺 it can be a bit confusing to tell colors apart using code🔢. Below is an example showing how to determine if a color is gray or not: Here's an example🎆 showing how we can check if a color is cool using one of the predicate functions: Another use👷 case would be passing the predicate to an array method like Or maybe we want to know which color has the furthest hue distance in our sample collection against our target color 🤔: The possibilities are limited by the imagination🤯 of the user._
-~ me :smile: See some unexpected results😖? Check the issue tracker to open an issue or search for the problem to see if your issue already exists or has been resolved. Would like to join the chat🗣️ and share ideas💡 and suggestions💭 ? See the discussions and just say hi, or share a coding meme(whatever breaks the ice🏔️) This project is fully open source so contributions are welcome! Help make this project better by suggesting improvements or features and patching bugs🐛. See🔍 the CONTRIBUTING file for more information on how to get started. Coloring with code: A programmatic approach by George Francis Copyright (c) 2023,
-Dean Tarisai and contributors
-huetiful-js is released under the Apache 2.0 license. Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc This object returns the lightMode and darkMode optimized version of a color with support to add color vision deficiency simulation to the final color result. Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Any recognizable color token. Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc interpolation method to use on the chroma channel. The earthtone to interpolate with. The easing function to use. Any value between 0 and 1 A number. interpolation method to use on the hue channel. amount of hue angles to increment each iteration with. interpolation method to use on the lightness channel. Maximum lightness value (range 0-100). Minimum lightness value (range 0-100). amount of samples to return in the result collection. color to pass through during interpolation. The override parameters for palette functions. Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc Generated using TypeDoc this is an ellipsis… this is a smile 😄 emoji this is underlined and this is also underlined hello world!
+
+**Actual Output:**
+
+ hello **world**! some text www.google.com
+ ```
+
+ * **excludeTrailingPunctuationFromURLs**: (boolean) [default false] This option excludes trailing punctuation from autolinking urls.
+ Punctuation excluded: `. ! ? ( )`. Only applies if **simplifiedAutoLink** option is set to `true`.
+
+ ```md
+ check this link www.google.com!
+ ```
+ will be parsed as
+ ```html
+ check this link www.google.com! some text with__underscores__in middle some text with**underscores**in middle a line tags around block-level tags.
+ text = showdown.subParser('hashHTMLBlocks')(text, options, globals);
+ text = showdown.subParser('paragraphs')(text, options, globals);
+
+ text = globals.converter._dispatch('blockGamut.after', text, options, globals);
+
+ return text;
+});
+
+showdown.subParser('blockQuotes', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('blockQuotes.before', text, options, globals);
+
+ // add a couple extra lines after the text and endtext mark
+ text = text + '\n\n';
+
+ var rgx = /(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;
+
+ if (options.splitAdjacentBlockquotes) {
+ rgx = /^ {0,3}>[\s\S]*?(?:\n\n)/gm;
+ }
+
+ text = text.replace(rgx, function (bq) {
+ // attacklab: hack around Konqueror 3.5.4 bug:
+ // "----------bug".replace(/^-/g,"") == "bug"
+ bq = bq.replace(/^[ \t]*>[ \t]?/gm, ''); // trim one level of quoting
+
+ // attacklab: clean up hack
+ bq = bq.replace(/¨0/g, '');
+
+ bq = bq.replace(/^[ \t]+$/gm, ''); // trim whitespace-only lines
+ bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);
+ bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse
+
+ bq = bq.replace(/(^|\n)/g, '$1 ');
+ // These leading spaces screw with Just type tags
+
+ for (var i = 0; i < end; i++) {
+ var str = grafs[i];
+ // if this is an HTML marker, copy it
+ if (str.search(/¨(K|G)(\d+)\1/g) >= 0) {
+ grafsOut.push(str);
+
+ // test for presence of characters to prevent empty lines being parsed
+ // as paragraphs (resulting in undesired extra empty paragraphs)
+ } else if (str.search(/\S/) >= 0) {
+ str = showdown.subParser('spanGamut')(str, options, globals);
+ str = str.replace(/^([ \t]*)/g, ' ');
+ str += ' tags around block-level tags.\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('paragraphs')(text, options, globals);\n\n text = globals.converter._dispatch('blockGamut.after', text, options, globals);\n\n return text;\n});\n","showdown.subParser('blockQuotes', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockQuotes.before', text, options, globals);\n\n // add a couple extra lines after the text and endtext mark\n text = text + '\\n\\n';\n\n var rgx = /(^ {0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+/gm;\n\n if (options.splitAdjacentBlockquotes) {\n rgx = /^ {0,3}>[\\s\\S]*?(?:\\n\\n)/gm;\n }\n\n text = text.replace(rgx, function (bq) {\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, ''); // trim one level of quoting\n\n // attacklab: clean up hack\n bq = bq.replace(/¨0/g, '');\n\n bq = bq.replace(/^[ \\t]+$/gm, ''); // trim whitespace-only lines\n bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);\n bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse\n\n bq = bq.replace(/(^|\\n)/g, '$1 ');\n // These leading spaces screw with Just type tags\n\n for (var i = 0; i < end; i++) {\n var str = grafs[i];\n // if this is an HTML marker, copy it\n if (str.search(/¨(K|G)(\\d+)\\1/g) >= 0) {\n grafsOut.push(str);\n\n // test for presence of characters to prevent empty lines being parsed\n // as paragraphs (resulting in undesired extra empty paragraphs)\n } else if (str.search(/\\S/) >= 0) {\n str = showdown.subParser('spanGamut')(str, options, globals);\n str = str.replace(/^([ \\t]*)/g, ' ');\n str += '=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;lClass ColorArray
Hierarchy
Index
Constructors
Properties
Methods
Constructors
constructor
Parameters
colors: ColorToken[]
Returns ColorArray
Properties
Readonly
[unscopables]
[unscopables]?: boolean;
length?: boolean;
[iterator]?: any;
concat?: any;
copyWithin?: any;
entries?: any;
every?: any;
fill?: any;
filter?: any;
find?: any;
findIndex?: any;
forEach?: any;
indexOf?: any;
join?: any;
keys?: any;
lastIndexOf?: any;
map?: any;
pop?: any;
push?: any;
reduce?: any;
reduceRight?: any;
reverse?: any;
shift?: any;
slice?: any;
some?: any;
sort?: any;
splice?: any;
toLocaleString?: any;
toString?: any;
unshift?: any;
values?: any;
}Type declaration
Optional
Readonly
[unscopables]?: booleanOptional
length?: booleanlength
Static
Readonly
[species]Methods
[iterator]
concat
Parameters
Rest
...items: ConcatArray<any>[]Returns any[]
Parameters
Rest
...items: any[]Returns any[]
copy
Parameters
target: number
start: number
Optional
end: numberReturns ColorArray
discover
Parameters
Optional
schemeType: "analogous" | "triadic" | "tetradic" | "complementary"Returns object | ColorToken[]
Example
-import { discoverPalettes } from 'huetiful-js'
let sample = [
"#ffff00",
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#720000",
"#600000",
"#4e0000",
"#3e0000",
"#310000",
]
console.log(load(sample).discoverPalettes(sample, "tetradic").output())
// [ '#ffff00ff', '#00ffdcff', '#310000ff', '#720000ff' ]
-entries
every
Type Parameters
S extends any
Parameters
predicate: ((value, index, array) => value is S)
Parameters
value: any
index: number
array: any[]
Returns value is S
Optional
thisArg: anyReturns this is S[]
Parameters
predicate: ((value, index, array) => unknown)
Parameters
value: any
index: number
array: any[]
Returns unknown
Optional
thisArg: anyReturns boolean
fill
start
to end
index to a static value
and returns the modified arrayParameters
value: any
Optional
start: numberOptional
end: numberReturns ColorArray
filter
Type Parameters
S extends any
Parameters
predicate: ((value, index, array) => value is S)
Parameters
value: any
index: number
array: any[]
Returns value is S
Optional
thisArg: anyReturns S[]
Parameters
predicate: ((value, index, array) => unknown)
Parameters
value: any
index: number
array: any[]
Returns unknown
Optional
thisArg: anyReturns any[]
filter
Parameters
against: ColorToken
startContrast: number = 0.05
Optional
endContrast: numberReturns ColorArray
Example
-import { filterByContrast } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
console.log(filterByContrast(sample, 'green', '>=3'))
// [ '#00ffdc', '#00ff78', '#ffff00', '#310000', '#3e0000', '#4e0000' ]
-filter
Parameters
against: ColorToken
startDistance: number = 0.05
Optional
endDistance: numberOptional
mode: ColorSpacesOptional
weights: [number, number, number, number]Returns ColorArray
Example
-import { filterByDistance } from 'huetiful-js'
let sample = [
"#ffff00",
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#720000",
"#600000",
]
console.log(filterByDistance(sample, "yellow", 0.1))
// [ '#ffff00' ]
-filter
Parameters
startHue: number = 0
endHue: number = 360
Returns ColorArray
Example
-let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
filterByHue(sample, 20, 80)
// [ '#310000', '#3e0000', '#4e0000', '#600000', '#720000' ]
-filter
Parameters
startLightness: number = 5
endLightness: number = 100
Returns ColorArray
Example
-import { filterByLightness } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
filterByLightness(sample, 20, 80)
// [ '#00c000', '#007e00', '#164100', '#720000' ]
-filter
Parameters
startLuminance: number = 0.05
endLuminance: number = 1
Returns ColorArray
Example
-import { filterByLuminance } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
filterByLuminance(sample, 0.4, 0.9)
// [ '#00ffdc', '#00ff78' ]
-filter
Parameters
startSaturation: number = 0.05
endSaturation: number = 1
Optional
mode: HueColorSpacesReturns ColorArray
Example
-import { filterByContrast } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
console.log(filterByContrast(sample, 'green', '>=3'))
// [ '#00ffdc', '#00ff78', '#ffff00', '#310000', '#3e0000', '#4e0000' ]
-find
Type Parameters
S extends any
Parameters
predicate: ((value, index, obj) => value is S)
Parameters
value: any
index: number
obj: any[]
Returns value is S
Optional
thisArg: anyReturns S
Parameters
predicate: ((value, index, obj) => unknown)
Parameters
value: any
index: number
obj: any[]
Returns unknown
Optional
thisArg: anyReturns any
find
Parameters
predicate: ((value, index, obj) => unknown)
Parameters
value: any
index: number
obj: any[]
Returns unknown
Optional
thisArg: anyReturns number
for
Parameters
callbackfn: ((value, index, array) => void)
Parameters
value: any
index: number
array: any[]
Returns void
Optional
thisArg: anyReturns void
get
color: ColorToken;
factor: number;
}Parameters
Optional
colorSpace: HueColorSpacescolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { getFarthestHue } from 'huetiful-js'
let sample = ['b2c3f1', '#a1bd2f', '#f3bac1']
console.log(load(output).getFarthestHue('lch'))
// 273.54920266436477
-get
color: ColorToken;
factor: number;
}Parameters
Optional
colorspace: HueColorSpacescolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { maxLightness } from 'huetiful-js'
let sample = ["b2c3f1", "#a1bd2f", "#f3bac1"]
console.log(load(sample).getFarthestLightness('lch', true))
// { lightness: 80.94668903360088, name: '#f3bac1' }
-get
color: ColorToken;
factor: number;
}Parameters
Optional
colorSpace: HueColorSpacescolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { getNearestHue } from 'huetiful-js'
let sample = ['b2c3f1', '#a1bd2f', '#f3bac1']
console.log(load(sample).getNearestHue('lch'))
// 12.462831644544274
-get
color: ColorToken;
factor: number;
}Parameters
Optional
colorspace: HueColorSpacescolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { minLightness } from 'huetiful-js'
let sample = ["b2c3f1", "#a1bd2f", "#f3bac1"]
console.log(load(sample).getNearestLightness('lch', true))
// { lightness: 72.61647882089876, name: '#a1bd2f' }
-index
Parameters
searchElement: any
Optional
fromIndex: numberReturns number
interpolate
Parameters
Optional
colorspace: HueColorSpacesOptional
samples: numberOptional
kind: "natural" | "monotone" | "basis"Optional
closed: booleanOptional
options: InterpolatorOptionsReturns ColorToken[]
join
Parameters
Optional
separator: stringReturns string
keys
last
Parameters
searchElement: any
Optional
fromIndex: numberReturns number
map
Type Parameters
U
Parameters
callbackfn: ((value, index, array) => U)
Parameters
value: any
index: number
array: any[]
Returns U
Optional
thisArg: anyReturns U[]
output
Returns ColorToken
Method
pop
push
reduce
Parameters
callbackfn: ((previousValue, currentValue, currentIndex, array) => any)
Parameters
previousValue: any
currentValue: any
currentIndex: number
array: any[]
Returns any
Returns any
Parameters
callbackfn: ((previousValue, currentValue, currentIndex, array) => any)
Parameters
previousValue: any
currentValue: any
currentIndex: number
array: any[]
Returns any
initialValue: any
Returns any
Type Parameters
U
Parameters
callbackfn: ((previousValue, currentValue, currentIndex, array) => U)
Parameters
previousValue: U
currentValue: any
currentIndex: number
array: any[]
Returns U
initialValue: U
Returns U
reduce
Parameters
callbackfn: ((previousValue, currentValue, currentIndex, array) => any)
Parameters
previousValue: any
currentValue: any
currentIndex: number
array: any[]
Returns any
Returns any
Parameters
callbackfn: ((previousValue, currentValue, currentIndex, array) => any)
Parameters
previousValue: any
currentValue: any
currentIndex: number
array: any[]
Returns any
initialValue: any
Returns any
Type Parameters
U
Parameters
callbackfn: ((previousValue, currentValue, currentIndex, array) => U)
Parameters
previousValue: U
currentValue: any
currentIndex: number
array: any[]
Returns U
initialValue: U
Returns U
reverse
shift
slice
Parameters
Optional
start: numberOptional
end: numberReturns any[]
some
Parameters
predicate: ((value, index, array) => unknown)
Parameters
value: any
index: number
array: any[]
Returns unknown
Optional
thisArg: anyReturns boolean
sort
Parameters
Optional
compareFn: ((a, b) => number)
-[11,2,22,1].sort((a, b) => a - b)
-
Parameters
a: any
b: any
Returns number
Returns ColorArray
sort
Parameters
against: ColorToken
Optional
order: "asc" | "desc"Returns ColorArray
Example
-import { sortByContrast } from 'huetiful-js'
let sample = ['purple', 'green', 'red', 'brown']
console.log(sortByContrast(sample, 'yellow'))
// [ 'red', 'green', 'brown', 'purple' ]
console.log(sortByContrast(sample, 'yellow', 'desc'))
// [ 'purple', 'brown', 'green', 'red' ]
-sort
Parameters
against: ColorToken
Optional
order: "asc" | "desc"Optional
options: ColorDistanceOptionsReturns ColorArray
Example
-import { sortByDistance } from 'huetiful-js'
let sample = ['purple', 'green', 'red', 'brown']
console.log(
sortByDistance(sample, 'yellow', 'asc', {
mode: 'lch',
})
)
// [ 'brown', 'red', 'green', 'purple' ]
let sample = ['purple', 'green', 'red', 'brown']
console.log(
sortByDistance(sample, 'yellow', 'asc', {
mode: 'lch',
})
)
// [ 'green', 'brown', 'red', 'purple' ]
-sort
Parameters
order: "asc" | "desc"
colorspace: string = 'jch'
Returns ColorArray
Example
-let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
];
let sorted = sortByHue(sample);
console.log(sorted)
// [
'#310000', '#3e0000',
'#4e0000', '#600000',
'#720000', '#ffff00',
'#164100', '#00c000',
'#007e00', '#00ff78',
'#00ffdc'
]
let sortedDescending = sortByHue(sample,'desc');
console.log(sortedDescending)
// [
'#00ffdc', '#00ff78',
'#007e00', '#00c000',
'#164100', '#ffff00',
'#720000', '#600000',
'#4e0000', '#3e0000',
'#310000'
]
-sort
Parameters
Optional
order: "asc" | "desc"Returns ColorArray
Example
-import { sortByLightness } from "huetiful-js";
let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
]
sortByLightness(sample)
// [
'#310000', '#3e0000',
'#4e0000', '#600000',
'#720000', '#164100',
'#007e00', '#00c000',
'#00ff78', '#00ffdc',
'#ffff00'
]
sortByLightness(sample,'desc')
// [
'#ffff00', '#00ffdc',
'#00ff78', '#00c000',
'#007e00', '#164100',
'#720000', '#600000',
'#4e0000', '#3e0000',
'#310000'
]
-sort
Parameters
Optional
order: "asc" | "desc"Returns ColorArray
Example
-import { sortByLuminance } from "huetiful-js";
let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
];
let sorted = sortByLuminance(sample)
console.log(sorted)
// [
'#310000', '#3e0000',
'#4e0000', '#600000',
'#720000', '#164100',
'#007e00', '#00c000',
'#00ff78', '#00ffdc',
'#ffff00'
]
let sortedDescending = sortByLuminance(sample, "desc");
console.log(sortedDescending)
// [
'#ffff00', '#00ffdc',
'#00ff78', '#00c000',
'#007e00', '#164100',
'#720000', '#600000',
'#4e0000', '#3e0000',
'#310000'
]
-sort
Parameters
order: "asc" | "desc"
Optional
mode: HueColorSpacesReturns ColorArray
Example
-import { sortBySaturation } from "huetiful-js";
let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
];
let sorted = sortBySaturation(sample);
console.log(sorted);
// [
'#310000', '#3e0000',
'#164100', '#4e0000',
'#600000', '#720000',
'#00ffdc', '#007e00',
'#00ff78', '#00c000',
'#ffff00'
]
let sortedDescending = sortBySaturation(sample,'desc');
console.log(sortedDescending)
// [
'#ffff00', '#00c000',
'#00ff78', '#007e00',
'#00ffdc', '#720000',
'#600000', '#4e0000',
'#164100', '#3e0000',
'#310000'
]
-splice
Parameters
start: number
Optional
deleteCount: numberReturns any[]
Parameters
start: number
deleteCount: number
Rest
...items: any[]Returns any[]
to
to
unshift
values
Static
fromType Parameters
T
Parameters
arrayLike: ArrayLike<T>
Returns T[]
Type Parameters
T
U
Parameters
arrayLike: ArrayLike<T>
mapfn: ((v, k) => U)
Parameters
v: T
k: number
Returns U
Optional
thisArg: anyReturns U[]
Type Parameters
T
Parameters
iterable: Iterable<T> | ArrayLike<T>
Returns T[]
Type Parameters
T
U
Parameters
iterable: Iterable<T> | ArrayLike<T>
mapfn: ((v, k) => U)
Parameters
v: T
k: number
Returns U
Optional
thisArg: anyReturns U[]
Static
isStatic
ofClass IColor
Hierarchy
Index
Constructors
Methods
Constructors
constructor
Parameters
c: ColorToken
Optional
options: ColorOptionsReturns IColor
Methods
alpha
brighten
contrast
Parameters
against: IColor | "lightMode" | "darkMode"
Returns number
darken
deficiency
Parameters
Optional
deficiencyType: "red" | "green" | "blue" | "monochromacy"severity: number = 1
Returns ColorToken
See
Example
-import { colorDeficiency, toHex } from 'huetiful-js'
// Here we are simulating color blindness of tritanomaly or we can't see 'blue'.
// We are passing in our color as an array of channel values in the mode "rgb". The severity is set to 0.1
let tritanomaly = colorDeficiency('blue')
console.log(tritanomaly(['rgb', 230, 100, 50, 0.5], 0.1))
// #dd663680
// Here we are simulating color blindness of tritanomaly or we can't see 'red'. The severity is not explicitly set so it defaults to 1
let protanopia = colorDeficiency('red')
console.log(protanopia({ h: 20, w: 50, b: 30, mode: 'hwb' }))
// #9f9f9f
-earthtone
Parameters
Optional
options: EarthtoneOptionsReturns ColorToken | ColorArray
get
get
color: ColorToken;
hue: HueFamily;
}Parameters
Optional
mode: HueColorSpacesOptional
colorObj: booleanReturns ColorToken | {
color: ColorToken;
hue: HueFamily;
}get
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorObj: booleanReturns number | {
color: ColorToken;
factor: number;
}get
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorObj: booleanReturns number | {
color: ColorToken;
factor: number;
}get
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorObj: booleanReturns number | {
color: ColorToken;
factor: number;
}get
get
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Returns number | {
color: ColorToken;
factor: number;
}get
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorObj: booleanReturns number | {
color: ColorToken;
factor: number;
}get
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorObj: booleanReturns number | {
color: ColorToken;
factor: number;
}hue
Parameters
Optional
options: HueShiftOptionsReturns ColorArray
is
is
is
luminance
output
ovetone
paired
Parameters
Optional
options: PairedSchemeOptionsReturns ColorArray
pastel
saturation
scheme
Parameters
scheme: "analogous" | "triadic" | "tetradic" | "complementary"
Optional
easingFunc: ((t) => number)Parameters
t: number
Returns number
Returns ColorToken[] | ColorArray
set
to
via
Parameters
origin: ColorToken
Optional
t: numberOptional
options: {
chromaInterpolator: Interpolator;
easingFunc: ((t) => number);
hueFixup: ((arr) => number[]);
hueInterpolator: Interpolator;
lightnessInterpolator: Interpolator;
}chroma
easing
Parameters
t: number
Returns number
hue
Parameters
arr: number[]
Returns number[]
hue
lightness
Returns string
Function color
Parameters
color: ColorToken
Returns IColor
Function colors
Parameters
shade: string
Optional
val: ScaleValuesReturns ColorToken | ColorToken[]
Example
-import { colors } from "huetiful-js";
let all300 = colors("all", 300);
console.log(all300)
//[
'#cbd5e1', '#d1d5db', '#d4d4d8',
'#d4d4d4', '#d6d3d1', '#fca5a5',
'#fdba74', '#fcd34d', '#fde047',
'#bef264', '#86efac', '#6ee7b7',
'#5eead4', '#7dd3fc', '#93c5fd',
'#c4b5fd', '#d8b4fe', '#f0abfc',
'#f9a8d4', '#fda4af'
]
let red = colors("red");
console.log(red);
// [
'#fef2f2', '#fee2e2',
'#fecaca', '#fca5a5',
'#f87171', '#ef4444',
'#dc2626', '#b91c1c',
'#991b1b', '#7f1d1d'
]
let red100 = colors("red", 100);
console.log(red100)
// #fee2e2
-Function diverging
Parameters
scheme: DivergingScheme
Returns ColorToken[]
Example
-import { diverging } from 'huetiful-js'
console.log(diverging("Spectral"))
//[
'#7fc97f', '#beaed4',
'#fdc086', '#ffff99',
'#386cb0', '#f0027f',
'#bf5b17', '#666666'
]
-Function load
Parameters
colors: ColorToken[]
Returns ColorArray
Function qualitative
Parameters
scheme: QualitativeScheme
Returns ColorToken[]
Example
-import { qualitative } from 'huetiful-js'
console.log(qualitative("Accent"))
// [
'#7fc97f', '#beaed4',
'#fdc086', '#ffff99',
'#386cb0', '#f0027f',
'#bf5b17', '#666666'
]
-Function sequential
Parameters
scheme: SequentialScheme
Returns ColorToken[]
Example
-import { sequential } from 'huetiful-js
console.log(sequential("OrRd"))
// [
'#fff7ec', '#fee8c8',
'#fdd49e', '#fdbb84',
'#fc8d59', '#ef6548',
'#d7301f', '#b30000',
'#7f0000'
]
-Function tailwindColors
Parameters
shade: keyof HueMap
Returns ((val?) => string | string[])
Parameters
Optional
val: ScaleValuesReturns string | string[]
Example
-import { tailwindColors } from "huetiful-js";
// We pass in red as the target hue.
// It returns a function that can be called with an optional value parameter
let red = tailwindColors("red");
console.log(red());
// [
'#fef2f2', '#fee2e2',
'#fecaca', '#fca5a5',
'#f87171', '#ef4444',
'#dc2626', '#b91c1c',
'#991b1b', '#7f1d1d'
]
console.log(red(100));
// '#fee2e2'
console.log(red('900'));
// '#7f1d1d'
-Function num2rgb
Parameters
num: number
hex: boolean = false
Returns ColorToken
Example
-import { num2rgb } from 'huetiful-js'
console.log(num2rgb(900, true))
// #000384
-Function rgb2num
Parameters
color: ColorToken
Returns number
Example
-import { rgb2num } from 'huetiful-js'
console.log(rgb2num("b2c3f1"))
// 11715569
-Function temp2Color
Parameters
kelvin: number
hex: boolean = false
Returns ColorToken
Example
-import { temp2Color } from 'huetiful-js'
console.log(temp2Color(2542))
// #ffa44a
-Function toColorTuple
Parameters
color: ColorToken
mode: ColorSpaces
Returns ColorTuple
Example
-let rgbColor = {
r: 0.4,
g: 0.3,
b: 0.7,
mode: "rgb",
};
console.log(toColorTuple(rgbColor,'rgb'));
// [ 'rgb', 0.4, 0.3, 0.7 ]
-Function toHex
Parameters
color: ColorToken
Returns string
Example
-import { toHex } from "huetiful-js";
console.log(toHex({ l: 50, c: 31, h: 100, alpha: 0.5, mode: "lch" }))
// #7b794180
console.log(toHex({ l: 50, c: 31, h: 100, mode: "lch" }))
// #7b7941
-Function ucsConverter
Parameters
colorspace: UniformColorSpaces
Returns ConvertFn<any>
Function filterByContrast
Parameters
colors: ColorToken[]
against: ColorToken
startContrast: number = 1
endContrast: number = 21
Returns ColorToken[]
Example
-import { filterByContrast } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
console.log(filterByContrast(sample, 'green', '>=3'))
// [ '#00ffdc', '#00ff78', '#ffff00', '#310000', '#3e0000', '#4e0000' ]
-Function filterByDistance
Parameters
colors: ColorToken[]
against: ColorToken
startDistance: number = 0.05
Optional
endDistance: numberOptional
colorspace: ColorSpacesOptional
weights: [number, number, number, number]Returns ColorToken[]
Example
-import { filterByDistance } from 'huetiful-js'
let sample = [
"#ffff00",
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#720000",
"#600000",
]
console.log(filterByDistance(sample, "yellow", 0.1))
// [ '#ffff00' ]
-Function filterByHue
Parameters
colors: ColorToken[]
startHue: number = 0
endHue: number = 360
Optional
colorspace: HueColorSpacesReturns ColorToken[]
Example
-let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
filterByHue(sample, 20, 80)
// [ '#310000', '#3e0000', '#4e0000', '#600000', '#720000' ]
-Function filterByLightness
Parameters
colors: ColorToken[]
startLightness: number = 5
endLightness: number = 100
Optional
colorspace: HueColorSpacesReturns ColorToken[]
Example
-import { filterByLightness } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
filterByLightness(sample, 20, 80)
// [ '#00c000', '#007e00', '#164100', '#720000' ]
-Function filterByLuminance
Parameters
colors: ColorToken[]
startLuminance: number = 0.05
endLuminance: number = 1
Returns ColorToken[]
Example
-import { filterByLuminance } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
filterByLuminance(sample, 0.4, 0.9)
// [ '#00ffdc', '#00ff78' ]
-Function filterBySaturation
Parameters
colors: ColorToken[]
startSaturation: number = 0.05
endSaturation: number = 1
Optional
colorspace: HueColorSpacesReturns ColorToken[]
Example
-import { filterByContrast } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
console.log(filterByContrast(sample, 'green', '>=3'))
// [ '#00ffdc', '#00ff78', '#ffff00', '#310000', '#3e0000', '#4e0000' ]
-Function discoverPalettes
Parameters
colors: ColorToken[]
Optional
schemeType: "analogous" | "triadic" | "tetradic" | "complementary"Returns ColorToken[] | object
Example
-import { discoverPalettes } from 'huetiful-js'
let sample = [
"#ffff00",
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#720000",
"#600000",
"#4e0000",
"#3e0000",
"#310000",
]
console.log(discoverPalettes(sample, "tetradic"))
// [ '#ffff00ff', '#00ffdcff', '#310000ff', '#720000ff' ]
-Function earthtone
Parameters
color: ColorToken
Optional
colorspace: HueColorSpacesOptional
options: EarthtoneOptionsReturns ColorToken[]
Example
-import { earthtone } from 'huetiful-js'
console.log(earthtone("pink",{earthtones:'clay',iterations:5 }))
// [ '#6a5c52ff', '#8d746aff', '#b38d86ff', '#d9a6a6ff', '#ffc0cbff' ]
-Function hueShift
Parameters
color: ColorToken
Optional
colorspace: UniformColorSpacesOptional
options: HueShiftOptionsReturns ColorToken[]
Example
-import { hueShift } from "huetiful-js";
let hueShiftedPalette = hueShift("#3e0000");
console.log(hueShiftedPalette);
// [
'#ffffe1', '#ffdca5',
'#ca9a70', '#935c40',
'#5c2418', '#3e0000',
'#310000', '#34000f',
'#38001e', '#3b002c',
'#3b0c3a'
]
-Function interpolateSpline
Parameters
colors: ColorToken[]
Optional
colorspace: HueColorSpacesOptional
samples: numberOptional
kind: "natural" | "monotone" | "basis"closed: boolean = false
Optional
options: InterpolatorOptionsReturns ColorToken[]
Function interpolator
Parameters
colors: ColorToken[]
Optional
colorspace: HueColorSpacesOptional
options: objectReturns Interpolator<HueColorSpaces>
Function pairedScheme
Parameters
color: ColorToken
Optional
options: PairedSchemeOptionsReturns ColorToken[] | ColorToken
Example
-import { pairedScheme } from 'huetiful-js'
console.log(pairedScheme("green",{hueStep:6,iterations:4,tone:'dark'}))
// [ '#008116ff', '#006945ff', '#184b4eff', '#007606ff' ]
-Function pastel
Parameters
color: ColorToken
Returns ColorToken
Example
-import { pastel } from 'huetiful-js'
console.log(pastel("green"))
// #036103ff
-Function scheme
Parameters
schemeType: string
Returns ((color, easingFunc?) => ColorToken[])
Parameters
color: ColorToken
Optional
easingFunc: ((t) => number)Parameters
t: number
Returns number
Returns ColorToken[]
Example
-import { base } from 'huetiful-js'
console.log(base("triadic")("#a1bd2f", true))
// [ '#a1bd2fff', '#00caffff', '#ff78c9ff' ]
-Function sortByContrast
Parameters
colors: ColorToken[]
against: ColorToken
Optional
order: OrderReturns ColorToken[]
Example
-import { sortByContrast } from 'huetiful-js'
let sample = ['purple', 'green', 'red', 'brown']
console.log(sortByContrast(sample, 'yellow'))
// [ 'red', 'green', 'brown', 'purple' ]
console.log(sortByContrast(sample, 'yellow', 'desc'))
// [ 'purple', 'brown', 'green', 'red' ]
-Function sortByDistance
Parameters
colors: ColorToken[]
against: ColorToken
Optional
order: "asc" | "desc"Optional
options: ColorDistanceOptionsReturns ColorToken[]
Example
-import { sortByDistance } from 'huetiful-js'
let sample = ['purple', 'green', 'red', 'brown']
console.log(
sortByDistance(sample, 'yellow', 'asc', {
mode: 'lch',
})
)
// [ 'brown', 'red', 'green', 'purple' ]
let sample = ['purple', 'green', 'red', 'brown']
console.log(
sortByDistance(sample, 'yellow', 'asc', {
mode: 'lch',
})
)
// [ 'green', 'brown', 'red', 'purple' ]
-Function sortByHue
Parameters
colors: ColorToken[]
Optional
order: OrderOptional
colorspace: HueColorSpacesReturns ColorToken[]
Example
-let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
];
let sorted = sortByHue(sample);
console.log(sorted)
// [
'#310000', '#3e0000',
'#4e0000', '#600000',
'#720000', '#ffff00',
'#164100', '#00c000',
'#007e00', '#00ff78',
'#00ffdc'
]
let sortedDescending = sortByHue(sample,'desc');
console.log(sortedDescending)
// [
'#00ffdc', '#00ff78',
'#007e00', '#00c000',
'#164100', '#ffff00',
'#720000', '#600000',
'#4e0000', '#3e0000',
'#310000'
]
-Function sortByLightness
Parameters
colors: ColorToken[]
Optional
order: OrderOptional
colorspace: HueColorSpacesReturns ColorToken[]
Example
-import { sortByLightness } from "huetiful-js";
let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
]
sortByLightness(sample)
// [
'#310000', '#3e0000',
'#4e0000', '#600000',
'#720000', '#164100',
'#007e00', '#00c000',
'#00ff78', '#00ffdc',
'#ffff00'
]
sortByLightness(sample,'desc')
// [
'#ffff00', '#00ffdc',
'#00ff78', '#00c000',
'#007e00', '#164100',
'#720000', '#600000',
'#4e0000', '#3e0000',
'#310000'
]
-Function sortByLuminance
Parameters
colors: ColorToken[]
order: "asc" | "desc"
Returns ColorToken[]
Example
-import { sortByLuminance } from "huetiful-js";
let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
];
let sorted = sortByLuminance(sample)
console.log(sorted)
// [
'#310000', '#3e0000',
'#4e0000', '#600000',
'#720000', '#164100',
'#007e00', '#00c000',
'#00ff78', '#00ffdc',
'#ffff00'
]
let sortedDescending = sortByLuminance(sample, "desc");
console.log(sortedDescending)
// [
'#ffff00', '#00ffdc',
'#00ff78', '#00c000',
'#007e00', '#164100',
'#720000', '#600000',
'#4e0000', '#3e0000',
'#310000'
]
-Function sortBySaturation
Parameters
colors: ColorToken[]
order: "asc" | "desc"
Optional
mode: HueColorSpacesReturns ColorToken[]
Example
-import { sortBySaturation } from "huetiful-js";
let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
];
let sorted = sortBySaturation(sample);
console.log(sorted);
// [
'#310000', '#3e0000',
'#164100', '#4e0000',
'#600000', '#720000',
'#00ffdc', '#007e00',
'#00ff78', '#00c000',
'#ffff00'
]
let sortedDescending = sortBySaturation(sample,'desc');
console.log(sortedDescending)
// [
'#ffff00', '#00c000',
'#00ff78', '#007e00',
'#00ffdc', '#720000',
'#600000', '#4e0000',
'#164100', '#3e0000',
'#310000'
]
-Function alpha
Parameters
color: ColorToken
Optional
value: string | numberReturns number
Example
-// Getting the alpha
console.log(alpha('#a1bd2f0d'))
// 0.050980392156862744
// Setting the alpha
let myColor = alpha('b2c3f1', 0.5)
console.log(myColor)
// #b2c3f180
-Function brighten
Parameters
color: ColorToken
value: string | number
colorspace: any
Returns ColorToken
Function colorDeficiency
Parameters
Optional
deficiencyType: DeficiencyTypeReturns ((color, severity?) => string)
Parameters
color: ColorToken
severity: number = 1
Returns string
See
Example
-import { colorDeficiency, toHex } from 'huetiful-js'
// Here we are simulating color blindness of tritanomaly or we can't see 'blue'.
// We are passing in our color as an array of channel values in the mode "rgb". The severity is set to 0.1
let tritanomaly = colorDeficiency('blue')
console.log(tritanomaly(['rgb', 230, 100, 50, 0.5], 0.1))
// #dd663680
// Here we are simulating color blindness of tritanomaly or we can't see 'red'. The severity is not explicitly set so it defaults to 1
let protanopia = colorDeficiency('red')
console.log(protanopia({ h: 20, w: 50, b: 30, mode: 'hwb' }))
// #9f9f9f
-Function darken
Parameters
color: ColorToken
value: string | number
Returns ColorToken
Example
-
-
Function getChannel
Parameters
mc: string
Returns ((color) => number)
Parameters
color: ColorToken
Returns number
Example
-import { getChannel } from 'huetiful-js'
console.log(getChannel('rgb.g')('#a1bd2f'))
// 0.7411764705882353
-Function getComplimentaryHue
color: ColorToken;
hue: string;
} | ColorTokenParameters
color: ColorToken
Optional
colorspace: HueColorSpacescolorObj: boolean = false
Returns {
color: ColorToken;
hue: string;
} | ColorTokenExample
-import { getComplimentaryHue } from "huetiful-js";
console.log(getComplimentaryHue("pink", true))
//// { hue: 'blue-green', color: '#97dfd7ff' }
console.log(getComplimentaryHue("purple"))
// #005700ff
-Function getContrast
Parameters
color: ColorToken
against: ColorToken
Returns number
Example
-import { getContrast } from 'huetiful-js'
console.log(getContrast("black", "white"));
// 21
-Function getFarthestChroma
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
colorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { getFarthestChroma } from 'huetiful-js'
let sample = ['b2c3f1', '#a1bd2f', '#f3bac1']
console.log(getFarthestChroma(sample, 'lch'))
// 67.22120855010492
-Function getFarthestContrast
factor: number;
name: ColorToken;
}Parameters
colors: ColorToken[]
against: ColorToken
Optional
colorObj: booleanReturns number | {
factor: number;
name: ColorToken;
}Example
-import { getFarthestContrast } from 'huetiful-js'
console.log(getFarthestContrast(["b2c3f1", "#a1bd2f", "#f3bac1"], "green"));
// 3.08355493246362
console.log(getFarthestContrast(["b2c3f1", "#a1bd2f", "#f3bac1"], "green", true));
// { contrast: 3.08355493246362, name: '#f3bac1' }
-Function getFarthestHue
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorspace: HueColorSpacescolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { getFarthestHue } from 'huetiful-js'
let sample = ['b2c3f1', '#a1bd2f', '#f3bac1']
console.log(getFarthestHue(sample, 'lch'))
// 273.54920266436477
-Function getFarthestLightness
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorspace: HueColorSpacescolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { getFarthestLightness } from 'huetiful-js'
let sample = ["b2c3f1", "#a1bd2f", "#f3bac1"]
console.log(getFarthestLightness(sample, true))
// { lightness: 80.94668903360088, name: '#f3bac1' }
-Function getHueFamily
Parameters
color: ColorToken
Optional
mode: HueColorSpacesReturns HueFamily
Example
-import { getHue } from 'huetiful-js'
console.log(getHue("#310000"))
// red
-Function getLuminance
Parameters
color: ColorToken
Returns number
Alias
Example
-import { getLuminance } from 'huetiful-js'
console.log(getLuminance('#a1bd2f'))
// 0.4417749513730954
-Function getNearestChroma
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorspace: HueColorSpacescolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { getNearestChroma } from 'huetiful-js'
let sample = ['b2c3f1', '#a1bd2f', '#f3bac1']
console.log(getNearestChroma(sample, 'lch'))
// 22.45669293295522
-Function getNearestColor
Parameters
collection: ColorToken[] | "tailwind" | "material"
color: ColorToken
samples: number = 1
Returns ColorToken | ColorToken[]
Example
-
-
Function getNearestContrast
Parameters
colors: ColorToken[]
against: ColorToken
Optional
colorObj: booleanReturns any
Example
-import { getNearestContrast } from 'huetiful-js'
console.log(getNearestContrast(["b2c3f1", "#a1bd2f", "#f3bac1"], "green"));
// 2.4061390502133424
console.log(getNearestContrast(["b2c3f1", "#a1bd2f", "#f3bac1"], "green", true));
// { contrast: 2.4061390502133424, name: '#a1bd2f' }
-Function getNearestHue
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorspace: stringcolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { getNearestHue } from 'huetiful-js'
let sample = ['b2c3f1', '#a1bd2f', '#f3bac1']
console.log(getNearestHue(sample, 'lch'))
// 12.462831644544274
-Function getNearestLightness
color: ColorToken;
factor: number;
}Parameters
colors: ColorToken[]
Optional
colorspace: HueColorSpacescolorObj: boolean = false
Returns number | {
color: ColorToken;
factor: number;
}Example
-import { getNearestLightness } from 'huetiful-js'
let sample = ["b2c3f1", "#a1bd2f", "#f3bac1"]
console.log(getNearestLightness(sample, true))
// { lightness: 72.61647882089876, name: '#a1bd2f' }
-Function isAchromatic
Parameters
color: ColorToken
Optional
mode: HueColorSpacesReturns boolean
Example
-import { isAchromatic } from "huetiful-js";
import { formatHex8, interpolate, samples } from "culori"
isAchromatic('pink')
// false
let sample = [
"#164100",
"#ffff00",
"#310000",
'pink'
];
console.log(map(sample, isAchromatic));
// [false, false, false,false]
isAchromatic('gray')
// Returns true
console.log(map(sample, isAchromatic));
// we create an interpolation using black and white
let f = interpolate(["black", "white"]);
//We then create 12 evenly spaced samples and pass them to f as the `t` param required by an interpolating function.
// Lastly we convert the color to hex for brevity for this example (otherwise color objects work fine too.)
let grays = map(samples(12), (c) => formatHex8(f(c)));
console.log(map(grays, isAchromatic));
//
[ false, true, true,
true, true, true,
true, true, true,
true, true, false
]
-Function isCool
Parameters
color: ColorToken
Returns boolean
Example
-import { isCool } from 'huetiful-js'
let sample = [
"#00ffdc",
"#00ff78",
"#00c000"
];
console.log(isCool(sample[2]));
// false
console.log(map(sample, isCool));
// [ true, false, true]
-Function isWarm
Parameters
color: ColorToken
Returns boolean
Example
-import { isWarm } from 'huetiful-js'
let sample = [
"#00ffdc",
"#00ff78",
"#00c000"
];
console.log(isWarm(sample[2]));
//true
console.log(map(sample, isWarm));
// [ false, true, false]
-Function overtone
Parameters
color: ColorToken
Returns string | boolean
Example
-import { overtone } from "huetiful-js";
console.log(overtone("fefefe"))
// 'gray'
console.log(overtone("cyan"))
// 'green'
console.log(overtone("blue"))
// false
-Function setChannel
Parameters
mc: string
Returns ((color, value) => ColorToken)
Parameters
color: ColorToken
value: string | number
Returns ColorToken
Example
-import { setChannel } from 'huetiful-js'
let myColor = setChannel('lch.h')('green',10)
console.log(getChannel('lch.h')(myColor))
// 10
-Function setLuminance
Parameters
color: ColorToken
lum: number
Returns ColorToken
Example
-import { setLuminance, getLuminance } from 'huetiful-js'
let myColor = setLuminance('#a1bd2f', 0.5)
console.log(getLuminance(myColor))
// 0.4999999136285792
-huetiful-js
Getting started⛳
Node
-npm i huetiful-js
-
-import {...} from 'https://cdn.jsdelivr.net/npm/huetiful-js/lib/huetiful.esm.mjs'
-Browser
huetiful
) in your HTML file using a <script>
tag:
-# With script tag
<script src='https://cdn.jsdelivr.net/npm/huetiful-js/dist/huetiful.umd.js'></script>
-What's a color 🤔?
-import { num2rgb, toHex } from 'huetiful-js'
let cssNamedColor = 'pink'
let colorNumber = 5000
let colorObject = { l: 50, c: 20, h: 40, mode: 'lch' }
let colorObjectWithAlpha = { l: 50, c: 20, h: 40, alpha: 0.5, mode: 'lch' }
let arrColor = ['rgb', 120, 80, 50]
let arrColorWithAlpha = ['rgb', 120, 80, 50, 0.1]
// Converting CSS named colors to hex
console.log(toHex(cssNamedColor))
// #ffc0cb
// Converting a number to an RGB object
console.log(num2rgb(colorNumber, true))
// #001388
// Converting a color object to a 6 character hex (without the alpha value)
console.log(toHex(colorObject))
// #956d62
// Converting a color object with an alpha property to an 8 character hex code (including the alpha channel)
console.log(toHex(colorObjectWithAlpha))
// #956d6280
// Converting an array of channel values to a 6 character hex code.
console.log(toHex(arrColor))
// #785032
// Converting an array of channel values (including the alpha channel) to an 8 character hex
console.log(toHex(arrColorWithAlpha))
//#7850321a
-
-
-TailwindCSS colors🎨
hueShift()
and earthtone()
tailwindColors
and colors
, that both take the same parameters but colors
takes both parameters at once while tailwindColors
is curried. Here's an example showing the differences between the two functions:
- import { tailwindColors , colors } from "huetiful-js";
// We pass in red as the target hue.
// It returns a function that can be called with an optional value parameter
let red = tailwindColors("red");
console.log(red());
// [
'#fef2f2', '#fee2e2',
'#fecaca', '#fca5a5',
'#f87171', '#ef4444',
'#dc2626', '#b91c1c',
'#991b1b', '#7f1d1d'
]
console.log(red(100));
// '#fee2e2'
console.log(red('900'));
// '#7f1d1d'
////// example for colors() //////
// colors() has a builtin parameter called 'all' that returns all colors at the specified value
let all300 = colors("all", 300);
console.log(all300)
//[
'#cbd5e1', '#d1d5db', '#d4d4d8',
'#d4d4d4', '#d6d3d1', '#fca5a5',
'#fdba74', '#fcd34d', '#fde047',
'#bef264', '#86efac', '#6ee7b7',
'#5eead4', '#7dd3fc', '#93c5fd',
'#c4b5fd', '#d8b4fe', '#f0abfc',
'#f9a8d4', '#fda4af'
]
let red = colors("red");
console.log(red);
// [
'#fef2f2', '#fee2e2',
'#fecaca', '#fca5a5',
'#f87171', '#ef4444',
'#dc2626', '#b91c1c',
'#991b1b', '#7f1d1d'
]
let red100 = colors("red", 100);
console.log(red100)
// #fee2e2
-Working with arrays of color🎨
Sorting colors
-import { sortByLuminance } from "huetiful-js";
let sample = [
"#00ffdc",
"#00ff78",
"#00c000",
"#007e00",
"#164100",
"#ffff00",
"#310000",
"#3e0000",
"#4e0000",
"#600000",
"#720000",
];
let sorted = sortByLuminance(sample)
console.log(sorted)
// [
'#310000', '#3e0000',
'#4e0000', '#600000',
'#720000', '#164100',
'#007e00', '#00c000',
'#00ff78', '#00ffdc',
'#ffff00'
]
// Note that you can specify the order as either ascending (`asc`) or descending (`desc`). The default is ascending. :
let sortedDescending = sortByLuminance(sample, "desc");
console.log(sortedDescending)
// [
'#ffff00', '#00ffdc',
'#00ff78', '#00c000',
'#007e00', '#164100',
'#720000', '#600000',
'#4e0000', '#3e0000',
'#310000'
]
-Filtering colors
- let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
filterByHue(sample, 20, 80)
// [ '#310000', '#3e0000', '#4e0000', '#600000', '#720000' ]
// We can even use expressions as the condition e.g '>=50' which means return the colors with a hue angle greater than or equal to 50
// Here are some examples
console.log(filterByHue(sample, '>100')
)
// [ '#00ffdc', '#00ff78', '#00c000', '#007e00', '#164100' ]
console.log(filterByHue(sample, '<=100')
)
// [ '#ffff00', '#310000', '#3e0000', '#4e0000', '#600000', '#720000' ]
-Palette generators
hueShift
(as a color becomes lighter, its hue shifts up and darker when its hue shifts down. ) .
-import { hueShift } from "huetiful-js";
let hueShiftedPalette = hueShift("#3e0000", {}, true);
console.log(hueShiftedPalette);
// [
'#ffffe1', '#ffdca5',
'#ca9a70', '#935c40',
'#5c2418', '#3e0000',
'#310000', '#34000f',
'#38001e', '#3b002c',
'#3b0c3a'
]
-Predicates⚖️
-
import { isAchromatic } from "huetiful-js";
import { formatHex8, interpolate, samples } from "culori"
isAchromatic('pink')
// false
let sample = [
"#164100",
"#ffff00",
"#310000",
'pink'
];
console.log(map(sample, isAchromatic));
// [false, false, false,false]
isAchromatic('gray')
// true
// Here are using some of Culori's functions to demonstrate this example
// we create an interpolation using black and white
let f = interpolate(["black", "white"]);
//We then create 12 evenly spaced samples and pass them to f as the `t` param required by an interpolating function.
// Lastly we convert the color to hex for brevity for this example (otherwise color objects work fine too.)
let grays = map(samples(12), (c) => formatHex8(f(c)));
console.log(map(grays, isAchromatic));
// The last two colors are false because we can't categorize black and white as achromatic.
//
[ false, true, true,
true, true, true,
true, true, true,
true, true, false
]
-
-import { isCool } from 'huetiful-js'
let sample = [
"#00ffdc",
"#00ff78",
"#00c000"
];
console.log(isCool(sample[0]));
// false
console.log(map(sample, isCool));
// [ true, false, true]
-filter
to filter a collection of colors removing colors that return false for the passed in predicate. In the following example we use is isWarm
to only return warm colors:
-import { isWarm } from 'huetiful-js'
let sample = [
"#00ffdc",
"#00ff78",
"#00c000"
];
console.log(sample.filter(isWarm))
// [ '#00ff78' ]
-
-
import { getFarthestHue } from 'huetiful-js'
let sample = [
'#00ffdc',
'#00ff78',
'#00c000',
'#007e00',
'#164100',
'#ffff00',
'#310000',
'#3e0000',
'#4e0000',
'#600000',
'#720000',
]
console.log(getFarthestHue('lime', sample, 'lch'))
// 112.60431681589854
-What's next🤷🏽♂️
-
-
-Need help😣 ?
Contributing👐🏾
References🔗
-
-License
Module colors
Index
Classes
Functions
Module converters
Index
Functions
Module filterBy
Index
Functions
Module sortBy
Index
Functions
Module types
Index
Type Aliases
Module utils
Index
Functions
Type alias AdaptivePaletteOptions
backgroundColor?: {
dark?: ColorToken;
light?: ColorToken;
};
colorBlind?: boolean;
viewingConditions?: ViewingConditions;
}Type declaration
Optional
background
dark?: ColorToken;
light?: ColorToken;
}Optional
dark?: ColorTokenOptional
light?: ColorTokenOptional
colorOptional
viewingDescription
Type alias ColorDistanceOptions
Type declaration
Optional
mode?: ColorSpacesOptional
weights?: [number, number, number, number]Type alias ColorObject
Type declaration
Optional
alpha?: numbermode: ColorSpaces
Type alias ColorOptions
alpha?: number;
colorSpace?: HueColorSpaces;
colorspace?: HueColorSpaces;
contrast?: number;
darkMode?: ColorToken;
illuminant?: "D50" | "D65";
lightMode?: ColorToken;
lightness?: number;
luminance?: number;
saturation?: number;
temperature?: number;
}Type declaration
Optional
alpha?: numberOptional
colorOptional
colorspace?: HueColorSpacesOptional
contrast?: numberOptional
darkOptional
illuminant?: "D50" | "D65"Optional
lightOptional
lightness?: numberOptional
luminance?: numberOptional
saturation?: numberOptional
temperature?: numberType alias ColorSpaces
Type alias ColorTemp
Type alias ColorToken
Description
Type alias ColorTuple
Type alias DeficiencyType
Type alias DivergingScheme
Type alias EarthtoneOptions
Type alias Factor
Type alias FactorMapper
Type declaration
Returns ((colors) => ColorToken[])
Parameters
colors: ColorToken[]
Returns ColorToken[]
Type alias HueColorSpaces
Type alias HueFamily
Type alias HueMap
amber: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
blue: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
emerald: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
fuchsia: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
gray: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
green: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
indigo: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
lime: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
neutral: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
orange: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
pink: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
purple: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
red: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
rose: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
sky: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
stone: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
teal: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
violet: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
yellow: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
zinc: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
};
}Type declaration
amber: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
blue: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
emerald: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
fuchsia: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
gray: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
green: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
indigo: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
lime: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
neutral: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
orange: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
pink: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
purple: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
red: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
rose: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
sky: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
stone: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
teal: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
violet: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
yellow: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
zinc: {
100: string;
200: string;
300: string;
400: string;
50: string;
500: string;
600: string;
700: string;
800: string;
900: string;
}100: string
200: string
300: string
400: string
50: string
500: string
600: string
700: string
800: string
900: string
Type alias HueShiftOptions
Type alias Interpolator
Type declaration
Parameters
arr: number[]
Returns ((t) => number)
Parameters
t: number
Returns number
Type alias InterpolatorOptions
Type alias Options
chromaInterpolator?: Interpolator;
earthtones?: "light-gray" | "silver" | "sand" | "tupe" | "mahogany" | "brick-red" | "clay" | "cocoa" | "dark-brown" | "dark";
easingFunc?: ((t) => number);
hueFixup?: ((arr) => number[]);
hueInterpolator?: Interpolator;
hueStep?: number;
lightnessInterpolator?: Interpolator;
maxLightness?: number;
minLightness?: number;
samples?: number;
via?: Tone;
}Type declaration
Optional
chromaParam
Optional
earthtones?: "light-gray" | "silver" | "sand" | "tupe" | "mahogany" | "brick-red" | "clay" | "cocoa" | "dark-brown" | "dark"
-
-
-Param
Optional
easingParameters
t: number
Returns number
Optional
hueParameters
arr: number[]
Returns number[]
Optional
hueParam
Optional
hueParam
Optional
lightnessParam
Optional
maxParam
Optional
min
-
-
-Param
Optional
samples?: numberParam
Optional
via?: ToneParam
Description
Type alias Order
Type alias PairedSchemeOptions
Type alias QualitativeScheme
Type alias ScaleValues
Type alias SequentialScheme
Type alias Tone
Type alias UniformColorSpaces
Type alias ViewingConditions
adaptingLuminance?: number;
backgroundLuminance?: number;
discounting?: boolean;
surroundType?: "dim" | "dark" | "average";
whitePoint?: Illuminant;
}Type declaration
Optional
adaptingOptional
backgroundOptional
discounting?: booleanOptional
surroundOptional
whiteType alias callback
+
+ ```
+
+* **underline:** add EXPERIMENTAL support for underline ([084b819](https://github.com/showdownjs/showdown/commit/084b819)), closes [#450](https://github.com/showdownjs/showdown/issues/450)
+
+ - *Usage:*
+
+ ```js
+ var conv = new showdown.Converter({underline: true});
+ ```
+
+ - *Example:*
+
+ input
+
+ ```md
+ this is __underlined__ and this is ___also underlined___
+ ```
+
+ output
+
+ ```html
+
. This option enables linebreaks to always be treated as `
` tags
+ without needing to add spaces in front of the line, the same way GitHub does. ([0942b5e](https://github.com/showdownjs/showdown/commit/0942b5e)), closes [#206](https://github.com/showdownjs/showdown/issues/206)
+* **excludeTrailingPunctuationFromURLs:** option that excludes trailing punctuation from auto linked URLs. ([d2fc2a0](https://github.com/showdownjs/showdown/commit/d2fc2a0)), closes [#266](https://github.com/showdownjs/showdown/issues/266) [#308](https://github.com/showdownjs/showdown/issues/308)
+
+
+
+
+## [1.5.0](https://github.com/showdownjs/showdown/compare/1.4.4...1.5.0) (2016-11-11)
+
+
+### Bug Fixes
+
+* **lists:** enforce 4 space indentation in sublists ([d51be6e](https://github.com/showdownjs/showdown/commit/d51be6e))
+* **lists:** fix sublists inconsistent behavior ([9cfe8b1](https://github.com/showdownjs/showdown/commit/9cfe8b1)), closes [#299](https://github.com/showdownjs/showdown/issues/299)
+
+### Features
+
+* **disableForced4SpacesIndentedSublists:** option that disables the requirement of indenting nested sublists by 4 spaces. The option is disabled by default ([0be39bc](https://github.com/showdownjs/showdown/commit/0be39bc))
+
+
+### BREAKING CHANGES
+
+* syntax for sublists is now more restrictive. Before, sublists SHOULD be indented by 4 spaces, but indenting at least 2 spaces would work.
+ Now, sublists MUST be indented 4 spaces or they won't work.
+
+ With this input:
+ ```md
+ * one
+ * two
+ * three
+ ```
+
+ Before (ouput):
+ ```html
+
+
+
+
+
+ ```
+
+ After (output):
+ ```html
+
+
+ ```
+
+ To migrate either fix source md files or activate the option `disableForced4SpacesIndentedSublists`:
+ ```md
+ showdown.setOption('disableForced4SpacesIndentedSublists', true);
+ ```
+
+
+
+## [1.4.4](https://github.com/showdownjs/showdown/compare/1.4.3...1.4.4) (2016-11-02)
+
+
+### Bug Fixes
+
+* make some regexes a bit faster and make tab char equivalent to 4 spaces ([b7e7560](https://github.com/showdownjs/showdown/commit/b7e7560))
+* **double linebreaks:** fix double linebreaks in html output ([f97e072](https://github.com/showdownjs/showdown/commit/f97e072)), closes [#291](https://github.com/showdownjs/showdown/issues/291)
+* **lists linebreaks:** fix lists linebreaks in html output ([2b813cd](https://github.com/showdownjs/showdown/commit/2b813cd)), closes [#291](https://github.com/showdownjs/showdown/issues/291)
+* **parser:** fix issue with comments inside nested code blocks ([799abea](https://github.com/showdownjs/showdown/commit/799abea)), closes [#288](https://github.com/showdownjs/showdown/issues/288)
+
+
+
+
+## [1.4.3](https://github.com/showdownjs/showdown/compare/1.4.2...1.4.3) (2016-08-19)
+
+
+### Bug Fixes
+
+* **bower:** fix sourceMappingURL errors in bower by including source ([9b5a233](https://github.com/showdownjs/showdown/commit/9b5a233)), closes [#200](https://github.com/showdownjs/showdown/issues/200)
+* **comments:** Fix html comment parser ([238726c](https://github.com/showdownjs/showdown/commit/238726c)), closes [#276](https://github.com/showdownjs/showdown/issues/276)
+* **ie8 compatibility:** Improve ie8 compatibility ([984942e](https://github.com/showdownjs/showdown/commit/984942e)), closes [#275](https://github.com/showdownjs/showdown/issues/275) [#271](https://github.com/showdownjs/showdown/issues/271)
+* **simplifiedAutoLink:** fix simplified autolink to match GFM behavior ([0cc55b0](https://github.com/showdownjs/showdown/commit/0cc55b0)), closes [#284](https://github.com/showdownjs/showdown/issues/284) [#285](https://github.com/showdownjs/showdown/issues/285)
+
+
+
+
+## [1.4.2](https://github.com/showdownjs/showdown/compare/1.4.1...1.4.2) (2016-06-21)
+
+
+### Bug Fixes
+
+* **image-parser:** fix ref style imgs after inline style imgs not parsing correctly ([73206b0](https://github.com/showdownjs/showdown/commit/73206b0)), closes [#261](https://github.com/showdownjs/showdown/issues/261)
+* **tables:** add check for undefined on text due to failing to parse tables ([6e30a48](https://github.com/showdownjs/showdown/commit/6e30a48)), author [stewartmckee](https://github.com/stewartmckee), closes [#257](https://github.com/showdownjs/showdown/pull/247)
+
+### Features
+
+* **smart-indent-fix:** fix for es6 indentation problems ([261f127](https://github.com/showdownjs/showdown/commit/261f127)), closes [#259](https://github.com/showdownjs/showdown/issues/259)
+
+
+
+
+## [1.4.1](https://github.com/showdownjs/showdown/compare/1.4.0...1.4.1) (2016-05-17)
+
+
+### Bug Fixes
+
+* **tables:** fix table heading separators requiring 3 dashes instead of 2 ([ddaacfc](https://github.com/showdownjs/showdown/commit/ddaacfc)), closes [#256](https://github.com/showdownjs/showdown/issues/256)
+
+
+
+
+## [1.4.0](https://github.com/showdownjs/showdown/compare/1.3.0...1.4.0) (2016-05-13)
+
+
+### Bug Fixes
+
+* **hashHTMLBlock:** fix issue with html breaking markdown parsing ([2746949](https://github.com/showdownjs/showdown/commit/2746949)), closes [#220](https://github.com/showdownjs/showdown/issues/220)
+* **HTMLParser:** fix code tags parsing ([71a5873](https://github.com/showdownjs/showdown/commit/71a5873)), closes [#231](https://github.com/showdownjs/showdown/issues/231)
+* **HTMLParser:** fix ghCodeBlocks being parsed inside code tags ([7d0436d](https://github.com/showdownjs/showdown/commit/7d0436d)), closes [#229](https://github.com/showdownjs/showdown/issues/229)
+* **strikethrough:** Fix strikethrough issue with escaped chars ([5669317](https://github.com/showdownjs/showdown/commit/5669317)), closes [#214](https://github.com/showdownjs/showdown/issues/214)
+* **tables:** fix tables to match github's md spec ([f58f014](https://github.com/showdownjs/showdown/commit/f58f014)), closes [#230](https://github.com/showdownjs/showdown/issues/230)
+
+### Features
+
+* **markdown="1":** enable parsing markdown inside HTML blocks ([c97f1dc](https://github.com/showdownjs/showdown/commit/c97f1dc)), closes [#178](https://github.com/showdownjs/showdown/issues/178)
+
+
+
+
+## [1.3.0](https://github.com/showdownjs/showdown/compare/1.2.3...1.3.0) (2015-10-19)
+
+
+### Bug Fixes
+
+* **literalMidWordUnderscores:** fix different behavior with asterisks ([e86aea8](https://github.com/showdownjs/showdown/commit/e86aea8)), closes [#198](https://github.com/showdownjs/showdown/issues/198)
+* **simpleautolink:** fix mail simpleAutoLink to ignore urls with @ symbol ([8ebb25e](https://github.com/showdownjs/showdown/commit/8ebb25e)), closes [#204](https://github.com/showdownjs/showdown/issues/204)
+
+### Features
+
+* **eventDispatcher:** add an event dispatcher to converter ([2734326](https://github.com/showdownjs/showdown/commit/2734326))
+* **hashHTMLSpans:** add support for hashing span elements ([3097bd4](https://github.com/showdownjs/showdown/commit/3097bd4)), closes [#196](https://github.com/showdownjs/showdown/issues/196) [#175](https://github.com/showdownjs/showdown/issues/175)
+
+
+
+## [1.2.3](https://github.com/showdownjs/showdown/compare/1.2.2...1.2.3) (2015-08-27)
+
+
+### Bug Fixes
+
+* **blockGamut:** fix for headings inside blockquotes ([3df70624](http://github.com/showdownjs/showdown/commit/3df70624), closes [#191](http://github.com/showdownjs/showdown/issues/191))
+* **blockQuote:** fix 'github style codeblocks' not being parsed inside 'blockquote' ([ed2cf595](http://github.com/showdownjs/showdown/commit/ed2cf595), closes [#192](http://github.com/showdownjs/showdown/issues/192))
+* **simpleAutoLinks:** fix emails being treated as simple urls ([7dc3fb1d](http://github.com/showdownjs/showdown/commit/7dc3fb1d), closes [#187](http://github.com/showdownjs/showdown/issues/187))
+* **tables:** fix md tables being parsed inside indented code blocks. ([50256233](http://github.com/showdownjs/showdown/commit/50256233), closes [#193](http://github.com/showdownjs/showdown/issues/193))
+
+
+
+## [1.2.2](https://github.com/showdownjs/showdown/compare/1.2.1...1.2.2) (2015-08-02)
+
+
+### Bug Fixes
+
+* **lists:** fix github code blocks not being parsed inside lists ([7720c88b](http://github.com/showdownjs/showdown/commit/7720c88b), closes [#142](http://github.com/showdownjs/showdown/issues/142), [#183](http://github.com/showdownjs/showdown/issues/183), [#184](http://github.com/showdownjs/showdown/issues/184))
+
+
+
+## [1.2.1](https://github.com/showdownjs/showdown/compare/1.2.0...1.2.1) (2015-07-22)
+
+
+### Features
+
+* **smoothLivePreview:** fix weird effects due to parsing incomplete input ([62ba3733](http://github.com/showdownjs/showdown/commit/62ba3733))
+* **subParsers/githubCodeBlock:** add extra language class to conform to html5 spec ([b7f5e32](http://github.com/showdownjs/showdown/commit/b7f5e32))
+
+
+### Bug Fixes
+
+* **tables:**
+
+ * fix undefined error in malformed tables ([6176977](http://github.com/showdownjs/showdown/commit/6176977))
+ * add support for md span elements in table headers ([789dc18](http://github.com/showdownjs/showdown/commit/789dc18)), closes [#179](http://github.com/showdownjs/showdown/issues/179)
+
+* **italicsAndBold:**
+
+ * fix broken em/strong tags when used with literalMidWordUnderscores ([7ee2017](http://github.com/showdownjs/showdown/commit/7ee2017)), closes [#179](http://github.com/showdownjs/showdown/issues/179)
+ * fix underscores not being correctly parsed when used in conjunction with literalMidWordsUnderscores option ([c9e85f1](http://github.com/showdownjs/showdown/commit/c9e85f1))
+
+* **codeSpans:** Fix issue with code html tags not being correctly escaped ([5f043ca](http://github.com/showdownjs/showdown/commit/5f043ca))
+
+* **images:** fix alt attribute not being escaped correctly ([542194e](http://github.com/showdownjs/showdown/commit/542194e))
+
+
+
+## [1.2.0](https://github.com/showdownjs/showdown/compare/1.1.0...1.2.0) (2015-07-13)
+
+This release moves some of the most popular extensions (such as table-extension and github-extension) to core.
+Also introduces a simple cli tool that you can use to quickly convert markdown files into html.
+
+
+### Bug Fixes
+
+* **headerLevelStart:** fix for NaN error when specifying a non number as headerLevelStart param ([be72b487](http://github.com/showdownjs/showdown/commit/be72b487))
+
+
+### Features
+
+* **CLI:** simple cli tool (ALPHA) ([f6a33e40](http://github.com/showdownjs/showdown/commit/f6a33e40))
+* **flavours:** add markdown presets/flavors ([7e55bceb](http://github.com/showdownjs/showdown/commit/7e55bceb), closes [#164](http://github.com/showdownjs/showdown/issues/164))
+* **ghCodeBlocks:** add option to disable GH codeblocks ([c33f9888](http://github.com/showdownjs/showdown/commit/c33f9888))
+* **literalMidWordUnderscores:** add support for GFM literal midword underscores ([0c0cd7db](http://github.com/showdownjs/showdown/commit/0c0cd7db))
+* **simplifiedAutoLink:** add support for GFM autolinks ([cff02372](http://github.com/showdownjs/showdown/commit/cff02372))
+* **strikethrough:** add support for GFM strikethrough ([43e9448d](http://github.com/showdownjs/showdown/commit/43e9448d))
+* **tables:** add support for GFM tables ([3a924e3c](http://github.com/showdownjs/showdown/commit/3a924e3c))
+* **tasklists:** add support for GFM tasklists ([dc72403a](http://github.com/showdownjs/showdown/commit/dc72403a))
+
+
+
+## [1.1.0](https://github.com/showdownjs/showdown/compare/1.0.2...1.1.0) (2015-06-18)
+
+
+### Bug Fixes
+
+* **converter.js:** add error if the passed constructor argument is not an object ([d86ed450](http://github.com/showdownjs/showdown/commit/d86ed450))
+* **output modifiers:** fix for output modifiers running twice ([dcbdc61e](http://github.com/showdownjs/showdown/commit/dcbdc61e))
+
+
+### Features
+
+* **headerLevelStart:** add support for setting the header starting level ([b84ac67d](http://github.com/showdownjs/showdown/commit/b84ac67d), closes [#69](http://github.com/showdownjs/showdown/issues/69))
+* **image dimensions:** add support for setting image dimensions within markdown syntax ([af82c2b6](http://github.com/showdownjs/showdown/commit/af82c2b6), closes [#143](http://github.com/showdownjs/showdown/issues/143))
+* **noHeaderId:** add option to suppress automatic generation of ids in headers ([7ac893e9](http://github.com/showdownjs/showdown/commit/7ac893e9))
+* **showdown.getDefaultOptions:** add method to retrieve default global options keypairs ([2de53a7d](http://github.com/showdownjs/showdown/commit/2de53a7d))
+
+
+### Breaking Changes
+
+* Deprecates `showdown.extensions` property. To migrate, extensions should use the new method `showdown.extension(
+
+ Original GitHub project maintainer
+ * [Remy Sharp](https://github.com/remy/):
+ CommonJS-compatibility and more
+ * [Konstantin Käfer](https://github.com/kkaefer/):
+ CommonJS packaging
+ * [Roger Braun](https://github.com/rogerbraun):
+ Github-style code blocks
+ * [Dominic Tarr](https://github.com/dominictarr):
+ Documentation
+ * [Cat Chen](https://github.com/CatChen):
+ Export fix
+ * [Titus Stone](https://github.com/tstone):
+ Mocha tests, extension mechanism, and bug fixes
+ * [Rob Sutherland](https://github.com/roberocity):
+ The idea that lead to extensions
+ * [Pavel Lang](https://github.com/langpavel):
+ Code cleanup
+ * [Ben Combee](https://github.com/unwiredben):
+ Regex optimization
+ * [Adam Backstrom](https://github.com/abackstrom):
+ WebKit bugfix
+ * [Pascal Deschênes](https://github.com/pdeschen):
+ Grunt support, extension fixes + additions, packaging improvements, documentation
+ * [Estevão Santos](https://github.com/tivie)
+ Bug fixing and late maintainer
+ * [Hannah Wolfe](https://github.com/ErisDS)
+ Bug fixes
+ * [Alexandre Courtiol](https://github.com/acourtiol)
+ Bug fixes and build optimization
+ * [Karthik Balakrishnan](https://github.com/torcellite)
+ Support for table alignment
+ * [rheber](https://github.com/rheber)
+ Cli
+
+
+ - Original Project
+ * [John Gruber](http://daringfireball.net/projects/markdown/)
+ Author of Markdown
+ * [John Fraser](http://attacklab.net/)
+ Author of Showdown
diff --git a/showdown/DONATIONS.md b/showdown/DONATIONS.md
new file mode 100644
index 00000000..9c627bcd
--- /dev/null
+++ b/showdown/DONATIONS.md
@@ -0,0 +1,57 @@
+We would like to thank everyone that contributed to this library. If you find our library useful and wish to donate as well, you can do so [through patreon](https://www.patreon.com/showdownjs) or directly [through paypal](https://www.paypal.me/tiviesantos)!! Your contribution will be greatly appreciated.
+
+# Sponsors
+
+## Platinum Supporters
+
+## Gold Supporters
+
+## Silver Supporters
+
+
+# Patron Supporters
+
+## Awesome Supporter
+
+## Cool Supporter
+
+## Supporter
+
+ - Ricardo Jordão
+
+ - Tiago Silva
+
+
+---
+
+# One Time Donors
+
+- [**Learn on demand Systems**](http://www.learnondemandsystems.com/) (1000$)
+
+- **Nothing AG** (25€)
+
+ > Thank you for developing Showdown :)
+
+- **Sam Huffman** (15$)
+
+ > Thanks for the great work on showdown.js! I've been looking for a good solution to serve wiki-like text to a browser and render as
+ HTML but nearly gave up after mixed success with wikitext. Your library gets me very close to where I want to be.
+
+- **Maya Lekova** (10$)
+
+ > Great work with the showdown library! I just used it and it worked exactly the way I expected
+ (given a complex inline HTML inside the Markdown, which renders fine with other viewers).
+ The other libraries I've tried (markdown-it and marked) produced a lot of bogus output. Y
+ our library saved me at least half a day, thanks! Good luck :)
+
+- **Lin Wang** (10$)
+
+- **Walter Schnell** (10$)
+
+- **ivanhjc** (5$)
+
+- **Asbjørn Ulsberg** (5$)
+
+ > Thanks for the ShowdownJS support!
+
+- **Juan Marcelo Russo** (1$)
diff --git a/showdown/LICENSE b/showdown/LICENSE
new file mode 100644
index 00000000..4bd88462
--- /dev/null
+++ b/showdown/LICENSE
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2018,2021 ShowdownJS
+
+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/showdown/README.md b/showdown/README.md
new file mode 100644
index 00000000..a10fc294
--- /dev/null
+++ b/showdown/README.md
@@ -0,0 +1,564 @@
+![Showdown][sd-logo]
+
+![Build Status: Linux](https://github.com/showdownjs/showdown/actions/workflows/node.js.yml/badge.svg)
+[![npm version](https://badge.fury.io/js/showdown.svg)](http://badge.fury.io/js/showdown)
+[![Bower version](https://badge.fury.io/bo/showdown.svg)](http://badge.fury.io/bo/showdown)
+[![Join the chat at https://gitter.im/showdownjs/showdown](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/showdownjs/showdown?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Greenkeeper badge](https://badges.greenkeeper.io/showdownjs/showdown.svg)](https://greenkeeper.io/)
+[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/tiviesantos)
+
+------
+
+Showdown is a Javascript Markdown to HTML converter, based on the original works by John Gruber.
+Showdown can be used client side (in the browser) or server side (with NodeJs).
+
+## Live DEMO
+
+Check a live Demo here http://demo.showdownjs.com/
+
+## Funding
+
+As you know, ShowdownJS is a free library and it will remain free forever. However, maintaining and improving the library costs time and money.
+
+If you like our work and find our library useful, please donate through [paypal](https://www.paypal.me/tiviesantos)!!
+Your contribution will be greatly appreciated and help us continue to develop this awesome library.
+
+## License
+
+ShowdownJS v 2.0 is release under the MIT version.
+Previous versions are release under BSD.
+
+## Who uses Showdown (or a fork)
+
+ - [GoogleCloudPlatform](https://github.com/GoogleCloudPlatform)
+ - [Meteor](https://www.meteor.com/)
+ - [Stackexchange](http://stackexchange.com/) - forked as [PageDown](https://code.google.com/p/pagedown/)
+ - [docular](https://github.com/Vertafore/docular)
+ - [md-page](https://github.com/oscarmorrison/md-page)
+ - [QCObjects](https://qcobjects.dev)
+ - [and some others...](https://www.npmjs.com/browse/depended/showdown)
+
+## Installation
+
+### Download tarball
+
+You can download the latest release tarball directly from [releases][releases]
+
+### Bower
+
+ bower install showdown
+
+### npm (server-side)
+
+ npm install showdown
+
+### NuGet package
+
+ PM> Install-Package showdownjs
+
+The NuGet Packages can be [found here](https://www.nuget.org/packages/showdownjs/).
+
+### CDN
+
+You can also use one of several CDNs available:
+
+* jsDelivr
+
+ https://cdn.jsdelivr.net/npm/showdown@hello, markdown!
+```
+
+```md
+[Please Support us!](https://patreon.com/showdownjs)
+```
+
+## Options
+
+You can change some of showdown's default behavior through options.
+
+### Setting options
+
+Options can be set:
+
+#### Globally
+
+Setting a "global" option affects all instances of showdown
+
+```js
+showdown.setOption('optionKey', 'value');
+```
+
+#### Locally
+Setting a "local" option only affects the specified Converter object.
+Local options can be set:
+
+ * **through the constructor**
+ ```js
+ var converter = new showdown.Converter({optionKey: 'value'});
+ ```
+
+ * **through the setOption() method**
+ ```js
+ var converter = new showdown.Converter();
+ converter.setOption('optionKey', 'value');
+ ```
+
+### Getting an option
+
+Showdown provides 2 methods (both local and global) to retrieve previous set options.
+
+#### getOption()
+
+```js
+// Global
+var myOption = showdown.getOption('optionKey');
+
+//Local
+var myOption = converter.getOption('optionKey');
+```
+
+#### getOptions()
+
+```js
+// Global
+var showdownGlobalOptions = showdown.getOptions();
+
+//Local
+var thisConverterSpecificOptions = converter.getOptions();
+```
+
+### Retrieve the default options
+
+You can get showdown's default options with:
+```js
+var defaultOptions = showdown.getDefaultOptions();
+```
+
+### Valid Options
+
+ * **omitExtraWLInCodeBlocks**: (boolean) [default false] Omit the trailing newline in a code block. Ex:
+
+ This:
+ ```html
+
+ ```
+ Becomes this:
+ ```html
+ var foo = 'bar';
+
+ ```
+
+ * **noHeaderId**: (boolean) [default false] Disable the automatic generation of header ids.
+ Setting to true overrides **prefixHeaderId**
+
+ * **customizedHeaderId**: (boolean) [default false] Use text in curly braces as header id. **(since v1.7.0)**
+ Example:
+ ```
+ ## Sample header {real-id} will use real-id as id
+ ```
+
+ * **ghCompatibleHeaderId**: (boolean) [default false] Generate header ids compatible with github style
+ (spaces are replaced with dashes and a bunch of non alphanumeric chars are removed) **(since v1.5.5)**
+
+ * **prefixHeaderId**: (string/boolean) [default false] Add a prefix to the generated header ids.
+ Passing a string will prefix that string to the header id. Setting to `true` will add a generic 'section' prefix.
+
+ * **rawPrefixHeaderId**: (boolean) [default false] Setting this option to true will prevent showdown from modifying the prefix.
+ This might result in malformed IDs (if, for instance, the " char is used in the prefix).
+ Has no effect if prefixHeaderId is set to false. **(since v 1.7.3)**
+
+ * **rawHeaderId**: (boolean) [default false] Remove only spaces, ' and " from generated header ids (including prefixes),
+ replacing them with dashes (-). WARNING: This might result in malformed ids **(since v1.7.3)**
+
+ * **parseImgDimensions**: (boolean) [default false] Enable support for setting image dimensions from within markdown syntax.
+ Examples:
+ ```
+ ![foo](foo.jpg =100x80) simple, assumes units are in px
+ ![bar](bar.jpg =100x*) sets the height to "auto"
+ ![baz](baz.jpg =80%x5em) Image with width of 80% and height of 5em
+ ```
+
+ * **headerLevelStart**: (integer) [default 1] Set the header starting level. For instance, setting this to 3 means that
+
+ ```md
+ # foo
+ ```
+ will be parsed as
+
+ ```html
+ var foo = 'bar';
foo
+ ```
+
+ * **simplifiedAutoLink**: (boolean) [default false] Turning this option on will enable automatic linking to urls.
+ This means that:
+
+ ```md
+ some text www.google.com
+ ```
+ will be parsed as
+ ```html
+ strikethrough`
+
+ * **tables**: (boolean) [default false] Enable support for tables syntax. Example:
+
+ ```md
+ | h1 | h2 | h3 |
+ |:------|:-------:|--------:|
+ | 100 | [a][1] | ![b][2] |
+ | *foo* | **bar** | ~~baz~~ |
+ ```
+
+ See the wiki for more info
+
+ * **tablesHeaderId**: (boolean) [default false] If enabled adds an id property to table headers tags.
+
+ * **ghCodeBlocks**: (boolean) [default true] Enable support for GFM code block style.
+
+ * **tasklists**: (boolean) [default false] Enable support for GFM tasklists. Example:
+
+ ```md
+ - [x] This task is done
+ - [ ] This is still pending
+ ```
+ * **smoothLivePreview**: (boolean) [default false] Prevents weird effects in live previews due to incomplete input
+
+ * **smartIndentationFix**: (boolean) [default false] Tries to smartly fix indentation problems related to es6 template
+ strings in the midst of indented code.
+
+ * **disableForced4SpacesIndentedSublists**: (boolean) [default false] Disables the requirement of indenting sublists
+ by 4 spaces for them to be nested, effectively reverting to the old behavior where 2 or 3 spaces were enough.
+ **(since v1.5.0)**
+
+ * **simpleLineBreaks**: (boolean) [default false] Parses line breaks as `
`, like GitHub does, without
+ needing 2 spaces at the end of the line **(since v1.5.1)**
+
+ ```md
+ a line
+ wrapped in two
+ ```
+
+ turns into:
+
+ ```html
+
+ wrapped in two
+[![webstorm](https://www.jetbrains.com/webstorm/documentation/docs/logo_webstorm.png)](https://www.jetbrains.com/webstorm/)
+
+
+
+[sd-logo]: https://raw.githubusercontent.com/showdownjs/logo/master/dist/logo.readme.png
+[legacy-branch]: https://github.com/showdownjs/showdown/tree/legacy
+[releases]: https://github.com/showdownjs/showdown/releases
+[changelog]: https://github.com/showdownjs/showdown/blob/master/CHANGELOG.md
+[wiki]: https://github.com/showdownjs/showdown/wiki
+[cli-wiki]: https://github.com/showdownjs/showdown/wiki/CLI-tool
+[definitely-typed]: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/showdown
+[xss-wiki]: https://github.com/showdownjs/showdown/wiki/Markdown's-XSS-Vulnerability-(and-how-to-mitigate-it)
+[ext-wiki]: https://github.com/showdownjs/showdown/wiki/extensions
+[coding-rules]: https://github.com/showdownjs/code-style/blob/master/README.md
+[ng-commit-guide]: https://github.com/showdownjs/code-style/blob/master/README.md#commit-message-convention
+[boilerplate-repo]: https://github.com/showdownjs/extension-boilerplate
diff --git a/showdown/SECURITY.md b/showdown/SECURITY.md
new file mode 100644
index 00000000..60e7df79
--- /dev/null
+++ b/showdown/SECURITY.md
@@ -0,0 +1,16 @@
+# Security Policy
+
+## Supported Versions
+
+Security fixes are addressed for the following versions of Showdown.
+
+| Version | Supported |
+| ------- | ------------------ |
+| 2.0.x | :white_check_mark: |
+| 1.x.x | :x: (Known security issue with yargs dependecy) |
+
+Showdown targets the node.js versions targeted in the [node.js release schedule](https://nodejs.org/en/about/releases/). Our test suite follows this release schedule. Consequently, older versions of node may become unusable.
+
+## Reporting a Vulnerability
+
+To report a vulnerability, please add an issue to our main github page: https://github.com/showdownjs/showdown/issues
diff --git a/showdown/bin/showdown.js b/showdown/bin/showdown.js
new file mode 100644
index 00000000..318e530c
--- /dev/null
+++ b/showdown/bin/showdown.js
@@ -0,0 +1,2 @@
+#!/usr/bin/env node
+var showdown,version,fs=require("fs"),path=require("path"),Command=require("commander").Command,program=new Command,path1=path.resolve(__dirname+"/../dist/showdown.js"),path2=path.resolve(__dirname+"/../../.build/showdown.js");function Messenger(o,t,e){"use strict";t=!!t||!!e,e=!!e,this._print="stdout"===(o=o||"stderr")?console.log:console.error,this.errorExit=function(o){e||(console.error("ERROR: "+o.message),console.error("Run 'showdown
(GFM Style)',
+ type: 'boolean'
+ },
+ requireSpaceBeforeHeadingText: {
+ defaultValue: false,
+ describe: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',
+ type: 'boolean'
+ },
+ ghMentions: {
+ defaultValue: false,
+ describe: 'Enables github @mentions',
+ type: 'boolean'
+ },
+ ghMentionsLink: {
+ defaultValue: 'https://github.com/{u}',
+ describe: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',
+ type: 'string'
+ },
+ encodeEmails: {
+ defaultValue: true,
+ describe: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',
+ type: 'boolean'
+ },
+ openLinksInNewWindow: {
+ defaultValue: false,
+ describe: 'Open all links in new windows',
+ type: 'boolean'
+ },
+ backslashEscapesHTMLTags: {
+ defaultValue: false,
+ describe: 'Support for HTML Tag escaping. ex: \>t<>", "<", ">", "g")
+ * returns: ["t<", ""]
+ * matchRecursiveRegExp(" content, so we need to fix that:
+ bq = bq.replace(/(\s*
[^\r]+?<\/pre>)/gm, function (wholeMatch, m1) {
+ var pre = m1;
+ // attacklab: hack around Konqueror 3.5.4 bug:
+ pre = pre.replace(/^ /mg, '¨0');
+ pre = pre.replace(/¨0/g, '');
+ return pre;
+ });
+
+ return showdown.subParser('hashBlock')('
\n' + bq + '\n
', options, globals);
+ });
+
+ text = globals.converter._dispatch('blockQuotes.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Process Markdown `` blocks.
+ */
+showdown.subParser('codeBlocks', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('codeBlocks.before', text, options, globals);
+
+ // sentinel workarounds for lack of \A and \Z, safari\khtml bug
+ text += '¨0';
+
+ var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g;
+ text = text.replace(pattern, function (wholeMatch, m1, m2) {
+ var codeblock = m1,
+ nextChar = m2,
+ end = '\n';
+
+ codeblock = showdown.subParser('outdent')(codeblock, options, globals);
+ codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);
+ codeblock = showdown.subParser('detab')(codeblock, options, globals);
+ codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
+ codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines
+
+ if (options.omitExtraWLInCodeBlocks) {
+ end = '';
+ }
+
+ codeblock = '
';
+
+ return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;
+ });
+
+ // strip sentinel
+ text = text.replace(/¨0/, '');
+
+ text = globals.converter._dispatch('codeBlocks.after', text, options, globals);
+ return text;
+});
+
+/**
+ *
+ * * Backtick quotes are used for ' + codeblock + end + '
spans.
+ *
+ * * You can use multiple backticks as the delimiters if you want to
+ * include literal backticks in the code span. So, this input:
+ *
+ * Just type ``foo `bar` baz`` at the prompt.
+ *
+ * Will translate to:
+ *
+ *
foo `bar` baz
at the prompt.`bar`
...
+ */
+showdown.subParser('codeSpans', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('codeSpans.before', text, options, globals);
+
+ if (typeof (text) === 'undefined') {
+ text = '';
+ }
+ text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,
+ function (wholeMatch, m1, m2, m3) {
+ var c = m3;
+ c = c.replace(/^([ \t]*)/g, ''); // leading whitespace
+ c = c.replace(/[ \t]*$/g, ''); // trailing whitespace
+ c = showdown.subParser('encodeCode')(c, options, globals);
+ c = m1 + '' + c + '
';
+ c = showdown.subParser('hashHTMLSpans')(c, options, globals);
+ return c;
+ }
+ );
+
+ text = globals.converter._dispatch('codeSpans.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Create a full HTML document from the processed markdown
+ */
+showdown.subParser('completeHTMLDocument', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.completeHTMLDocument) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);
+
+ var doctype = 'html',
+ doctypeParsed = '\n',
+ title = '',
+ charset = '\n',
+ lang = '',
+ metadata = '';
+
+ if (typeof globals.metadata.parsed.doctype !== 'undefined') {
+ doctypeParsed = '\n';
+ doctype = globals.metadata.parsed.doctype.toString().toLowerCase();
+ if (doctype === 'html' || doctype === 'html5') {
+ charset = '';
+ }
+ }
+
+ for (var meta in globals.metadata.parsed) {
+ if (globals.metadata.parsed.hasOwnProperty(meta)) {
+ switch (meta.toLowerCase()) {
+ case 'doctype':
+ break;
+
+ case 'title':
+ title = '
';
+
+ codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);
+
+ // Since GHCodeblocks can be false positives, we need to
+ // store the primitive text and the parsed text in a global var,
+ // and then return a token
+ return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
+ });
+
+ // attacklab: strip sentinel
+ text = text.replace(/¨0/, '');
+
+ return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);
+});
+
+showdown.subParser('hashBlock', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashBlock.before', text, options, globals);
+ text = text.replace(/(^\n+|\n+$)/g, '');
+ text = '\n\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n';
+ text = globals.converter._dispatch('hashBlock.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Hash and escape ' + codeblock + end + '
elements that should not be parsed as markdown
+ */
+showdown.subParser('hashCodeTags', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);
+
+ var repFunc = function (wholeMatch, match, left, right) {
+ var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;
+ return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';
+ };
+
+ // Hash naked
+ text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '
]*>', '
', 'gim');
+
+ text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);
+ return text;
+});
+
+showdown.subParser('hashElement', function (text, options, globals) {
+ 'use strict';
+
+ return function (wholeMatch, m1) {
+ var blockText = m1;
+
+ // Undo double lines
+ blockText = blockText.replace(/\n\n/g, '\n');
+ blockText = blockText.replace(/^\n/, '');
+
+ // strip trailing blank lines
+ blockText = blockText.replace(/\n+$/g, '');
+
+ // Replace the element text with a marker ("¨KxK" where x is its key)
+ blockText = '\n\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\n\n';
+
+ return blockText;
+ };
+});
+
+showdown.subParser('hashHTMLBlocks', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);
+
+ var blockTags = [
+ 'pre',
+ 'div',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'blockquote',
+ 'table',
+ 'dl',
+ 'ol',
+ 'ul',
+ 'script',
+ 'noscript',
+ 'form',
+ 'fieldset',
+ 'iframe',
+ 'math',
+ 'style',
+ 'section',
+ 'header',
+ 'footer',
+ 'nav',
+ 'article',
+ 'aside',
+ 'address',
+ 'audio',
+ 'canvas',
+ 'figure',
+ 'hgroup',
+ 'output',
+ 'video',
+ 'p'
+ ],
+ repFunc = function (wholeMatch, match, left, right) {
+ var txt = wholeMatch;
+ // check if this html element is marked as markdown
+ // if so, it's contents should be parsed as markdown
+ if (left.search(/\bmarkdown\b/) !== -1) {
+ txt = left + globals.converter.makeHtml(match) + right;
+ }
+ return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
+ };
+
+ if (options.backslashEscapesHTMLTags) {
+ // encode backslash escaped HTML tags
+ text = text.replace(/\\<(\/?[^>]+?)>/g, function (wm, inside) {
+ return '<' + inside + '>';
+ });
+ }
+
+ // hash HTML Blocks
+ for (var i = 0; i < blockTags.length; ++i) {
+
+ var opTagPos,
+ rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\b[^>]*>)', 'im'),
+ patLeft = '<' + blockTags[i] + '\\b[^>]*>',
+ patRight = '' + blockTags[i] + '>';
+ // 1. Look for the first position of the first opening HTML tag in the text
+ while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {
+
+ // if the HTML tag is \ escaped, we need to escape it and break
+
+
+ //2. Split the text in that position
+ var subTexts = showdown.helper.splitAtIndex(text, opTagPos),
+ //3. Match recursively
+ newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');
+
+ // prevent an infinite loop
+ if (newSubText1 === subTexts[1]) {
+ break;
+ }
+ text = subTexts[0].concat(newSubText1);
+ }
+ }
+ // HR SPECIAL CASE
+ text = text.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,
+ showdown.subParser('hashElement')(text, options, globals));
+
+ // Special case for standalone HTML comments
+ text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {
+ return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
+ }, '^ {0,3}', 'gm');
+
+ // PHP and ASP-style processor instructions (...?> and <%...%>)
+ text = text.replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,
+ showdown.subParser('hashElement')(text, options, globals));
+
+ text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Hash span elements that should not be parsed as markdown
+ */
+showdown.subParser('hashHTMLSpans', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);
+
+ function hashHTMLSpan (html) {
+ return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';
+ }
+
+ // Hash Self Closing tags
+ text = text.replace(/<[^>]+?\/>/gi, function (wm) {
+ return hashHTMLSpan(wm);
+ });
+
+ // Hash tags without properties
+ text = text.replace(/<([^>]+?)>[\s\S]*?<\/\1>/g, function (wm) {
+ return hashHTMLSpan(wm);
+ });
+
+ // Hash tags with properties
+ text = text.replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g, function (wm) {
+ return hashHTMLSpan(wm);
+ });
+
+ // Hash self closing tags without />
+ text = text.replace(/<[^>]+?>/gi, function (wm) {
+ return hashHTMLSpan(wm);
+ });
+
+ /*showdown.helper.matchRecursiveRegExp(text, ']*>', '
', 'gi');*/
+
+ text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Unhash HTML spans
+ */
+showdown.subParser('unhashHTMLSpans', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);
+
+ for (var i = 0; i < globals.gHtmlSpans.length; ++i) {
+ var repText = globals.gHtmlSpans[i],
+ // limiter to prevent infinite loop (assume 10 as limit for recurse)
+ limit = 0;
+
+ while (/¨C(\d+)C/.test(repText)) {
+ var num = RegExp.$1;
+ repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);
+ if (limit === 10) {
+ console.error('maximum nesting of 10 spans reached!!!');
+ break;
+ }
+ ++limit;
+ }
+ text = text.replace('¨C' + i + 'C', repText);
+ }
+
+ text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Hash and escape elements that should not be parsed as markdown
+ */
+showdown.subParser('hashPreCodeTags', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);
+
+ var repFunc = function (wholeMatch, match, left, right) {
+ // encode html entities
+ var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;
+ return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
+ };
+
+ // Hash
+ text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}
]*>\\s*
', 'gim');
+
+ text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);
+ return text;
+});
+
+showdown.subParser('headers', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('headers.before', text, options, globals);
+
+ var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),
+
+ // Set text-style headers:
+ // Header 1
+ // ========
+ //
+ // Header 2
+ // --------
+ //
+ setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm,
+ setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm;
+
+ text = text.replace(setextRegexH1, function (wholeMatch, m1) {
+
+ var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
+ hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
+ hLevel = headerLevelStart,
+ hashBlock = ']*>', '^ {0,3}
\\s*
', options, globals);
+ text = text.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm, key);
+ text = text.replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm, key);
+ text = text.replace(/^ {0,2}( ?_){3,}[ \t]*$/gm, key);
+
+ text = globals.converter._dispatch('horizontalRule.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Turn Markdown image shortcuts into tags.
+ */
+showdown.subParser('images', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('images.before', text, options, globals);
+
+ var inlineRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
+ crazyRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,
+ base64RegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
+ referenceRegExp = /!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,
+ refShortcutRegExp = /!\[([^\[\]]+)]()()()()()/g;
+
+ function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {
+ url = url.replace(/\s/g, '');
+ return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);
+ }
+
+ function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {
+
+ var gUrls = globals.gUrls,
+ gTitles = globals.gTitles,
+ gDims = globals.gDimensions;
+
+ linkId = linkId.toLowerCase();
+
+ if (!title) {
+ title = '';
+ }
+ // Special case for explicit empty url
+ if (wholeMatch.search(/\(\s*>? ?(['"].*['"])?\)$/m) > -1) {
+ url = '';
+
+ } else if (url === '' || url === null) {
+ if (linkId === '' || linkId === null) {
+ // lower-case and turn embedded newlines into spaces
+ linkId = altText.toLowerCase().replace(/ ?\n/g, ' ');
+ }
+ url = '#' + linkId;
+
+ if (!showdown.helper.isUndefined(gUrls[linkId])) {
+ url = gUrls[linkId];
+ if (!showdown.helper.isUndefined(gTitles[linkId])) {
+ title = gTitles[linkId];
+ }
+ if (!showdown.helper.isUndefined(gDims[linkId])) {
+ width = gDims[linkId].width;
+ height = gDims[linkId].height;
+ }
+ } else {
+ return wholeMatch;
+ }
+ }
+
+ altText = altText
+ .replace(/"/g, '"')
+ //altText = showdown.helper.escapeCharacters(altText, '*_', false);
+ .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
+ //url = showdown.helper.escapeCharacters(url, '*_', false);
+ url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
+ var result = '';
+
+ return result;
+ }
+
+ // First, handle reference-style labeled images: ![alt text][id]
+ text = text.replace(referenceRegExp, writeImageTag);
+
+ // Next, handle inline images: ![alt text](url =
+ // instead of:
+ //
+ // So, to prevent it, we will put a marker (¨A)in the beginning of the line
+ // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser
+ item = item.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g, function (wm2) {
+ return '¨A' + wm2;
+ });
+
+ // m1 - Leading line or
+ // Has a double return (multi paragraph) or
+ // Has sublist
+ if (m1 || (item.search(/\n{2,}/) > -1)) {
+ item = showdown.subParser('githubCodeBlocks')(item, options, globals);
+ item = showdown.subParser('blockGamut')(item, options, globals);
+ } else {
+ // Recursion for sub-lists:
+ item = showdown.subParser('lists')(item, options, globals);
+ item = item.replace(/\n$/, ''); // chomp(item)
+ item = showdown.subParser('hashHTMLBlocks')(item, options, globals);
+
+ // Colapse double linebreaks
+ item = item.replace(/\n\n+/g, '\n\n');
+ if (isParagraphed) {
+ item = showdown.subParser('paragraphs')(item, options, globals);
+ } else {
+ item = showdown.subParser('spanGamut')(item, options, globals);
+ }
+ }
+
+ // now we need to remove the marker (¨A)
+ item = item.replace('¨A', '');
+ // we can finally wrap the line in list item tags
+ item = ']*>\s*
]*>/.test(grafsOutIt)) {
+ codeFlag = true;
+ }
+ }
+ grafsOut[i] = grafsOutIt;
+ }
+ text = grafsOut.join('\n');
+ // Strip leading and trailing lines:
+ text = text.replace(/^\n+/g, '');
+ text = text.replace(/\n+$/g, '');
+ return globals.converter._dispatch('paragraphs.after', text, options, globals);
+});
+
+/**
+ * Run extension
+ */
+showdown.subParser('runExtension', function (ext, text, options, globals) {
+ 'use strict';
+
+ if (ext.filter) {
+ text = ext.filter(text, globals.converter, options);
+
+ } else if (ext.regex) {
+ // TODO remove this when old extension loading mechanism is deprecated
+ var re = ext.regex;
+ if (!(re instanceof RegExp)) {
+ re = new RegExp(re, 'g');
+ }
+ text = text.replace(re, ext.replace);
+ }
+
+ return text;
+});
+
+/**
+ * These are all the transformations that occur *within* block-level
+ * tags like paragraphs, headers, and list items.
+ */
+showdown.subParser('spanGamut', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('spanGamut.before', text, options, globals);
+ text = showdown.subParser('codeSpans')(text, options, globals);
+ text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);
+ text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);
+
+ // Process anchor and image tags. Images must come first,
+ // because ![foo][f] looks like an anchor.
+ text = showdown.subParser('images')(text, options, globals);
+ text = showdown.subParser('anchors')(text, options, globals);
+
+ // Make links out of things like `
\n');
+ }
+ } else {
+ // Vanilla hard breaks
+ text = text.replace(/ +\n/g, '
\n');
+ }
+
+ text = globals.converter._dispatch('spanGamut.after', text, options, globals);
+ return text;
+});
+
+showdown.subParser('strikethrough', function (text, options, globals) {
+ 'use strict';
+
+ function parseInside (txt) {
+ if (options.simplifiedAutoLink) {
+ txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);
+ }
+ return '' + txt + '';
+ }
+
+ if (options.strikethrough) {
+ text = globals.converter._dispatch('strikethrough.before', text, options, globals);
+ text = text.replace(/(?:~){2}([\s\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });
+ text = globals.converter._dispatch('strikethrough.after', text, options, globals);
+ }
+
+ return text;
+});
+
+/**
+ * Strips link definitions from text, stores the URLs and titles in
+ * hash references.
+ * Link defs are in the form: ^[id]: url "optional title"
+ */
+showdown.subParser('stripLinkDefinitions', function (text, options, globals) {
+ 'use strict';
+
+ var regex = /^ {0,3}\[([^\]]+)]:[ \t]*\n?[ \t]*([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,
+ base64Regex = /^ {0,3}\[([^\]]+)]:[ \t]*\n?[ \t]*(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm;
+
+ // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
+ text += '¨0';
+
+ var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {
+
+ // if there aren't two instances of linkId it must not be a reference link so back out
+ linkId = linkId.toLowerCase();
+ if (text.toLowerCase().split(linkId).length - 1 < 2) {
+ return wholeMatch;
+ }
+ if (url.match(/^data:.+?\/.+?;base64,/)) {
+ // remove newlines
+ globals.gUrls[linkId] = url.replace(/\s/g, '');
+ } else {
+ globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive
+ }
+
+ if (blankLines) {
+ // Oops, found blank lines, so it's not a title.
+ // Put back the parenthetical statement we stole.
+ return blankLines + title;
+
+ } else {
+ if (title) {
+ globals.gTitles[linkId] = title.replace(/"|'/g, '"');
+ }
+ if (options.parseImgDimensions && width && height) {
+ globals.gDimensions[linkId] = {
+ width: width,
+ height: height
+ };
+ }
+ }
+ // Completely remove the definition from the text
+ return '';
+ };
+
+ // first we try to find base64 link references
+ text = text.replace(base64Regex, replaceFunc);
+
+ text = text.replace(regex, replaceFunc);
+
+ // attacklab: strip sentinel
+ text = text.replace(/¨0/, '');
+
+ return text;
+});
+
+showdown.subParser('tables', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.tables) {
+ return text;
+ }
+
+ var tableRgx = /^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,
+ //singeColTblRgx = /^ {0,3}\|.+\|\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n(?: {0,3}\|.+\|\n)+(?:\n\n|¨0)/gm;
+ singeColTblRgx = /^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm;
+
+ function parseStyles (sLine) {
+ if (/^:[ \t]*--*$/.test(sLine)) {
+ return ' style="text-align:left;"';
+ } else if (/^--*[ \t]*:[ \t]*$/.test(sLine)) {
+ return ' style="text-align:right;"';
+ } else if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) {
+ return ' style="text-align:center;"';
+ } else {
+ return '';
+ }
+ }
+
+ function parseHeaders (header, style) {
+ var id = '';
+ header = header.trim();
+ // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility
+ if (options.tablesHeaderId || options.tableHeaderId) {
+ id = ' id="' + header.replace(/ /g, '_').toLowerCase() + '"';
+ }
+ header = showdown.subParser('spanGamut')(header, options, globals);
+
+ return '' + header + ' \n';
+ }
+
+ function parseCells (cell, style) {
+ var subText = showdown.subParser('spanGamut')(cell, options, globals);
+ return '' + subText + ' \n';
+ }
+
+ function buildTable (headers, cells) {
+ var tb = '\n\n
\n';
+ return tb;
+ }
+
+ function parseTable (rawTable) {
+ var i, tableLines = rawTable.split('\n');
+
+ for (i = 0; i < tableLines.length; ++i) {
+ // strip wrong first and last column if wrapped tables are used
+ if (/^ {0,3}\|/.test(tableLines[i])) {
+ tableLines[i] = tableLines[i].replace(/^ {0,3}\|/, '');
+ }
+ if (/\|[ \t]*$/.test(tableLines[i])) {
+ tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, '');
+ }
+ // parse code spans first, but we only support one line code spans
+ tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);
+ }
+
+ var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),
+ rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),
+ rawCells = [],
+ headers = [],
+ styles = [],
+ cells = [];
+
+ tableLines.shift();
+ tableLines.shift();
+
+ for (i = 0; i < tableLines.length; ++i) {
+ if (tableLines[i].trim() === '') {
+ continue;
+ }
+ rawCells.push(
+ tableLines[i]
+ .split('|')
+ .map(function (s) {
+ return s.trim();
+ })
+ );
+ }
+
+ if (rawHeaders.length < rawStyles.length) {
+ return rawTable;
+ }
+
+ for (i = 0; i < rawStyles.length; ++i) {
+ styles.push(parseStyles(rawStyles[i]));
+ }
+
+ for (i = 0; i < rawHeaders.length; ++i) {
+ if (showdown.helper.isUndefined(styles[i])) {
+ styles[i] = '';
+ }
+ headers.push(parseHeaders(rawHeaders[i], styles[i]));
+ }
+
+ for (i = 0; i < rawCells.length; ++i) {
+ var row = [];
+ for (var ii = 0; ii < headers.length; ++ii) {
+ if (showdown.helper.isUndefined(rawCells[i][ii])) {
+
+ }
+ row.push(parseCells(rawCells[i][ii], styles[ii]));
+ }
+ cells.push(row);
+ }
+
+ return buildTable(headers, cells);
+ }
+
+ text = globals.converter._dispatch('tables.before', text, options, globals);
+
+ // find escaped pipe characters
+ text = text.replace(/\\(\|)/g, showdown.helper.escapeCharactersCallback);
+
+ // parse multi column tables
+ text = text.replace(tableRgx, parseTable);
+
+ // parse one column tables
+ text = text.replace(singeColTblRgx, parseTable);
+
+ text = globals.converter._dispatch('tables.after', text, options, globals);
+
+ return text;
+});
+
+showdown.subParser('underline', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.underline) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('underline.before', text, options, globals);
+
+ if (options.literalMidWordUnderscores) {
+ text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) {
+ return '' + txt + '';
+ });
+ text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) {
+ return '' + txt + '';
+ });
+ } else {
+ text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
+ return (/\S$/.test(m)) ? '' + m + '' : wm;
+ });
+ text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
+ return (/\S$/.test(m)) ? '' + m + '' : wm;
+ });
+ }
+
+ // escape remaining underscores to prevent them being parsed by italic and bold
+ text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);
+
+ text = globals.converter._dispatch('underline.after', text, options, globals);
+
+ return text;
+});
+
+/**
+ * Swap back in all the special characters we've hidden.
+ */
+showdown.subParser('unescapeSpecialChars', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);
+
+ text = text.replace(/¨E(\d+)E/g, function (wholeMatch, m1) {
+ var charCodeToReplace = parseInt(m1);
+ return String.fromCharCode(charCodeToReplace);
+ });
+
+ text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);
+ return text;
+});
+
+showdown.subParser('makeMarkdown.blockquote', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ var children = node.childNodes,
+ childrenLength = children.length;
+
+ for (var i = 0; i < childrenLength; ++i) {
+ var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);
+
+ if (innerTxt === '') {
+ continue;
+ }
+ txt += innerTxt;
+ }
+ }
+ // cleanup
+ txt = txt.trim();
+ txt = '> ' + txt.split('\n').join('\n> ');
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.codeBlock', function (node, globals) {
+ 'use strict';
+
+ var lang = node.getAttribute('language'),
+ num = node.getAttribute('precodenum');
+ return '```' + lang + '\n' + globals.preList[num] + '\n```';
+});
+
+showdown.subParser('makeMarkdown.codeSpan', function (node) {
+ 'use strict';
+
+ return '`' + node.innerHTML + '`';
+});
+
+showdown.subParser('makeMarkdown.emphasis', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ txt += '*';
+ var children = node.childNodes,
+ childrenLength = children.length;
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ txt += '*';
+ }
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {
+ 'use strict';
+
+ var headerMark = new Array(headerLevel + 1).join('#'),
+ txt = '';
+
+ if (node.hasChildNodes()) {
+ txt = headerMark + ' ';
+ var children = node.childNodes,
+ childrenLength = children.length;
+
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ }
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.hr', function () {
+ 'use strict';
+
+ return '---';
+});
+
+showdown.subParser('makeMarkdown.image', function (node) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasAttribute('src')) {
+ txt += '![' + node.getAttribute('alt') + '](';
+ txt += '<' + node.getAttribute('src') + '>';
+ if (node.hasAttribute('width') && node.hasAttribute('height')) {
+ txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');
+ }
+
+ if (node.hasAttribute('title')) {
+ txt += ' "' + node.getAttribute('title') + '"';
+ }
+ txt += ')';
+ }
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.links', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes() && node.hasAttribute('href')) {
+ var children = node.childNodes,
+ childrenLength = children.length;
+ txt = '[';
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ txt += '](';
+ txt += '<' + node.getAttribute('href') + '>';
+ if (node.hasAttribute('title')) {
+ txt += ' "' + node.getAttribute('title') + '"';
+ }
+ txt += ')';
+ }
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.list', function (node, globals, type) {
+ 'use strict';
+
+ var txt = '';
+ if (!node.hasChildNodes()) {
+ return '';
+ }
+ var listItems = node.childNodes,
+ listItemsLenght = listItems.length,
+ listNum = node.getAttribute('start') || 1;
+
+ for (var i = 0; i < listItemsLenght; ++i) {
+ if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {
+ continue;
+ }
+
+ // define the bullet to use in list
+ var bullet = '';
+ if (type === 'ol') {
+ bullet = listNum.toString() + '. ';
+ } else {
+ bullet = '- ';
+ }
+
+ // parse list item
+ txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);
+ ++listNum;
+ }
+
+ // add comment at the end to prevent consecutive lists to be parsed as one
+ txt += '\n\n';
+ return txt.trim();
+});
+
+showdown.subParser('makeMarkdown.listItem', function (node, globals) {
+ 'use strict';
+
+ var listItemTxt = '';
+
+ var children = node.childNodes,
+ childrenLenght = children.length;
+
+ for (var i = 0; i < childrenLenght; ++i) {
+ listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ // if it's only one liner, we need to add a newline at the end
+ if (!/\n$/.test(listItemTxt)) {
+ listItemTxt += '\n';
+ } else {
+ // it's multiparagraph, so we need to indent
+ listItemTxt = listItemTxt
+ .split('\n')
+ .join('\n ')
+ .replace(/^ {4}$/gm, '')
+ .replace(/\n\n+/g, '\n\n');
+ }
+
+ return listItemTxt;
+});
+
+
+
+showdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {
+ 'use strict';
+
+ spansOnly = spansOnly || false;
+
+ var txt = '';
+
+ // edge case of text without wrapper paragraph
+ if (node.nodeType === 3) {
+ return showdown.subParser('makeMarkdown.txt')(node, globals);
+ }
+
+ // HTML comment
+ if (node.nodeType === 8) {
+ return '\n\n';
+ }
+
+ // process only node elements
+ if (node.nodeType !== 1) {
+ return '';
+ }
+
+ var tagName = node.tagName.toLowerCase();
+
+ switch (tagName) {
+
+ //
+ // BLOCKS
+ //
+ case 'h1':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\n\n'; }
+ break;
+ case 'h2':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\n\n'; }
+ break;
+ case 'h3':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\n\n'; }
+ break;
+ case 'h4':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\n\n'; }
+ break;
+ case 'h5':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\n\n'; }
+ break;
+ case 'h6':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\n\n'; }
+ break;
+
+ case 'p':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\n\n'; }
+ break;
+
+ case 'blockquote':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\n\n'; }
+ break;
+
+ case 'hr':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\n\n'; }
+ break;
+
+ case 'ol':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\n\n'; }
+ break;
+
+ case 'ul':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\n\n'; }
+ break;
+
+ case 'precode':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\n\n'; }
+ break;
+
+ case 'pre':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\n\n'; }
+ break;
+
+ case 'table':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\n\n'; }
+ break;
+
+ //
+ // SPANS
+ //
+ case 'code':
+ txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);
+ break;
+
+ case 'em':
+ case 'i':
+ txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);
+ break;
+
+ case 'strong':
+ case 'b':
+ txt = showdown.subParser('makeMarkdown.strong')(node, globals);
+ break;
+
+ case 'del':
+ txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);
+ break;
+
+ case 'a':
+ txt = showdown.subParser('makeMarkdown.links')(node, globals);
+ break;
+
+ case 'img':
+ txt = showdown.subParser('makeMarkdown.image')(node, globals);
+ break;
+
+ default:
+ txt = node.outerHTML + '\n\n';
+ }
+
+ // common normalization
+ // TODO eventually
+
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.paragraph', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ var children = node.childNodes,
+ childrenLength = children.length;
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ }
+
+ // some text normalization
+ txt = txt.trim();
+
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.pre', function (node, globals) {
+ 'use strict';
+
+ var num = node.getAttribute('prenum');
+ return '\n',
+ tblLgn = headers.length;
+
+ for (var i = 0; i < tblLgn; ++i) {
+ tb += headers[i];
+ }
+ tb += ' \n\n\n';
+
+ for (i = 0; i < cells.length; ++i) {
+ tb += '\n';
+ for (var ii = 0; ii < tblLgn; ++ii) {
+ tb += cells[i][ii];
+ }
+ tb += ' \n';
+ }
+ tb += '\n' + globals.preList[num] + '
';
+});
+
+showdown.subParser('makeMarkdown.strikethrough', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ txt += '~~';
+ var children = node.childNodes,
+ childrenLength = children.length;
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ txt += '~~';
+ }
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.strong', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ txt += '**';
+ var children = node.childNodes,
+ childrenLength = children.length;
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ txt += '**';
+ }
+ return txt;
+});
+
+showdown.subParser('makeMarkdown.table', function (node, globals) {
+ 'use strict';
+
+ var txt = '',
+ tableArray = [[], []],
+ headings = node.querySelectorAll('thead>tr>th'),
+ rows = node.querySelectorAll('tbody>tr'),
+ i, ii;
+ for (i = 0; i < headings.length; ++i) {
+ var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),
+ allign = '---';
+
+ if (headings[i].hasAttribute('style')) {
+ var style = headings[i].getAttribute('style').toLowerCase().replace(/\s/g, '');
+ switch (style) {
+ case 'text-align:left;':
+ allign = ':---';
+ break;
+ case 'text-align:right;':
+ allign = '---:';
+ break;
+ case 'text-align:center;':
+ allign = ':---:';
+ break;
+ }
+ }
+ tableArray[0][i] = headContent.trim();
+ tableArray[1][i] = allign;
+ }
+
+ for (i = 0; i < rows.length; ++i) {
+ var r = tableArray.push([]) - 1,
+ cols = rows[i].getElementsByTagName('td');
+
+ for (ii = 0; ii < headings.length; ++ii) {
+ var cellContent = ' ';
+ if (typeof cols[ii] !== 'undefined') {
+ cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);
+ }
+ tableArray[r].push(cellContent);
+ }
+ }
+
+ var cellSpacesCount = 3;
+ for (i = 0; i < tableArray.length; ++i) {
+ for (ii = 0; ii < tableArray[i].length; ++ii) {
+ var strLen = tableArray[i][ii].length;
+ if (strLen > cellSpacesCount) {
+ cellSpacesCount = strLen;
+ }
+ }
+ }
+
+ for (i = 0; i < tableArray.length; ++i) {
+ for (ii = 0; ii < tableArray[i].length; ++ii) {
+ if (i === 1) {
+ if (tableArray[i][ii].slice(-1) === ':') {
+ tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';
+ } else {
+ tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');
+ }
+ } else {
+ tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);
+ }
+ }
+ txt += '| ' + tableArray[i].join(' | ') + ' |\n';
+ }
+
+ return txt.trim();
+});
+
+showdown.subParser('makeMarkdown.tableCell', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (!node.hasChildNodes()) {
+ return '';
+ }
+ var children = node.childNodes,
+ childrenLength = children.length;
+
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);
+ }
+ return txt.trim();
+});
+
+showdown.subParser('makeMarkdown.txt', function (node) {
+ 'use strict';
+
+ var txt = node.nodeValue;
+
+ // multiple spaces are collapsed
+ txt = txt.replace(/ +/g, ' ');
+
+ // replace the custom ¨NBSP; with a space
+ txt = txt.replace(/¨NBSP;/g, ' ');
+
+ // ", <, > and & should replace escaped html entities
+ txt = showdown.helper.unescapeHTMLEntities(txt);
+
+ // escape markdown magic characters
+ // emphasis, strong and strikethrough - can appear everywhere
+ // we also escape pipe (|) because of tables
+ // and escape ` because of code blocks and spans
+ txt = txt.replace(/([*_~|`])/g, '\\$1');
+
+ // escape > because of blockquotes
+ txt = txt.replace(/^(\s*)>/g, '\\$1>');
+
+ // hash character, only troublesome at the beginning of a line because of headers
+ txt = txt.replace(/^#/gm, '\\#');
+
+ // horizontal rules
+ txt = txt.replace(/^(\s*)([-=]{3,})(\s*)$/, '$1\\$2$3');
+
+ // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer
+ txt = txt.replace(/^( {0,3}\d+)\./gm, '$1\\.');
+
+ // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)
+ txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\$2');
+
+ // images and links, ] followed by ( is problematic, so we escape it
+ txt = txt.replace(/]([\s]*)\(/g, '\\]$1\\(');
+
+ // reference URIs must also be escaped
+ txt = txt.replace(/^ {0,3}\[([\S \t]*?)]:/gm, '\\[$1]:');
+
+ return txt;
+});
+
+var root = this;
+
+// AMD Loader
+if (typeof define === 'function' && define.amd) {
+ define(function () {
+ 'use strict';
+ return showdown;
+ });
+
+// CommonJS/nodeJS Loader
+} else if (typeof module !== 'undefined' && module.exports) {
+ module.exports = showdown;
+
+// Regular Browser loader
+} else {
+ root.showdown = showdown;
+}
+}).call(this);
+
+//# sourceMappingURL=showdown.js.map
diff --git a/showdown/dist/showdown.js.map b/showdown/dist/showdown.js.map
new file mode 100644
index 00000000..f1f54d0f
--- /dev/null
+++ b/showdown/dist/showdown.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../src/options.js","../src/showdown.js","../src/helpers.js","../src/converter.js","../src/subParsers/anchors.js","../src/subParsers/autoLinks.js","../src/subParsers/blockGamut.js","../src/subParsers/blockQuotes.js","../src/subParsers/codeBlocks.js","../src/subParsers/codeSpans.js","../src/subParsers/completeHTMLDocument.js","../src/subParsers/detab.js","../src/subParsers/ellipsis.js","../src/subParsers/emoji.js","../src/subParsers/encodeAmpsAndAngles.js","../src/subParsers/encodeBackslashEscapes.js","../src/subParsers/encodeCode.js","../src/subParsers/escapeSpecialCharsWithinTagAttributes.js","../src/subParsers/githubCodeBlocks.js","../src/subParsers/hashBlock.js","../src/subParsers/hashCodeTags.js","../src/subParsers/hashElement.js","../src/subParsers/hashHTMLBlocks.js","../src/subParsers/hashHTMLSpans.js","../src/subParsers/hashPreCodeTags.js","../src/subParsers/headers.js","../src/subParsers/horizontalRule.js","../src/subParsers/images.js","../src/subParsers/italicsAndBold.js","../src/subParsers/lists.js","../src/subParsers/metadata.js","../src/subParsers/outdent.js","../src/subParsers/paragraphs.js","../src/subParsers/runExtension.js","../src/subParsers/spanGamut.js","../src/subParsers/strikethrough.js","../src/subParsers/stripLinkDefinitions.js","../src/subParsers/tables.js","../src/subParsers/underline.js","../src/subParsers/unescapeSpecialChars.js","../src/subParsers/makeMarkdown/blockquote.js","../src/subParsers/makeMarkdown/codeBlock.js","../src/subParsers/makeMarkdown/codeSpan.js","../src/subParsers/makeMarkdown/emphasis.js","../src/subParsers/makeMarkdown/header.js","../src/subParsers/makeMarkdown/hr.js","../src/subParsers/makeMarkdown/image.js","../src/subParsers/makeMarkdown/links.js","../src/subParsers/makeMarkdown/list.js","../src/subParsers/makeMarkdown/listItem.js","../src/subParsers/makeMarkdown/node.js","../src/subParsers/makeMarkdown/paragraph.js","../src/subParsers/makeMarkdown/pre.js","../src/subParsers/makeMarkdown/strikethrough.js","../src/subParsers/makeMarkdown/strong.js","../src/subParsers/makeMarkdown/table.js","../src/subParsers/makeMarkdown/tableCell.js","../src/subParsers/makeMarkdown/txt.js","../src/loader.js"],"names":[],"mappings":"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","file":"showdown.js","sourcesContent":["/**\n * Created by Tivie on 13-07-2015.\n */\n\nfunction getDefaultOpts (simple) {\n 'use strict';\n\n var defaultOptions = {\n omitExtraWLInCodeBlocks: {\n defaultValue: false,\n describe: 'Omit the default extra whiteline added to code blocks',\n type: 'boolean'\n },\n noHeaderId: {\n defaultValue: false,\n describe: 'Turn on/off generated header id',\n type: 'boolean'\n },\n prefixHeaderId: {\n defaultValue: false,\n describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \\'section-\\' prefix',\n type: 'string'\n },\n rawPrefixHeaderId: {\n defaultValue: false,\n describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the \" char is used in the prefix)',\n type: 'boolean'\n },\n ghCompatibleHeaderId: {\n defaultValue: false,\n describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',\n type: 'boolean'\n },\n rawHeaderId: {\n defaultValue: false,\n describe: 'Remove only spaces, \\' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',\n type: 'boolean'\n },\n headerLevelStart: {\n defaultValue: false,\n describe: 'The header blocks level start',\n type: 'integer'\n },\n parseImgDimensions: {\n defaultValue: false,\n describe: 'Turn on/off image dimension parsing',\n type: 'boolean'\n },\n simplifiedAutoLink: {\n defaultValue: false,\n describe: 'Turn on/off GFM autolink style',\n type: 'boolean'\n },\n excludeTrailingPunctuationFromURLs: {\n defaultValue: false,\n describe: 'Excludes trailing punctuation from links generated with autoLinking',\n type: 'boolean'\n },\n literalMidWordUnderscores: {\n defaultValue: false,\n describe: 'Parse midword underscores as literal underscores',\n type: 'boolean'\n },\n literalMidWordAsterisks: {\n defaultValue: false,\n describe: 'Parse midword asterisks as literal asterisks',\n type: 'boolean'\n },\n strikethrough: {\n defaultValue: false,\n describe: 'Turn on/off strikethrough support',\n type: 'boolean'\n },\n tables: {\n defaultValue: false,\n describe: 'Turn on/off tables support',\n type: 'boolean'\n },\n tablesHeaderId: {\n defaultValue: false,\n describe: 'Add an id to table headers',\n type: 'boolean'\n },\n ghCodeBlocks: {\n defaultValue: true,\n describe: 'Turn on/off GFM fenced code blocks support',\n type: 'boolean'\n },\n tasklists: {\n defaultValue: false,\n describe: 'Turn on/off GFM tasklist support',\n type: 'boolean'\n },\n smoothLivePreview: {\n defaultValue: false,\n describe: 'Prevents weird effects in live previews due to incomplete input',\n type: 'boolean'\n },\n smartIndentationFix: {\n defaultValue: false,\n describe: 'Tries to smartly fix indentation in es6 strings',\n type: 'boolean'\n },\n disableForced4SpacesIndentedSublists: {\n defaultValue: false,\n describe: 'Disables the requirement of indenting nested sublists by 4 spaces',\n type: 'boolean'\n },\n simpleLineBreaks: {\n defaultValue: false,\n describe: 'Parses simple line breaks as
(GFM Style)',\n type: 'boolean'\n },\n requireSpaceBeforeHeadingText: {\n defaultValue: false,\n describe: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',\n type: 'boolean'\n },\n ghMentions: {\n defaultValue: false,\n describe: 'Enables github @mentions',\n type: 'boolean'\n },\n ghMentionsLink: {\n defaultValue: 'https://github.com/{u}',\n describe: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',\n type: 'string'\n },\n encodeEmails: {\n defaultValue: true,\n describe: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',\n type: 'boolean'\n },\n openLinksInNewWindow: {\n defaultValue: false,\n describe: 'Open all links in new windows',\n type: 'boolean'\n },\n backslashEscapesHTMLTags: {\n defaultValue: false,\n describe: 'Support for HTML Tag escaping. ex: \\>t<>\", \"<\", \">\", \"g\")\n * returns: [\"t<\", \"\"]\n * matchRecursiveRegExp(\" content, so we need to fix that:\n bq = bq.replace(/(\\s*
[^\\r]+?<\\/pre>)/gm, function (wholeMatch, m1) {\n var pre = m1;\n // attacklab: hack around Konqueror 3.5.4 bug:\n pre = pre.replace(/^ /mg, '¨0');\n pre = pre.replace(/¨0/g, '');\n return pre;\n });\n\n return showdown.subParser('hashBlock')('
\\n' + bq + '\\n
', options, globals);\n });\n\n text = globals.converter._dispatch('blockQuotes.after', text, options, globals);\n return text;\n});\n","/**\n * Process Markdown `` blocks.\n */\nshowdown.subParser('codeBlocks', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('codeBlocks.before', text, options, globals);\n\n // sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n text += '¨0';\n\n var pattern = /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=¨0))/g;\n text = text.replace(pattern, function (wholeMatch, m1, m2) {\n var codeblock = m1,\n nextChar = m2,\n end = '\\n';\n\n codeblock = showdown.subParser('outdent')(codeblock, options, globals);\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing newlines\n\n if (options.omitExtraWLInCodeBlocks) {\n end = '';\n }\n\n codeblock = '
';\n\n return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;\n });\n\n // strip sentinel\n text = text.replace(/¨0/, '');\n\n text = globals.converter._dispatch('codeBlocks.after', text, options, globals);\n return text;\n});\n","/**\n *\n * * Backtick quotes are used for ' + codeblock + end + '
spans.\n *\n * * You can use multiple backticks as the delimiters if you want to\n * include literal backticks in the code span. So, this input:\n *\n * Just type ``foo `bar` baz`` at the prompt.\n *\n * Will translate to:\n *\n *
foo `bar` baz
at the prompt.`bar`
...\n */\nshowdown.subParser('codeSpans', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('codeSpans.before', text, options, globals);\n\n if (typeof (text) === 'undefined') {\n text = '';\n }\n text = text.replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,\n function (wholeMatch, m1, m2, m3) {\n var c = m3;\n c = c.replace(/^([ \\t]*)/g, '');\t// leading whitespace\n c = c.replace(/[ \\t]*$/g, '');\t// trailing whitespace\n c = showdown.subParser('encodeCode')(c, options, globals);\n c = m1 + '' + c + '
';\n c = showdown.subParser('hashHTMLSpans')(c, options, globals);\n return c;\n }\n );\n\n text = globals.converter._dispatch('codeSpans.after', text, options, globals);\n return text;\n});\n","/**\n * Create a full HTML document from the processed markdown\n */\nshowdown.subParser('completeHTMLDocument', function (text, options, globals) {\n 'use strict';\n\n if (!options.completeHTMLDocument) {\n return text;\n }\n\n text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);\n\n var doctype = 'html',\n doctypeParsed = '\\n',\n title = '',\n charset = '\\n',\n lang = '',\n metadata = '';\n\n if (typeof globals.metadata.parsed.doctype !== 'undefined') {\n doctypeParsed = '\\n';\n doctype = globals.metadata.parsed.doctype.toString().toLowerCase();\n if (doctype === 'html' || doctype === 'html5') {\n charset = '';\n }\n }\n\n for (var meta in globals.metadata.parsed) {\n if (globals.metadata.parsed.hasOwnProperty(meta)) {\n switch (meta.toLowerCase()) {\n case 'doctype':\n break;\n\n case 'title':\n title = '
';\n\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n });\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n","showdown.subParser('hashBlock', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashBlock.before', text, options, globals);\n text = text.replace(/(^\\n+|\\n+$)/g, '');\n text = '\\n\\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\\n\\n';\n text = globals.converter._dispatch('hashBlock.after', text, options, globals);\n return text;\n});\n","/**\n * Hash and escape ' + codeblock + end + '
elements that should not be parsed as markdown\n */\nshowdown.subParser('hashCodeTags', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);\n\n var repFunc = function (wholeMatch, match, left, right) {\n var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';\n };\n\n // Hash naked
\n text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '
]*>', '
', 'gim');\n\n text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);\n return text;\n});\n","showdown.subParser('hashElement', function (text, options, globals) {\n 'use strict';\n\n return function (wholeMatch, m1) {\n var blockText = m1;\n\n // Undo double lines\n blockText = blockText.replace(/\\n\\n/g, '\\n');\n blockText = blockText.replace(/^\\n/, '');\n\n // strip trailing blank lines\n blockText = blockText.replace(/\\n+$/g, '');\n\n // Replace the element text with a marker (\"¨KxK\" where x is its key)\n blockText = '\\n\\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\\n\\n';\n\n return blockText;\n };\n});\n","showdown.subParser('hashHTMLBlocks', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);\n\n var blockTags = [\n 'pre',\n 'div',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'table',\n 'dl',\n 'ol',\n 'ul',\n 'script',\n 'noscript',\n 'form',\n 'fieldset',\n 'iframe',\n 'math',\n 'style',\n 'section',\n 'header',\n 'footer',\n 'nav',\n 'article',\n 'aside',\n 'address',\n 'audio',\n 'canvas',\n 'figure',\n 'hgroup',\n 'output',\n 'video',\n 'p'\n ],\n repFunc = function (wholeMatch, match, left, right) {\n var txt = wholeMatch;\n // check if this html element is marked as markdown\n // if so, it's contents should be parsed as markdown\n if (left.search(/\\bmarkdown\\b/) !== -1) {\n txt = left + globals.converter.makeHtml(match) + right;\n }\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n };\n\n if (options.backslashEscapesHTMLTags) {\n // encode backslash escaped HTML tags\n text = text.replace(/\\\\<(\\/?[^>]+?)>/g, function (wm, inside) {\n return '<' + inside + '>';\n });\n }\n\n // hash HTML Blocks\n for (var i = 0; i < blockTags.length; ++i) {\n\n var opTagPos,\n rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\\\b[^>]*>)', 'im'),\n patLeft = '<' + blockTags[i] + '\\\\b[^>]*>',\n patRight = '' + blockTags[i] + '>';\n // 1. Look for the first position of the first opening HTML tag in the text\n while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {\n\n // if the HTML tag is \\ escaped, we need to escape it and break\n\n\n //2. Split the text in that position\n var subTexts = showdown.helper.splitAtIndex(text, opTagPos),\n //3. Match recursively\n newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');\n\n // prevent an infinite loop\n if (newSubText1 === subTexts[1]) {\n break;\n }\n text = subTexts[0].concat(newSubText1);\n }\n }\n // HR SPECIAL CASE\n text = text.replace(/(\\n {0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,\n showdown.subParser('hashElement')(text, options, globals));\n\n // Special case for standalone HTML comments\n text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n }, '^ {0,3}', 'gm');\n\n // PHP and ASP-style processor instructions (...?> and <%...%>)\n text = text.replace(/(?:\\n\\n)( {0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,\n showdown.subParser('hashElement')(text, options, globals));\n\n text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);\n return text;\n});\n","/**\n * Hash span elements that should not be parsed as markdown\n */\nshowdown.subParser('hashHTMLSpans', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);\n\n function hashHTMLSpan (html) {\n return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';\n }\n\n // Hash Self Closing tags\n text = text.replace(/<[^>]+?\\/>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash tags without properties\n text = text.replace(/<([^>]+?)>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash tags with properties\n text = text.replace(/<([^>]+?)\\s[^>]+?>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash self closing tags without />\n text = text.replace(/<[^>]+?>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n /*showdown.helper.matchRecursiveRegExp(text, ']*>', '
', 'gi');*/\n\n text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);\n return text;\n});\n\n/**\n * Unhash HTML spans\n */\nshowdown.subParser('unhashHTMLSpans', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);\n\n for (var i = 0; i < globals.gHtmlSpans.length; ++i) {\n var repText = globals.gHtmlSpans[i],\n // limiter to prevent infinite loop (assume 10 as limit for recurse)\n limit = 0;\n\n while (/¨C(\\d+)C/.test(repText)) {\n var num = RegExp.$1;\n repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);\n if (limit === 10) {\n console.error('maximum nesting of 10 spans reached!!!');\n break;\n }\n ++limit;\n }\n text = text.replace('¨C' + i + 'C', repText);\n }\n\n text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);\n return text;\n});\n","/**\n * Hash and escape elements that should not be parsed as markdown\n */\nshowdown.subParser('hashPreCodeTags', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);\n\n var repFunc = function (wholeMatch, match, left, right) {\n // encode html entities\n var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n };\n\n // Hash
\n text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}
]*>\\\\s*
', 'gim');\n\n text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);\n return text;\n});\n","showdown.subParser('headers', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('headers.before', text, options, globals);\n\n var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),\n\n // Set text-style headers:\n //\tHeader 1\n //\t========\n //\n //\tHeader 2\n //\t--------\n //\n setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,\n setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm;\n\n text = text.replace(setextRegexH1, function (wholeMatch, m1) {\n\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart,\n hashBlock = ']*>', '^ {0,3}
\\\\s*
', options, globals);\n text = text.replace(/^ {0,2}( ?-){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?\\*){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?_){3,}[ \\t]*$/gm, key);\n\n text = globals.converter._dispatch('horizontalRule.after', text, options, globals);\n return text;\n});\n","/**\n * Turn Markdown image shortcuts into tags.\n */\nshowdown.subParser('images', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('images.before', text, options, globals);\n\n var inlineRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?([\\S]+?(?:\\([\\S]*?\\)[\\S]*?)?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n crazyRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<([^>]*)>(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(?:([\"'])([^\"]*?)\\6))?[ \\t]?\\)/g,\n base64RegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?(data:.+?\\/.+?;base64,[A-Za-z0-9+/=\\n]+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n referenceRegExp = /!\\[([^\\]]*?)] ?(?:\\n *)?\\[([\\s\\S]*?)]()()()()()/g,\n refShortcutRegExp = /!\\[([^\\[\\]]+)]()()()()()/g;\n\n function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {\n url = url.replace(/\\s/g, '');\n return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);\n }\n\n function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {\n\n var gUrls = globals.gUrls,\n gTitles = globals.gTitles,\n gDims = globals.gDimensions;\n\n linkId = linkId.toLowerCase();\n\n if (!title) {\n title = '';\n }\n // Special case for explicit empty url\n if (wholeMatch.search(/\\(\\s*>? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n\n } else if (url === '' || url === null) {\n if (linkId === '' || linkId === null) {\n // lower-case and turn embedded newlines into spaces\n linkId = altText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(gUrls[linkId])) {\n url = gUrls[linkId];\n if (!showdown.helper.isUndefined(gTitles[linkId])) {\n title = gTitles[linkId];\n }\n if (!showdown.helper.isUndefined(gDims[linkId])) {\n width = gDims[linkId].width;\n height = gDims[linkId].height;\n }\n } else {\n return wholeMatch;\n }\n }\n\n altText = altText\n .replace(/\"/g, '"')\n //altText = showdown.helper.escapeCharacters(altText, '*_', false);\n .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n //url = showdown.helper.escapeCharacters(url, '*_', false);\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var result = '';\n\n return result;\n }\n\n // First, handle reference-style labeled images: ![alt text][id]\n text = text.replace(referenceRegExp, writeImageTag);\n\n // Next, handle inline images: ![alt text](url =
\n // instead of:\n //
\n // So, to prevent it, we will put a marker (¨A)in the beginning of the line\n // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser\n item = item.replace(/^([-*+]|\\d\\.)[ \\t]+[\\S\\n ]*/g, function (wm2) {\n return '¨A' + wm2;\n });\n\n // m1 - Leading line or\n // Has a double return (multi paragraph) or\n // Has sublist\n if (m1 || (item.search(/\\n{2,}/) > -1)) {\n item = showdown.subParser('githubCodeBlocks')(item, options, globals);\n item = showdown.subParser('blockGamut')(item, options, globals);\n } else {\n // Recursion for sub-lists:\n item = showdown.subParser('lists')(item, options, globals);\n item = item.replace(/\\n$/, ''); // chomp(item)\n item = showdown.subParser('hashHTMLBlocks')(item, options, globals);\n\n // Colapse double linebreaks\n item = item.replace(/\\n\\n+/g, '\\n\\n');\n if (isParagraphed) {\n item = showdown.subParser('paragraphs')(item, options, globals);\n } else {\n item = showdown.subParser('spanGamut')(item, options, globals);\n }\n }\n\n // now we need to remove the marker (¨A)\n item = item.replace('¨A', '');\n // we can finally wrap the line in list item tags\n item = ']*>\\s*
]*>/.test(grafsOutIt)) {\n codeFlag = true;\n }\n }\n grafsOut[i] = grafsOutIt;\n }\n text = grafsOut.join('\\n');\n // Strip leading and trailing lines:\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n return globals.converter._dispatch('paragraphs.after', text, options, globals);\n});\n","/**\n * Run extension\n */\nshowdown.subParser('runExtension', function (ext, text, options, globals) {\n 'use strict';\n\n if (ext.filter) {\n text = ext.filter(text, globals.converter, options);\n\n } else if (ext.regex) {\n // TODO remove this when old extension loading mechanism is deprecated\n var re = ext.regex;\n if (!(re instanceof RegExp)) {\n re = new RegExp(re, 'g');\n }\n text = text.replace(re, ext.replace);\n }\n\n return text;\n});\n","/**\n * These are all the transformations that occur *within* block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('spanGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('spanGamut.before', text, options, globals);\n text = showdown.subParser('codeSpans')(text, options, globals);\n text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);\n text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);\n\n // Process anchor and image tags. Images must come first,\n // because ![foo][f] looks like an anchor.\n text = showdown.subParser('images')(text, options, globals);\n text = showdown.subParser('anchors')(text, options, globals);\n\n // Make links out of things like `
\\n');\n }\n } else {\n // Vanilla hard breaks\n text = text.replace(/ +\\n/g, '
\\n');\n }\n\n text = globals.converter._dispatch('spanGamut.after', text, options, globals);\n return text;\n});\n","showdown.subParser('strikethrough', function (text, options, globals) {\n 'use strict';\n\n function parseInside (txt) {\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n return '' + txt + '';\n }\n\n if (options.strikethrough) {\n text = globals.converter._dispatch('strikethrough.before', text, options, globals);\n text = text.replace(/(?:~){2}([\\s\\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });\n text = globals.converter._dispatch('strikethrough.after', text, options, globals);\n }\n\n return text;\n});\n","/**\n * Strips link definitions from text, stores the URLs and titles in\n * hash references.\n * Link defs are in the form: ^[id]: url \"optional title\"\n */\nshowdown.subParser('stripLinkDefinitions', function (text, options, globals) {\n 'use strict';\n\n var regex = /^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*([^>\\s]+)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=¨0))/gm,\n base64Regex = /^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*(data:.+?\\/.+?;base64,[A-Za-z0-9+/=\\n]+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n\\n|(?=¨0)|(?=\\n\\[))/gm;\n\n // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n text += '¨0';\n\n var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {\n\n // if there aren't two instances of linkId it must not be a reference link so back out\n linkId = linkId.toLowerCase();\n if (text.toLowerCase().split(linkId).length - 1 < 2) {\n return wholeMatch;\n }\n if (url.match(/^data:.+?\\/.+?;base64,/)) {\n // remove newlines\n globals.gUrls[linkId] = url.replace(/\\s/g, '');\n } else {\n globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive\n }\n\n if (blankLines) {\n // Oops, found blank lines, so it's not a title.\n // Put back the parenthetical statement we stole.\n return blankLines + title;\n\n } else {\n if (title) {\n globals.gTitles[linkId] = title.replace(/\"|'/g, '"');\n }\n if (options.parseImgDimensions && width && height) {\n globals.gDimensions[linkId] = {\n width: width,\n height: height\n };\n }\n }\n // Completely remove the definition from the text\n return '';\n };\n\n // first we try to find base64 link references\n text = text.replace(base64Regex, replaceFunc);\n\n text = text.replace(regex, replaceFunc);\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return text;\n});\n","showdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n //singeColTblRgx = /^ {0,3}\\|.+\\|\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n(?: {0,3}\\|.+\\|\\n)+(?:\\n\\n|¨0)/gm;\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles (sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders (header, style) {\n var id = '';\n header = header.trim();\n // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n header = showdown.subParser('spanGamut')(header, options, globals);\n\n return '' + header + ' \\n';\n }\n\n function parseCells (cell, style) {\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '' + subText + ' \\n';\n }\n\n function buildTable (headers, cells) {\n var tb = '\\n\\n
\\n';\n return tb;\n }\n\n function parseTable (rawTable) {\n var i, tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n }\n // parse code spans first, but we only support one line code spans\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),\n rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n\n tableLines.shift();\n tableLines.shift();\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n rawCells.push(\n tableLines[i]\n .split('|')\n .map(function (s) {\n return s.trim();\n })\n );\n }\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n for (var ii = 0; ii < headers.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {\n\n }\n row.push(parseCells(rawCells[i][ii], styles[ii]));\n }\n cells.push(row);\n }\n\n return buildTable(headers, cells);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals);\n\n // find escaped pipe characters\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n // parse multi column tables\n text = text.replace(tableRgx, parseTable);\n\n // parse one column tables\n text = text.replace(singeColTblRgx, parseTable);\n\n text = globals.converter._dispatch('tables.after', text, options, globals);\n\n return text;\n});\n","showdown.subParser('underline', function (text, options, globals) {\n 'use strict';\n\n if (!options.underline) {\n return text;\n }\n\n text = globals.converter._dispatch('underline.before', text, options, globals);\n\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return (/\\S$/.test(m)) ? '' + m + '' : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return (/\\S$/.test(m)) ? '' + m + '' : wm;\n });\n }\n\n // escape remaining underscores to prevent them being parsed by italic and bold\n text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('underline.after', text, options, globals);\n\n return text;\n});\n","/**\n * Swap back in all the special characters we've hidden.\n */\nshowdown.subParser('unescapeSpecialChars', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);\n\n text = text.replace(/¨E(\\d+)E/g, function (wholeMatch, m1) {\n var charCodeToReplace = parseInt(m1);\n return String.fromCharCode(charCodeToReplace);\n });\n\n text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);\n return text;\n});\n","showdown.subParser('makeMarkdown.blockquote', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);\n\n if (innerTxt === '') {\n continue;\n }\n txt += innerTxt;\n }\n }\n // cleanup\n txt = txt.trim();\n txt = '> ' + txt.split('\\n').join('\\n> ');\n return txt;\n});\n","showdown.subParser('makeMarkdown.codeBlock', function (node, globals) {\n 'use strict';\n\n var lang = node.getAttribute('language'),\n num = node.getAttribute('precodenum');\n return '```' + lang + '\\n' + globals.preList[num] + '\\n```';\n});\n","showdown.subParser('makeMarkdown.codeSpan', function (node) {\n 'use strict';\n\n return '`' + node.innerHTML + '`';\n});\n","showdown.subParser('makeMarkdown.emphasis', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '*';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '*';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {\n 'use strict';\n\n var headerMark = new Array(headerLevel + 1).join('#'),\n txt = '';\n\n if (node.hasChildNodes()) {\n txt = headerMark + ' ';\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.hr', function () {\n 'use strict';\n\n return '---';\n});\n","showdown.subParser('makeMarkdown.image', function (node) {\n 'use strict';\n\n var txt = '';\n if (node.hasAttribute('src')) {\n txt += '![' + node.getAttribute('alt') + '](';\n txt += '<' + node.getAttribute('src') + '>';\n if (node.hasAttribute('width') && node.hasAttribute('height')) {\n txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');\n }\n\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n txt += ')';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.links', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes() && node.hasAttribute('href')) {\n var children = node.childNodes,\n childrenLength = children.length;\n txt = '[';\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '](';\n txt += '<' + node.getAttribute('href') + '>';\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n txt += ')';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.list', function (node, globals, type) {\n 'use strict';\n\n var txt = '';\n if (!node.hasChildNodes()) {\n return '';\n }\n var listItems = node.childNodes,\n listItemsLenght = listItems.length,\n listNum = node.getAttribute('start') || 1;\n\n for (var i = 0; i < listItemsLenght; ++i) {\n if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {\n continue;\n }\n\n // define the bullet to use in list\n var bullet = '';\n if (type === 'ol') {\n bullet = listNum.toString() + '. ';\n } else {\n bullet = '- ';\n }\n\n // parse list item\n txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);\n ++listNum;\n }\n\n // add comment at the end to prevent consecutive lists to be parsed as one\n txt += '\\n\\n';\n return txt.trim();\n});\n","showdown.subParser('makeMarkdown.listItem', function (node, globals) {\n 'use strict';\n\n var listItemTxt = '';\n\n var children = node.childNodes,\n childrenLenght = children.length;\n\n for (var i = 0; i < childrenLenght; ++i) {\n listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n // if it's only one liner, we need to add a newline at the end\n if (!/\\n$/.test(listItemTxt)) {\n listItemTxt += '\\n';\n } else {\n // it's multiparagraph, so we need to indent\n listItemTxt = listItemTxt\n .split('\\n')\n .join('\\n ')\n .replace(/^ {4}$/gm, '')\n .replace(/\\n\\n+/g, '\\n\\n');\n }\n\n return listItemTxt;\n});\n","\n\nshowdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {\n 'use strict';\n\n spansOnly = spansOnly || false;\n\n var txt = '';\n\n // edge case of text without wrapper paragraph\n if (node.nodeType === 3) {\n return showdown.subParser('makeMarkdown.txt')(node, globals);\n }\n\n // HTML comment\n if (node.nodeType === 8) {\n return '\\n\\n';\n }\n\n // process only node elements\n if (node.nodeType !== 1) {\n return '';\n }\n\n var tagName = node.tagName.toLowerCase();\n\n switch (tagName) {\n\n //\n // BLOCKS\n //\n case 'h1':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\\n\\n'; }\n break;\n case 'h2':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\\n\\n'; }\n break;\n case 'h3':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\\n\\n'; }\n break;\n case 'h4':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\\n\\n'; }\n break;\n case 'h5':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\\n\\n'; }\n break;\n case 'h6':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\\n\\n'; }\n break;\n\n case 'p':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\\n\\n'; }\n break;\n\n case 'blockquote':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\\n\\n'; }\n break;\n\n case 'hr':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\\n\\n'; }\n break;\n\n case 'ol':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\\n\\n'; }\n break;\n\n case 'ul':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\\n\\n'; }\n break;\n\n case 'precode':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\\n\\n'; }\n break;\n\n case 'pre':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\\n\\n'; }\n break;\n\n case 'table':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\\n\\n'; }\n break;\n\n //\n // SPANS\n //\n case 'code':\n txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);\n break;\n\n case 'em':\n case 'i':\n txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);\n break;\n\n case 'strong':\n case 'b':\n txt = showdown.subParser('makeMarkdown.strong')(node, globals);\n break;\n\n case 'del':\n txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);\n break;\n\n case 'a':\n txt = showdown.subParser('makeMarkdown.links')(node, globals);\n break;\n\n case 'img':\n txt = showdown.subParser('makeMarkdown.image')(node, globals);\n break;\n\n default:\n txt = node.outerHTML + '\\n\\n';\n }\n\n // common normalization\n // TODO eventually\n\n return txt;\n});\n","showdown.subParser('makeMarkdown.paragraph', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n\n // some text normalization\n txt = txt.trim();\n\n return txt;\n});\n","showdown.subParser('makeMarkdown.pre', function (node, globals) {\n 'use strict';\n\n var num = node.getAttribute('prenum');\n return '\\n',\n tblLgn = headers.length;\n\n for (var i = 0; i < tblLgn; ++i) {\n tb += headers[i];\n }\n tb += ' \\n\\n\\n';\n\n for (i = 0; i < cells.length; ++i) {\n tb += '\\n';\n for (var ii = 0; ii < tblLgn; ++ii) {\n tb += cells[i][ii];\n }\n tb += ' \\n';\n }\n tb += '\\n' + globals.preList[num] + '
';\n});\n","showdown.subParser('makeMarkdown.strikethrough', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '~~';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '~~';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.strong', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '**';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '**';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.table', function (node, globals) {\n 'use strict';\n\n var txt = '',\n tableArray = [[], []],\n headings = node.querySelectorAll('thead>tr>th'),\n rows = node.querySelectorAll('tbody>tr'),\n i, ii;\n for (i = 0; i < headings.length; ++i) {\n var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),\n allign = '---';\n\n if (headings[i].hasAttribute('style')) {\n var style = headings[i].getAttribute('style').toLowerCase().replace(/\\s/g, '');\n switch (style) {\n case 'text-align:left;':\n allign = ':---';\n break;\n case 'text-align:right;':\n allign = '---:';\n break;\n case 'text-align:center;':\n allign = ':---:';\n break;\n }\n }\n tableArray[0][i] = headContent.trim();\n tableArray[1][i] = allign;\n }\n\n for (i = 0; i < rows.length; ++i) {\n var r = tableArray.push([]) - 1,\n cols = rows[i].getElementsByTagName('td');\n\n for (ii = 0; ii < headings.length; ++ii) {\n var cellContent = ' ';\n if (typeof cols[ii] !== 'undefined') {\n cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);\n }\n tableArray[r].push(cellContent);\n }\n }\n\n var cellSpacesCount = 3;\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n var strLen = tableArray[i][ii].length;\n if (strLen > cellSpacesCount) {\n cellSpacesCount = strLen;\n }\n }\n }\n\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n if (i === 1) {\n if (tableArray[i][ii].slice(-1) === ':') {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');\n }\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);\n }\n }\n txt += '| ' + tableArray[i].join(' | ') + ' |\\n';\n }\n\n return txt.trim();\n});\n","showdown.subParser('makeMarkdown.tableCell', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (!node.hasChildNodes()) {\n return '';\n }\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);\n }\n return txt.trim();\n});\n","showdown.subParser('makeMarkdown.txt', function (node) {\n 'use strict';\n\n var txt = node.nodeValue;\n\n // multiple spaces are collapsed\n txt = txt.replace(/ +/g, ' ');\n\n // replace the custom ¨NBSP; with a space\n txt = txt.replace(/¨NBSP;/g, ' ');\n\n // \", <, > and & should replace escaped html entities\n txt = showdown.helper.unescapeHTMLEntities(txt);\n\n // escape markdown magic characters\n // emphasis, strong and strikethrough - can appear everywhere\n // we also escape pipe (|) because of tables\n // and escape ` because of code blocks and spans\n txt = txt.replace(/([*_~|`])/g, '\\\\$1');\n\n // escape > because of blockquotes\n txt = txt.replace(/^(\\s*)>/g, '\\\\$1>');\n\n // hash character, only troublesome at the beginning of a line because of headers\n txt = txt.replace(/^#/gm, '\\\\#');\n\n // horizontal rules\n txt = txt.replace(/^(\\s*)([-=]{3,})(\\s*)$/, '$1\\\\$2$3');\n\n // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer\n txt = txt.replace(/^( {0,3}\\d+)\\./gm, '$1\\\\.');\n\n // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)\n txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\\\$2');\n\n // images and links, ] followed by ( is problematic, so we escape it\n txt = txt.replace(/]([\\s]*)\\(/g, '\\\\]$1\\\\(');\n\n // reference URIs must also be escaped\n txt = txt.replace(/^ {0,3}\\[([\\S \\t]*?)]:/gm, '\\\\[$1]:');\n\n return txt;\n});\n","var root = this;\n\n// AMD Loader\nif (typeof define === 'function' && define.amd) {\n define(function () {\n 'use strict';\n return showdown;\n });\n\n// CommonJS/nodeJS Loader\n} else if (typeof module !== 'undefined' && module.exports) {\n module.exports = showdown;\n\n// Regular Browser loader\n} else {\n root.showdown = showdown;\n}\n"]}
\ No newline at end of file
diff --git a/showdown/dist/showdown.min.js b/showdown/dist/showdown.min.js
new file mode 100644
index 00000000..cf721d9f
--- /dev/null
+++ b/showdown/dist/showdown.min.js
@@ -0,0 +1,3 @@
+/*! showdown v 2.1.0 - 21-04-2022 */
+!function(){function a(e){"use strict";var r={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,describe:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,describe:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,describe:"Parses simple line breaks as
(GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,describe:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,describe:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",describe:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,describe:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,describe:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,describe:"Support for HTML Tag escaping. ex: [^\r]+?<\/pre>)/gm,function(e,r){return r.replace(/^ /gm,"¨0").replace(/¨0/g,"")}),x.subParser("hashBlock")("
","gim"),e=s.converter._dispatch("hashPreCodeTags.after",e,n,s)}),x.subParser("headers",function(e,n,s){"use strict";e=s.converter._dispatch("headers.before",e,n,s);var o=isNaN(parseInt(n.headerLevelStart))?1:parseInt(n.headerLevelStart),r=n.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,t=n.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm,r=(e=(e=e.replace(r,function(e,r){var t=x.subParser("spanGamut")(r,n,s),r=n.noHeaderId?"":' id="'+i(r)+'"',r="\n"+e+"\n
",r,t)}),e=t.converter._dispatch("blockQuotes.after",e,r,t)}),x.subParser("codeBlocks",function(e,n,s){"use strict";e=s.converter._dispatch("codeBlocks.before",e,n,s);return e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,function(e,r,t){var a="\n",r=x.subParser("outdent")(r,n,s);return r=x.subParser("encodeCode")(r,n,s),r="
",x.subParser("hashBlock")(r,n,s)+t})).replace(/¨0/,""),e=s.converter._dispatch("codeBlocks.after",e,n,s)}),x.subParser("codeSpans",function(e,n,s){"use strict";return e=(e=void 0===(e=s.converter._dispatch("codeSpans.before",e,n,s))?"":e).replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(e,r,t,a){return a=(a=a.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),a=r+""+(r=(r=(r=x.subParser("detab")(r,n,s)).replace(/^\n+/g,"")).replace(/\n+$/g,""))+(a=n.omitExtraWLInCodeBlocks?"":a)+"
"+(a=x.subParser("encodeCode")(a,n,s))+"
",a=x.subParser("hashHTMLSpans")(a,n,s)}),e=s.converter._dispatch("codeSpans.after",e,n,s)}),x.subParser("completeHTMLDocument",function(e,r,t){"use strict";if(!r.completeHTMLDocument)return e;e=t.converter._dispatch("completeHTMLDocument.before",e,r,t);var a,n="html",s="\n",o="",i='\n',l="",c="";for(a in void 0!==t.metadata.parsed.doctype&&(s="\n","html"!==(n=t.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==n||(i='')),t.metadata.parsed)if(t.metadata.parsed.hasOwnProperty(a))switch(a.toLowerCase()){case"doctype":break;case"title":o="
",a=x.subParser("hashBlock")(a,s,o),"\n\n¨G"+(o.ghCodeBlocks.push({text:e,codeblock:a})-1)+"G\n\n"})).replace(/¨0/,""),o.converter._dispatch("githubCodeBlocks.after",e,s,o)):e}),x.subParser("hashBlock",function(e,r,t){"use strict";return e=(e=t.converter._dispatch("hashBlock.before",e,r,t)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(t.gHtmlBlocks.push(e)-1)+"K\n\n",e=t.converter._dispatch("hashBlock.after",e,r,t)}),x.subParser("hashCodeTags",function(e,n,s){"use strict";e=s.converter._dispatch("hashCodeTags.before",e,n,s);return e=x.helper.replaceRecursiveRegExp(e,function(e,r,t,a){t=t+x.subParser("encodeCode")(r,n,s)+a;return"¨C"+(s.gHtmlSpans.push(t)-1)+"C"},""+(a=(a=(a=x.subParser("detab")(a,s,o)).replace(/^\n+/g,"")).replace(/\n+$/g,""))+n+"
]*>","
","gim"),e=s.converter._dispatch("hashCodeTags.after",e,n,s)}),x.subParser("hashElement",function(e,r,t){"use strict";return function(e,r){return r=(r=(r=r.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),r="\n\n¨K"+(t.gHtmlBlocks.push(r)-1)+"K\n\n"}}),x.subParser("hashHTMLBlocks",function(e,r,n){"use strict";e=n.converter._dispatch("hashHTMLBlocks.before",e,r,n);function t(e,r,t,a){return-1!==t.search(/\bmarkdown\b/)&&(e=t+n.converter.makeHtml(r)+a),"\n\n¨K"+(n.gHtmlBlocks.push(e)-1)+"K\n\n"}var a=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"];r.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,function(e,r){return"<"+r+">"}));for(var s=0;s]*>","^ {0,3}
\\s*
",r,t);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,a),e=t.converter._dispatch("horizontalRule.after",e,r,t)}),x.subParser("images",function(e,r,d){"use strict";function l(e,r,t,a,n,s,o,i){var l=d.gUrls,c=d.gTitles,u=d.gDimensions;if(t=t.toLowerCase(),i=i||"",-1
]*>/.test(c)&&(u=!0)}n[o]=c}return e=(e=(e=n.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.converter._dispatch("paragraphs.after",e,r,t)}),x.subParser("runExtension",function(e,r,t,a){"use strict";return e.filter?r=e.filter(r,a.converter,t):e.regex&&((a=e.regex)instanceof RegExp||(a=new RegExp(a,"g")),r=r.replace(a,e.replace)),r}),x.subParser("spanGamut",function(e,r,t){"use strict";return e=t.converter._dispatch("spanGamut.before",e,r,t),e=x.subParser("codeSpans")(e,r,t),e=x.subParser("escapeSpecialCharsWithinTagAttributes")(e,r,t),e=x.subParser("encodeBackslashEscapes")(e,r,t),e=x.subParser("images")(e,r,t),e=x.subParser("anchors")(e,r,t),e=x.subParser("autoLinks")(e,r,t),e=x.subParser("simplifiedAutoLinks")(e,r,t),e=x.subParser("emoji")(e,r,t),e=x.subParser("underline")(e,r,t),e=x.subParser("italicsAndBold")(e,r,t),e=x.subParser("strikethrough")(e,r,t),e=x.subParser("ellipsis")(e,r,t),e=x.subParser("hashHTMLSpans")(e,r,t),e=x.subParser("encodeAmpsAndAngles")(e,r,t),r.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"
\n")):e=e.replace(/ +\n/g,"
\n"),e=t.converter._dispatch("spanGamut.after",e,r,t)}),x.subParser("strikethrough",function(e,t,a){"use strict";return t.strikethrough&&(e=(e=a.converter._dispatch("strikethrough.before",e,t,a)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(e,r){return r=r,""+(r=t.simplifiedAutoLink?x.subParser("simplifiedAutoLinks")(r,t,a):r)+""}),e=a.converter._dispatch("strikethrough.after",e,t,a)),e}),x.subParser("stripLinkDefinitions",function(i,l,c){"use strict";function e(e,r,t,a,n,s,o){return r=r.toLowerCase(),i.toLowerCase().split(r).length-1<2?e:(t.match(/^data:.+?\/.+?;base64,/)?c.gUrls[r]=t.replace(/\s/g,""):c.gUrls[r]=x.subParser("encodeAmpsAndAngles")(t,l,c),s?s+o:(o&&(c.gTitles[r]=o.replace(/"|'/g,""")),l.parseImgDimensions&&a&&n&&(c.gDimensions[r]={width:a,height:n}),""))}return i=(i=(i=(i+="¨0").replace(/^ {0,3}\[([^\]]+)]:[ \t]*\n?[ \t]*(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,e)).replace(/^ {0,3}\[([^\]]+)]:[ \t]*\n?[ \t]*([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,e)).replace(/¨0/,"")}),x.subParser("tables",function(e,y,P){"use strict";if(!y.tables)return e;function r(e){for(var r=e.split("\n"),t=0;t"+(n=x.subParser("spanGamut")(n,y,P))+"\n"));for(t=0;t"+x.subParser("spanGamut")(i,y,P)+"\n"));h.push(_)}for(var m=d,f=h,b="\n\n\n",w=m.length,k=0;k\n \n\n",k=0;k\n";for(var v=0;v\n"}return b+=" \n
\n"}return e=(e=(e=(e=P.converter._dispatch("tables.before",e,y,P)).replace(/\\(\|)/g,x.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,r)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,r),e=P.converter._dispatch("tables.after",e,y,P)}),x.subParser("underline",function(e,r,t){"use strict";return r.underline?(e=t.converter._dispatch("underline.before",e,r,t),e=(e=r.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,function(e,r){return""+r+""})).replace(/\b__(\S[\s\S]*?)__\b/g,function(e,r){return""+r+""}):(e=e.replace(/___(\S[\s\S]*?)___/g,function(e,r){return/\S$/.test(r)?""+r+"":e})).replace(/__(\S[\s\S]*?)__/g,function(e,r){return/\S$/.test(r)?""+r+"":e})).replace(/(_)/g,x.helper.escapeCharactersCallback),t.converter._dispatch("underline.after",e,r,t)):e}),x.subParser("unescapeSpecialChars",function(e,r,t){"use strict";return e=(e=t.converter._dispatch("unescapeSpecialChars.before",e,r,t)).replace(/¨E(\d+)E/g,function(e,r){r=parseInt(r);return String.fromCharCode(r)}),e=t.converter._dispatch("unescapeSpecialChars.after",e,r,t)}),x.subParser("makeMarkdown.blockquote",function(e,r){"use strict";var t="";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,s=0;s ")}),x.subParser("makeMarkdown.codeBlock",function(e,r){"use strict";var t=e.getAttribute("language"),e=e.getAttribute("precodenum");return"```"+t+"\n"+r.preList[e]+"\n```"}),x.subParser("makeMarkdown.codeSpan",function(e){"use strict";return"`"+e.innerHTML+"`"}),x.subParser("makeMarkdown.emphasis",function(e,r){"use strict";var t="";if(e.hasChildNodes()){t+="*";for(var a=e.childNodes,n=a.length,s=0;s",e.hasAttribute("width")&&e.hasAttribute("height")&&(r+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"),r}),x.subParser("makeMarkdown.links",function(e,r){"use strict";var t="";if(e.hasChildNodes()&&e.hasAttribute("href")){for(var a=e.childNodes,n=a.length,t="[",s=0;s"),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"}return t}),x.subParser("makeMarkdown.list",function(e,r,t){"use strict";var a="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,s=n.length,o=e.getAttribute("start")||1,i=0;i"+r.preList[e]+""}),x.subParser("makeMarkdown.strikethrough",function(e,r){"use strict";var t="";if(e.hasChildNodes()){t+="~~";for(var a=e.childNodes,n=a.length,s=0;str>th"),s=e.querySelectorAll("tbody>tr"),o=0;o/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")});"function"==typeof define&&define.amd?define(function(){"use strict";return x}):"undefined"!=typeof module&&module.exports?module.exports=x:this.showdown=x}.call(this);
+//# sourceMappingURL=showdown.min.js.map
diff --git a/showdown/dist/showdown.min.js.map b/showdown/dist/showdown.min.js.map
new file mode 100644
index 00000000..788cc8ae
--- /dev/null
+++ b/showdown/dist/showdown.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"showdown.min.js","sources":["showdown.js"],"names":["getDefaultOpts","simple","defaultOptions","omitExtraWLInCodeBlocks","defaultValue","describe","type","noHeaderId","prefixHeaderId","rawPrefixHeaderId","ghCompatibleHeaderId","rawHeaderId","headerLevelStart","parseImgDimensions","simplifiedAutoLink","excludeTrailingPunctuationFromURLs","literalMidWordUnderscores","literalMidWordAsterisks","strikethrough","tables","tablesHeaderId","ghCodeBlocks","tasklists","smoothLivePreview","smartIndentationFix","disableForced4SpacesIndentedSublists","simpleLineBreaks","requireSpaceBeforeHeadingText","ghMentions","ghMentionsLink","encodeEmails","openLinksInNewWindow","backslashEscapesHTMLTags","emoji","underline","ellipsis","completeHTMLDocument","metadata","splitAdjacentBlockquotes","JSON","parse","stringify","opt","ret","hasOwnProperty","showdown","parsers","extensions","globalOptions","setFlavor","flavor","github","original","ghost","vanilla","allOn","options","allOptionsOn","validate","extension","name","errMsg","valid","error","helper","isArray","i","length","baseMsg","ext","isString","toLowerCase","isUndefined","listeners","filter","regex","ln","RegExp","replace","escapeCharactersCallback","wholeMatch","m1","charCodeAt","setOption","key","value","this","getOption","getOptions","resetOptions","Error","option","preset","getFlavor","getFlavorOptions","getDefaultOptions","subParser","func","stdExtName","validExtension","getAllExtensions","removeExtension","resetExtensions","validateExtension","console","warn","a","String","isFunction","toString","call","Array","forEach","obj","callback","prop","s","escapeCharacters","text","charsToEscape","afterBackslash","regexString","unescapeHTMLEntities","txt","rgxFindMatchPos","str","left","right","flags","t","start","g","f","indexOf","x","l","pos","m","exec","test","lastIndex","end","index","match","push","replaceLink","wm","leadingMagicChars","link","m2","m3","trailingPunctuation","trailingMagicChars","lnkTxt","regexes","asteriskDashAndColon","append","target","lmc","tmc","replaceMail","globals","b","mail","href","encodeEmailAddress","matchRecursiveRegExp","matchPos","results","slice","replaceRecursiveRegExp","replacement","repStr","finalStr","lng","bits","join","regexIndexOf","fromIndex","substring","search","splitAtIndex","encode","ch","r","Math","floor","random","padEnd","targetLength","padString","repeat","msg","alert","log","emojis","+1","-1","100","1234","1st_place_medal","2nd_place_medal","3rd_place_medal","8ball","ab","abc","abcd","accept","aerial_tramway","airplane","alarm_clock","alembic","alien","ambulance","amphora","anchor","angel","anger","angry","anguished","ant","apple","aquarius","aries","arrow_backward","arrow_double_down","arrow_double_up","arrow_down","arrow_down_small","arrow_forward","arrow_heading_down","arrow_heading_up","arrow_left","arrow_lower_left","arrow_lower_right","arrow_right","arrow_right_hook","arrow_up","arrow_up_down","arrow_up_small","arrow_upper_left","arrow_upper_right","arrows_clockwise","arrows_counterclockwise","art","articulated_lorry","artificial_satellite","astonished","athletic_shoe","atm","atom_symbol","avocado","baby","baby_bottle","baby_chick","baby_symbol","back","bacon","badminton","baggage_claim","baguette_bread","balance_scale","balloon","ballot_box","ballot_box_with_check","bamboo","banana","bangbang","bank","bar_chart","barber","baseball","basketball","basketball_man","basketball_woman","bat","bath","bathtub","battery","beach_umbrella","bear","bed","bee","beer","beers","beetle","beginner","bell","bellhop_bell","bento","biking_man","bike","biking_woman","bikini","biohazard","bird","birthday","black_circle","black_flag","black_heart","black_joker","black_large_square","black_medium_small_square","black_medium_square","black_nib","black_small_square","black_square_button","blonde_man","blonde_woman","blossom","blowfish","blue_book","blue_car","blue_heart","blush","boar","boat","bomb","book","bookmark","bookmark_tabs","books","boom","boot","bouquet","bowing_man","bow_and_arrow","bowing_woman","bowling","boxing_glove","boy","bread","bride_with_veil","bridge_at_night","briefcase","broken_heart","bug","building_construction","bulb","bullettrain_front","bullettrain_side","burrito","bus","business_suit_levitating","busstop","bust_in_silhouette","busts_in_silhouette","butterfly","cactus","cake","calendar","call_me_hand","calling","camel","camera","camera_flash","camping","cancer","candle","candy","canoe","capital_abcd","capricorn","car","card_file_box","card_index","card_index_dividers","carousel_horse","carrot","cat","cat2","cd","chains","champagne","chart","chart_with_downwards_trend","chart_with_upwards_trend","checkered_flag","cheese","cherries","cherry_blossom","chestnut","chicken","children_crossing","chipmunk","chocolate_bar","christmas_tree","church","cinema","circus_tent","city_sunrise","city_sunset","cityscape","cl","clamp","clap","clapper","classical_building","clinking_glasses","clipboard","clock1","clock10","clock1030","clock11","clock1130","clock12","clock1230","clock130","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","closed_book","closed_lock_with_key","closed_umbrella","cloud","cloud_with_lightning","cloud_with_lightning_and_rain","cloud_with_rain","cloud_with_snow","clown_face","clubs","cocktail","coffee","coffin","cold_sweat","comet","computer","computer_mouse","confetti_ball","confounded","confused","congratulations","construction","construction_worker_man","construction_worker_woman","control_knobs","convenience_store","cookie","cool","policeman","copyright","corn","couch_and_lamp","couple","couple_with_heart_woman_man","couple_with_heart_man_man","couple_with_heart_woman_woman","couplekiss_man_man","couplekiss_man_woman","couplekiss_woman_woman","cow","cow2","cowboy_hat_face","crab","crayon","credit_card","crescent_moon","cricket","crocodile","croissant","crossed_fingers","crossed_flags","crossed_swords","crown","cry","crying_cat_face","crystal_ball","cucumber","cupid","curly_loop","currency_exchange","curry","custard","customs","cyclone","dagger","dancer","dancing_women","dancing_men","dango","dark_sunglasses","dart","dash","date","deciduous_tree","deer","department_store","derelict_house","desert","desert_island","desktop_computer","male_detective","diamond_shape_with_a_dot_inside","diamonds","disappointed","disappointed_relieved","dizzy","dizzy_face","do_not_litter","dog","dog2","dollar","dolls","dolphin","door","doughnut","dove","dragon","dragon_face","dress","dromedary_camel","drooling_face","droplet","drum","duck","dvd","e-mail","eagle","ear","ear_of_rice","earth_africa","earth_americas","earth_asia","egg","eggplant","eight_pointed_black_star","eight_spoked_asterisk","electric_plug","elephant","email","envelope_with_arrow","euro","european_castle","european_post_office","evergreen_tree","exclamation","expressionless","eye","eye_speech_bubble","eyeglasses","eyes","face_with_head_bandage","face_with_thermometer","fist_oncoming","factory","fallen_leaf","family_man_woman_boy","family_man_boy","family_man_boy_boy","family_man_girl","family_man_girl_boy","family_man_girl_girl","family_man_man_boy","family_man_man_boy_boy","family_man_man_girl","family_man_man_girl_boy","family_man_man_girl_girl","family_man_woman_boy_boy","family_man_woman_girl","family_man_woman_girl_boy","family_man_woman_girl_girl","family_woman_boy","family_woman_boy_boy","family_woman_girl","family_woman_girl_boy","family_woman_girl_girl","family_woman_woman_boy","family_woman_woman_boy_boy","family_woman_woman_girl","family_woman_woman_girl_boy","family_woman_woman_girl_girl","fast_forward","fax","fearful","feet","female_detective","ferris_wheel","ferry","field_hockey","file_cabinet","file_folder","film_projector","film_strip","fire","fire_engine","fireworks","first_quarter_moon","first_quarter_moon_with_face","fish","fish_cake","fishing_pole_and_fish","fist_raised","fist_left","fist_right","flashlight","fleur_de_lis","flight_arrival","flight_departure","floppy_disk","flower_playing_cards","flushed","fog","foggy","football","footprints","fork_and_knife","fountain","fountain_pen","four_leaf_clover","fox_face","framed_picture","free","fried_egg","fried_shrimp","fries","frog","frowning","frowning_face","frowning_man","frowning_woman","middle_finger","fuelpump","full_moon","full_moon_with_face","funeral_urn","game_die","gear","gem","gemini","gift","gift_heart","girl","globe_with_meridians","goal_net","goat","golf","golfing_man","golfing_woman","gorilla","grapes","green_apple","green_book","green_heart","green_salad","grey_exclamation","grey_question","grimacing","grin","grinning","guardsman","guardswoman","guitar","gun","haircut_woman","haircut_man","hamburger","hammer","hammer_and_pick","hammer_and_wrench","hamster","hand","handbag","handshake","hankey","hatched_chick","hatching_chick","headphones","hear_no_evil","heart","heart_decoration","heart_eyes","heart_eyes_cat","heartbeat","heartpulse","hearts","heavy_check_mark","heavy_division_sign","heavy_dollar_sign","heavy_heart_exclamation","heavy_minus_sign","heavy_multiplication_x","heavy_plus_sign","helicopter","herb","hibiscus","high_brightness","high_heel","hocho","hole","honey_pot","horse","horse_racing","hospital","hot_pepper","hotdog","hotel","hotsprings","hourglass","hourglass_flowing_sand","house","house_with_garden","houses","hugs","hushed","ice_cream","ice_hockey","ice_skate","icecream","id","ideograph_advantage","imp","inbox_tray","incoming_envelope","tipping_hand_woman","information_source","innocent","interrobang","iphone","izakaya_lantern","jack_o_lantern","japan","japanese_castle","japanese_goblin","japanese_ogre","jeans","joy","joy_cat","joystick","kaaba","keyboard","keycap_ten","kick_scooter","kimono","kiss","kissing","kissing_cat","kissing_closed_eyes","kissing_heart","kissing_smiling_eyes","kiwi_fruit","koala","koko","label","large_blue_circle","large_blue_diamond","large_orange_diamond","last_quarter_moon","last_quarter_moon_with_face","latin_cross","laughing","leaves","ledger","left_luggage","left_right_arrow","leftwards_arrow_with_hook","lemon","leo","leopard","level_slider","libra","light_rail","lion","lips","lipstick","lizard","lock","lock_with_ink_pen","lollipop","loop","loud_sound","loudspeaker","love_hotel","love_letter","low_brightness","lying_face","mag","mag_right","mahjong","mailbox","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","man","man_artist","man_astronaut","man_cartwheeling","man_cook","man_dancing","man_facepalming","man_factory_worker","man_farmer","man_firefighter","man_health_worker","man_in_tuxedo","man_judge","man_juggling","man_mechanic","man_office_worker","man_pilot","man_playing_handball","man_playing_water_polo","man_scientist","man_shrugging","man_singer","man_student","man_teacher","man_technologist","man_with_gua_pi_mao","man_with_turban","tangerine","mans_shoe","mantelpiece_clock","maple_leaf","martial_arts_uniform","mask","massage_woman","massage_man","meat_on_bone","medal_military","medal_sports","mega","melon","memo","men_wrestling","menorah","mens","metal","metro","microphone","microscope","milk_glass","milky_way","minibus","minidisc","mobile_phone_off","money_mouth_face","money_with_wings","moneybag","monkey","monkey_face","monorail","moon","mortar_board","mosque","motor_boat","motor_scooter","motorcycle","motorway","mount_fuji","mountain","mountain_biking_man","mountain_biking_woman","mountain_cableway","mountain_railway","mountain_snow","mouse","mouse2","movie_camera","moyai","mrs_claus","muscle","mushroom","musical_keyboard","musical_note","musical_score","mute","nail_care","name_badge","national_park","nauseated_face","necktie","negative_squared_cross_mark","nerd_face","neutral_face","new","new_moon","new_moon_with_face","newspaper","newspaper_roll","next_track_button","ng","no_good_man","no_good_woman","night_with_stars","no_bell","no_bicycles","no_entry","no_entry_sign","no_mobile_phones","no_mouth","no_pedestrians","no_smoking","non-potable_water","nose","notebook","notebook_with_decorative_cover","notes","nut_and_bolt","o","o2","ocean","octopus","oden","office","oil_drum","ok","ok_hand","ok_man","ok_woman","old_key","older_man","older_woman","om","on","oncoming_automobile","oncoming_bus","oncoming_police_car","oncoming_taxi","open_file_folder","open_hands","open_mouth","open_umbrella","ophiuchus","orange_book","orthodox_cross","outbox_tray","owl","ox","package","page_facing_up","page_with_curl","pager","paintbrush","palm_tree","pancakes","panda_face","paperclip","paperclips","parasol_on_ground","parking","part_alternation_mark","partly_sunny","passenger_ship","passport_control","pause_button","peace_symbol","peach","peanuts","pear","pen","pencil2","penguin","pensive","performing_arts","persevere","person_fencing","pouting_woman","phone","pick","pig","pig2","pig_nose","pill","pineapple","ping_pong","pisces","pizza","place_of_worship","plate_with_cutlery","play_or_pause_button","point_down","point_left","point_right","point_up","point_up_2","police_car","policewoman","poodle","popcorn","post_office","postal_horn","postbox","potable_water","potato","pouch","poultry_leg","pound","rage","pouting_cat","pouting_man","pray","prayer_beads","pregnant_woman","previous_track_button","prince","princess","printer","purple_heart","purse","pushpin","put_litter_in_its_place","question","rabbit","rabbit2","racehorse","racing_car","radio","radio_button","radioactive","railway_car","railway_track","rainbow","rainbow_flag","raised_back_of_hand","raised_hand_with_fingers_splayed","raised_hands","raising_hand_woman","raising_hand_man","ram","ramen","rat","record_button","recycle","red_circle","registered","relaxed","relieved","reminder_ribbon","repeat_one","rescue_worker_helmet","restroom","revolving_hearts","rewind","rhinoceros","ribbon","rice","rice_ball","rice_cracker","rice_scene","right_anger_bubble","ring","robot","rocket","rofl","roll_eyes","roller_coaster","rooster","rose","rosette","rotating_light","round_pushpin","rowing_man","rowing_woman","rugby_football","running_man","running_shirt_with_sash","running_woman","sa","sagittarius","sake","sandal","santa","satellite","saxophone","school","school_satchel","scissors","scorpion","scorpius","scream","scream_cat","scroll","seat","secret","see_no_evil","seedling","selfie","shallow_pan_of_food","shamrock","shark","shaved_ice","sheep","shell","shield","shinto_shrine","ship","shirt","shopping","shopping_cart","shower","shrimp","signal_strength","six_pointed_star","ski","skier","skull","skull_and_crossbones","sleeping","sleeping_bed","sleepy","slightly_frowning_face","slightly_smiling_face","slot_machine","small_airplane","small_blue_diamond","small_orange_diamond","small_red_triangle","small_red_triangle_down","smile","smile_cat","smiley","smiley_cat","smiling_imp","smirk","smirk_cat","smoking","snail","snake","sneezing_face","snowboarder","snowflake","snowman","snowman_with_snow","sob","soccer","soon","sos","sound","space_invader","spades","spaghetti","sparkle","sparkler","sparkles","sparkling_heart","speak_no_evil","speaker","speaking_head","speech_balloon","speedboat","spider","spider_web","spiral_calendar","spiral_notepad","spoon","squid","stadium","star","star2","star_and_crescent","star_of_david","stars","station","statue_of_liberty","steam_locomotive","stew","stop_button","stop_sign","stopwatch","straight_ruler","strawberry","stuck_out_tongue","stuck_out_tongue_closed_eyes","stuck_out_tongue_winking_eye","studio_microphone","stuffed_flatbread","sun_behind_large_cloud","sun_behind_rain_cloud","sun_behind_small_cloud","sun_with_face","sunflower","sunglasses","sunny","sunrise","sunrise_over_mountains","surfing_man","surfing_woman","sushi","suspension_railway","sweat","sweat_drops","sweat_smile","sweet_potato","swimming_man","swimming_woman","symbols","synagogue","syringe","taco","tada","tanabata_tree","taurus","taxi","tea","telephone_receiver","telescope","tennis","tent","thermometer","thinking","thought_balloon","ticket","tickets","tiger","tiger2","timer_clock","tipping_hand_man","tired_face","tm","toilet","tokyo_tower","tomato","tongue","top","tophat","tornado","trackball","tractor","traffic_light","train","train2","tram","triangular_flag_on_post","triangular_ruler","trident","triumph","trolleybus","trophy","tropical_drink","tropical_fish","truck","trumpet","tulip","tumbler_glass","turkey","turtle","tv","twisted_rightwards_arrows","two_hearts","two_men_holding_hands","two_women_holding_hands","u5272","u5408","u55b6","u6307","u6708","u6709","u6e80","u7121","u7533","u7981","u7a7a","umbrella","unamused","underage","unicorn","unlock","up","upside_down_face","v","vertical_traffic_light","vhs","vibration_mode","video_camera","video_game","violin","virgo","volcano","volleyball","vs","vulcan_salute","walking_man","walking_woman","waning_crescent_moon","waning_gibbous_moon","warning","wastebasket","watch","water_buffalo","watermelon","wave","wavy_dash","waxing_crescent_moon","wc","weary","wedding","weight_lifting_man","weight_lifting_woman","whale","whale2","wheel_of_dharma","wheelchair","white_check_mark","white_circle","white_flag","white_flower","white_large_square","white_medium_small_square","white_medium_square","white_small_square","white_square_button","wilted_flower","wind_chime","wind_face","wine_glass","wink","wolf","woman","woman_artist","woman_astronaut","woman_cartwheeling","woman_cook","woman_facepalming","woman_factory_worker","woman_farmer","woman_firefighter","woman_health_worker","woman_judge","woman_juggling","woman_mechanic","woman_office_worker","woman_pilot","woman_playing_handball","woman_playing_water_polo","woman_scientist","woman_shrugging","woman_singer","woman_student","woman_teacher","woman_technologist","woman_with_turban","womans_clothes","womans_hat","women_wrestling","womens","world_map","worried","wrench","writing_hand","yellow_heart","yen","yin_yang","yum","zap","zipper_mouth_face","zzz","octocat","Converter","converterOptions","gOpt","langExtensions","outputModifiers","setConvFlavor","parsed","raw","format","_parseExtension","legacyExtensionLoading","validExt","listen","_dispatch","evtName","ei","nText","makeHtml","rsp","gHtmlBlocks","gHtmlMdBlocks","gHtmlSpans","gUrls","gTitles","gDimensions","gListLevel","hashLinkCounts","converter","rgx","makeMarkdown","makeMd","src","HTMLParser","window","document","doc","createElement","innerHTML","preList","pres","querySelectorAll","presPH","childElementCount","firstChild","tagName","content","trim","language","getAttribute","classes","className","split","c","matches","outerHTML","setAttribute","substitutePreCodeTags","nodes","clean","node","n","childNodes","child","nodeType","nodeValue","removeChild","mdDoc","addExtension","useExtension","extensionName","splice","ii","output","getMetadata","getMetadataFormat","_setMetadataPair","_setMetadataFormat","_setMetadataRaw","writeAnchorTag","linkText","linkId","url","m5","m6","title","result","st","escape","mentions","username","simpleURLRegex","simpleURLRegex2","delimUrlRegex","simpleMailRegex","delimMailRegex","bq","codeblock","nextChar","meta","doctype","doctypeParsed","charset","lang","leadingText","numSpaces","emojiCode","delim","blockText","repFunc","blockTags","inside","rgx1","patLeft","patRight","opTagPos","subTexts","newSubText1","concat","hashHTMLSpan","html","repText","limit","num","$1","isNaN","parseInt","setextRegexH1","setextRegexH2","atxStyle","spanGamut","hID","headerId","hashBlock","matchFound","hLevel","customizedHeaderId","prefix","hText","span","header","writeImageTag","altText","width","height","gDims","lead","processListItems","listStr","trimTrailing","isParagraphed","m4","taskbtn","checked","item","bulletStyle","otp","wm2","styleStartNumber","list","listType","res","parseConsecutiveLists","style","olRgx","ulRgx","counterRxg","parseCL","wholematch","parseMetadataContents","grafs","grafsOut","grafsOutIt","codeFlag","$2","re","replaceFunc","blankLines","parseTable","rawTable","tableLines","sLine","cell","rawHeaders","map","rawStyles","rawCells","headers","styles","cells","shift","tableHeaderId","row","buildTable","tb","tblLgn","charCodeToReplace","fromCharCode","hasChildNodes","children","childrenLength","innerTxt","headerLevel","headerMark","hasAttribute","listItems","listItemsLenght","listNum","listItemTxt","childrenLenght","spansOnly","data","tableArray","headings","rows","headContent","allign","cols","getElementsByTagName","cellContent","cellSpacesCount","strLen","define","amd","module","exports"],"mappings":"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"}
\ No newline at end of file
diff --git a/showdown/package-lock.json b/showdown/package-lock.json
new file mode 100644
index 00000000..57aa3bb7
--- /dev/null
+++ b/showdown/package-lock.json
@@ -0,0 +1,10078 @@
+{
+ "name": "showdown",
+ "version": "2.0.2",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "showdown",
+ "version": "2.0.2",
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^9.0.0"
+ },
+ "bin": {
+ "showdown": "bin/showdown.js"
+ },
+ "devDependencies": {
+ "chai": "*",
+ "chai-match": "*",
+ "grunt": "^1.4.1",
+ "grunt-contrib-clean": "^2.0.0",
+ "grunt-contrib-concat": "^2.0.0",
+ "grunt-contrib-jshint": "^3.1.0",
+ "grunt-contrib-uglify": "^5.0.1",
+ "grunt-conventional-changelog": "^6.1.0",
+ "grunt-conventional-github-releaser": "^1.0.0",
+ "grunt-endline": "^0.7.0",
+ "grunt-eslint": "^24.0.0",
+ "grunt-simple-mocha": "^0.4.0",
+ "jsdom": "^19.0.0",
+ "load-grunt-tasks": "^5.1.0",
+ "performance-now": "^2.1.0",
+ "quiet-grunt": "^0.2.0",
+ "semver": "^7.3.0",
+ "semver-sort": "^0.0.4",
+ "sinon": "*",
+ "source-map-support": "^0.5.20"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz",
+ "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.3.1",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+ "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.0.tgz",
+ "integrity": "sha512-M8vapsv9qQupMdzrVzkn5rb9jG7aUTEPAZdMtME2PuBaefksFZVE2C1g4LBRTkF/k3nRDNbDc5tp5NFC1PEYxA==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "node_modules/@sinonjs/samsam": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
+ "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.6.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
+ "dev": true
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+ "dev": true
+ },
+ "node_modules/@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
+ "dev": true
+ },
+ "node_modules/abab": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
+ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+ "dev": true
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ }
+ },
+ "node_modules/acorn-globals/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/array-differ": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
+ "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+ "dev": true
+ },
+ "node_modules/array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/arrify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browser-process-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
+ "dev": true
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+ "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
+ "dev": true,
+ "dependencies": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chai-match": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chai-match/-/chai-match-1.1.1.tgz",
+ "integrity": "sha1-OfsKLmt8j2OG3P6tSNFIqRX6bEY=",
+ "dev": true
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cli": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
+ "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
+ "dev": true,
+ "dependencies": {
+ "exit": "0.1.2",
+ "glob": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=0.2.5"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz",
+ "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==",
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
+ "node_modules/compare-func": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz",
+ "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==",
+ "dev": true,
+ "dependencies": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^3.0.0"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "dependencies": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "node_modules/conventional-changelog": {
+ "version": "1.1.24",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
+ "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
+ "dev": true,
+ "dependencies": {
+ "conventional-changelog-angular": "^1.6.6",
+ "conventional-changelog-atom": "^0.2.8",
+ "conventional-changelog-codemirror": "^0.3.8",
+ "conventional-changelog-core": "^2.0.11",
+ "conventional-changelog-ember": "^0.3.12",
+ "conventional-changelog-eslint": "^1.0.9",
+ "conventional-changelog-express": "^0.3.6",
+ "conventional-changelog-jquery": "^0.1.0",
+ "conventional-changelog-jscs": "^0.1.0",
+ "conventional-changelog-jshint": "^0.3.8",
+ "conventional-changelog-preset-loader": "^1.1.8"
+ }
+ },
+ "node_modules/conventional-changelog-angular": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
+ "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
+ "dev": true,
+ "dependencies": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "node_modules/conventional-changelog-atom": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
+ "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
+ "dev": true,
+ "dependencies": {
+ "q": "^1.5.1"
+ }
+ },
+ "node_modules/conventional-changelog-codemirror": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
+ "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
+ "dev": true,
+ "dependencies": {
+ "q": "^1.5.1"
+ }
+ },
+ "node_modules/conventional-changelog-core": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
+ "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+ "dev": true,
+ "dependencies": {
+ "conventional-changelog-writer": "^3.0.9",
+ "conventional-commits-parser": "^2.1.7",
+ "dateformat": "^3.0.0",
+ "get-pkg-repo": "^1.0.0",
+ "git-raw-commits": "^1.3.6",
+ "git-remote-origin-url": "^2.0.0",
+ "git-semver-tags": "^1.3.6",
+ "lodash": "^4.2.1",
+ "normalize-package-data": "^2.3.5",
+ "q": "^1.5.1",
+ "read-pkg": "^1.1.0",
+ "read-pkg-up": "^1.0.1",
+ "through2": "^2.0.0"
+ }
+ },
+ "node_modules/conventional-changelog-ember": {
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
+ "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
+ "dev": true,
+ "dependencies": {
+ "q": "^1.5.1"
+ }
+ },
+ "node_modules/conventional-changelog-eslint": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
+ "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
+ "dev": true,
+ "dependencies": {
+ "q": "^1.5.1"
+ }
+ },
+ "node_modules/conventional-changelog-express": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
+ "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
+ "dev": true,
+ "dependencies": {
+ "q": "^1.5.1"
+ }
+ },
+ "node_modules/conventional-changelog-jquery": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
+ "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
+ "dev": true,
+ "dependencies": {
+ "q": "^1.4.1"
+ }
+ },
+ "node_modules/conventional-changelog-jscs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
+ "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+ "dev": true,
+ "dependencies": {
+ "q": "^1.4.1"
+ }
+ },
+ "node_modules/conventional-changelog-jshint": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
+ "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+ "dev": true,
+ "dependencies": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "node_modules/conventional-changelog-preset-loader": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
+ "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
+ "dev": true
+ },
+ "node_modules/conventional-changelog-writer": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
+ "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
+ "dev": true,
+ "dependencies": {
+ "compare-func": "^1.3.1",
+ "conventional-commits-filter": "^1.1.6",
+ "dateformat": "^3.0.0",
+ "handlebars": "^4.0.2",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "semver": "^5.5.0",
+ "split": "^1.0.0",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "conventional-changelog-writer": "cli.js"
+ }
+ },
+ "node_modules/conventional-changelog-writer/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/conventional-commits-filter": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
+ "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+ "dev": true,
+ "dependencies": {
+ "is-subset": "^0.1.1",
+ "modify-values": "^1.0.0"
+ }
+ },
+ "node_modules/conventional-commits-parser": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
+ "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+ "dev": true,
+ "dependencies": {
+ "is-text-path": "^1.0.0",
+ "JSONStream": "^1.0.4",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0",
+ "trim-off-newlines": "^1.0.0"
+ },
+ "bin": {
+ "conventional-commits-parser": "cli.js"
+ }
+ },
+ "node_modules/conventional-github-releaser": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-1.1.13.tgz",
+ "integrity": "sha1-C+ezp8eGfoiL5SZHWlkP9ZMDUXw=",
+ "dev": true,
+ "dependencies": {
+ "conventional-changelog": "^1.1.0",
+ "dateformat": "^1.0.11",
+ "git-semver-tags": "^1.0.0",
+ "github": "^0.2.4",
+ "lodash.merge": "^4.0.2",
+ "meow": "^3.3.0",
+ "object-assign": "^4.0.1",
+ "q": "^1.4.1",
+ "semver": "^5.0.1",
+ "semver-regex": "^1.0.0",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "conventional-github-releaser": "src/cli.js"
+ },
+ "engines": {
+ "node": ">=4.2.0",
+ "npm": ">=2.1.9"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/dateformat": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "dev": true,
+ "dependencies": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
+ },
+ "bin": {
+ "dateformat": "bin/cli.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "dependencies": {
+ "repeating": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "dependencies": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "dependencies": {
+ "get-stdin": "^4.0.1"
+ },
+ "bin": {
+ "strip-indent": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/conventional-github-releaser/node_modules/trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssom": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
+ "dev": true
+ },
+ "node_modules/cssstyle": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "dev": true,
+ "dependencies": {
+ "cssom": "~0.3.6"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cssstyle/node_modules/cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true
+ },
+ "node_modules/currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "dependencies": {
+ "array-find-index": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/data-urls": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
+ "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
+ "dev": true,
+ "dependencies": {
+ "abab": "^2.0.3",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "node_modules/dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "dependencies": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
+ "dev": true
+ },
+ "node_modules/deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/dom-serializer/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "node_modules/domexception": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
+ "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
+ "dev": true,
+ "dependencies": {
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/domhandler": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
+ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "dependencies": {
+ "is-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/entities": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
+ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
+ "dev": true
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+ "dev": true,
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/escodegen/node_modules/levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz",
+ "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.2.0",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
+ "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.7.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
+ "dev": true
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "node_modules/figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/figures/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "dependencies": {
+ "glob": "~5.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/findup-sync/node_modules/glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true
+ },
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/get-pkg-repo": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
+ "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "meow": "^3.3.0",
+ "normalize-package-data": "^2.3.0",
+ "parse-github-repo-url": "^1.3.0",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "get-pkg-repo": "cli.js"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "dependencies": {
+ "repeating": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "dependencies": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "dependencies": {
+ "get-stdin": "^4.0.1"
+ },
+ "bin": {
+ "strip-indent": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/getobject": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
+ "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/git-raw-commits": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
+ "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
+ "dev": true,
+ "dependencies": {
+ "dargs": "^4.0.1",
+ "lodash.template": "^4.0.2",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0"
+ },
+ "bin": {
+ "git-raw-commits": "cli.js"
+ }
+ },
+ "node_modules/git-remote-origin-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+ "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+ "dev": true,
+ "dependencies": {
+ "gitconfiglocal": "^1.0.0",
+ "pify": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/git-semver-tags": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
+ "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
+ "dev": true,
+ "dependencies": {
+ "meow": "^4.0.0",
+ "semver": "^5.5.0"
+ },
+ "bin": {
+ "git-semver-tags": "cli.js"
+ }
+ },
+ "node_modules/git-semver-tags/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/gitconfiglocal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+ "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+ "dev": true,
+ "dependencies": {
+ "ini": "^1.3.2"
+ }
+ },
+ "node_modules/github": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/github/-/github-0.2.4.tgz",
+ "integrity": "sha1-JPp/DhP6EblGr5ETTFGYKpHOU4s=",
+ "deprecated": "'github' has been renamed to '@octokit/rest' (https://git.io/vNB11)",
+ "dev": true,
+ "dependencies": {
+ "mime": "^1.2.11"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "dependencies": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/global-prefix/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.12.1",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
+ "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==",
+ "dev": true
+ },
+ "node_modules/growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.x"
+ }
+ },
+ "node_modules/grunt": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.4.1.tgz",
+ "integrity": "sha512-ZXIYXTsAVrA7sM+jZxjQdrBOAg7DyMUplOMhTaspMRExei+fD0BTwdWXnn0W5SXqhb/Q/nlkzXclSi3IH55PIA==",
+ "dev": true,
+ "dependencies": {
+ "dateformat": "~3.0.3",
+ "eventemitter2": "~0.4.13",
+ "exit": "~0.1.2",
+ "findup-sync": "~0.3.0",
+ "glob": "~7.1.6",
+ "grunt-cli": "~1.4.2",
+ "grunt-known-options": "~2.0.0",
+ "grunt-legacy-log": "~3.0.0",
+ "grunt-legacy-util": "~2.0.1",
+ "iconv-lite": "~0.4.13",
+ "js-yaml": "~3.14.0",
+ "minimatch": "~3.0.4",
+ "mkdirp": "~1.0.4",
+ "nopt": "~3.0.6",
+ "rimraf": "~3.0.2"
+ },
+ "bin": {
+ "grunt": "bin/grunt"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/grunt-cli": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz",
+ "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==",
+ "dev": true,
+ "dependencies": {
+ "grunt-known-options": "~2.0.0",
+ "interpret": "~1.1.0",
+ "liftup": "~3.0.1",
+ "nopt": "~4.0.1",
+ "v8flags": "~3.2.0"
+ },
+ "bin": {
+ "grunt": "bin/grunt"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/grunt-cli/node_modules/nopt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/grunt-contrib-clean": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.0.tgz",
+ "integrity": "sha512-g5ZD3ORk6gMa5ugZosLDQl3dZO7cI3R14U75hTM+dVLVxdMNJCPVmwf9OUt4v4eWgpKKWWoVK9DZc1amJp4nQw==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.6.1",
+ "rimraf": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "grunt": ">=0.4.5"
+ }
+ },
+ "node_modules/grunt-contrib-clean/node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/grunt-contrib-concat": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.0.0.tgz",
+ "integrity": "sha512-/cfWwsGiprVTOl7c2bZwMdQ8hIf3e1f4szm1i7qhY9hOnR/X2KL+Xe7dynNweTYHa6aWPZx2B5GPsUpxAXNCaA==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "source-map": "^0.5.3"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ },
+ "peerDependencies": {
+ "grunt": ">=1.4.1"
+ }
+ },
+ "node_modules/grunt-contrib-jshint": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.2.0.tgz",
+ "integrity": "sha512-pcXWCSZWfoMSvcV4BwH21TUtLtcX0Ms8IGuOPIcLeXK3fud9KclY7iqMKY94jFx8TxZzh028YYtpR+io8DiEaQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "~4.1.2",
+ "hooker": "^0.2.3",
+ "jshint": "~2.13.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/grunt-contrib-uglify": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-5.0.1.tgz",
+ "integrity": "sha512-T/aXZ4WIpAtoswZqb6HROKg7uq9QbKwl+lUuOwK4eoFj3tFv9/a/oMyd3/qvetV29Pbf8P1YYda1gDwZppr60A==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "maxmin": "^2.1.0",
+ "uglify-js": "^3.13.3",
+ "uri-path": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/grunt-contrib-uglify/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/grunt-contrib-uglify/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/grunt-contrib-uglify/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/grunt-contrib-uglify/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/grunt-contrib-uglify/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/grunt-contrib-uglify/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/grunt-contrib-uglify/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/grunt-conventional-changelog": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-conventional-changelog/-/grunt-conventional-changelog-6.1.0.tgz",
+ "integrity": "sha1-mL1b37Kw3mMWwFx8b6ykziTdFDU=",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.0",
+ "concat-stream": "^1.5.0",
+ "conventional-changelog": "^1.1.0",
+ "plur": "^2.0.0",
+ "q": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-changelog/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-changelog/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-changelog/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-changelog/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/grunt-conventional-changelog/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-changelog/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/grunt-conventional-github-releaser": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-conventional-github-releaser/-/grunt-conventional-github-releaser-1.0.0.tgz",
+ "integrity": "sha1-7Tbg9V1orq6FrxSEBsPXAYJnuHU=",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.1.0",
+ "conventional-github-releaser": "^1.1.0",
+ "plur": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-github-releaser/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-github-releaser/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-github-releaser/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-github-releaser/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/grunt-conventional-github-releaser/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-conventional-github-releaser/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/grunt-endline": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/grunt-endline/-/grunt-endline-0.7.0.tgz",
+ "integrity": "sha512-NP2ABzCRBpuNfKgteVSEOR26zsph0oEFPVvEmSldkvxBHeSpUPOpIVxvrDnRHyKoV9hBuszGvVjHovjnG3aUBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/grunt-eslint": {
+ "version": "24.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz",
+ "integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "eslint": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ },
+ "peerDependencies": {
+ "grunt": ">=1"
+ }
+ },
+ "node_modules/grunt-known-options": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz",
+ "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/grunt-legacy-log": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz",
+ "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==",
+ "dev": true,
+ "dependencies": {
+ "colors": "~1.1.2",
+ "grunt-legacy-log-utils": "~2.1.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.19"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/grunt-legacy-log-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz",
+ "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "~4.1.0",
+ "lodash": "~4.17.19"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/grunt-legacy-util": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz",
+ "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==",
+ "dev": true,
+ "dependencies": {
+ "async": "~3.2.0",
+ "exit": "~0.1.2",
+ "getobject": "~1.0.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.21",
+ "underscore.string": "~3.3.5",
+ "which": "~2.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/grunt-legacy-util/node_modules/async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
+ "dev": true
+ },
+ "node_modules/grunt-simple-mocha": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/grunt-simple-mocha/-/grunt-simple-mocha-0.4.1.tgz",
+ "integrity": "sha1-V5RJJJ6vCoGHj6cvPtq1FF1F/Xc=",
+ "dev": true,
+ "dependencies": {
+ "mocha": "*"
+ },
+ "bin": {
+ "grunt-simple-mocha": "bin/grunt-simple-mocha"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true,
+ "dependencies": {
+ "duplexer": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/handlebars/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-ansi/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "dependencies": {
+ "parse-passwd": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-encoding": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
+ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "1",
+ "domhandler": "2.3",
+ "domutils": "1.5",
+ "entities": "1.0",
+ "readable-stream": "1.1"
+ }
+ },
+ "node_modules/htmlparser2/node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "node_modules/htmlparser2/node_modules/readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/htmlparser2/node_modules/string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "dev": true,
+ "dependencies": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "node_modules/interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "node_modules/irregular-plurals": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+ "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "dependencies": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true
+ },
+ "node_modules/is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "dependencies": {
+ "is-unc-path": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
+ "node_modules/is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "dev": true,
+ "dependencies": {
+ "text-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "dependencies": {
+ "unc-path-regex": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "node_modules/is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsdom": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
+ "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+ "dev": true,
+ "dependencies": {
+ "abab": "^2.0.5",
+ "acorn": "^8.5.0",
+ "acorn-globals": "^6.0.0",
+ "cssom": "^0.5.0",
+ "cssstyle": "^2.3.0",
+ "data-urls": "^3.0.1",
+ "decimal.js": "^10.3.1",
+ "domexception": "^4.0.0",
+ "escodegen": "^2.0.0",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^3.0.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.0",
+ "parse5": "6.0.1",
+ "saxes": "^5.0.1",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^4.0.0",
+ "w3c-hr-time": "^1.0.2",
+ "w3c-xmlserializer": "^3.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^2.0.0",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^10.0.0",
+ "ws": "^8.2.3",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "canvas": "^2.5.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jshint": {
+ "version": "2.13.4",
+ "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.4.tgz",
+ "integrity": "sha512-HO3bosL84b2qWqI0q+kpT/OpRJwo0R4ivgmxaO848+bo10rc50SkPnrtwSFXttW0ym4np8jbJvLwk5NziB7jIw==",
+ "dev": true,
+ "dependencies": {
+ "cli": "~1.0.0",
+ "console-browserify": "1.1.x",
+ "exit": "0.1.x",
+ "htmlparser2": "3.8.x",
+ "lodash": "~4.17.21",
+ "minimatch": "~3.0.2",
+ "strip-json-comments": "1.0.x"
+ },
+ "bin": {
+ "jshint": "bin/jshint"
+ }
+ },
+ "node_modules/jshint/node_modules/strip-json-comments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
+ "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
+ "dev": true,
+ "bin": {
+ "strip-json-comments": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "node_modules/jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ]
+ },
+ "node_modules/JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "dev": true
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/liftup": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
+ "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==",
+ "dev": true,
+ "dependencies": {
+ "extend": "^3.0.2",
+ "findup-sync": "^4.0.0",
+ "fined": "^1.2.0",
+ "flagged-respawn": "^1.0.1",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.1",
+ "rechoir": "^0.7.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/liftup/node_modules/findup-sync": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
+ "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
+ "dev": true,
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^4.0.2",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/load-grunt-tasks": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-5.1.0.tgz",
+ "integrity": "sha512-oNj0Jlka1TsfDe+9He0kcA1cRln+TMoTsEByW7ij6kyktNLxBKJtslCFEvFrLC2Dj0S19IWJh3fOCIjLby2Xrg==",
+ "dev": true,
+ "dependencies": {
+ "arrify": "^2.0.1",
+ "multimatch": "^4.0.0",
+ "pkg-up": "^3.1.0",
+ "resolve-pkg": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "peerDependencies": {
+ "grunt": ">=1"
+ }
+ },
+ "node_modules/load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.template": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+ "dev": true,
+ "dependencies": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "node_modules/lodash.templatesettings": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+ "dev": true,
+ "dependencies": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "dependencies": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz",
+ "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==",
+ "dev": true,
+ "dependencies": {
+ "get-func-name": "^2.0.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/maxmin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz",
+ "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^1.0.0",
+ "figures": "^1.0.1",
+ "gzip-size": "^3.0.0",
+ "pretty-bytes": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/maxmin/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/maxmin/node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/meow": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "dev": true,
+ "dependencies": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist": "^1.1.3",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "dependencies": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/meow/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.51.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
+ "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "node_modules/minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/minimist-options/node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz",
+ "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==",
+ "dev": true,
+ "dependencies": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.3",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "3.0.4",
+ "ms": "2.1.3",
+ "nanoid": "3.2.0",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "which": "2.0.2",
+ "workerpool": "6.2.0",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mochajs"
+ }
+ },
+ "node_modules/mocha/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/mocha/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/modify-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/multimatch": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
+ "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimatch": "^3.0.3",
+ "array-differ": "^3.0.0",
+ "array-union": "^2.1.0",
+ "arrify": "^2.0.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
+ "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/nise": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
+ "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.8.3",
+ "@sinonjs/fake-timers": ">=5",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
+ "node_modules/nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-package-data/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nwsapi": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+ "dev": true
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "dependencies": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "dependencies": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "dependencies": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/parse-github-repo-url": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+ "dev": true
+ },
+ "node_modules/parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "dependencies": {
+ "path-root-regex": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/path-to-regexp/node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pkg-up": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+ "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-up/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-up/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-up/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-up/node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-up/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/plur": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+ "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=",
+ "dev": true,
+ "dependencies": {
+ "irregular-plurals": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pretty-bytes": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
+ "dev": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "node_modules/psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
+ }
+ },
+ "node_modules/quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/quiet-grunt": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/quiet-grunt/-/quiet-grunt-0.2.3.tgz",
+ "integrity": "sha1-8JCJeal9JCrC2NbuvP5Vj1nAYYQ=",
+ "dev": true
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "dependencies": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.9.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "dependencies": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "dependencies": {
+ "is-finite": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz",
+ "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-pkg/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "node_modules/saxes": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "dev": true,
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
+ "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/semver-sort": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/semver-sort/-/semver-sort-0.0.4.tgz",
+ "integrity": "sha1-NP293GprK0FhOYw8TbpWJDv+qos=",
+ "dev": true,
+ "dependencies": {
+ "semver": "^5.0.3",
+ "semver-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/semver-sort/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/sinon": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz",
+ "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^1.8.3",
+ "@sinonjs/fake-timers": "^9.0.0",
+ "@sinonjs/samsam": "^6.1.1",
+ "diff": "^5.0.0",
+ "nise": "^5.1.1",
+ "supports-color": "^7.2.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/sinon"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "dev": true
+ },
+ "node_modules/split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "dev": true,
+ "dependencies": {
+ "through": "2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/split2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "dev": true,
+ "dependencies": {
+ "through2": "^2.0.2"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "dependencies": {
+ "is-utf8": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true
+ },
+ "node_modules/text-extensions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
+ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+ "dev": true,
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/trim-off-newlines": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz",
+ "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "node_modules/uglify-js": {
+ "version": "3.15.2",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz",
+ "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==",
+ "dev": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/underscore.string": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz",
+ "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "^1.1.1",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/underscore.string/node_modules/sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true
+ },
+ "node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/uri-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz",
+ "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "node_modules/v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+ "dev": true,
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/w3c-hr-time": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "dev": true,
+ "dependencies": {
+ "browser-process-hrtime": "^1.0.0"
+ }
+ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+ "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "dev": true,
+ "dependencies": {
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+ "dev": true,
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
+ "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "node_modules/workerpool": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
+ "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/ws": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
+ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yargs-unparser/node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@eslint/eslintrc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz",
+ "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.3.1",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ }
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+ "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.0.tgz",
+ "integrity": "sha512-M8vapsv9qQupMdzrVzkn5rb9jG7aUTEPAZdMtME2PuBaefksFZVE2C1g4LBRTkF/k3nRDNbDc5tp5NFC1PEYxA==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
+ "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.6.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
+ "dev": true
+ },
+ "@tootallnate/once": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+ "dev": true
+ },
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
+ "dev": true
+ },
+ "abab": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
+ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "dev": true
+ },
+ "acorn-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-differ": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
+ "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "arrify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browser-process-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
+ "dev": true
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+ "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
+ "dev": true,
+ "requires": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
+ }
+ },
+ "chai-match": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chai-match/-/chai-match-1.1.1.tgz",
+ "integrity": "sha1-OfsKLmt8j2OG3P6tSNFIqRX6bEY=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "cli": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
+ "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
+ "dev": true,
+ "requires": {
+ "exit": "0.1.2",
+ "glob": "^7.1.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz",
+ "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw=="
+ },
+ "compare-func": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz",
+ "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==",
+ "dev": true,
+ "requires": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^3.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "conventional-changelog": {
+ "version": "1.1.24",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
+ "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-angular": "^1.6.6",
+ "conventional-changelog-atom": "^0.2.8",
+ "conventional-changelog-codemirror": "^0.3.8",
+ "conventional-changelog-core": "^2.0.11",
+ "conventional-changelog-ember": "^0.3.12",
+ "conventional-changelog-eslint": "^1.0.9",
+ "conventional-changelog-express": "^0.3.6",
+ "conventional-changelog-jquery": "^0.1.0",
+ "conventional-changelog-jscs": "^0.1.0",
+ "conventional-changelog-jshint": "^0.3.8",
+ "conventional-changelog-preset-loader": "^1.1.8"
+ }
+ },
+ "conventional-changelog-angular": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
+ "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-atom": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
+ "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-codemirror": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
+ "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-core": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
+ "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-writer": "^3.0.9",
+ "conventional-commits-parser": "^2.1.7",
+ "dateformat": "^3.0.0",
+ "get-pkg-repo": "^1.0.0",
+ "git-raw-commits": "^1.3.6",
+ "git-remote-origin-url": "^2.0.0",
+ "git-semver-tags": "^1.3.6",
+ "lodash": "^4.2.1",
+ "normalize-package-data": "^2.3.5",
+ "q": "^1.5.1",
+ "read-pkg": "^1.1.0",
+ "read-pkg-up": "^1.0.1",
+ "through2": "^2.0.0"
+ }
+ },
+ "conventional-changelog-ember": {
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
+ "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-eslint": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
+ "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-express": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
+ "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-jquery": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
+ "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
+ "dev": true,
+ "requires": {
+ "q": "^1.4.1"
+ }
+ },
+ "conventional-changelog-jscs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
+ "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+ "dev": true,
+ "requires": {
+ "q": "^1.4.1"
+ }
+ },
+ "conventional-changelog-jshint": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
+ "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-preset-loader": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
+ "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
+ "dev": true
+ },
+ "conventional-changelog-writer": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
+ "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "conventional-commits-filter": "^1.1.6",
+ "dateformat": "^3.0.0",
+ "handlebars": "^4.0.2",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "semver": "^5.5.0",
+ "split": "^1.0.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "conventional-commits-filter": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
+ "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+ "dev": true,
+ "requires": {
+ "is-subset": "^0.1.1",
+ "modify-values": "^1.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
+ "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+ "dev": true,
+ "requires": {
+ "is-text-path": "^1.0.0",
+ "JSONStream": "^1.0.4",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0",
+ "trim-off-newlines": "^1.0.0"
+ }
+ },
+ "conventional-github-releaser": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-1.1.13.tgz",
+ "integrity": "sha1-C+ezp8eGfoiL5SZHWlkP9ZMDUXw=",
+ "dev": true,
+ "requires": {
+ "conventional-changelog": "^1.1.0",
+ "dateformat": "^1.0.11",
+ "git-semver-tags": "^1.0.0",
+ "github": "^0.2.4",
+ "lodash.merge": "^4.0.2",
+ "meow": "^3.3.0",
+ "object-assign": "^4.0.1",
+ "q": "^1.4.1",
+ "semver": "^5.0.1",
+ "semver-regex": "^1.0.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "dateformat": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "cssom": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "dev": true,
+ "requires": {
+ "cssom": "~0.3.6"
+ },
+ "dependencies": {
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true
+ }
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "data-urls": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
+ "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.3",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^10.0.0"
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ }
+ }
+ },
+ "decimal.js": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "^4.0.0"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "domexception": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
+ "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
+ "dev": true,
+ "requires": {
+ "webidl-conversions": "^7.0.0"
+ }
+ },
+ "domhandler": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
+ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "entities": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
+ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+ "dev": true,
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ }
+ }
+ },
+ "eslint": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz",
+ "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==",
+ "dev": true,
+ "requires": {
+ "@eslint/eslintrc": "^1.2.0",
+ "@humanwhocodes/config-array": "^0.9.2",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.6.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
+ "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.7.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
+ "dev": true
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ }
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "requires": {
+ "glob": "~5.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true
+ },
+ "get-pkg-repo": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
+ "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "meow": "^3.3.0",
+ "normalize-package-data": "^2.3.0",
+ "parse-github-repo-url": "^1.3.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "getobject": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
+ "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==",
+ "dev": true
+ },
+ "git-raw-commits": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
+ "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
+ "dev": true,
+ "requires": {
+ "dargs": "^4.0.1",
+ "lodash.template": "^4.0.2",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "git-remote-origin-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+ "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+ "dev": true,
+ "requires": {
+ "gitconfiglocal": "^1.0.0",
+ "pify": "^2.3.0"
+ }
+ },
+ "git-semver-tags": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
+ "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
+ "dev": true,
+ "requires": {
+ "meow": "^4.0.0",
+ "semver": "^5.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "gitconfiglocal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+ "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.2"
+ }
+ },
+ "github": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/github/-/github-0.2.4.tgz",
+ "integrity": "sha1-JPp/DhP6EblGr5ETTFGYKpHOU4s=",
+ "dev": true,
+ "requires": {
+ "mime": "^1.2.11"
+ }
+ },
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "dependencies": {
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "globals": {
+ "version": "13.12.1",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
+ "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true
+ },
+ "grunt": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.4.1.tgz",
+ "integrity": "sha512-ZXIYXTsAVrA7sM+jZxjQdrBOAg7DyMUplOMhTaspMRExei+fD0BTwdWXnn0W5SXqhb/Q/nlkzXclSi3IH55PIA==",
+ "dev": true,
+ "requires": {
+ "dateformat": "~3.0.3",
+ "eventemitter2": "~0.4.13",
+ "exit": "~0.1.2",
+ "findup-sync": "~0.3.0",
+ "glob": "~7.1.6",
+ "grunt-cli": "~1.4.2",
+ "grunt-known-options": "~2.0.0",
+ "grunt-legacy-log": "~3.0.0",
+ "grunt-legacy-util": "~2.0.1",
+ "iconv-lite": "~0.4.13",
+ "js-yaml": "~3.14.0",
+ "minimatch": "~3.0.4",
+ "mkdirp": "~1.0.4",
+ "nopt": "~3.0.6",
+ "rimraf": "~3.0.2"
+ }
+ },
+ "grunt-cli": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz",
+ "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==",
+ "dev": true,
+ "requires": {
+ "grunt-known-options": "~2.0.0",
+ "interpret": "~1.1.0",
+ "liftup": "~3.0.1",
+ "nopt": "~4.0.1",
+ "v8flags": "~3.2.0"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
+ "dev": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ }
+ }
+ },
+ "grunt-contrib-clean": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.0.tgz",
+ "integrity": "sha512-g5ZD3ORk6gMa5ugZosLDQl3dZO7cI3R14U75hTM+dVLVxdMNJCPVmwf9OUt4v4eWgpKKWWoVK9DZc1amJp4nQw==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.1",
+ "rimraf": "^2.6.2"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "grunt-contrib-concat": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.0.0.tgz",
+ "integrity": "sha512-/cfWwsGiprVTOl7c2bZwMdQ8hIf3e1f4szm1i7qhY9hOnR/X2KL+Xe7dynNweTYHa6aWPZx2B5GPsUpxAXNCaA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.2",
+ "source-map": "^0.5.3"
+ }
+ },
+ "grunt-contrib-jshint": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.2.0.tgz",
+ "integrity": "sha512-pcXWCSZWfoMSvcV4BwH21TUtLtcX0Ms8IGuOPIcLeXK3fud9KclY7iqMKY94jFx8TxZzh028YYtpR+io8DiEaQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "~4.1.2",
+ "hooker": "^0.2.3",
+ "jshint": "~2.13.4"
+ }
+ },
+ "grunt-contrib-uglify": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-5.0.1.tgz",
+ "integrity": "sha512-T/aXZ4WIpAtoswZqb6HROKg7uq9QbKwl+lUuOwK4eoFj3tFv9/a/oMyd3/qvetV29Pbf8P1YYda1gDwZppr60A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "maxmin": "^2.1.0",
+ "uglify-js": "^3.13.3",
+ "uri-path": "^1.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "grunt-conventional-changelog": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-conventional-changelog/-/grunt-conventional-changelog-6.1.0.tgz",
+ "integrity": "sha1-mL1b37Kw3mMWwFx8b6ykziTdFDU=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.0",
+ "concat-stream": "^1.5.0",
+ "conventional-changelog": "^1.1.0",
+ "plur": "^2.0.0",
+ "q": "^1.4.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-conventional-github-releaser": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-conventional-github-releaser/-/grunt-conventional-github-releaser-1.0.0.tgz",
+ "integrity": "sha1-7Tbg9V1orq6FrxSEBsPXAYJnuHU=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.0",
+ "conventional-github-releaser": "^1.1.0",
+ "plur": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-endline": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/grunt-endline/-/grunt-endline-0.7.0.tgz",
+ "integrity": "sha512-NP2ABzCRBpuNfKgteVSEOR26zsph0oEFPVvEmSldkvxBHeSpUPOpIVxvrDnRHyKoV9hBuszGvVjHovjnG3aUBw==",
+ "dev": true
+ },
+ "grunt-eslint": {
+ "version": "24.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz",
+ "integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.2",
+ "eslint": "^8.0.1"
+ }
+ },
+ "grunt-known-options": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz",
+ "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==",
+ "dev": true
+ },
+ "grunt-legacy-log": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz",
+ "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==",
+ "dev": true,
+ "requires": {
+ "colors": "~1.1.2",
+ "grunt-legacy-log-utils": "~2.1.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.19"
+ }
+ },
+ "grunt-legacy-log-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz",
+ "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==",
+ "dev": true,
+ "requires": {
+ "chalk": "~4.1.0",
+ "lodash": "~4.17.19"
+ }
+ },
+ "grunt-legacy-util": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz",
+ "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==",
+ "dev": true,
+ "requires": {
+ "async": "~3.2.0",
+ "exit": "~0.1.2",
+ "getobject": "~1.0.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.21",
+ "underscore.string": "~3.3.5",
+ "which": "~2.0.2"
+ },
+ "dependencies": {
+ "async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
+ "dev": true
+ }
+ }
+ },
+ "grunt-simple-mocha": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/grunt-simple-mocha/-/grunt-simple-mocha-0.4.1.tgz",
+ "integrity": "sha1-V5RJJJ6vCoGHj6cvPtq1FF1F/Xc=",
+ "dev": true,
+ "requires": {
+ "mocha": "*"
+ }
+ },
+ "gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1"
+ }
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "html-encoding-sniffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "dev": true,
+ "requires": {
+ "whatwg-encoding": "^2.0.0"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
+ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1",
+ "domhandler": "2.3",
+ "domutils": "1.5",
+ "entities": "1.0",
+ "readable-stream": "1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "dev": true,
+ "requires": {
+ "@tootallnate/once": "2",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "dev": true,
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "irregular-plurals": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+ "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
+ "is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "dev": true,
+ "requires": {
+ "text-extensions": "^1.0.0"
+ }
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsdom": {
+ "version": "19.0.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
+ "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.5",
+ "acorn": "^8.5.0",
+ "acorn-globals": "^6.0.0",
+ "cssom": "^0.5.0",
+ "cssstyle": "^2.3.0",
+ "data-urls": "^3.0.1",
+ "decimal.js": "^10.3.1",
+ "domexception": "^4.0.0",
+ "escodegen": "^2.0.0",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^3.0.0",
+ "http-proxy-agent": "^5.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.0",
+ "parse5": "6.0.1",
+ "saxes": "^5.0.1",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^4.0.0",
+ "w3c-hr-time": "^1.0.2",
+ "w3c-xmlserializer": "^3.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^2.0.0",
+ "whatwg-mimetype": "^3.0.0",
+ "whatwg-url": "^10.0.0",
+ "ws": "^8.2.3",
+ "xml-name-validator": "^4.0.0"
+ }
+ },
+ "jshint": {
+ "version": "2.13.4",
+ "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.4.tgz",
+ "integrity": "sha512-HO3bosL84b2qWqI0q+kpT/OpRJwo0R4ivgmxaO848+bo10rc50SkPnrtwSFXttW0ym4np8jbJvLwk5NziB7jIw==",
+ "dev": true,
+ "requires": {
+ "cli": "~1.0.0",
+ "console-browserify": "1.1.x",
+ "exit": "0.1.x",
+ "htmlparser2": "3.8.x",
+ "lodash": "~4.17.21",
+ "minimatch": "~3.0.2",
+ "strip-json-comments": "1.0.x"
+ },
+ "dependencies": {
+ "strip-json-comments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
+ "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
+ "dev": true
+ }
+ }
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "liftup": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz",
+ "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.2",
+ "findup-sync": "^4.0.0",
+ "fined": "^1.2.0",
+ "flagged-respawn": "^1.0.1",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.1",
+ "rechoir": "^0.7.0",
+ "resolve": "^1.19.0"
+ },
+ "dependencies": {
+ "findup-sync": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
+ "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^4.0.2",
+ "resolve-dir": "^1.0.1"
+ }
+ }
+ }
+ },
+ "load-grunt-tasks": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-5.1.0.tgz",
+ "integrity": "sha512-oNj0Jlka1TsfDe+9He0kcA1cRln+TMoTsEByW7ij6kyktNLxBKJtslCFEvFrLC2Dj0S19IWJh3fOCIjLby2Xrg==",
+ "dev": true,
+ "requires": {
+ "arrify": "^2.0.1",
+ "multimatch": "^4.0.0",
+ "pkg-up": "^3.1.0",
+ "resolve-pkg": "^2.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "loupe": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz",
+ "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==",
+ "dev": true,
+ "requires": {
+ "get-func-name": "^2.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "maxmin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz",
+ "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0",
+ "figures": "^1.0.1",
+ "gzip-size": "^3.0.0",
+ "pretty-bytes": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "meow": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist": "^1.1.3",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.51.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
+ "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ },
+ "dependencies": {
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ },
+ "mocha": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz",
+ "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==",
+ "dev": true,
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.3",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "3.0.4",
+ "ms": "2.1.3",
+ "nanoid": "3.2.0",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "which": "2.0.2",
+ "workerpool": "6.2.0",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "modify-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "multimatch": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
+ "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "^3.0.3",
+ "array-differ": "^3.0.0",
+ "array-union": "^2.1.0",
+ "arrify": "^2.0.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "nanoid": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
+ "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "nise": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
+ "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.8.3",
+ "@sinonjs/fake-timers": ">=5",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nwsapi": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-github-repo-url": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-up": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+ "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "plur": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+ "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=",
+ "dev": true,
+ "requires": {
+ "irregular-plurals": "^1.0.0"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "quiet-grunt": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/quiet-grunt/-/quiet-grunt-0.2.3.tgz",
+ "integrity": "sha1-8JCJeal9JCrC2NbuvP5Vj1nAYYQ=",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.9.0"
+ }
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "resolve-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz",
+ "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ }
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "saxes": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "dev": true,
+ "requires": {
+ "xmlchars": "^2.2.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "semver-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
+ "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=",
+ "dev": true
+ },
+ "semver-sort": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/semver-sort/-/semver-sort-0.0.4.tgz",
+ "integrity": "sha1-NP293GprK0FhOYw8TbpWJDv+qos=",
+ "dev": true,
+ "requires": {
+ "semver": "^5.0.3",
+ "semver-regex": "^1.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "sinon": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz",
+ "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==",
+ "dev": true,
+ "requires": {
+ "@sinonjs/commons": "^1.8.3",
+ "@sinonjs/fake-timers": "^9.0.0",
+ "@sinonjs/samsam": "^6.1.1",
+ "diff": "^5.0.0",
+ "nise": "^5.1.1",
+ "supports-color": "^7.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "dev": true
+ },
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.2"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true
+ },
+ "text-extensions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
+ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tough-cookie": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.1.2"
+ }
+ },
+ "tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "trim-off-newlines": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz",
+ "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.15.2",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz",
+ "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz",
+ "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "^1.1.1",
+ "util-deprecate": "^1.0.2"
+ },
+ "dependencies": {
+ "sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "uri-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz",
+ "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "w3c-hr-time": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "dev": true,
+ "requires": {
+ "browser-process-hrtime": "^1.0.0"
+ }
+ },
+ "w3c-xmlserializer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
+ "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
+ "dev": true,
+ "requires": {
+ "xml-name-validator": "^4.0.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true
+ },
+ "whatwg-encoding": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.6.3"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
+ }
+ },
+ "whatwg-mimetype": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
+ "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
+ "dev": true,
+ "requires": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "workerpool": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
+ "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "ws": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
+ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+ "dev": true,
+ "requires": {}
+ },
+ "xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true
+ },
+ "xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true
+ }
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/showdown/package.json b/showdown/package.json
new file mode 100644
index 00000000..e7e25526
--- /dev/null
+++ b/showdown/package.json
@@ -0,0 +1,74 @@
+{
+ "name": "showdown",
+ "version": "2.1.0",
+ "description": "A Markdown to HTML converter written in Javascript",
+ "author": "Estevão Santos",
+ "homepage": "http://showdownjs.com/",
+ "keywords": [
+ "markdown",
+ "converter"
+ ],
+ "contributors": [
+ "John Gruber",
+ "John Fraser",
+ "Corey Innis",
+ "Remy Sharp",
+ "Konstantin Käfer",
+ "Roger Braun",
+ "Dominic Tarr",
+ "Cat Chen",
+ "Titus Stone",
+ "Rob Sutherland",
+ "Pavel Lang",
+ "Ben Combee",
+ "Adam Backstrom",
+ "Pascal Deschênes",
+ "Estevão Santos"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/showdownjs/showdown.git",
+ "web": "https://github.com/showdownjs/showdown"
+ },
+ "funding": {
+ "type" : "individual",
+ "url" : "https://www.paypal.me/tiviesantos"
+ },
+ "license": "MIT",
+ "main": "./dist/showdown.js",
+ "scripts": {
+ "test": "grunt test"
+ },
+ "bin": {
+ "showdown": "bin/showdown.js"
+ },
+ "files": [
+ "bin",
+ "dist"
+ ],
+ "devDependencies": {
+ "chai": "*",
+ "chai-match": "*",
+ "grunt": "^1.4.1",
+ "grunt-contrib-clean": "^2.0.0",
+ "grunt-contrib-concat": "^2.0.0",
+ "grunt-contrib-jshint": "^3.1.0",
+ "grunt-contrib-uglify": "^5.0.1",
+ "grunt-conventional-changelog": "^6.1.0",
+ "grunt-conventional-github-releaser": "^1.0.0",
+ "grunt-endline": "^0.7.0",
+ "grunt-eslint": "^24.0.0",
+ "grunt-simple-mocha": "^0.4.0",
+ "jsdom": "^19.0.0",
+ "load-grunt-tasks": "^5.1.0",
+ "performance-now": "^2.1.0",
+ "quiet-grunt": "^0.2.0",
+ "semver": "^7.3.0",
+ "semver-sort": "^0.0.4",
+ "sinon": "*",
+ "source-map-support": "^0.5.20"
+ },
+ "dependencies": {
+ "commander": "^9.0.0"
+ }
+}
diff --git a/showdown/src/cli/cli.js b/showdown/src/cli/cli.js
new file mode 100644
index 00000000..f16e6f94
--- /dev/null
+++ b/showdown/src/cli/cli.js
@@ -0,0 +1,330 @@
+/**
+ * Created by tivie
+ */
+var fs = require('fs'),
+ path = require('path'),
+ Command = require('commander').Command,
+ program = new Command(),
+ path1 = path.resolve(__dirname + '/../dist/showdown.js'),
+ path2 = path.resolve(__dirname + '/../../.build/showdown.js'),
+ showdown,
+ version;
+
+// require shodown. We use conditional loading for each use case
+if (fs.existsSync(path1)) {
+ // production. File lives in bin directory
+ showdown = require(path1);
+ version = require(path.resolve(__dirname + '/../package.json')).version;
+} else if (fs.existsSync(path2)) {
+ // testing envo, uses the concatenated stuff for testing
+ showdown = require(path2);
+ version = require(path.resolve(__dirname + '/../../package.json')).version;
+} else {
+ // cold testing (manual) of cli.js in the src file. We load the dist file
+ showdown = require('../../dist/showdown');
+ version = require('../../package.json');
+}
+
+
+program
+ .name('showdown')
+ .description('CLI to Showdownjs markdown parser v' + version)
+ .version(version)
+ .usage(' [options]')
+ .option('-q, --quiet', 'Quiet mode. Only print errors')
+ .option('-m, --mute', 'Mute mode. Does not print anything');
+
+program.command('makehtml')
+ .description('Converts markdown into html')
+
+ .addHelpText('after', '\n\nExamples:')
+ .addHelpText('after', ' showdown makehtml -i Reads from stdin and outputs to stdout')
+ .addHelpText('after', ' showdown makehtml -i foo.md -o bar.html Reads \'foo.md\' and writes to \'bar.html\'')
+ .addHelpText('after', ' showdown makehtml -i --flavor="github" Parses stdin using GFM style')
+
+ .addHelpText('after', '\nNote for windows users:')
+ .addHelpText('after', 'When reading from stdin, use option -u to set the proper encoding or run `chcp 65001` prior to calling showdown cli to set the command line to utf-8')
+
+ .option('-i, --input [file]', 'Input source. Usually a md file. If omitted or empty, reads from stdin. Windows users see note below.', true)
+ .option('-o, --output [file]', 'Output target. Usually a html file. If omitted or empty, writes to stdout', true)
+ .option('-u, --encoding ', 'Sets the input encoding', 'utf8')
+ .option('-y, --output-encoding ', 'Sets the output encoding', 'utf8')
+ .option('-a, --append', 'Append data to output instead of overwriting. Ignored if writing to stdout', false)
+ .option('-e, --extensions ', 'Load the specified extensions. Should be valid paths to node compatible extensions')
+ .option('-p, --flavor ', 'Run with a predetermined flavor of options. Default is vanilla', 'vanilla')
+ .option('-c, --config ', 'Enables showdown makehtml parser config options (example: strikethrough). Overrides flavor')
+ .option('--config-help', 'Shows configuration options for showdown parser')
+ .action(makehtmlCommand);
+
+program.parse();
+
+
+//
+// HELPER FUCNTIONS
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Messenger helper object to the CLI
+ * @param {string} writeMode
+ * @param {boolean} supress
+ * @param {boolean} mute
+ * @constructor
+ */
+function Messenger (writeMode, supress, mute) {
+ 'use strict';
+ writeMode = writeMode || 'stderr';
+ supress = (!!supress || !!mute);
+ mute = !!mute;
+ this._print = (writeMode === 'stdout') ? console.log : console.error;
+
+ this.errorExit = function (e) {
+ if (!mute) {
+ console.error('ERROR: ' + e.message);
+ console.error('Run \'showdown -h\' for help');
+ }
+ process.exit(1);
+ };
+
+ this.okExit = function () {
+ if (!mute) {
+ this._print('\n');
+ this._print('DONE!');
+ }
+ process.exit(0);
+ };
+
+ this.printMsg = function (msg) {
+ if (supress || mute || !msg) {
+ return;
+ }
+ this._print(msg);
+ };
+
+ this.printError = function (msg) {
+ if (mute) {
+ return;
+ }
+ console.error(msg);
+ };
+
+}
+
+/**
+ * Helper function to show Showdown Options
+ */
+function showShowdownOptions () {
+ 'use strict';
+ var showdownOptions = showdown.getDefaultOptions(false);
+ console.log('\nshowdown makehtml config options:');
+ // show showdown options
+ for (var sopt in showdownOptions) {
+ if (showdownOptions.hasOwnProperty(sopt)) {
+ console.log(' ' + sopt + ':', '[default=' + showdownOptions[sopt].defaultValue + ']',showdownOptions[sopt].describe);
+ }
+ }
+ console.log('\n\nExample: showdown makehtml -c openLinksInNewWindow ghMentions ghMentionsLink="https://google.com"');
+}
+
+/**
+ * Helper function to parse showdown options
+ * @param {{}} configOptions
+ * @param {{}} defaultOptions
+ * @returns {{}}
+ */
+function parseShowdownOptions (configOptions, defaultOptions) {
+ 'use strict';
+ var shOpt = defaultOptions;
+
+ // first prepare passed options
+ if (configOptions) {
+ for (var i = 0; i < configOptions.length; ++i) {
+ var opt = configOptions[i],
+ key = configOptions[i],
+ val = true;
+ if (/=/.test(opt)) {
+ key = opt.split('=')[0];
+ val = opt.split('=')[1];
+ }
+ shOpt[key] = val;
+ }
+ }
+ return shOpt;
+}
+
+/**
+ * Reads stdin
+ * @returns {string}
+ */
+function readFromStdIn (encoding) {
+ 'use strict';
+ var size = fs.fstatSync(process.stdin.fd).size;
+ if (size <= 0) {
+ throw new Error('Could not read from stdin, reason: stdin is empty');
+ }
+ encoding = encoding || 'utf8';
+ try {
+ return size > 0 ? fs.readFileSync(process.stdin.fd, encoding).toString() : '';
+ } catch (e) {
+ throw new Error('Could not read from stdin, reason: ' + e.message);
+ }
+}
+
+/**
+ * Reads from a file
+ * @param {string} file Filepath to dile
+ * @param {string} encoding Encoding of the file
+ * @returns {Buffer}
+ */
+function readFromFile (file, encoding) {
+ 'use strict';
+ try {
+ return fs.readFileSync(file, encoding);
+ } catch (err) {
+ throw new Error('Could not read from file ' + file + ', reason: ' + err.message);
+ }
+}
+
+/**
+ * Writes to stdout
+ * @param {string} html
+ * @returns {boolean}
+ */
+function writeToStdOut (html) {
+ 'use strict';
+ if (!process.stdout.write(html)) {
+ throw new Error('Could not write to StdOut');
+ }
+}
+
+/**
+ * Writes to file
+ * @param {string} html HTML to write
+ * @param {string} file Filepath
+ * @param {boolean} append If the result should be appended
+ */
+function writeToFile (html, file, append) {
+ 'use strict';
+ // If a flag is passed, it means we should append instead of overwriting.
+ // Only works with files, obviously
+ var write = (append) ? fs.appendFileSync : fs.writeFileSync;
+ try {
+ write(file, html);
+ } catch (err) {
+ throw new Error('Could not write to file ' + file + ', readon: ' + err.message);
+ }
+}
+
+/**
+ * makehtml command
+ * @param {{}} options
+ * @param {Command} cmd
+ */
+function makehtmlCommand (options, cmd) {
+ 'use strict';
+
+ // show configuration options for showdown helper if configHelp was passed
+ if (options.configHelp) {
+ showShowdownOptions();
+ return;
+ }
+
+ var quiet = !!(cmd.parent._optionValues.quiet),
+ mute = !!(cmd.parent._optionValues.mute),
+ readMode = (!options.input || options.input === '' || options.input === true) ? 'stdin' : 'file',
+ writeMode = (!options.output || options.output === '' || options.output === true) ? 'stdout' : 'file',
+ msgMode = (writeMode === 'file') ? 'stdout' : 'stderr',
+ // initiate Messenger helper, can maybe be replaced with commanderjs internal stuff
+ messenger = new Messenger(msgMode, quiet, mute),
+ defaultOptions = showdown.getDefaultOptions(true),
+ md, html;
+
+ // deal with flavor first since config flag overrides flavor individual options
+ if (options.flavor) {
+ messenger.printMsg('Enabling flavor ' + options.flavor + '...');
+ defaultOptions = showdown.getFlavorOptions(options.flavor);
+ if (!defaultOptions) {
+ messenger.errorExit(new Error('Flavor ' + options.flavor + ' is not recognised'));
+ return;
+ }
+ messenger.printMsg('OK!');
+ }
+ // store config options in the options.config as an object
+ options.config = parseShowdownOptions(options.config, defaultOptions);
+
+ // print enabled options
+ for (var o in options.config) {
+ if (options.config.hasOwnProperty(o) && options.config[o] === true) {
+ messenger.printMsg('Enabling option ' + o);
+ }
+ }
+
+ // initialize the converter
+ messenger.printMsg('\nInitializing converter...');
+ var converter;
+ try {
+ converter = new showdown.Converter(options.config);
+ } catch (e) {
+ messenger.errorExit(e);
+ return;
+ }
+ messenger.printMsg('OK!');
+
+ // load extensions
+ if (options.extensions) {
+ messenger.printMsg('\nLoading extensions...');
+ for (var i = 0; i < options.extensions.length; ++i) {
+ try {
+ messenger.printMsg(options.extensions[i]);
+ var ext = require(options.extensions[i]);
+ converter.addExtension(ext, options.extensions[i]);
+ messenger.printMsg(options.extensions[i] + ' loaded...');
+ } catch (e) {
+ messenger.printError('Could not load extension ' + options.extensions[i] + '. Reason:');
+ messenger.errorExit(e);
+ }
+ }
+ }
+
+ messenger.printMsg('...');
+ // read the input
+ messenger.printMsg('Reading data from ' + readMode + '...');
+
+ if (readMode === 'stdin') {
+ try {
+ md = readFromStdIn(options.encoding);
+ } catch (err) {
+ messenger.errorExit(err);
+ return;
+ }
+ } else {
+ try {
+ md = readFromFile(options.input, options.encoding);
+ } catch (err) {
+ messenger.errorExit(err);
+ return;
+ }
+ }
+
+ // process the input
+ messenger.printMsg('Parsing markdown...');
+ html = converter.makeHtml(md);
+
+ // write the output
+ messenger.printMsg('Writing data to ' + writeMode + '...');
+ if (writeMode === 'stdout') {
+ try {
+ writeToStdOut(html);
+ } catch (err) {
+ messenger.errorExit(err);
+ return;
+ }
+ } else {
+ try {
+ writeToFile(html, options.output, options.append);
+ } catch (err) {
+ messenger.errorExit(err);
+ return;
+ }
+ }
+ messenger.okExit();
+}
diff --git a/showdown/src/converter.js b/showdown/src/converter.js
new file mode 100644
index 00000000..f597cb64
--- /dev/null
+++ b/showdown/src/converter.js
@@ -0,0 +1,602 @@
+/**
+ * Created by Estevao on 31-05-2015.
+ */
+
+/**
+ * Showdown Converter class
+ * @class
+ * @param {object} [converterOptions]
+ * @returns {Converter}
+ */
+showdown.Converter = function (converterOptions) {
+ 'use strict';
+
+ var
+ /**
+ * Options used by this converter
+ * @private
+ * @type {{}}
+ */
+ options = {},
+
+ /**
+ * Language extensions used by this converter
+ * @private
+ * @type {Array}
+ */
+ langExtensions = [],
+
+ /**
+ * Output modifiers extensions used by this converter
+ * @private
+ * @type {Array}
+ */
+ outputModifiers = [],
+
+ /**
+ * Event listeners
+ * @private
+ * @type {{}}
+ */
+ listeners = {},
+
+ /**
+ * The flavor set in this converter
+ */
+ setConvFlavor = setFlavor,
+
+ /**
+ * Metadata of the document
+ * @type {{parsed: {}, raw: string, format: string}}
+ */
+ metadata = {
+ parsed: {},
+ raw: '',
+ format: ''
+ };
+
+ _constructor();
+
+ /**
+ * Converter constructor
+ * @private
+ */
+ function _constructor () {
+ converterOptions = converterOptions || {};
+
+ for (var gOpt in globalOptions) {
+ if (globalOptions.hasOwnProperty(gOpt)) {
+ options[gOpt] = globalOptions[gOpt];
+ }
+ }
+
+ // Merge options
+ if (typeof converterOptions === 'object') {
+ for (var opt in converterOptions) {
+ if (converterOptions.hasOwnProperty(opt)) {
+ options[opt] = converterOptions[opt];
+ }
+ }
+ } else {
+ throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions +
+ ' was passed instead.');
+ }
+
+ if (options.extensions) {
+ showdown.helper.forEach(options.extensions, _parseExtension);
+ }
+ }
+
+ /**
+ * Parse extension
+ * @param {*} ext
+ * @param {string} [name='']
+ * @private
+ */
+ function _parseExtension (ext, name) {
+
+ name = name || null;
+ // If it's a string, the extension was previously loaded
+ if (showdown.helper.isString(ext)) {
+ ext = showdown.helper.stdExtName(ext);
+ name = ext;
+
+ // LEGACY_SUPPORT CODE
+ if (showdown.extensions[ext]) {
+ console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' +
+ 'Please inform the developer that the extension should be updated!');
+ legacyExtensionLoading(showdown.extensions[ext], ext);
+ return;
+ // END LEGACY SUPPORT CODE
+
+ } else if (!showdown.helper.isUndefined(extensions[ext])) {
+ ext = extensions[ext];
+
+ } else {
+ throw Error('Extension "' + ext + '" could not be loaded. It was either not found or is not a valid extension.');
+ }
+ }
+
+ if (typeof ext === 'function') {
+ ext = ext();
+ }
+
+ if (!showdown.helper.isArray(ext)) {
+ ext = [ext];
+ }
+
+ var validExt = validate(ext, name);
+ if (!validExt.valid) {
+ throw Error(validExt.error);
+ }
+
+ for (var i = 0; i < ext.length; ++i) {
+ switch (ext[i].type) {
+
+ case 'lang':
+ langExtensions.push(ext[i]);
+ break;
+
+ case 'output':
+ outputModifiers.push(ext[i]);
+ break;
+ }
+ if (ext[i].hasOwnProperty('listeners')) {
+ for (var ln in ext[i].listeners) {
+ if (ext[i].listeners.hasOwnProperty(ln)) {
+ listen(ln, ext[i].listeners[ln]);
+ }
+ }
+ }
+ }
+
+ }
+
+ /**
+ * LEGACY_SUPPORT
+ * @param {*} ext
+ * @param {string} name
+ */
+ function legacyExtensionLoading (ext, name) {
+ if (typeof ext === 'function') {
+ ext = ext(new showdown.Converter());
+ }
+ if (!showdown.helper.isArray(ext)) {
+ ext = [ext];
+ }
+ var valid = validate(ext, name);
+
+ if (!valid.valid) {
+ throw Error(valid.error);
+ }
+
+ for (var i = 0; i < ext.length; ++i) {
+ switch (ext[i].type) {
+ case 'lang':
+ langExtensions.push(ext[i]);
+ break;
+ case 'output':
+ outputModifiers.push(ext[i]);
+ break;
+ default:// should never reach here
+ throw Error('Extension loader error: Type unrecognized!!!');
+ }
+ }
+ }
+
+ /**
+ * Listen to an event
+ * @param {string} name
+ * @param {function} callback
+ */
+ function listen (name, callback) {
+ if (!showdown.helper.isString(name)) {
+ throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given');
+ }
+
+ if (typeof callback !== 'function') {
+ throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given');
+ }
+
+ if (!listeners.hasOwnProperty(name)) {
+ listeners[name] = [];
+ }
+ listeners[name].push(callback);
+ }
+
+ function rTrimInputText (text) {
+ var rsp = text.match(/^\s*/)[0].length,
+ rgx = new RegExp('^\\s{0,' + rsp + '}', 'gm');
+ return text.replace(rgx, '');
+ }
+
+ /**
+ * Dispatch an event
+ * @private
+ * @param {string} evtName Event name
+ * @param {string} text Text
+ * @param {{}} options Converter Options
+ * @param {{}} globals
+ * @returns {string}
+ */
+ this._dispatch = function dispatch (evtName, text, options, globals) {
+ if (listeners.hasOwnProperty(evtName)) {
+ for (var ei = 0; ei < listeners[evtName].length; ++ei) {
+ var nText = listeners[evtName][ei](evtName, text, this, options, globals);
+ if (nText && typeof nText !== 'undefined') {
+ text = nText;
+ }
+ }
+ }
+ return text;
+ };
+
+ /**
+ * Listen to an event
+ * @param {string} name
+ * @param {function} callback
+ * @returns {showdown.Converter}
+ */
+ this.listen = function (name, callback) {
+ listen(name, callback);
+ return this;
+ };
+
+ /**
+ * Converts a markdown string into HTML
+ * @param {string} text
+ * @returns {*}
+ */
+ this.makeHtml = function (text) {
+ //check if text is not falsy
+ if (!text) {
+ return text;
+ }
+
+ var globals = {
+ gHtmlBlocks: [],
+ gHtmlMdBlocks: [],
+ gHtmlSpans: [],
+ gUrls: {},
+ gTitles: {},
+ gDimensions: {},
+ gListLevel: 0,
+ hashLinkCounts: {},
+ langExtensions: langExtensions,
+ outputModifiers: outputModifiers,
+ converter: this,
+ ghCodeBlocks: [],
+ metadata: {
+ parsed: {},
+ raw: '',
+ format: ''
+ }
+ };
+
+ // This lets us use ¨ trema as an escape char to avoid md5 hashes
+ // The choice of character is arbitrary; anything that isn't
+ // magic in Markdown will work.
+ text = text.replace(/¨/g, '¨T');
+
+ // Replace $ with ¨D
+ // RegExp interprets $ as a special character
+ // when it's in a replacement string
+ text = text.replace(/\$/g, '¨D');
+
+ // Standardize line endings
+ text = text.replace(/\r\n/g, '\n'); // DOS to Unix
+ text = text.replace(/\r/g, '\n'); // Mac to Unix
+
+ // Stardardize line spaces
+ text = text.replace(/\u00A0/g, ' ');
+
+ if (options.smartIndentationFix) {
+ text = rTrimInputText(text);
+ }
+
+ // Make sure text begins and ends with a couple of newlines:
+ text = '\n\n' + text + '\n\n';
+
+ // detab
+ text = showdown.subParser('detab')(text, options, globals);
+
+ /**
+ * Strip any lines consisting only of spaces and tabs.
+ * This makes subsequent regexs easier to write, because we can
+ * match consecutive blank lines with /\n+/ instead of something
+ * contorted like /[ \t]*\n+/
+ */
+ text = text.replace(/^[ \t]+$/mg, '');
+
+ //run languageExtensions
+ showdown.helper.forEach(langExtensions, function (ext) {
+ text = showdown.subParser('runExtension')(ext, text, options, globals);
+ });
+
+ // run the sub parsers
+ text = showdown.subParser('metadata')(text, options, globals);
+ text = showdown.subParser('hashPreCodeTags')(text, options, globals);
+ text = showdown.subParser('githubCodeBlocks')(text, options, globals);
+ text = showdown.subParser('hashHTMLBlocks')(text, options, globals);
+ text = showdown.subParser('hashCodeTags')(text, options, globals);
+ text = showdown.subParser('stripLinkDefinitions')(text, options, globals);
+ text = showdown.subParser('blockGamut')(text, options, globals);
+ text = showdown.subParser('unhashHTMLSpans')(text, options, globals);
+ text = showdown.subParser('unescapeSpecialChars')(text, options, globals);
+
+ // attacklab: Restore dollar signs
+ text = text.replace(/¨D/g, '$$');
+
+ // attacklab: Restore tremas
+ text = text.replace(/¨T/g, '¨');
+
+ // render a complete html document instead of a partial if the option is enabled
+ text = showdown.subParser('completeHTMLDocument')(text, options, globals);
+
+ // Run output modifiers
+ showdown.helper.forEach(outputModifiers, function (ext) {
+ text = showdown.subParser('runExtension')(ext, text, options, globals);
+ });
+
+ // update metadata
+ metadata = globals.metadata;
+ return text;
+ };
+
+ /**
+ * Converts an HTML string into a markdown string
+ * @param src
+ * @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used.
+ * @returns {string}
+ */
+ this.makeMarkdown = this.makeMd = function (src, HTMLParser) {
+
+ // replace \r\n with \n
+ src = src.replace(/\r\n/g, '\n');
+ src = src.replace(/\r/g, '\n'); // old macs
+
+ // due to an edge case, we need to find this: > <
+ // to prevent removing of non silent white spaces
+ // ex: this is sparta
+ src = src.replace(/>[ \t]+, '>¨NBSP;<');
+
+ if (!HTMLParser) {
+ if (window && window.document) {
+ HTMLParser = window.document;
+ } else {
+ throw new Error('HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM');
+ }
+ }
+
+ var doc = HTMLParser.createElement('div');
+ doc.innerHTML = src;
+
+ var globals = {
+ preList: substitutePreCodeTags(doc)
+ };
+
+ // remove all newlines and collapse spaces
+ clean(doc);
+
+ // some stuff, like accidental reference links must now be escaped
+ // TODO
+ // doc.innerHTML = doc.innerHTML.replace(/\[[\S\t ]]/);
+
+ var nodes = doc.childNodes,
+ mdDoc = '';
+
+ for (var i = 0; i < nodes.length; i++) {
+ mdDoc += showdown.subParser('makeMarkdown.node')(nodes[i], globals);
+ }
+
+ function clean (node) {
+ for (var n = 0; n < node.childNodes.length; ++n) {
+ var child = node.childNodes[n];
+ if (child.nodeType === 3) {
+ if (!/\S/.test(child.nodeValue) && !/^[ ]+$/.test(child.nodeValue)) {
+ node.removeChild(child);
+ --n;
+ } else {
+ child.nodeValue = child.nodeValue.split('\n').join(' ');
+ child.nodeValue = child.nodeValue.replace(/(\s)+/g, '$1');
+ }
+ } else if (child.nodeType === 1) {
+ clean(child);
+ }
+ }
+ }
+
+ // find all pre tags and replace contents with placeholder
+ // we need this so that we can remove all indentation from html
+ // to ease up parsing
+ function substitutePreCodeTags (doc) {
+
+ var pres = doc.querySelectorAll('pre'),
+ presPH = [];
+
+ for (var i = 0; i < pres.length; ++i) {
+
+ if (pres[i].childElementCount === 1 && pres[i].firstChild.tagName.toLowerCase() === 'code') {
+ var content = pres[i].firstChild.innerHTML.trim(),
+ language = pres[i].firstChild.getAttribute('data-language') || '';
+
+ // if data-language attribute is not defined, then we look for class language-*
+ if (language === '') {
+ var classes = pres[i].firstChild.className.split(' ');
+ for (var c = 0; c < classes.length; ++c) {
+ var matches = classes[c].match(/^language-(.+)$/);
+ if (matches !== null) {
+ language = matches[1];
+ break;
+ }
+ }
+ }
+
+ // unescape html entities in content
+ content = showdown.helper.unescapeHTMLEntities(content);
+
+ presPH.push(content);
+ pres[i].outerHTML = ' ';
+ } else {
+ presPH.push(pres[i].innerHTML);
+ pres[i].innerHTML = '';
+ pres[i].setAttribute('prenum', i.toString());
+ }
+ }
+ return presPH;
+ }
+
+ return mdDoc;
+ };
+
+ /**
+ * Set an option of this Converter instance
+ * @param {string} key
+ * @param {*} value
+ */
+ this.setOption = function (key, value) {
+ options[key] = value;
+ };
+
+ /**
+ * Get the option of this Converter instance
+ * @param {string} key
+ * @returns {*}
+ */
+ this.getOption = function (key) {
+ return options[key];
+ };
+
+ /**
+ * Get the options of this Converter instance
+ * @returns {{}}
+ */
+ this.getOptions = function () {
+ return options;
+ };
+
+ /**
+ * Add extension to THIS converter
+ * @param {{}} extension
+ * @param {string} [name=null]
+ */
+ this.addExtension = function (extension, name) {
+ name = name || null;
+ _parseExtension(extension, name);
+ };
+
+ /**
+ * Use a global registered extension with THIS converter
+ * @param {string} extensionName Name of the previously registered extension
+ */
+ this.useExtension = function (extensionName) {
+ _parseExtension(extensionName);
+ };
+
+ /**
+ * Set the flavor THIS converter should use
+ * @param {string} name
+ */
+ this.setFlavor = function (name) {
+ if (!flavor.hasOwnProperty(name)) {
+ throw Error(name + ' flavor was not found');
+ }
+ var preset = flavor[name];
+ setConvFlavor = name;
+ for (var option in preset) {
+ if (preset.hasOwnProperty(option)) {
+ options[option] = preset[option];
+ }
+ }
+ };
+
+ /**
+ * Get the currently set flavor of this converter
+ * @returns {string}
+ */
+ this.getFlavor = function () {
+ return setConvFlavor;
+ };
+
+ /**
+ * Remove an extension from THIS converter.
+ * Note: This is a costly operation. It's better to initialize a new converter
+ * and specify the extensions you wish to use
+ * @param {Array} extension
+ */
+ this.removeExtension = function (extension) {
+ if (!showdown.helper.isArray(extension)) {
+ extension = [extension];
+ }
+ for (var a = 0; a < extension.length; ++a) {
+ var ext = extension[a];
+ for (var i = 0; i < langExtensions.length; ++i) {
+ if (langExtensions[i] === ext) {
+ langExtensions.splice(i, 1);
+ }
+ }
+ for (var ii = 0; ii < outputModifiers.length; ++ii) {
+ if (outputModifiers[ii] === ext) {
+ outputModifiers.splice(ii, 1);
+ }
+ }
+ }
+ };
+
+ /**
+ * Get all extension of THIS converter
+ * @returns {{language: Array, output: Array}}
+ */
+ this.getAllExtensions = function () {
+ return {
+ language: langExtensions,
+ output: outputModifiers
+ };
+ };
+
+ /**
+ * Get the metadata of the previously parsed document
+ * @param raw
+ * @returns {string|{}}
+ */
+ this.getMetadata = function (raw) {
+ if (raw) {
+ return metadata.raw;
+ } else {
+ return metadata.parsed;
+ }
+ };
+
+ /**
+ * Get the metadata format of the previously parsed document
+ * @returns {string}
+ */
+ this.getMetadataFormat = function () {
+ return metadata.format;
+ };
+
+ /**
+ * Private: set a single key, value metadata pair
+ * @param {string} key
+ * @param {string} value
+ */
+ this._setMetadataPair = function (key, value) {
+ metadata.parsed[key] = value;
+ };
+
+ /**
+ * Private: set metadata format
+ * @param {string} format
+ */
+ this._setMetadataFormat = function (format) {
+ metadata.format = format;
+ };
+
+ /**
+ * Private: set metadata raw text
+ * @param {string} raw
+ */
+ this._setMetadataRaw = function (raw) {
+ metadata.raw = raw;
+ };
+};
diff --git a/showdown/src/helpers.js b/showdown/src/helpers.js
new file mode 100644
index 00000000..4fbeacd6
--- /dev/null
+++ b/showdown/src/helpers.js
@@ -0,0 +1,1603 @@
+/**
+ * showdownjs helper functions
+ */
+
+if (!showdown.hasOwnProperty('helper')) {
+ showdown.helper = {};
+}
+
+/**
+ * Check if var is string
+ * @static
+ * @param {string} a
+ * @returns {boolean}
+ */
+showdown.helper.isString = function (a) {
+ 'use strict';
+ return (typeof a === 'string' || a instanceof String);
+};
+
+/**
+ * Check if var is a function
+ * @static
+ * @param {*} a
+ * @returns {boolean}
+ */
+showdown.helper.isFunction = function (a) {
+ 'use strict';
+ var getType = {};
+ return a && getType.toString.call(a) === '[object Function]';
+};
+
+/**
+ * isArray helper function
+ * @static
+ * @param {*} a
+ * @returns {boolean}
+ */
+showdown.helper.isArray = function (a) {
+ 'use strict';
+ return Array.isArray(a);
+};
+
+/**
+ * Check if value is undefined
+ * @static
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
+ */
+showdown.helper.isUndefined = function (value) {
+ 'use strict';
+ return typeof value === 'undefined';
+};
+
+/**
+ * ForEach helper function
+ * Iterates over Arrays and Objects (own properties only)
+ * @static
+ * @param {*} obj
+ * @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object
+ */
+showdown.helper.forEach = function (obj, callback) {
+ 'use strict';
+ // check if obj is defined
+ if (showdown.helper.isUndefined(obj)) {
+ throw new Error('obj param is required');
+ }
+
+ if (showdown.helper.isUndefined(callback)) {
+ throw new Error('callback param is required');
+ }
+
+ if (!showdown.helper.isFunction(callback)) {
+ throw new Error('callback param must be a function/closure');
+ }
+
+ if (typeof obj.forEach === 'function') {
+ obj.forEach(callback);
+ } else if (showdown.helper.isArray(obj)) {
+ for (var i = 0; i < obj.length; i++) {
+ callback(obj[i], i, obj);
+ }
+ } else if (typeof (obj) === 'object') {
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop)) {
+ callback(obj[prop], prop, obj);
+ }
+ }
+ } else {
+ throw new Error('obj does not seem to be an array or an iterable object');
+ }
+};
+
+/**
+ * Standardidize extension name
+ * @static
+ * @param {string} s extension name
+ * @returns {string}
+ */
+showdown.helper.stdExtName = function (s) {
+ 'use strict';
+ return s.replace(/[_?*+\/\\.^-]/g, '').replace(/\s/g, '').toLowerCase();
+};
+
+function escapeCharactersCallback (wholeMatch, m1) {
+ 'use strict';
+ var charCodeToEscape = m1.charCodeAt(0);
+ return '¨E' + charCodeToEscape + 'E';
+}
+
+/**
+ * Callback used to escape characters when passing through String.replace
+ * @static
+ * @param {string} wholeMatch
+ * @param {string} m1
+ * @returns {string}
+ */
+showdown.helper.escapeCharactersCallback = escapeCharactersCallback;
+
+/**
+ * Escape characters in a string
+ * @static
+ * @param {string} text
+ * @param {string} charsToEscape
+ * @param {boolean} afterBackslash
+ * @returns {XML|string|void|*}
+ */
+showdown.helper.escapeCharacters = function (text, charsToEscape, afterBackslash) {
+ 'use strict';
+ // First we have to escape the escape characters so that
+ // we can build a character class out of them
+ var regexString = '([' + charsToEscape.replace(/([\[\]\\])/g, '\\$1') + '])';
+
+ if (afterBackslash) {
+ regexString = '\\\\' + regexString;
+ }
+
+ var regex = new RegExp(regexString, 'g');
+ text = text.replace(regex, escapeCharactersCallback);
+
+ return text;
+};
+
+/**
+ * Unescape HTML entities
+ * @param txt
+ * @returns {string}
+ */
+showdown.helper.unescapeHTMLEntities = function (txt) {
+ 'use strict';
+
+ return txt
+ .replace(/"/g, '"')
+ .replace(/</g, '<')
+ .replace(/>/g, '>')
+ .replace(/&/g, '&');
+};
+
+var rgxFindMatchPos = function (str, left, right, flags) {
+ 'use strict';
+ var f = flags || '',
+ g = f.indexOf('g') > -1,
+ x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')),
+ l = new RegExp(left, f.replace(/g/g, '')),
+ pos = [],
+ t, s, m, start, end;
+
+ do {
+ t = 0;
+ while ((m = x.exec(str))) {
+ if (l.test(m[0])) {
+ if (!(t++)) {
+ s = x.lastIndex;
+ start = s - m[0].length;
+ }
+ } else if (t) {
+ if (!--t) {
+ end = m.index + m[0].length;
+ var obj = {
+ left: {start: start, end: s},
+ match: {start: s, end: m.index},
+ right: {start: m.index, end: end},
+ wholeMatch: {start: start, end: end}
+ };
+ pos.push(obj);
+ if (!g) {
+ return pos;
+ }
+ }
+ }
+ }
+ } while (t && (x.lastIndex = s));
+
+ return pos;
+};
+
+/**
+ * matchRecursiveRegExp
+ *
+ * (c) 2007 Steven Levithan
+ * MIT License
+ *
+ * Accepts a string to search, a left and right format delimiter
+ * as regex patterns, and optional regex flags. Returns an array
+ * of matches, allowing nested instances of left/right delimiters.
+ * Use the "g" flag to return all matches, otherwise only the
+ * first is returned. Be careful to ensure that the left and
+ * right format delimiters produce mutually exclusive matches.
+ * Backreferences are not supported within the right delimiter
+ * due to how it is internally combined with the left delimiter.
+ * When matching strings whose format delimiters are unbalanced
+ * to the left or right, the output is intentionally as a
+ * conventional regex library with recursion support would
+ * produce, e.g. "<" and ">" both produce ["x"] when using
+ * "<" and ">" as the delimiters (both strings contain a single,
+ * balanced instance of "").
+ *
+ * examples:
+ * matchRecursiveRegExp("test", "\\(", "\\)")
+ * returns: []
+ * matchRecursiveRegExp(">>t<>", "<", ">", "g")
+ * returns: ["t<>", ""]
+ * matchRecursiveRegExp("test", "]*>", "", "gi")
+ * returns: ["test"]
+ */
+showdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {
+ 'use strict';
+
+ var matchPos = rgxFindMatchPos (str, left, right, flags),
+ results = [];
+
+ for (var i = 0; i < matchPos.length; ++i) {
+ results.push([
+ str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),
+ str.slice(matchPos[i].match.start, matchPos[i].match.end),
+ str.slice(matchPos[i].left.start, matchPos[i].left.end),
+ str.slice(matchPos[i].right.start, matchPos[i].right.end)
+ ]);
+ }
+ return results;
+};
+
+/**
+ *
+ * @param {string} str
+ * @param {string|function} replacement
+ * @param {string} left
+ * @param {string} right
+ * @param {string} flags
+ * @returns {string}
+ */
+showdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) {
+ 'use strict';
+
+ if (!showdown.helper.isFunction(replacement)) {
+ var repStr = replacement;
+ replacement = function () {
+ return repStr;
+ };
+ }
+
+ var matchPos = rgxFindMatchPos(str, left, right, flags),
+ finalStr = str,
+ lng = matchPos.length;
+
+ if (lng > 0) {
+ var bits = [];
+ if (matchPos[0].wholeMatch.start !== 0) {
+ bits.push(str.slice(0, matchPos[0].wholeMatch.start));
+ }
+ for (var i = 0; i < lng; ++i) {
+ bits.push(
+ replacement(
+ str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),
+ str.slice(matchPos[i].match.start, matchPos[i].match.end),
+ str.slice(matchPos[i].left.start, matchPos[i].left.end),
+ str.slice(matchPos[i].right.start, matchPos[i].right.end)
+ )
+ );
+ if (i < lng - 1) {
+ bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start));
+ }
+ }
+ if (matchPos[lng - 1].wholeMatch.end < str.length) {
+ bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));
+ }
+ finalStr = bits.join('');
+ }
+ return finalStr;
+};
+
+/**
+ * Returns the index within the passed String object of the first occurrence of the specified regex,
+ * starting the search at fromIndex. Returns -1 if the value is not found.
+ *
+ * @param {string} str string to search
+ * @param {RegExp} regex Regular expression to search
+ * @param {int} [fromIndex = 0] Index to start the search
+ * @returns {Number}
+ * @throws InvalidArgumentError
+ */
+showdown.helper.regexIndexOf = function (str, regex, fromIndex) {
+ 'use strict';
+ if (!showdown.helper.isString(str)) {
+ throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';
+ }
+ if (regex instanceof RegExp === false) {
+ throw 'InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp';
+ }
+ var indexOf = str.substring(fromIndex || 0).search(regex);
+ return (indexOf >= 0) ? (indexOf + (fromIndex || 0)) : indexOf;
+};
+
+/**
+ * Splits the passed string object at the defined index, and returns an array composed of the two substrings
+ * @param {string} str string to split
+ * @param {int} index index to split string at
+ * @returns {[string,string]}
+ * @throws InvalidArgumentError
+ */
+showdown.helper.splitAtIndex = function (str, index) {
+ 'use strict';
+ if (!showdown.helper.isString(str)) {
+ throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';
+ }
+ return [str.substring(0, index), str.substring(index)];
+};
+
+/**
+ * Obfuscate an e-mail address through the use of Character Entities,
+ * transforming ASCII characters into their equivalent decimal or hex entities.
+ *
+ * Since it has a random component, subsequent calls to this function produce different results
+ *
+ * @param {string} mail
+ * @returns {string}
+ */
+showdown.helper.encodeEmailAddress = function (mail) {
+ 'use strict';
+ var encode = [
+ function (ch) {
+ return '' + ch.charCodeAt(0) + ';';
+ },
+ function (ch) {
+ return '' + ch.charCodeAt(0).toString(16) + ';';
+ },
+ function (ch) {
+ return ch;
+ }
+ ];
+
+ mail = mail.replace(/./g, function (ch) {
+ if (ch === '@') {
+ // this *must* be encoded. I insist.
+ ch = encode[Math.floor(Math.random() * 2)](ch);
+ } else {
+ var r = Math.random();
+ // roughly 10% raw, 45% hex, 45% dec
+ ch = (
+ r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch)
+ );
+ }
+ return ch;
+ });
+
+ return mail;
+};
+
+/**
+ *
+ * @param str
+ * @param targetLength
+ * @param padString
+ * @returns {string}
+ */
+showdown.helper.padEnd = function padEnd (str, targetLength, padString) {
+ 'use strict';
+ /*jshint bitwise: false*/
+ // eslint-disable-next-line space-infix-ops
+ targetLength = targetLength>>0; //floor if number or convert non-number to 0;
+ /*jshint bitwise: true*/
+ padString = String(padString || ' ');
+ if (str.length > targetLength) {
+ return String(str);
+ } else {
+ targetLength = targetLength - str.length;
+ if (targetLength > padString.length) {
+ padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed
+ }
+ return String(str) + padString.slice(0,targetLength);
+ }
+};
+
+/**
+ * POLYFILLS
+ */
+// use this instead of builtin is undefined for IE8 compatibility
+if (typeof (console) === 'undefined') {
+ console = {
+ warn: function (msg) {
+ 'use strict';
+ alert(msg);
+ },
+ log: function (msg) {
+ 'use strict';
+ alert(msg);
+ },
+ error: function (msg) {
+ 'use strict';
+ throw msg;
+ }
+ };
+}
+
+/**
+ * Common regexes.
+ * We declare some common regexes to improve performance
+ */
+showdown.helper.regexes = {
+ asteriskDashAndColon: /([*_:~])/g
+};
+
+/**
+ * EMOJIS LIST
+ */
+showdown.helper.emojis = {
+ '+1':'\ud83d\udc4d',
+ '-1':'\ud83d\udc4e',
+ '100':'\ud83d\udcaf',
+ '1234':'\ud83d\udd22',
+ '1st_place_medal':'\ud83e\udd47',
+ '2nd_place_medal':'\ud83e\udd48',
+ '3rd_place_medal':'\ud83e\udd49',
+ '8ball':'\ud83c\udfb1',
+ 'a':'\ud83c\udd70\ufe0f',
+ 'ab':'\ud83c\udd8e',
+ 'abc':'\ud83d\udd24',
+ 'abcd':'\ud83d\udd21',
+ 'accept':'\ud83c\ude51',
+ 'aerial_tramway':'\ud83d\udea1',
+ 'airplane':'\u2708\ufe0f',
+ 'alarm_clock':'\u23f0',
+ 'alembic':'\u2697\ufe0f',
+ 'alien':'\ud83d\udc7d',
+ 'ambulance':'\ud83d\ude91',
+ 'amphora':'\ud83c\udffa',
+ 'anchor':'\u2693\ufe0f',
+ 'angel':'\ud83d\udc7c',
+ 'anger':'\ud83d\udca2',
+ 'angry':'\ud83d\ude20',
+ 'anguished':'\ud83d\ude27',
+ 'ant':'\ud83d\udc1c',
+ 'apple':'\ud83c\udf4e',
+ 'aquarius':'\u2652\ufe0f',
+ 'aries':'\u2648\ufe0f',
+ 'arrow_backward':'\u25c0\ufe0f',
+ 'arrow_double_down':'\u23ec',
+ 'arrow_double_up':'\u23eb',
+ 'arrow_down':'\u2b07\ufe0f',
+ 'arrow_down_small':'\ud83d\udd3d',
+ 'arrow_forward':'\u25b6\ufe0f',
+ 'arrow_heading_down':'\u2935\ufe0f',
+ 'arrow_heading_up':'\u2934\ufe0f',
+ 'arrow_left':'\u2b05\ufe0f',
+ 'arrow_lower_left':'\u2199\ufe0f',
+ 'arrow_lower_right':'\u2198\ufe0f',
+ 'arrow_right':'\u27a1\ufe0f',
+ 'arrow_right_hook':'\u21aa\ufe0f',
+ 'arrow_up':'\u2b06\ufe0f',
+ 'arrow_up_down':'\u2195\ufe0f',
+ 'arrow_up_small':'\ud83d\udd3c',
+ 'arrow_upper_left':'\u2196\ufe0f',
+ 'arrow_upper_right':'\u2197\ufe0f',
+ 'arrows_clockwise':'\ud83d\udd03',
+ 'arrows_counterclockwise':'\ud83d\udd04',
+ 'art':'\ud83c\udfa8',
+ 'articulated_lorry':'\ud83d\ude9b',
+ 'artificial_satellite':'\ud83d\udef0',
+ 'astonished':'\ud83d\ude32',
+ 'athletic_shoe':'\ud83d\udc5f',
+ 'atm':'\ud83c\udfe7',
+ 'atom_symbol':'\u269b\ufe0f',
+ 'avocado':'\ud83e\udd51',
+ 'b':'\ud83c\udd71\ufe0f',
+ 'baby':'\ud83d\udc76',
+ 'baby_bottle':'\ud83c\udf7c',
+ 'baby_chick':'\ud83d\udc24',
+ 'baby_symbol':'\ud83d\udebc',
+ 'back':'\ud83d\udd19',
+ 'bacon':'\ud83e\udd53',
+ 'badminton':'\ud83c\udff8',
+ 'baggage_claim':'\ud83d\udec4',
+ 'baguette_bread':'\ud83e\udd56',
+ 'balance_scale':'\u2696\ufe0f',
+ 'balloon':'\ud83c\udf88',
+ 'ballot_box':'\ud83d\uddf3',
+ 'ballot_box_with_check':'\u2611\ufe0f',
+ 'bamboo':'\ud83c\udf8d',
+ 'banana':'\ud83c\udf4c',
+ 'bangbang':'\u203c\ufe0f',
+ 'bank':'\ud83c\udfe6',
+ 'bar_chart':'\ud83d\udcca',
+ 'barber':'\ud83d\udc88',
+ 'baseball':'\u26be\ufe0f',
+ 'basketball':'\ud83c\udfc0',
+ 'basketball_man':'\u26f9\ufe0f',
+ 'basketball_woman':'\u26f9\ufe0f\u2640\ufe0f',
+ 'bat':'\ud83e\udd87',
+ 'bath':'\ud83d\udec0',
+ 'bathtub':'\ud83d\udec1',
+ 'battery':'\ud83d\udd0b',
+ 'beach_umbrella':'\ud83c\udfd6',
+ 'bear':'\ud83d\udc3b',
+ 'bed':'\ud83d\udecf',
+ 'bee':'\ud83d\udc1d',
+ 'beer':'\ud83c\udf7a',
+ 'beers':'\ud83c\udf7b',
+ 'beetle':'\ud83d\udc1e',
+ 'beginner':'\ud83d\udd30',
+ 'bell':'\ud83d\udd14',
+ 'bellhop_bell':'\ud83d\udece',
+ 'bento':'\ud83c\udf71',
+ 'biking_man':'\ud83d\udeb4',
+ 'bike':'\ud83d\udeb2',
+ 'biking_woman':'\ud83d\udeb4\u2640\ufe0f',
+ 'bikini':'\ud83d\udc59',
+ 'biohazard':'\u2623\ufe0f',
+ 'bird':'\ud83d\udc26',
+ 'birthday':'\ud83c\udf82',
+ 'black_circle':'\u26ab\ufe0f',
+ 'black_flag':'\ud83c\udff4',
+ 'black_heart':'\ud83d\udda4',
+ 'black_joker':'\ud83c\udccf',
+ 'black_large_square':'\u2b1b\ufe0f',
+ 'black_medium_small_square':'\u25fe\ufe0f',
+ 'black_medium_square':'\u25fc\ufe0f',
+ 'black_nib':'\u2712\ufe0f',
+ 'black_small_square':'\u25aa\ufe0f',
+ 'black_square_button':'\ud83d\udd32',
+ 'blonde_man':'\ud83d\udc71',
+ 'blonde_woman':'\ud83d\udc71\u2640\ufe0f',
+ 'blossom':'\ud83c\udf3c',
+ 'blowfish':'\ud83d\udc21',
+ 'blue_book':'\ud83d\udcd8',
+ 'blue_car':'\ud83d\ude99',
+ 'blue_heart':'\ud83d\udc99',
+ 'blush':'\ud83d\ude0a',
+ 'boar':'\ud83d\udc17',
+ 'boat':'\u26f5\ufe0f',
+ 'bomb':'\ud83d\udca3',
+ 'book':'\ud83d\udcd6',
+ 'bookmark':'\ud83d\udd16',
+ 'bookmark_tabs':'\ud83d\udcd1',
+ 'books':'\ud83d\udcda',
+ 'boom':'\ud83d\udca5',
+ 'boot':'\ud83d\udc62',
+ 'bouquet':'\ud83d\udc90',
+ 'bowing_man':'\ud83d\ude47',
+ 'bow_and_arrow':'\ud83c\udff9',
+ 'bowing_woman':'\ud83d\ude47\u2640\ufe0f',
+ 'bowling':'\ud83c\udfb3',
+ 'boxing_glove':'\ud83e\udd4a',
+ 'boy':'\ud83d\udc66',
+ 'bread':'\ud83c\udf5e',
+ 'bride_with_veil':'\ud83d\udc70',
+ 'bridge_at_night':'\ud83c\udf09',
+ 'briefcase':'\ud83d\udcbc',
+ 'broken_heart':'\ud83d\udc94',
+ 'bug':'\ud83d\udc1b',
+ 'building_construction':'\ud83c\udfd7',
+ 'bulb':'\ud83d\udca1',
+ 'bullettrain_front':'\ud83d\ude85',
+ 'bullettrain_side':'\ud83d\ude84',
+ 'burrito':'\ud83c\udf2f',
+ 'bus':'\ud83d\ude8c',
+ 'business_suit_levitating':'\ud83d\udd74',
+ 'busstop':'\ud83d\ude8f',
+ 'bust_in_silhouette':'\ud83d\udc64',
+ 'busts_in_silhouette':'\ud83d\udc65',
+ 'butterfly':'\ud83e\udd8b',
+ 'cactus':'\ud83c\udf35',
+ 'cake':'\ud83c\udf70',
+ 'calendar':'\ud83d\udcc6',
+ 'call_me_hand':'\ud83e\udd19',
+ 'calling':'\ud83d\udcf2',
+ 'camel':'\ud83d\udc2b',
+ 'camera':'\ud83d\udcf7',
+ 'camera_flash':'\ud83d\udcf8',
+ 'camping':'\ud83c\udfd5',
+ 'cancer':'\u264b\ufe0f',
+ 'candle':'\ud83d\udd6f',
+ 'candy':'\ud83c\udf6c',
+ 'canoe':'\ud83d\udef6',
+ 'capital_abcd':'\ud83d\udd20',
+ 'capricorn':'\u2651\ufe0f',
+ 'car':'\ud83d\ude97',
+ 'card_file_box':'\ud83d\uddc3',
+ 'card_index':'\ud83d\udcc7',
+ 'card_index_dividers':'\ud83d\uddc2',
+ 'carousel_horse':'\ud83c\udfa0',
+ 'carrot':'\ud83e\udd55',
+ 'cat':'\ud83d\udc31',
+ 'cat2':'\ud83d\udc08',
+ 'cd':'\ud83d\udcbf',
+ 'chains':'\u26d3',
+ 'champagne':'\ud83c\udf7e',
+ 'chart':'\ud83d\udcb9',
+ 'chart_with_downwards_trend':'\ud83d\udcc9',
+ 'chart_with_upwards_trend':'\ud83d\udcc8',
+ 'checkered_flag':'\ud83c\udfc1',
+ 'cheese':'\ud83e\uddc0',
+ 'cherries':'\ud83c\udf52',
+ 'cherry_blossom':'\ud83c\udf38',
+ 'chestnut':'\ud83c\udf30',
+ 'chicken':'\ud83d\udc14',
+ 'children_crossing':'\ud83d\udeb8',
+ 'chipmunk':'\ud83d\udc3f',
+ 'chocolate_bar':'\ud83c\udf6b',
+ 'christmas_tree':'\ud83c\udf84',
+ 'church':'\u26ea\ufe0f',
+ 'cinema':'\ud83c\udfa6',
+ 'circus_tent':'\ud83c\udfaa',
+ 'city_sunrise':'\ud83c\udf07',
+ 'city_sunset':'\ud83c\udf06',
+ 'cityscape':'\ud83c\udfd9',
+ 'cl':'\ud83c\udd91',
+ 'clamp':'\ud83d\udddc',
+ 'clap':'\ud83d\udc4f',
+ 'clapper':'\ud83c\udfac',
+ 'classical_building':'\ud83c\udfdb',
+ 'clinking_glasses':'\ud83e\udd42',
+ 'clipboard':'\ud83d\udccb',
+ 'clock1':'\ud83d\udd50',
+ 'clock10':'\ud83d\udd59',
+ 'clock1030':'\ud83d\udd65',
+ 'clock11':'\ud83d\udd5a',
+ 'clock1130':'\ud83d\udd66',
+ 'clock12':'\ud83d\udd5b',
+ 'clock1230':'\ud83d\udd67',
+ 'clock130':'\ud83d\udd5c',
+ 'clock2':'\ud83d\udd51',
+ 'clock230':'\ud83d\udd5d',
+ 'clock3':'\ud83d\udd52',
+ 'clock330':'\ud83d\udd5e',
+ 'clock4':'\ud83d\udd53',
+ 'clock430':'\ud83d\udd5f',
+ 'clock5':'\ud83d\udd54',
+ 'clock530':'\ud83d\udd60',
+ 'clock6':'\ud83d\udd55',
+ 'clock630':'\ud83d\udd61',
+ 'clock7':'\ud83d\udd56',
+ 'clock730':'\ud83d\udd62',
+ 'clock8':'\ud83d\udd57',
+ 'clock830':'\ud83d\udd63',
+ 'clock9':'\ud83d\udd58',
+ 'clock930':'\ud83d\udd64',
+ 'closed_book':'\ud83d\udcd5',
+ 'closed_lock_with_key':'\ud83d\udd10',
+ 'closed_umbrella':'\ud83c\udf02',
+ 'cloud':'\u2601\ufe0f',
+ 'cloud_with_lightning':'\ud83c\udf29',
+ 'cloud_with_lightning_and_rain':'\u26c8',
+ 'cloud_with_rain':'\ud83c\udf27',
+ 'cloud_with_snow':'\ud83c\udf28',
+ 'clown_face':'\ud83e\udd21',
+ 'clubs':'\u2663\ufe0f',
+ 'cocktail':'\ud83c\udf78',
+ 'coffee':'\u2615\ufe0f',
+ 'coffin':'\u26b0\ufe0f',
+ 'cold_sweat':'\ud83d\ude30',
+ 'comet':'\u2604\ufe0f',
+ 'computer':'\ud83d\udcbb',
+ 'computer_mouse':'\ud83d\uddb1',
+ 'confetti_ball':'\ud83c\udf8a',
+ 'confounded':'\ud83d\ude16',
+ 'confused':'\ud83d\ude15',
+ 'congratulations':'\u3297\ufe0f',
+ 'construction':'\ud83d\udea7',
+ 'construction_worker_man':'\ud83d\udc77',
+ 'construction_worker_woman':'\ud83d\udc77\u2640\ufe0f',
+ 'control_knobs':'\ud83c\udf9b',
+ 'convenience_store':'\ud83c\udfea',
+ 'cookie':'\ud83c\udf6a',
+ 'cool':'\ud83c\udd92',
+ 'policeman':'\ud83d\udc6e',
+ 'copyright':'\u00a9\ufe0f',
+ 'corn':'\ud83c\udf3d',
+ 'couch_and_lamp':'\ud83d\udecb',
+ 'couple':'\ud83d\udc6b',
+ 'couple_with_heart_woman_man':'\ud83d\udc91',
+ 'couple_with_heart_man_man':'\ud83d\udc68\u2764\ufe0f\ud83d\udc68',
+ 'couple_with_heart_woman_woman':'\ud83d\udc69\u2764\ufe0f\ud83d\udc69',
+ 'couplekiss_man_man':'\ud83d\udc68\u2764\ufe0f\ud83d\udc8b\ud83d\udc68',
+ 'couplekiss_man_woman':'\ud83d\udc8f',
+ 'couplekiss_woman_woman':'\ud83d\udc69\u2764\ufe0f\ud83d\udc8b\ud83d\udc69',
+ 'cow':'\ud83d\udc2e',
+ 'cow2':'\ud83d\udc04',
+ 'cowboy_hat_face':'\ud83e\udd20',
+ 'crab':'\ud83e\udd80',
+ 'crayon':'\ud83d\udd8d',
+ 'credit_card':'\ud83d\udcb3',
+ 'crescent_moon':'\ud83c\udf19',
+ 'cricket':'\ud83c\udfcf',
+ 'crocodile':'\ud83d\udc0a',
+ 'croissant':'\ud83e\udd50',
+ 'crossed_fingers':'\ud83e\udd1e',
+ 'crossed_flags':'\ud83c\udf8c',
+ 'crossed_swords':'\u2694\ufe0f',
+ 'crown':'\ud83d\udc51',
+ 'cry':'\ud83d\ude22',
+ 'crying_cat_face':'\ud83d\ude3f',
+ 'crystal_ball':'\ud83d\udd2e',
+ 'cucumber':'\ud83e\udd52',
+ 'cupid':'\ud83d\udc98',
+ 'curly_loop':'\u27b0',
+ 'currency_exchange':'\ud83d\udcb1',
+ 'curry':'\ud83c\udf5b',
+ 'custard':'\ud83c\udf6e',
+ 'customs':'\ud83d\udec3',
+ 'cyclone':'\ud83c\udf00',
+ 'dagger':'\ud83d\udde1',
+ 'dancer':'\ud83d\udc83',
+ 'dancing_women':'\ud83d\udc6f',
+ 'dancing_men':'\ud83d\udc6f\u2642\ufe0f',
+ 'dango':'\ud83c\udf61',
+ 'dark_sunglasses':'\ud83d\udd76',
+ 'dart':'\ud83c\udfaf',
+ 'dash':'\ud83d\udca8',
+ 'date':'\ud83d\udcc5',
+ 'deciduous_tree':'\ud83c\udf33',
+ 'deer':'\ud83e\udd8c',
+ 'department_store':'\ud83c\udfec',
+ 'derelict_house':'\ud83c\udfda',
+ 'desert':'\ud83c\udfdc',
+ 'desert_island':'\ud83c\udfdd',
+ 'desktop_computer':'\ud83d\udda5',
+ 'male_detective':'\ud83d\udd75\ufe0f',
+ 'diamond_shape_with_a_dot_inside':'\ud83d\udca0',
+ 'diamonds':'\u2666\ufe0f',
+ 'disappointed':'\ud83d\ude1e',
+ 'disappointed_relieved':'\ud83d\ude25',
+ 'dizzy':'\ud83d\udcab',
+ 'dizzy_face':'\ud83d\ude35',
+ 'do_not_litter':'\ud83d\udeaf',
+ 'dog':'\ud83d\udc36',
+ 'dog2':'\ud83d\udc15',
+ 'dollar':'\ud83d\udcb5',
+ 'dolls':'\ud83c\udf8e',
+ 'dolphin':'\ud83d\udc2c',
+ 'door':'\ud83d\udeaa',
+ 'doughnut':'\ud83c\udf69',
+ 'dove':'\ud83d\udd4a',
+ 'dragon':'\ud83d\udc09',
+ 'dragon_face':'\ud83d\udc32',
+ 'dress':'\ud83d\udc57',
+ 'dromedary_camel':'\ud83d\udc2a',
+ 'drooling_face':'\ud83e\udd24',
+ 'droplet':'\ud83d\udca7',
+ 'drum':'\ud83e\udd41',
+ 'duck':'\ud83e\udd86',
+ 'dvd':'\ud83d\udcc0',
+ 'e-mail':'\ud83d\udce7',
+ 'eagle':'\ud83e\udd85',
+ 'ear':'\ud83d\udc42',
+ 'ear_of_rice':'\ud83c\udf3e',
+ 'earth_africa':'\ud83c\udf0d',
+ 'earth_americas':'\ud83c\udf0e',
+ 'earth_asia':'\ud83c\udf0f',
+ 'egg':'\ud83e\udd5a',
+ 'eggplant':'\ud83c\udf46',
+ 'eight_pointed_black_star':'\u2734\ufe0f',
+ 'eight_spoked_asterisk':'\u2733\ufe0f',
+ 'electric_plug':'\ud83d\udd0c',
+ 'elephant':'\ud83d\udc18',
+ 'email':'\u2709\ufe0f',
+ 'end':'\ud83d\udd1a',
+ 'envelope_with_arrow':'\ud83d\udce9',
+ 'euro':'\ud83d\udcb6',
+ 'european_castle':'\ud83c\udff0',
+ 'european_post_office':'\ud83c\udfe4',
+ 'evergreen_tree':'\ud83c\udf32',
+ 'exclamation':'\u2757\ufe0f',
+ 'expressionless':'\ud83d\ude11',
+ 'eye':'\ud83d\udc41',
+ 'eye_speech_bubble':'\ud83d\udc41\ud83d\udde8',
+ 'eyeglasses':'\ud83d\udc53',
+ 'eyes':'\ud83d\udc40',
+ 'face_with_head_bandage':'\ud83e\udd15',
+ 'face_with_thermometer':'\ud83e\udd12',
+ 'fist_oncoming':'\ud83d\udc4a',
+ 'factory':'\ud83c\udfed',
+ 'fallen_leaf':'\ud83c\udf42',
+ 'family_man_woman_boy':'\ud83d\udc6a',
+ 'family_man_boy':'\ud83d\udc68\ud83d\udc66',
+ 'family_man_boy_boy':'\ud83d\udc68\ud83d\udc66\ud83d\udc66',
+ 'family_man_girl':'\ud83d\udc68\ud83d\udc67',
+ 'family_man_girl_boy':'\ud83d\udc68\ud83d\udc67\ud83d\udc66',
+ 'family_man_girl_girl':'\ud83d\udc68\ud83d\udc67\ud83d\udc67',
+ 'family_man_man_boy':'\ud83d\udc68\ud83d\udc68\ud83d\udc66',
+ 'family_man_man_boy_boy':'\ud83d\udc68\ud83d\udc68\ud83d\udc66\ud83d\udc66',
+ 'family_man_man_girl':'\ud83d\udc68\ud83d\udc68\ud83d\udc67',
+ 'family_man_man_girl_boy':'\ud83d\udc68\ud83d\udc68\ud83d\udc67\ud83d\udc66',
+ 'family_man_man_girl_girl':'\ud83d\udc68\ud83d\udc68\ud83d\udc67\ud83d\udc67',
+ 'family_man_woman_boy_boy':'\ud83d\udc68\ud83d\udc69\ud83d\udc66\ud83d\udc66',
+ 'family_man_woman_girl':'\ud83d\udc68\ud83d\udc69\ud83d\udc67',
+ 'family_man_woman_girl_boy':'\ud83d\udc68\ud83d\udc69\ud83d\udc67\ud83d\udc66',
+ 'family_man_woman_girl_girl':'\ud83d\udc68\ud83d\udc69\ud83d\udc67\ud83d\udc67',
+ 'family_woman_boy':'\ud83d\udc69\ud83d\udc66',
+ 'family_woman_boy_boy':'\ud83d\udc69\ud83d\udc66\ud83d\udc66',
+ 'family_woman_girl':'\ud83d\udc69\ud83d\udc67',
+ 'family_woman_girl_boy':'\ud83d\udc69\ud83d\udc67\ud83d\udc66',
+ 'family_woman_girl_girl':'\ud83d\udc69\ud83d\udc67\ud83d\udc67',
+ 'family_woman_woman_boy':'\ud83d\udc69\ud83d\udc69\ud83d\udc66',
+ 'family_woman_woman_boy_boy':'\ud83d\udc69\ud83d\udc69\ud83d\udc66\ud83d\udc66',
+ 'family_woman_woman_girl':'\ud83d\udc69\ud83d\udc69\ud83d\udc67',
+ 'family_woman_woman_girl_boy':'\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc66',
+ 'family_woman_woman_girl_girl':'\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc67',
+ 'fast_forward':'\u23e9',
+ 'fax':'\ud83d\udce0',
+ 'fearful':'\ud83d\ude28',
+ 'feet':'\ud83d\udc3e',
+ 'female_detective':'\ud83d\udd75\ufe0f\u2640\ufe0f',
+ 'ferris_wheel':'\ud83c\udfa1',
+ 'ferry':'\u26f4',
+ 'field_hockey':'\ud83c\udfd1',
+ 'file_cabinet':'\ud83d\uddc4',
+ 'file_folder':'\ud83d\udcc1',
+ 'film_projector':'\ud83d\udcfd',
+ 'film_strip':'\ud83c\udf9e',
+ 'fire':'\ud83d\udd25',
+ 'fire_engine':'\ud83d\ude92',
+ 'fireworks':'\ud83c\udf86',
+ 'first_quarter_moon':'\ud83c\udf13',
+ 'first_quarter_moon_with_face':'\ud83c\udf1b',
+ 'fish':'\ud83d\udc1f',
+ 'fish_cake':'\ud83c\udf65',
+ 'fishing_pole_and_fish':'\ud83c\udfa3',
+ 'fist_raised':'\u270a',
+ 'fist_left':'\ud83e\udd1b',
+ 'fist_right':'\ud83e\udd1c',
+ 'flags':'\ud83c\udf8f',
+ 'flashlight':'\ud83d\udd26',
+ 'fleur_de_lis':'\u269c\ufe0f',
+ 'flight_arrival':'\ud83d\udeec',
+ 'flight_departure':'\ud83d\udeeb',
+ 'floppy_disk':'\ud83d\udcbe',
+ 'flower_playing_cards':'\ud83c\udfb4',
+ 'flushed':'\ud83d\ude33',
+ 'fog':'\ud83c\udf2b',
+ 'foggy':'\ud83c\udf01',
+ 'football':'\ud83c\udfc8',
+ 'footprints':'\ud83d\udc63',
+ 'fork_and_knife':'\ud83c\udf74',
+ 'fountain':'\u26f2\ufe0f',
+ 'fountain_pen':'\ud83d\udd8b',
+ 'four_leaf_clover':'\ud83c\udf40',
+ 'fox_face':'\ud83e\udd8a',
+ 'framed_picture':'\ud83d\uddbc',
+ 'free':'\ud83c\udd93',
+ 'fried_egg':'\ud83c\udf73',
+ 'fried_shrimp':'\ud83c\udf64',
+ 'fries':'\ud83c\udf5f',
+ 'frog':'\ud83d\udc38',
+ 'frowning':'\ud83d\ude26',
+ 'frowning_face':'\u2639\ufe0f',
+ 'frowning_man':'\ud83d\ude4d\u2642\ufe0f',
+ 'frowning_woman':'\ud83d\ude4d',
+ 'middle_finger':'\ud83d\udd95',
+ 'fuelpump':'\u26fd\ufe0f',
+ 'full_moon':'\ud83c\udf15',
+ 'full_moon_with_face':'\ud83c\udf1d',
+ 'funeral_urn':'\u26b1\ufe0f',
+ 'game_die':'\ud83c\udfb2',
+ 'gear':'\u2699\ufe0f',
+ 'gem':'\ud83d\udc8e',
+ 'gemini':'\u264a\ufe0f',
+ 'ghost':'\ud83d\udc7b',
+ 'gift':'\ud83c\udf81',
+ 'gift_heart':'\ud83d\udc9d',
+ 'girl':'\ud83d\udc67',
+ 'globe_with_meridians':'\ud83c\udf10',
+ 'goal_net':'\ud83e\udd45',
+ 'goat':'\ud83d\udc10',
+ 'golf':'\u26f3\ufe0f',
+ 'golfing_man':'\ud83c\udfcc\ufe0f',
+ 'golfing_woman':'\ud83c\udfcc\ufe0f\u2640\ufe0f',
+ 'gorilla':'\ud83e\udd8d',
+ 'grapes':'\ud83c\udf47',
+ 'green_apple':'\ud83c\udf4f',
+ 'green_book':'\ud83d\udcd7',
+ 'green_heart':'\ud83d\udc9a',
+ 'green_salad':'\ud83e\udd57',
+ 'grey_exclamation':'\u2755',
+ 'grey_question':'\u2754',
+ 'grimacing':'\ud83d\ude2c',
+ 'grin':'\ud83d\ude01',
+ 'grinning':'\ud83d\ude00',
+ 'guardsman':'\ud83d\udc82',
+ 'guardswoman':'\ud83d\udc82\u2640\ufe0f',
+ 'guitar':'\ud83c\udfb8',
+ 'gun':'\ud83d\udd2b',
+ 'haircut_woman':'\ud83d\udc87',
+ 'haircut_man':'\ud83d\udc87\u2642\ufe0f',
+ 'hamburger':'\ud83c\udf54',
+ 'hammer':'\ud83d\udd28',
+ 'hammer_and_pick':'\u2692',
+ 'hammer_and_wrench':'\ud83d\udee0',
+ 'hamster':'\ud83d\udc39',
+ 'hand':'\u270b',
+ 'handbag':'\ud83d\udc5c',
+ 'handshake':'\ud83e\udd1d',
+ 'hankey':'\ud83d\udca9',
+ 'hatched_chick':'\ud83d\udc25',
+ 'hatching_chick':'\ud83d\udc23',
+ 'headphones':'\ud83c\udfa7',
+ 'hear_no_evil':'\ud83d\ude49',
+ 'heart':'\u2764\ufe0f',
+ 'heart_decoration':'\ud83d\udc9f',
+ 'heart_eyes':'\ud83d\ude0d',
+ 'heart_eyes_cat':'\ud83d\ude3b',
+ 'heartbeat':'\ud83d\udc93',
+ 'heartpulse':'\ud83d\udc97',
+ 'hearts':'\u2665\ufe0f',
+ 'heavy_check_mark':'\u2714\ufe0f',
+ 'heavy_division_sign':'\u2797',
+ 'heavy_dollar_sign':'\ud83d\udcb2',
+ 'heavy_heart_exclamation':'\u2763\ufe0f',
+ 'heavy_minus_sign':'\u2796',
+ 'heavy_multiplication_x':'\u2716\ufe0f',
+ 'heavy_plus_sign':'\u2795',
+ 'helicopter':'\ud83d\ude81',
+ 'herb':'\ud83c\udf3f',
+ 'hibiscus':'\ud83c\udf3a',
+ 'high_brightness':'\ud83d\udd06',
+ 'high_heel':'\ud83d\udc60',
+ 'hocho':'\ud83d\udd2a',
+ 'hole':'\ud83d\udd73',
+ 'honey_pot':'\ud83c\udf6f',
+ 'horse':'\ud83d\udc34',
+ 'horse_racing':'\ud83c\udfc7',
+ 'hospital':'\ud83c\udfe5',
+ 'hot_pepper':'\ud83c\udf36',
+ 'hotdog':'\ud83c\udf2d',
+ 'hotel':'\ud83c\udfe8',
+ 'hotsprings':'\u2668\ufe0f',
+ 'hourglass':'\u231b\ufe0f',
+ 'hourglass_flowing_sand':'\u23f3',
+ 'house':'\ud83c\udfe0',
+ 'house_with_garden':'\ud83c\udfe1',
+ 'houses':'\ud83c\udfd8',
+ 'hugs':'\ud83e\udd17',
+ 'hushed':'\ud83d\ude2f',
+ 'ice_cream':'\ud83c\udf68',
+ 'ice_hockey':'\ud83c\udfd2',
+ 'ice_skate':'\u26f8',
+ 'icecream':'\ud83c\udf66',
+ 'id':'\ud83c\udd94',
+ 'ideograph_advantage':'\ud83c\ude50',
+ 'imp':'\ud83d\udc7f',
+ 'inbox_tray':'\ud83d\udce5',
+ 'incoming_envelope':'\ud83d\udce8',
+ 'tipping_hand_woman':'\ud83d\udc81',
+ 'information_source':'\u2139\ufe0f',
+ 'innocent':'\ud83d\ude07',
+ 'interrobang':'\u2049\ufe0f',
+ 'iphone':'\ud83d\udcf1',
+ 'izakaya_lantern':'\ud83c\udfee',
+ 'jack_o_lantern':'\ud83c\udf83',
+ 'japan':'\ud83d\uddfe',
+ 'japanese_castle':'\ud83c\udfef',
+ 'japanese_goblin':'\ud83d\udc7a',
+ 'japanese_ogre':'\ud83d\udc79',
+ 'jeans':'\ud83d\udc56',
+ 'joy':'\ud83d\ude02',
+ 'joy_cat':'\ud83d\ude39',
+ 'joystick':'\ud83d\udd79',
+ 'kaaba':'\ud83d\udd4b',
+ 'key':'\ud83d\udd11',
+ 'keyboard':'\u2328\ufe0f',
+ 'keycap_ten':'\ud83d\udd1f',
+ 'kick_scooter':'\ud83d\udef4',
+ 'kimono':'\ud83d\udc58',
+ 'kiss':'\ud83d\udc8b',
+ 'kissing':'\ud83d\ude17',
+ 'kissing_cat':'\ud83d\ude3d',
+ 'kissing_closed_eyes':'\ud83d\ude1a',
+ 'kissing_heart':'\ud83d\ude18',
+ 'kissing_smiling_eyes':'\ud83d\ude19',
+ 'kiwi_fruit':'\ud83e\udd5d',
+ 'koala':'\ud83d\udc28',
+ 'koko':'\ud83c\ude01',
+ 'label':'\ud83c\udff7',
+ 'large_blue_circle':'\ud83d\udd35',
+ 'large_blue_diamond':'\ud83d\udd37',
+ 'large_orange_diamond':'\ud83d\udd36',
+ 'last_quarter_moon':'\ud83c\udf17',
+ 'last_quarter_moon_with_face':'\ud83c\udf1c',
+ 'latin_cross':'\u271d\ufe0f',
+ 'laughing':'\ud83d\ude06',
+ 'leaves':'\ud83c\udf43',
+ 'ledger':'\ud83d\udcd2',
+ 'left_luggage':'\ud83d\udec5',
+ 'left_right_arrow':'\u2194\ufe0f',
+ 'leftwards_arrow_with_hook':'\u21a9\ufe0f',
+ 'lemon':'\ud83c\udf4b',
+ 'leo':'\u264c\ufe0f',
+ 'leopard':'\ud83d\udc06',
+ 'level_slider':'\ud83c\udf9a',
+ 'libra':'\u264e\ufe0f',
+ 'light_rail':'\ud83d\ude88',
+ 'link':'\ud83d\udd17',
+ 'lion':'\ud83e\udd81',
+ 'lips':'\ud83d\udc44',
+ 'lipstick':'\ud83d\udc84',
+ 'lizard':'\ud83e\udd8e',
+ 'lock':'\ud83d\udd12',
+ 'lock_with_ink_pen':'\ud83d\udd0f',
+ 'lollipop':'\ud83c\udf6d',
+ 'loop':'\u27bf',
+ 'loud_sound':'\ud83d\udd0a',
+ 'loudspeaker':'\ud83d\udce2',
+ 'love_hotel':'\ud83c\udfe9',
+ 'love_letter':'\ud83d\udc8c',
+ 'low_brightness':'\ud83d\udd05',
+ 'lying_face':'\ud83e\udd25',
+ 'm':'\u24c2\ufe0f',
+ 'mag':'\ud83d\udd0d',
+ 'mag_right':'\ud83d\udd0e',
+ 'mahjong':'\ud83c\udc04\ufe0f',
+ 'mailbox':'\ud83d\udceb',
+ 'mailbox_closed':'\ud83d\udcea',
+ 'mailbox_with_mail':'\ud83d\udcec',
+ 'mailbox_with_no_mail':'\ud83d\udced',
+ 'man':'\ud83d\udc68',
+ 'man_artist':'\ud83d\udc68\ud83c\udfa8',
+ 'man_astronaut':'\ud83d\udc68\ud83d\ude80',
+ 'man_cartwheeling':'\ud83e\udd38\u2642\ufe0f',
+ 'man_cook':'\ud83d\udc68\ud83c\udf73',
+ 'man_dancing':'\ud83d\udd7a',
+ 'man_facepalming':'\ud83e\udd26\u2642\ufe0f',
+ 'man_factory_worker':'\ud83d\udc68\ud83c\udfed',
+ 'man_farmer':'\ud83d\udc68\ud83c\udf3e',
+ 'man_firefighter':'\ud83d\udc68\ud83d\ude92',
+ 'man_health_worker':'\ud83d\udc68\u2695\ufe0f',
+ 'man_in_tuxedo':'\ud83e\udd35',
+ 'man_judge':'\ud83d\udc68\u2696\ufe0f',
+ 'man_juggling':'\ud83e\udd39\u2642\ufe0f',
+ 'man_mechanic':'\ud83d\udc68\ud83d\udd27',
+ 'man_office_worker':'\ud83d\udc68\ud83d\udcbc',
+ 'man_pilot':'\ud83d\udc68\u2708\ufe0f',
+ 'man_playing_handball':'\ud83e\udd3e\u2642\ufe0f',
+ 'man_playing_water_polo':'\ud83e\udd3d\u2642\ufe0f',
+ 'man_scientist':'\ud83d\udc68\ud83d\udd2c',
+ 'man_shrugging':'\ud83e\udd37\u2642\ufe0f',
+ 'man_singer':'\ud83d\udc68\ud83c\udfa4',
+ 'man_student':'\ud83d\udc68\ud83c\udf93',
+ 'man_teacher':'\ud83d\udc68\ud83c\udfeb',
+ 'man_technologist':'\ud83d\udc68\ud83d\udcbb',
+ 'man_with_gua_pi_mao':'\ud83d\udc72',
+ 'man_with_turban':'\ud83d\udc73',
+ 'tangerine':'\ud83c\udf4a',
+ 'mans_shoe':'\ud83d\udc5e',
+ 'mantelpiece_clock':'\ud83d\udd70',
+ 'maple_leaf':'\ud83c\udf41',
+ 'martial_arts_uniform':'\ud83e\udd4b',
+ 'mask':'\ud83d\ude37',
+ 'massage_woman':'\ud83d\udc86',
+ 'massage_man':'\ud83d\udc86\u2642\ufe0f',
+ 'meat_on_bone':'\ud83c\udf56',
+ 'medal_military':'\ud83c\udf96',
+ 'medal_sports':'\ud83c\udfc5',
+ 'mega':'\ud83d\udce3',
+ 'melon':'\ud83c\udf48',
+ 'memo':'\ud83d\udcdd',
+ 'men_wrestling':'\ud83e\udd3c\u2642\ufe0f',
+ 'menorah':'\ud83d\udd4e',
+ 'mens':'\ud83d\udeb9',
+ 'metal':'\ud83e\udd18',
+ 'metro':'\ud83d\ude87',
+ 'microphone':'\ud83c\udfa4',
+ 'microscope':'\ud83d\udd2c',
+ 'milk_glass':'\ud83e\udd5b',
+ 'milky_way':'\ud83c\udf0c',
+ 'minibus':'\ud83d\ude90',
+ 'minidisc':'\ud83d\udcbd',
+ 'mobile_phone_off':'\ud83d\udcf4',
+ 'money_mouth_face':'\ud83e\udd11',
+ 'money_with_wings':'\ud83d\udcb8',
+ 'moneybag':'\ud83d\udcb0',
+ 'monkey':'\ud83d\udc12',
+ 'monkey_face':'\ud83d\udc35',
+ 'monorail':'\ud83d\ude9d',
+ 'moon':'\ud83c\udf14',
+ 'mortar_board':'\ud83c\udf93',
+ 'mosque':'\ud83d\udd4c',
+ 'motor_boat':'\ud83d\udee5',
+ 'motor_scooter':'\ud83d\udef5',
+ 'motorcycle':'\ud83c\udfcd',
+ 'motorway':'\ud83d\udee3',
+ 'mount_fuji':'\ud83d\uddfb',
+ 'mountain':'\u26f0',
+ 'mountain_biking_man':'\ud83d\udeb5',
+ 'mountain_biking_woman':'\ud83d\udeb5\u2640\ufe0f',
+ 'mountain_cableway':'\ud83d\udea0',
+ 'mountain_railway':'\ud83d\ude9e',
+ 'mountain_snow':'\ud83c\udfd4',
+ 'mouse':'\ud83d\udc2d',
+ 'mouse2':'\ud83d\udc01',
+ 'movie_camera':'\ud83c\udfa5',
+ 'moyai':'\ud83d\uddff',
+ 'mrs_claus':'\ud83e\udd36',
+ 'muscle':'\ud83d\udcaa',
+ 'mushroom':'\ud83c\udf44',
+ 'musical_keyboard':'\ud83c\udfb9',
+ 'musical_note':'\ud83c\udfb5',
+ 'musical_score':'\ud83c\udfbc',
+ 'mute':'\ud83d\udd07',
+ 'nail_care':'\ud83d\udc85',
+ 'name_badge':'\ud83d\udcdb',
+ 'national_park':'\ud83c\udfde',
+ 'nauseated_face':'\ud83e\udd22',
+ 'necktie':'\ud83d\udc54',
+ 'negative_squared_cross_mark':'\u274e',
+ 'nerd_face':'\ud83e\udd13',
+ 'neutral_face':'\ud83d\ude10',
+ 'new':'\ud83c\udd95',
+ 'new_moon':'\ud83c\udf11',
+ 'new_moon_with_face':'\ud83c\udf1a',
+ 'newspaper':'\ud83d\udcf0',
+ 'newspaper_roll':'\ud83d\uddde',
+ 'next_track_button':'\u23ed',
+ 'ng':'\ud83c\udd96',
+ 'no_good_man':'\ud83d\ude45\u2642\ufe0f',
+ 'no_good_woman':'\ud83d\ude45',
+ 'night_with_stars':'\ud83c\udf03',
+ 'no_bell':'\ud83d\udd15',
+ 'no_bicycles':'\ud83d\udeb3',
+ 'no_entry':'\u26d4\ufe0f',
+ 'no_entry_sign':'\ud83d\udeab',
+ 'no_mobile_phones':'\ud83d\udcf5',
+ 'no_mouth':'\ud83d\ude36',
+ 'no_pedestrians':'\ud83d\udeb7',
+ 'no_smoking':'\ud83d\udead',
+ 'non-potable_water':'\ud83d\udeb1',
+ 'nose':'\ud83d\udc43',
+ 'notebook':'\ud83d\udcd3',
+ 'notebook_with_decorative_cover':'\ud83d\udcd4',
+ 'notes':'\ud83c\udfb6',
+ 'nut_and_bolt':'\ud83d\udd29',
+ 'o':'\u2b55\ufe0f',
+ 'o2':'\ud83c\udd7e\ufe0f',
+ 'ocean':'\ud83c\udf0a',
+ 'octopus':'\ud83d\udc19',
+ 'oden':'\ud83c\udf62',
+ 'office':'\ud83c\udfe2',
+ 'oil_drum':'\ud83d\udee2',
+ 'ok':'\ud83c\udd97',
+ 'ok_hand':'\ud83d\udc4c',
+ 'ok_man':'\ud83d\ude46\u2642\ufe0f',
+ 'ok_woman':'\ud83d\ude46',
+ 'old_key':'\ud83d\udddd',
+ 'older_man':'\ud83d\udc74',
+ 'older_woman':'\ud83d\udc75',
+ 'om':'\ud83d\udd49',
+ 'on':'\ud83d\udd1b',
+ 'oncoming_automobile':'\ud83d\ude98',
+ 'oncoming_bus':'\ud83d\ude8d',
+ 'oncoming_police_car':'\ud83d\ude94',
+ 'oncoming_taxi':'\ud83d\ude96',
+ 'open_file_folder':'\ud83d\udcc2',
+ 'open_hands':'\ud83d\udc50',
+ 'open_mouth':'\ud83d\ude2e',
+ 'open_umbrella':'\u2602\ufe0f',
+ 'ophiuchus':'\u26ce',
+ 'orange_book':'\ud83d\udcd9',
+ 'orthodox_cross':'\u2626\ufe0f',
+ 'outbox_tray':'\ud83d\udce4',
+ 'owl':'\ud83e\udd89',
+ 'ox':'\ud83d\udc02',
+ 'package':'\ud83d\udce6',
+ 'page_facing_up':'\ud83d\udcc4',
+ 'page_with_curl':'\ud83d\udcc3',
+ 'pager':'\ud83d\udcdf',
+ 'paintbrush':'\ud83d\udd8c',
+ 'palm_tree':'\ud83c\udf34',
+ 'pancakes':'\ud83e\udd5e',
+ 'panda_face':'\ud83d\udc3c',
+ 'paperclip':'\ud83d\udcce',
+ 'paperclips':'\ud83d\udd87',
+ 'parasol_on_ground':'\u26f1',
+ 'parking':'\ud83c\udd7f\ufe0f',
+ 'part_alternation_mark':'\u303d\ufe0f',
+ 'partly_sunny':'\u26c5\ufe0f',
+ 'passenger_ship':'\ud83d\udef3',
+ 'passport_control':'\ud83d\udec2',
+ 'pause_button':'\u23f8',
+ 'peace_symbol':'\u262e\ufe0f',
+ 'peach':'\ud83c\udf51',
+ 'peanuts':'\ud83e\udd5c',
+ 'pear':'\ud83c\udf50',
+ 'pen':'\ud83d\udd8a',
+ 'pencil2':'\u270f\ufe0f',
+ 'penguin':'\ud83d\udc27',
+ 'pensive':'\ud83d\ude14',
+ 'performing_arts':'\ud83c\udfad',
+ 'persevere':'\ud83d\ude23',
+ 'person_fencing':'\ud83e\udd3a',
+ 'pouting_woman':'\ud83d\ude4e',
+ 'phone':'\u260e\ufe0f',
+ 'pick':'\u26cf',
+ 'pig':'\ud83d\udc37',
+ 'pig2':'\ud83d\udc16',
+ 'pig_nose':'\ud83d\udc3d',
+ 'pill':'\ud83d\udc8a',
+ 'pineapple':'\ud83c\udf4d',
+ 'ping_pong':'\ud83c\udfd3',
+ 'pisces':'\u2653\ufe0f',
+ 'pizza':'\ud83c\udf55',
+ 'place_of_worship':'\ud83d\uded0',
+ 'plate_with_cutlery':'\ud83c\udf7d',
+ 'play_or_pause_button':'\u23ef',
+ 'point_down':'\ud83d\udc47',
+ 'point_left':'\ud83d\udc48',
+ 'point_right':'\ud83d\udc49',
+ 'point_up':'\u261d\ufe0f',
+ 'point_up_2':'\ud83d\udc46',
+ 'police_car':'\ud83d\ude93',
+ 'policewoman':'\ud83d\udc6e\u2640\ufe0f',
+ 'poodle':'\ud83d\udc29',
+ 'popcorn':'\ud83c\udf7f',
+ 'post_office':'\ud83c\udfe3',
+ 'postal_horn':'\ud83d\udcef',
+ 'postbox':'\ud83d\udcee',
+ 'potable_water':'\ud83d\udeb0',
+ 'potato':'\ud83e\udd54',
+ 'pouch':'\ud83d\udc5d',
+ 'poultry_leg':'\ud83c\udf57',
+ 'pound':'\ud83d\udcb7',
+ 'rage':'\ud83d\ude21',
+ 'pouting_cat':'\ud83d\ude3e',
+ 'pouting_man':'\ud83d\ude4e\u2642\ufe0f',
+ 'pray':'\ud83d\ude4f',
+ 'prayer_beads':'\ud83d\udcff',
+ 'pregnant_woman':'\ud83e\udd30',
+ 'previous_track_button':'\u23ee',
+ 'prince':'\ud83e\udd34',
+ 'princess':'\ud83d\udc78',
+ 'printer':'\ud83d\udda8',
+ 'purple_heart':'\ud83d\udc9c',
+ 'purse':'\ud83d\udc5b',
+ 'pushpin':'\ud83d\udccc',
+ 'put_litter_in_its_place':'\ud83d\udeae',
+ 'question':'\u2753',
+ 'rabbit':'\ud83d\udc30',
+ 'rabbit2':'\ud83d\udc07',
+ 'racehorse':'\ud83d\udc0e',
+ 'racing_car':'\ud83c\udfce',
+ 'radio':'\ud83d\udcfb',
+ 'radio_button':'\ud83d\udd18',
+ 'radioactive':'\u2622\ufe0f',
+ 'railway_car':'\ud83d\ude83',
+ 'railway_track':'\ud83d\udee4',
+ 'rainbow':'\ud83c\udf08',
+ 'rainbow_flag':'\ud83c\udff3\ufe0f\ud83c\udf08',
+ 'raised_back_of_hand':'\ud83e\udd1a',
+ 'raised_hand_with_fingers_splayed':'\ud83d\udd90',
+ 'raised_hands':'\ud83d\ude4c',
+ 'raising_hand_woman':'\ud83d\ude4b',
+ 'raising_hand_man':'\ud83d\ude4b\u2642\ufe0f',
+ 'ram':'\ud83d\udc0f',
+ 'ramen':'\ud83c\udf5c',
+ 'rat':'\ud83d\udc00',
+ 'record_button':'\u23fa',
+ 'recycle':'\u267b\ufe0f',
+ 'red_circle':'\ud83d\udd34',
+ 'registered':'\u00ae\ufe0f',
+ 'relaxed':'\u263a\ufe0f',
+ 'relieved':'\ud83d\ude0c',
+ 'reminder_ribbon':'\ud83c\udf97',
+ 'repeat':'\ud83d\udd01',
+ 'repeat_one':'\ud83d\udd02',
+ 'rescue_worker_helmet':'\u26d1',
+ 'restroom':'\ud83d\udebb',
+ 'revolving_hearts':'\ud83d\udc9e',
+ 'rewind':'\u23ea',
+ 'rhinoceros':'\ud83e\udd8f',
+ 'ribbon':'\ud83c\udf80',
+ 'rice':'\ud83c\udf5a',
+ 'rice_ball':'\ud83c\udf59',
+ 'rice_cracker':'\ud83c\udf58',
+ 'rice_scene':'\ud83c\udf91',
+ 'right_anger_bubble':'\ud83d\uddef',
+ 'ring':'\ud83d\udc8d',
+ 'robot':'\ud83e\udd16',
+ 'rocket':'\ud83d\ude80',
+ 'rofl':'\ud83e\udd23',
+ 'roll_eyes':'\ud83d\ude44',
+ 'roller_coaster':'\ud83c\udfa2',
+ 'rooster':'\ud83d\udc13',
+ 'rose':'\ud83c\udf39',
+ 'rosette':'\ud83c\udff5',
+ 'rotating_light':'\ud83d\udea8',
+ 'round_pushpin':'\ud83d\udccd',
+ 'rowing_man':'\ud83d\udea3',
+ 'rowing_woman':'\ud83d\udea3\u2640\ufe0f',
+ 'rugby_football':'\ud83c\udfc9',
+ 'running_man':'\ud83c\udfc3',
+ 'running_shirt_with_sash':'\ud83c\udfbd',
+ 'running_woman':'\ud83c\udfc3\u2640\ufe0f',
+ 'sa':'\ud83c\ude02\ufe0f',
+ 'sagittarius':'\u2650\ufe0f',
+ 'sake':'\ud83c\udf76',
+ 'sandal':'\ud83d\udc61',
+ 'santa':'\ud83c\udf85',
+ 'satellite':'\ud83d\udce1',
+ 'saxophone':'\ud83c\udfb7',
+ 'school':'\ud83c\udfeb',
+ 'school_satchel':'\ud83c\udf92',
+ 'scissors':'\u2702\ufe0f',
+ 'scorpion':'\ud83e\udd82',
+ 'scorpius':'\u264f\ufe0f',
+ 'scream':'\ud83d\ude31',
+ 'scream_cat':'\ud83d\ude40',
+ 'scroll':'\ud83d\udcdc',
+ 'seat':'\ud83d\udcba',
+ 'secret':'\u3299\ufe0f',
+ 'see_no_evil':'\ud83d\ude48',
+ 'seedling':'\ud83c\udf31',
+ 'selfie':'\ud83e\udd33',
+ 'shallow_pan_of_food':'\ud83e\udd58',
+ 'shamrock':'\u2618\ufe0f',
+ 'shark':'\ud83e\udd88',
+ 'shaved_ice':'\ud83c\udf67',
+ 'sheep':'\ud83d\udc11',
+ 'shell':'\ud83d\udc1a',
+ 'shield':'\ud83d\udee1',
+ 'shinto_shrine':'\u26e9',
+ 'ship':'\ud83d\udea2',
+ 'shirt':'\ud83d\udc55',
+ 'shopping':'\ud83d\udecd',
+ 'shopping_cart':'\ud83d\uded2',
+ 'shower':'\ud83d\udebf',
+ 'shrimp':'\ud83e\udd90',
+ 'signal_strength':'\ud83d\udcf6',
+ 'six_pointed_star':'\ud83d\udd2f',
+ 'ski':'\ud83c\udfbf',
+ 'skier':'\u26f7',
+ 'skull':'\ud83d\udc80',
+ 'skull_and_crossbones':'\u2620\ufe0f',
+ 'sleeping':'\ud83d\ude34',
+ 'sleeping_bed':'\ud83d\udecc',
+ 'sleepy':'\ud83d\ude2a',
+ 'slightly_frowning_face':'\ud83d\ude41',
+ 'slightly_smiling_face':'\ud83d\ude42',
+ 'slot_machine':'\ud83c\udfb0',
+ 'small_airplane':'\ud83d\udee9',
+ 'small_blue_diamond':'\ud83d\udd39',
+ 'small_orange_diamond':'\ud83d\udd38',
+ 'small_red_triangle':'\ud83d\udd3a',
+ 'small_red_triangle_down':'\ud83d\udd3b',
+ 'smile':'\ud83d\ude04',
+ 'smile_cat':'\ud83d\ude38',
+ 'smiley':'\ud83d\ude03',
+ 'smiley_cat':'\ud83d\ude3a',
+ 'smiling_imp':'\ud83d\ude08',
+ 'smirk':'\ud83d\ude0f',
+ 'smirk_cat':'\ud83d\ude3c',
+ 'smoking':'\ud83d\udeac',
+ 'snail':'\ud83d\udc0c',
+ 'snake':'\ud83d\udc0d',
+ 'sneezing_face':'\ud83e\udd27',
+ 'snowboarder':'\ud83c\udfc2',
+ 'snowflake':'\u2744\ufe0f',
+ 'snowman':'\u26c4\ufe0f',
+ 'snowman_with_snow':'\u2603\ufe0f',
+ 'sob':'\ud83d\ude2d',
+ 'soccer':'\u26bd\ufe0f',
+ 'soon':'\ud83d\udd1c',
+ 'sos':'\ud83c\udd98',
+ 'sound':'\ud83d\udd09',
+ 'space_invader':'\ud83d\udc7e',
+ 'spades':'\u2660\ufe0f',
+ 'spaghetti':'\ud83c\udf5d',
+ 'sparkle':'\u2747\ufe0f',
+ 'sparkler':'\ud83c\udf87',
+ 'sparkles':'\u2728',
+ 'sparkling_heart':'\ud83d\udc96',
+ 'speak_no_evil':'\ud83d\ude4a',
+ 'speaker':'\ud83d\udd08',
+ 'speaking_head':'\ud83d\udde3',
+ 'speech_balloon':'\ud83d\udcac',
+ 'speedboat':'\ud83d\udea4',
+ 'spider':'\ud83d\udd77',
+ 'spider_web':'\ud83d\udd78',
+ 'spiral_calendar':'\ud83d\uddd3',
+ 'spiral_notepad':'\ud83d\uddd2',
+ 'spoon':'\ud83e\udd44',
+ 'squid':'\ud83e\udd91',
+ 'stadium':'\ud83c\udfdf',
+ 'star':'\u2b50\ufe0f',
+ 'star2':'\ud83c\udf1f',
+ 'star_and_crescent':'\u262a\ufe0f',
+ 'star_of_david':'\u2721\ufe0f',
+ 'stars':'\ud83c\udf20',
+ 'station':'\ud83d\ude89',
+ 'statue_of_liberty':'\ud83d\uddfd',
+ 'steam_locomotive':'\ud83d\ude82',
+ 'stew':'\ud83c\udf72',
+ 'stop_button':'\u23f9',
+ 'stop_sign':'\ud83d\uded1',
+ 'stopwatch':'\u23f1',
+ 'straight_ruler':'\ud83d\udccf',
+ 'strawberry':'\ud83c\udf53',
+ 'stuck_out_tongue':'\ud83d\ude1b',
+ 'stuck_out_tongue_closed_eyes':'\ud83d\ude1d',
+ 'stuck_out_tongue_winking_eye':'\ud83d\ude1c',
+ 'studio_microphone':'\ud83c\udf99',
+ 'stuffed_flatbread':'\ud83e\udd59',
+ 'sun_behind_large_cloud':'\ud83c\udf25',
+ 'sun_behind_rain_cloud':'\ud83c\udf26',
+ 'sun_behind_small_cloud':'\ud83c\udf24',
+ 'sun_with_face':'\ud83c\udf1e',
+ 'sunflower':'\ud83c\udf3b',
+ 'sunglasses':'\ud83d\ude0e',
+ 'sunny':'\u2600\ufe0f',
+ 'sunrise':'\ud83c\udf05',
+ 'sunrise_over_mountains':'\ud83c\udf04',
+ 'surfing_man':'\ud83c\udfc4',
+ 'surfing_woman':'\ud83c\udfc4\u2640\ufe0f',
+ 'sushi':'\ud83c\udf63',
+ 'suspension_railway':'\ud83d\ude9f',
+ 'sweat':'\ud83d\ude13',
+ 'sweat_drops':'\ud83d\udca6',
+ 'sweat_smile':'\ud83d\ude05',
+ 'sweet_potato':'\ud83c\udf60',
+ 'swimming_man':'\ud83c\udfca',
+ 'swimming_woman':'\ud83c\udfca\u2640\ufe0f',
+ 'symbols':'\ud83d\udd23',
+ 'synagogue':'\ud83d\udd4d',
+ 'syringe':'\ud83d\udc89',
+ 'taco':'\ud83c\udf2e',
+ 'tada':'\ud83c\udf89',
+ 'tanabata_tree':'\ud83c\udf8b',
+ 'taurus':'\u2649\ufe0f',
+ 'taxi':'\ud83d\ude95',
+ 'tea':'\ud83c\udf75',
+ 'telephone_receiver':'\ud83d\udcde',
+ 'telescope':'\ud83d\udd2d',
+ 'tennis':'\ud83c\udfbe',
+ 'tent':'\u26fa\ufe0f',
+ 'thermometer':'\ud83c\udf21',
+ 'thinking':'\ud83e\udd14',
+ 'thought_balloon':'\ud83d\udcad',
+ 'ticket':'\ud83c\udfab',
+ 'tickets':'\ud83c\udf9f',
+ 'tiger':'\ud83d\udc2f',
+ 'tiger2':'\ud83d\udc05',
+ 'timer_clock':'\u23f2',
+ 'tipping_hand_man':'\ud83d\udc81\u2642\ufe0f',
+ 'tired_face':'\ud83d\ude2b',
+ 'tm':'\u2122\ufe0f',
+ 'toilet':'\ud83d\udebd',
+ 'tokyo_tower':'\ud83d\uddfc',
+ 'tomato':'\ud83c\udf45',
+ 'tongue':'\ud83d\udc45',
+ 'top':'\ud83d\udd1d',
+ 'tophat':'\ud83c\udfa9',
+ 'tornado':'\ud83c\udf2a',
+ 'trackball':'\ud83d\uddb2',
+ 'tractor':'\ud83d\ude9c',
+ 'traffic_light':'\ud83d\udea5',
+ 'train':'\ud83d\ude8b',
+ 'train2':'\ud83d\ude86',
+ 'tram':'\ud83d\ude8a',
+ 'triangular_flag_on_post':'\ud83d\udea9',
+ 'triangular_ruler':'\ud83d\udcd0',
+ 'trident':'\ud83d\udd31',
+ 'triumph':'\ud83d\ude24',
+ 'trolleybus':'\ud83d\ude8e',
+ 'trophy':'\ud83c\udfc6',
+ 'tropical_drink':'\ud83c\udf79',
+ 'tropical_fish':'\ud83d\udc20',
+ 'truck':'\ud83d\ude9a',
+ 'trumpet':'\ud83c\udfba',
+ 'tulip':'\ud83c\udf37',
+ 'tumbler_glass':'\ud83e\udd43',
+ 'turkey':'\ud83e\udd83',
+ 'turtle':'\ud83d\udc22',
+ 'tv':'\ud83d\udcfa',
+ 'twisted_rightwards_arrows':'\ud83d\udd00',
+ 'two_hearts':'\ud83d\udc95',
+ 'two_men_holding_hands':'\ud83d\udc6c',
+ 'two_women_holding_hands':'\ud83d\udc6d',
+ 'u5272':'\ud83c\ude39',
+ 'u5408':'\ud83c\ude34',
+ 'u55b6':'\ud83c\ude3a',
+ 'u6307':'\ud83c\ude2f\ufe0f',
+ 'u6708':'\ud83c\ude37\ufe0f',
+ 'u6709':'\ud83c\ude36',
+ 'u6e80':'\ud83c\ude35',
+ 'u7121':'\ud83c\ude1a\ufe0f',
+ 'u7533':'\ud83c\ude38',
+ 'u7981':'\ud83c\ude32',
+ 'u7a7a':'\ud83c\ude33',
+ 'umbrella':'\u2614\ufe0f',
+ 'unamused':'\ud83d\ude12',
+ 'underage':'\ud83d\udd1e',
+ 'unicorn':'\ud83e\udd84',
+ 'unlock':'\ud83d\udd13',
+ 'up':'\ud83c\udd99',
+ 'upside_down_face':'\ud83d\ude43',
+ 'v':'\u270c\ufe0f',
+ 'vertical_traffic_light':'\ud83d\udea6',
+ 'vhs':'\ud83d\udcfc',
+ 'vibration_mode':'\ud83d\udcf3',
+ 'video_camera':'\ud83d\udcf9',
+ 'video_game':'\ud83c\udfae',
+ 'violin':'\ud83c\udfbb',
+ 'virgo':'\u264d\ufe0f',
+ 'volcano':'\ud83c\udf0b',
+ 'volleyball':'\ud83c\udfd0',
+ 'vs':'\ud83c\udd9a',
+ 'vulcan_salute':'\ud83d\udd96',
+ 'walking_man':'\ud83d\udeb6',
+ 'walking_woman':'\ud83d\udeb6\u2640\ufe0f',
+ 'waning_crescent_moon':'\ud83c\udf18',
+ 'waning_gibbous_moon':'\ud83c\udf16',
+ 'warning':'\u26a0\ufe0f',
+ 'wastebasket':'\ud83d\uddd1',
+ 'watch':'\u231a\ufe0f',
+ 'water_buffalo':'\ud83d\udc03',
+ 'watermelon':'\ud83c\udf49',
+ 'wave':'\ud83d\udc4b',
+ 'wavy_dash':'\u3030\ufe0f',
+ 'waxing_crescent_moon':'\ud83c\udf12',
+ 'wc':'\ud83d\udebe',
+ 'weary':'\ud83d\ude29',
+ 'wedding':'\ud83d\udc92',
+ 'weight_lifting_man':'\ud83c\udfcb\ufe0f',
+ 'weight_lifting_woman':'\ud83c\udfcb\ufe0f\u2640\ufe0f',
+ 'whale':'\ud83d\udc33',
+ 'whale2':'\ud83d\udc0b',
+ 'wheel_of_dharma':'\u2638\ufe0f',
+ 'wheelchair':'\u267f\ufe0f',
+ 'white_check_mark':'\u2705',
+ 'white_circle':'\u26aa\ufe0f',
+ 'white_flag':'\ud83c\udff3\ufe0f',
+ 'white_flower':'\ud83d\udcae',
+ 'white_large_square':'\u2b1c\ufe0f',
+ 'white_medium_small_square':'\u25fd\ufe0f',
+ 'white_medium_square':'\u25fb\ufe0f',
+ 'white_small_square':'\u25ab\ufe0f',
+ 'white_square_button':'\ud83d\udd33',
+ 'wilted_flower':'\ud83e\udd40',
+ 'wind_chime':'\ud83c\udf90',
+ 'wind_face':'\ud83c\udf2c',
+ 'wine_glass':'\ud83c\udf77',
+ 'wink':'\ud83d\ude09',
+ 'wolf':'\ud83d\udc3a',
+ 'woman':'\ud83d\udc69',
+ 'woman_artist':'\ud83d\udc69\ud83c\udfa8',
+ 'woman_astronaut':'\ud83d\udc69\ud83d\ude80',
+ 'woman_cartwheeling':'\ud83e\udd38\u2640\ufe0f',
+ 'woman_cook':'\ud83d\udc69\ud83c\udf73',
+ 'woman_facepalming':'\ud83e\udd26\u2640\ufe0f',
+ 'woman_factory_worker':'\ud83d\udc69\ud83c\udfed',
+ 'woman_farmer':'\ud83d\udc69\ud83c\udf3e',
+ 'woman_firefighter':'\ud83d\udc69\ud83d\ude92',
+ 'woman_health_worker':'\ud83d\udc69\u2695\ufe0f',
+ 'woman_judge':'\ud83d\udc69\u2696\ufe0f',
+ 'woman_juggling':'\ud83e\udd39\u2640\ufe0f',
+ 'woman_mechanic':'\ud83d\udc69\ud83d\udd27',
+ 'woman_office_worker':'\ud83d\udc69\ud83d\udcbc',
+ 'woman_pilot':'\ud83d\udc69\u2708\ufe0f',
+ 'woman_playing_handball':'\ud83e\udd3e\u2640\ufe0f',
+ 'woman_playing_water_polo':'\ud83e\udd3d\u2640\ufe0f',
+ 'woman_scientist':'\ud83d\udc69\ud83d\udd2c',
+ 'woman_shrugging':'\ud83e\udd37\u2640\ufe0f',
+ 'woman_singer':'\ud83d\udc69\ud83c\udfa4',
+ 'woman_student':'\ud83d\udc69\ud83c\udf93',
+ 'woman_teacher':'\ud83d\udc69\ud83c\udfeb',
+ 'woman_technologist':'\ud83d\udc69\ud83d\udcbb',
+ 'woman_with_turban':'\ud83d\udc73\u2640\ufe0f',
+ 'womans_clothes':'\ud83d\udc5a',
+ 'womans_hat':'\ud83d\udc52',
+ 'women_wrestling':'\ud83e\udd3c\u2640\ufe0f',
+ 'womens':'\ud83d\udeba',
+ 'world_map':'\ud83d\uddfa',
+ 'worried':'\ud83d\ude1f',
+ 'wrench':'\ud83d\udd27',
+ 'writing_hand':'\u270d\ufe0f',
+ 'x':'\u274c',
+ 'yellow_heart':'\ud83d\udc9b',
+ 'yen':'\ud83d\udcb4',
+ 'yin_yang':'\u262f\ufe0f',
+ 'yum':'\ud83d\ude0b',
+ 'zap':'\u26a1\ufe0f',
+ 'zipper_mouth_face':'\ud83e\udd10',
+ 'zzz':'\ud83d\udca4',
+
+ /* special emojis :P */
+ 'octocat': '',
+ 'showdown': 'S'
+};
diff --git a/showdown/src/loader.js b/showdown/src/loader.js
new file mode 100644
index 00000000..f26cf73c
--- /dev/null
+++ b/showdown/src/loader.js
@@ -0,0 +1,17 @@
+var root = this;
+
+// AMD Loader
+if (typeof define === 'function' && define.amd) {
+ define(function () {
+ 'use strict';
+ return showdown;
+ });
+
+// CommonJS/nodeJS Loader
+} else if (typeof module !== 'undefined' && module.exports) {
+ module.exports = showdown;
+
+// Regular Browser loader
+} else {
+ root.showdown = showdown;
+}
diff --git a/showdown/src/options.js b/showdown/src/options.js
new file mode 100644
index 00000000..4bf33f51
--- /dev/null
+++ b/showdown/src/options.js
@@ -0,0 +1,197 @@
+/**
+ * Created by Tivie on 13-07-2015.
+ */
+
+function getDefaultOpts (simple) {
+ 'use strict';
+
+ var defaultOptions = {
+ omitExtraWLInCodeBlocks: {
+ defaultValue: false,
+ describe: 'Omit the default extra whiteline added to code blocks',
+ type: 'boolean'
+ },
+ noHeaderId: {
+ defaultValue: false,
+ describe: 'Turn on/off generated header id',
+ type: 'boolean'
+ },
+ prefixHeaderId: {
+ defaultValue: false,
+ describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \'section-\' prefix',
+ type: 'string'
+ },
+ rawPrefixHeaderId: {
+ defaultValue: false,
+ describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',
+ type: 'boolean'
+ },
+ ghCompatibleHeaderId: {
+ defaultValue: false,
+ describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',
+ type: 'boolean'
+ },
+ rawHeaderId: {
+ defaultValue: false,
+ describe: 'Remove only spaces, \' and " from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',
+ type: 'boolean'
+ },
+ headerLevelStart: {
+ defaultValue: false,
+ describe: 'The header blocks level start',
+ type: 'integer'
+ },
+ parseImgDimensions: {
+ defaultValue: false,
+ describe: 'Turn on/off image dimension parsing',
+ type: 'boolean'
+ },
+ simplifiedAutoLink: {
+ defaultValue: false,
+ describe: 'Turn on/off GFM autolink style',
+ type: 'boolean'
+ },
+ excludeTrailingPunctuationFromURLs: {
+ defaultValue: false,
+ describe: 'Excludes trailing punctuation from links generated with autoLinking',
+ type: 'boolean'
+ },
+ literalMidWordUnderscores: {
+ defaultValue: false,
+ describe: 'Parse midword underscores as literal underscores',
+ type: 'boolean'
+ },
+ literalMidWordAsterisks: {
+ defaultValue: false,
+ describe: 'Parse midword asterisks as literal asterisks',
+ type: 'boolean'
+ },
+ strikethrough: {
+ defaultValue: false,
+ describe: 'Turn on/off strikethrough support',
+ type: 'boolean'
+ },
+ tables: {
+ defaultValue: false,
+ describe: 'Turn on/off tables support',
+ type: 'boolean'
+ },
+ tablesHeaderId: {
+ defaultValue: false,
+ describe: 'Add an id to table headers',
+ type: 'boolean'
+ },
+ ghCodeBlocks: {
+ defaultValue: true,
+ describe: 'Turn on/off GFM fenced code blocks support',
+ type: 'boolean'
+ },
+ tasklists: {
+ defaultValue: false,
+ describe: 'Turn on/off GFM tasklist support',
+ type: 'boolean'
+ },
+ smoothLivePreview: {
+ defaultValue: false,
+ describe: 'Prevents weird effects in live previews due to incomplete input',
+ type: 'boolean'
+ },
+ smartIndentationFix: {
+ defaultValue: false,
+ describe: 'Tries to smartly fix indentation in es6 strings',
+ type: 'boolean'
+ },
+ disableForced4SpacesIndentedSublists: {
+ defaultValue: false,
+ describe: 'Disables the requirement of indenting nested sublists by 4 spaces',
+ type: 'boolean'
+ },
+ simpleLineBreaks: {
+ defaultValue: false,
+ describe: 'Parses simple line breaks as
(GFM Style)',
+ type: 'boolean'
+ },
+ requireSpaceBeforeHeadingText: {
+ defaultValue: false,
+ describe: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',
+ type: 'boolean'
+ },
+ ghMentions: {
+ defaultValue: false,
+ describe: 'Enables github @mentions',
+ type: 'boolean'
+ },
+ ghMentionsLink: {
+ defaultValue: 'https://github.com/{u}',
+ describe: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',
+ type: 'string'
+ },
+ encodeEmails: {
+ defaultValue: true,
+ describe: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',
+ type: 'boolean'
+ },
+ openLinksInNewWindow: {
+ defaultValue: false,
+ describe: 'Open all links in new windows',
+ type: 'boolean'
+ },
+ backslashEscapesHTMLTags: {
+ defaultValue: false,
+ describe: 'Support for HTML Tag escaping. ex: \foo\',
+ type: 'boolean'
+ },
+ emoji: {
+ defaultValue: false,
+ describe: 'Enable emoji support. Ex: `this is a :smile: emoji`',
+ type: 'boolean'
+ },
+ underline: {
+ defaultValue: false,
+ describe: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``',
+ type: 'boolean'
+ },
+ ellipsis: {
+ defaultValue: true,
+ describe: 'Replaces three dots with the ellipsis unicode character',
+ type: 'boolean'
+ },
+ completeHTMLDocument: {
+ defaultValue: false,
+ describe: 'Outputs a complete html document, including ``, `` and `` tags',
+ type: 'boolean'
+ },
+ metadata: {
+ defaultValue: false,
+ describe: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).',
+ type: 'boolean'
+ },
+ splitAdjacentBlockquotes: {
+ defaultValue: false,
+ describe: 'Split adjacent blockquote blocks',
+ type: 'boolean'
+ }
+ };
+ if (simple === false) {
+ return JSON.parse(JSON.stringify(defaultOptions));
+ }
+ var ret = {};
+ for (var opt in defaultOptions) {
+ if (defaultOptions.hasOwnProperty(opt)) {
+ ret[opt] = defaultOptions[opt].defaultValue;
+ }
+ }
+ return ret;
+}
+
+function allOptionsOn () {
+ 'use strict';
+ var options = getDefaultOpts(true),
+ ret = {};
+ for (var opt in options) {
+ if (options.hasOwnProperty(opt)) {
+ ret[opt] = true;
+ }
+ }
+ return ret;
+}
diff --git a/showdown/src/showdown.js b/showdown/src/showdown.js
new file mode 100644
index 00000000..c061523b
--- /dev/null
+++ b/showdown/src/showdown.js
@@ -0,0 +1,380 @@
+/**
+ * Created by Tivie on 06-01-2015.
+ */
+
+// Private properties
+var showdown = {},
+ parsers = {},
+ extensions = {},
+ globalOptions = getDefaultOpts(true),
+ setFlavor = 'vanilla',
+ flavor = {
+ github: {
+ omitExtraWLInCodeBlocks: true,
+ simplifiedAutoLink: true,
+ excludeTrailingPunctuationFromURLs: true,
+ literalMidWordUnderscores: true,
+ strikethrough: true,
+ tables: true,
+ tablesHeaderId: true,
+ ghCodeBlocks: true,
+ tasklists: true,
+ disableForced4SpacesIndentedSublists: true,
+ simpleLineBreaks: true,
+ requireSpaceBeforeHeadingText: true,
+ ghCompatibleHeaderId: true,
+ ghMentions: true,
+ backslashEscapesHTMLTags: true,
+ emoji: true,
+ splitAdjacentBlockquotes: true
+ },
+ original: {
+ noHeaderId: true,
+ ghCodeBlocks: false
+ },
+ ghost: {
+ omitExtraWLInCodeBlocks: true,
+ parseImgDimensions: true,
+ simplifiedAutoLink: true,
+ excludeTrailingPunctuationFromURLs: true,
+ literalMidWordUnderscores: true,
+ strikethrough: true,
+ tables: true,
+ tablesHeaderId: true,
+ ghCodeBlocks: true,
+ tasklists: true,
+ smoothLivePreview: true,
+ simpleLineBreaks: true,
+ requireSpaceBeforeHeadingText: true,
+ ghMentions: false,
+ encodeEmails: true
+ },
+ vanilla: getDefaultOpts(true),
+ allOn: allOptionsOn()
+ };
+
+/**
+ * helper namespace
+ * @type {{}}
+ */
+showdown.helper = {};
+
+/**
+ * TODO LEGACY SUPPORT CODE
+ * @type {{}}
+ */
+showdown.extensions = {};
+
+/**
+ * Set a global option
+ * @static
+ * @param {string} key
+ * @param {*} value
+ * @returns {showdown}
+ */
+showdown.setOption = function (key, value) {
+ 'use strict';
+ globalOptions[key] = value;
+ return this;
+};
+
+/**
+ * Get a global option
+ * @static
+ * @param {string} key
+ * @returns {*}
+ */
+showdown.getOption = function (key) {
+ 'use strict';
+ return globalOptions[key];
+};
+
+/**
+ * Get the global options
+ * @static
+ * @returns {{}}
+ */
+showdown.getOptions = function () {
+ 'use strict';
+ return globalOptions;
+};
+
+/**
+ * Reset global options to the default values
+ * @static
+ */
+showdown.resetOptions = function () {
+ 'use strict';
+ globalOptions = getDefaultOpts(true);
+};
+
+/**
+ * Set the flavor showdown should use as default
+ * @param {string} name
+ */
+showdown.setFlavor = function (name) {
+ 'use strict';
+ if (!flavor.hasOwnProperty(name)) {
+ throw Error(name + ' flavor was not found');
+ }
+ showdown.resetOptions();
+ var preset = flavor[name];
+ setFlavor = name;
+ for (var option in preset) {
+ if (preset.hasOwnProperty(option)) {
+ globalOptions[option] = preset[option];
+ }
+ }
+};
+
+/**
+ * Get the currently set flavor
+ * @returns {string}
+ */
+showdown.getFlavor = function () {
+ 'use strict';
+ return setFlavor;
+};
+
+/**
+ * Get the options of a specified flavor. Returns undefined if the flavor was not found
+ * @param {string} name Name of the flavor
+ * @returns {{}|undefined}
+ */
+showdown.getFlavorOptions = function (name) {
+ 'use strict';
+ if (flavor.hasOwnProperty(name)) {
+ return flavor[name];
+ }
+};
+
+/**
+ * Get the default options
+ * @static
+ * @param {boolean} [simple=true]
+ * @returns {{}}
+ */
+showdown.getDefaultOptions = function (simple) {
+ 'use strict';
+ return getDefaultOpts(simple);
+};
+
+/**
+ * Get or set a subParser
+ *
+ * subParser(name) - Get a registered subParser
+ * subParser(name, func) - Register a subParser
+ * @static
+ * @param {string} name
+ * @param {function} [func]
+ * @returns {*}
+ */
+showdown.subParser = function (name, func) {
+ 'use strict';
+ if (showdown.helper.isString(name)) {
+ if (typeof func !== 'undefined') {
+ parsers[name] = func;
+ } else {
+ if (parsers.hasOwnProperty(name)) {
+ return parsers[name];
+ } else {
+ throw Error('SubParser named ' + name + ' not registered!');
+ }
+ }
+ }
+};
+
+/**
+ * Gets or registers an extension
+ * @static
+ * @param {string} name
+ * @param {object|object[]|function=} ext
+ * @returns {*}
+ */
+showdown.extension = function (name, ext) {
+ 'use strict';
+
+ if (!showdown.helper.isString(name)) {
+ throw Error('Extension \'name\' must be a string');
+ }
+
+ name = showdown.helper.stdExtName(name);
+
+ // Getter
+ if (showdown.helper.isUndefined(ext)) {
+ if (!extensions.hasOwnProperty(name)) {
+ throw Error('Extension named ' + name + ' is not registered!');
+ }
+ return extensions[name];
+
+ // Setter
+ } else {
+ // Expand extension if it's wrapped in a function
+ if (typeof ext === 'function') {
+ ext = ext();
+ }
+
+ // Ensure extension is an array
+ if (!showdown.helper.isArray(ext)) {
+ ext = [ext];
+ }
+
+ var validExtension = validate(ext, name);
+
+ if (validExtension.valid) {
+ extensions[name] = ext;
+ } else {
+ throw Error(validExtension.error);
+ }
+ }
+};
+
+/**
+ * Gets all extensions registered
+ * @returns {{}}
+ */
+showdown.getAllExtensions = function () {
+ 'use strict';
+ return extensions;
+};
+
+/**
+ * Remove an extension
+ * @param {string} name
+ */
+showdown.removeExtension = function (name) {
+ 'use strict';
+ delete extensions[name];
+};
+
+/**
+ * Removes all extensions
+ */
+showdown.resetExtensions = function () {
+ 'use strict';
+ extensions = {};
+};
+
+/**
+ * Validate extension
+ * @param {array} extension
+ * @param {string} name
+ * @returns {{valid: boolean, error: string}}
+ */
+function validate (extension, name) {
+ 'use strict';
+
+ var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',
+ ret = {
+ valid: true,
+ error: ''
+ };
+
+ if (!showdown.helper.isArray(extension)) {
+ extension = [extension];
+ }
+
+ for (var i = 0; i < extension.length; ++i) {
+ var baseMsg = errMsg + ' sub-extension ' + i + ': ',
+ ext = extension[i];
+ if (typeof ext !== 'object') {
+ ret.valid = false;
+ ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';
+ return ret;
+ }
+
+ if (!showdown.helper.isString(ext.type)) {
+ ret.valid = false;
+ ret.error = baseMsg + 'property "type" must be a string, but ' + typeof ext.type + ' given';
+ return ret;
+ }
+
+ var type = ext.type = ext.type.toLowerCase();
+
+ // normalize extension type
+ if (type === 'language') {
+ type = ext.type = 'lang';
+ }
+
+ if (type === 'html') {
+ type = ext.type = 'output';
+ }
+
+ if (type !== 'lang' && type !== 'output' && type !== 'listener') {
+ ret.valid = false;
+ ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: "lang/language", "output/html" or "listener"';
+ return ret;
+ }
+
+ if (type === 'listener') {
+ if (showdown.helper.isUndefined(ext.listeners)) {
+ ret.valid = false;
+ ret.error = baseMsg + '. Extensions of type "listener" must have a property called "listeners"';
+ return ret;
+ }
+ } else {
+ if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {
+ ret.valid = false;
+ ret.error = baseMsg + type + ' extensions must define either a "regex" property or a "filter" method';
+ return ret;
+ }
+ }
+
+ if (ext.listeners) {
+ if (typeof ext.listeners !== 'object') {
+ ret.valid = false;
+ ret.error = baseMsg + '"listeners" property must be an object but ' + typeof ext.listeners + ' given';
+ return ret;
+ }
+ for (var ln in ext.listeners) {
+ if (ext.listeners.hasOwnProperty(ln)) {
+ if (typeof ext.listeners[ln] !== 'function') {
+ ret.valid = false;
+ ret.error = baseMsg + '"listeners" property must be an hash of [event name]: [callback]. listeners.' + ln +
+ ' must be a function but ' + typeof ext.listeners[ln] + ' given';
+ return ret;
+ }
+ }
+ }
+ }
+
+ if (ext.filter) {
+ if (typeof ext.filter !== 'function') {
+ ret.valid = false;
+ ret.error = baseMsg + '"filter" must be a function, but ' + typeof ext.filter + ' given';
+ return ret;
+ }
+ } else if (ext.regex) {
+ if (showdown.helper.isString(ext.regex)) {
+ ext.regex = new RegExp(ext.regex, 'g');
+ }
+ if (!(ext.regex instanceof RegExp)) {
+ ret.valid = false;
+ ret.error = baseMsg + '"regex" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';
+ return ret;
+ }
+ if (showdown.helper.isUndefined(ext.replace)) {
+ ret.valid = false;
+ ret.error = baseMsg + '"regex" extensions must implement a replace string or function';
+ return ret;
+ }
+ }
+ }
+ return ret;
+}
+
+/**
+ * Validate extension
+ * @param {object} ext
+ * @returns {boolean}
+ */
+showdown.validateExtension = function (ext) {
+ 'use strict';
+
+ var validateExtension = validate(ext, null);
+ if (!validateExtension.valid) {
+ console.warn(validateExtension.error);
+ return false;
+ }
+ return true;
+};
diff --git a/showdown/src/subParsers/anchors.js b/showdown/src/subParsers/anchors.js
new file mode 100644
index 00000000..efa2954e
--- /dev/null
+++ b/showdown/src/subParsers/anchors.js
@@ -0,0 +1,98 @@
+/**
+ * Turn Markdown link shortcuts into XHTML tags.
+ */
+showdown.subParser('anchors', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('anchors.before', text, options, globals);
+
+ var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) {
+ if (showdown.helper.isUndefined(title)) {
+ title = '';
+ }
+ linkId = linkId.toLowerCase();
+
+ // Special case for explicit empty url
+ if (wholeMatch.search(/\(\s*>? ?(['"].*['"])?\)$/m) > -1) {
+ url = '';
+ } else if (!url) {
+ if (!linkId) {
+ // lower-case and turn embedded newlines into spaces
+ linkId = linkText.toLowerCase().replace(/ ?\n/g, ' ');
+ }
+ url = '#' + linkId;
+
+ if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {
+ url = globals.gUrls[linkId];
+ if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {
+ title = globals.gTitles[linkId];
+ }
+ } else {
+ return wholeMatch;
+ }
+ }
+
+ //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance
+ url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
+
+ var result = '' + linkText + '';
+
+ return result;
+ };
+
+ // First, handle reference-style links: [link text] [id]
+ text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g, writeAnchorTag);
+
+ // Next, inline-style links: [link text](url "optional title")
+ // cases with crazy urls like ./image/cat1).png
+ text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,
+ writeAnchorTag);
+
+ // normal cases
+ text = text.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,
+ writeAnchorTag);
+
+ // handle reference-style shortcuts: [link text]
+ // These must come last in case you've also got [link test][1]
+ // or [link test](/foo)
+ text = text.replace(/\[([^\[\]]+)]()()()()()/g, writeAnchorTag);
+
+ // Lastly handle GithubMentions if option is enabled
+ if (options.ghMentions) {
+ text = text.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gmi, function (wm, st, escape, mentions, username) {
+ if (escape === '\\') {
+ return st + mentions;
+ }
+
+ //check if options.ghMentionsLink is a string
+ if (!showdown.helper.isString(options.ghMentionsLink)) {
+ throw new Error('ghMentionsLink option must be a string');
+ }
+ var lnk = options.ghMentionsLink.replace(/\{u}/g, username),
+ target = '';
+ if (options.openLinksInNewWindow) {
+ target = ' rel="noopener noreferrer" target="¨E95Eblank"';
+ }
+ return st + '' + mentions + '';
+ });
+ }
+
+ text = globals.converter._dispatch('anchors.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/autoLinks.js b/showdown/src/subParsers/autoLinks.js
new file mode 100644
index 00000000..fa49b529
--- /dev/null
+++ b/showdown/src/subParsers/autoLinks.js
@@ -0,0 +1,79 @@
+// url allowed chars [a-z\d_.~:/?#[]@!$&'()*+,;=-]
+
+var simpleURLRegex = /([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,
+ simpleURLRegex2 = /([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,
+ delimUrlRegex = /()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,
+ simpleMailRegex = /(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gmi,
+ delimMailRegex = /<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,
+
+ replaceLink = function (options) {
+ 'use strict';
+ return function (wm, leadingMagicChars, link, m2, m3, trailingPunctuation, trailingMagicChars) {
+ link = link.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
+ var lnkTxt = link,
+ append = '',
+ target = '',
+ lmc = leadingMagicChars || '',
+ tmc = trailingMagicChars || '';
+ if (/^www\./i.test(link)) {
+ link = link.replace(/^www\./i, 'http://www.');
+ }
+ if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) {
+ append = trailingPunctuation;
+ }
+ if (options.openLinksInNewWindow) {
+ target = ' rel="noopener noreferrer" target="¨E95Eblank"';
+ }
+ return lmc + '' + lnkTxt + '' + append + tmc;
+ };
+ },
+
+ replaceMail = function (options, globals) {
+ 'use strict';
+ return function (wholeMatch, b, mail) {
+ var href = 'mailto:';
+ b = b || '';
+ mail = showdown.subParser('unescapeSpecialChars')(mail, options, globals);
+ if (options.encodeEmails) {
+ href = showdown.helper.encodeEmailAddress(href + mail);
+ mail = showdown.helper.encodeEmailAddress(mail);
+ } else {
+ href = href + mail;
+ }
+ return b + '' + mail + '';
+ };
+ };
+
+showdown.subParser('autoLinks', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('autoLinks.before', text, options, globals);
+
+ text = text.replace(delimUrlRegex, replaceLink(options));
+ text = text.replace(delimMailRegex, replaceMail(options, globals));
+
+ text = globals.converter._dispatch('autoLinks.after', text, options, globals);
+
+ return text;
+});
+
+showdown.subParser('simplifiedAutoLinks', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.simplifiedAutoLink) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('simplifiedAutoLinks.before', text, options, globals);
+
+ if (options.excludeTrailingPunctuationFromURLs) {
+ text = text.replace(simpleURLRegex2, replaceLink(options));
+ } else {
+ text = text.replace(simpleURLRegex, replaceLink(options));
+ }
+ text = text.replace(simpleMailRegex, replaceMail(options, globals));
+
+ text = globals.converter._dispatch('simplifiedAutoLinks.after', text, options, globals);
+
+ return text;
+});
diff --git a/showdown/src/subParsers/blockGamut.js b/showdown/src/subParsers/blockGamut.js
new file mode 100644
index 00000000..b9de6fdb
--- /dev/null
+++ b/showdown/src/subParsers/blockGamut.js
@@ -0,0 +1,32 @@
+/**
+ * These are all the transformations that form block-level
+ * tags like paragraphs, headers, and list items.
+ */
+showdown.subParser('blockGamut', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('blockGamut.before', text, options, globals);
+
+ // we parse blockquotes first so that we can have headings and hrs
+ // inside blockquotes
+ text = showdown.subParser('blockQuotes')(text, options, globals);
+ text = showdown.subParser('headers')(text, options, globals);
+
+ // Do Horizontal Rules:
+ text = showdown.subParser('horizontalRule')(text, options, globals);
+
+ text = showdown.subParser('lists')(text, options, globals);
+ text = showdown.subParser('codeBlocks')(text, options, globals);
+ text = showdown.subParser('tables')(text, options, globals);
+
+ // We already ran _HashHTMLBlocks() before, in Markdown(), but that
+ // was to escape raw HTML in the original Markdown source. This time,
+ // we're escaping the markup we've just created, so that we don't wrap
+ // tags around block-level tags.
+ text = showdown.subParser('hashHTMLBlocks')(text, options, globals);
+ text = showdown.subParser('paragraphs')(text, options, globals);
+
+ text = globals.converter._dispatch('blockGamut.after', text, options, globals);
+
+ return text;
+});
diff --git a/showdown/src/subParsers/blockQuotes.js b/showdown/src/subParsers/blockQuotes.js
new file mode 100644
index 00000000..2cf41748
--- /dev/null
+++ b/showdown/src/subParsers/blockQuotes.js
@@ -0,0 +1,42 @@
+showdown.subParser('blockQuotes', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('blockQuotes.before', text, options, globals);
+
+ // add a couple extra lines after the text and endtext mark
+ text = text + '\n\n';
+
+ var rgx = /(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;
+
+ if (options.splitAdjacentBlockquotes) {
+ rgx = /^ {0,3}>[\s\S]*?(?:\n\n)/gm;
+ }
+
+ text = text.replace(rgx, function (bq) {
+ // attacklab: hack around Konqueror 3.5.4 bug:
+ // "----------bug".replace(/^-/g,"") == "bug"
+ bq = bq.replace(/^[ \t]*>[ \t]?/gm, ''); // trim one level of quoting
+
+ // attacklab: clean up hack
+ bq = bq.replace(/¨0/g, '');
+
+ bq = bq.replace(/^[ \t]+$/gm, ''); // trim whitespace-only lines
+ bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);
+ bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse
+
+ bq = bq.replace(/(^|\n)/g, '$1 ');
+ // These leading spaces screw with
content, so we need to fix that:
+ bq = bq.replace(/(\s*[^\r]+?<\/pre>)/gm, function (wholeMatch, m1) {
+ var pre = m1;
+ // attacklab: hack around Konqueror 3.5.4 bug:
+ pre = pre.replace(/^ /mg, '¨0');
+ pre = pre.replace(/¨0/g, '');
+ return pre;
+ });
+
+ return showdown.subParser('hashBlock')('\n' + bq + '\n
', options, globals);
+ });
+
+ text = globals.converter._dispatch('blockQuotes.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/codeBlocks.js b/showdown/src/subParsers/codeBlocks.js
new file mode 100644
index 00000000..7099d82e
--- /dev/null
+++ b/showdown/src/subParsers/codeBlocks.js
@@ -0,0 +1,38 @@
+/**
+ * Process Markdown `` blocks.
+ */
+showdown.subParser('codeBlocks', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('codeBlocks.before', text, options, globals);
+
+ // sentinel workarounds for lack of \A and \Z, safari\khtml bug
+ text += '¨0';
+
+ var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g;
+ text = text.replace(pattern, function (wholeMatch, m1, m2) {
+ var codeblock = m1,
+ nextChar = m2,
+ end = '\n';
+
+ codeblock = showdown.subParser('outdent')(codeblock, options, globals);
+ codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);
+ codeblock = showdown.subParser('detab')(codeblock, options, globals);
+ codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
+ codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines
+
+ if (options.omitExtraWLInCodeBlocks) {
+ end = '';
+ }
+
+ codeblock = '' + codeblock + end + '
';
+
+ return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;
+ });
+
+ // strip sentinel
+ text = text.replace(/¨0/, '');
+
+ text = globals.converter._dispatch('codeBlocks.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/codeSpans.js b/showdown/src/subParsers/codeSpans.js
new file mode 100644
index 00000000..adb70f15
--- /dev/null
+++ b/showdown/src/subParsers/codeSpans.js
@@ -0,0 +1,48 @@
+/**
+ *
+ * * Backtick quotes are used for
spans.
+ *
+ * * You can use multiple backticks as the delimiters if you want to
+ * include literal backticks in the code span. So, this input:
+ *
+ * Just type ``foo `bar` baz`` at the prompt.
+ *
+ * Will translate to:
+ *
+ * Just type foo `bar` baz
at the prompt.
+ *
+ * There's no arbitrary limit to the number of backticks you
+ * can use as delimters. If you need three consecutive backticks
+ * in your code, use four for delimiters, etc.
+ *
+ * * You can use spaces to get literal backticks at the edges:
+ *
+ * ... type `` `bar` `` ...
+ *
+ * Turns to:
+ *
+ * ... type `bar`
...
+ */
+showdown.subParser('codeSpans', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('codeSpans.before', text, options, globals);
+
+ if (typeof (text) === 'undefined') {
+ text = '';
+ }
+ text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,
+ function (wholeMatch, m1, m2, m3) {
+ var c = m3;
+ c = c.replace(/^([ \t]*)/g, ''); // leading whitespace
+ c = c.replace(/[ \t]*$/g, ''); // trailing whitespace
+ c = showdown.subParser('encodeCode')(c, options, globals);
+ c = m1 + '' + c + '
';
+ c = showdown.subParser('hashHTMLSpans')(c, options, globals);
+ return c;
+ }
+ );
+
+ text = globals.converter._dispatch('codeSpans.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/completeHTMLDocument.js b/showdown/src/subParsers/completeHTMLDocument.js
new file mode 100644
index 00000000..5252796c
--- /dev/null
+++ b/showdown/src/subParsers/completeHTMLDocument.js
@@ -0,0 +1,62 @@
+/**
+ * Create a full HTML document from the processed markdown
+ */
+showdown.subParser('completeHTMLDocument', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.completeHTMLDocument) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);
+
+ var doctype = 'html',
+ doctypeParsed = '\n',
+ title = '',
+ charset = '\n',
+ lang = '',
+ metadata = '';
+
+ if (typeof globals.metadata.parsed.doctype !== 'undefined') {
+ doctypeParsed = '\n';
+ doctype = globals.metadata.parsed.doctype.toString().toLowerCase();
+ if (doctype === 'html' || doctype === 'html5') {
+ charset = '';
+ }
+ }
+
+ for (var meta in globals.metadata.parsed) {
+ if (globals.metadata.parsed.hasOwnProperty(meta)) {
+ switch (meta.toLowerCase()) {
+ case 'doctype':
+ break;
+
+ case 'title':
+ title = '' + globals.metadata.parsed.title + ' \n';
+ break;
+
+ case 'charset':
+ if (doctype === 'html' || doctype === 'html5') {
+ charset = '\n';
+ } else {
+ charset = '\n';
+ }
+ break;
+
+ case 'language':
+ case 'lang':
+ lang = ' lang="' + globals.metadata.parsed[meta] + '"';
+ metadata += '\n';
+ break;
+
+ default:
+ metadata += '\n';
+ }
+ }
+ }
+
+ text = doctypeParsed + '\n\n' + title + charset + metadata + '\n\n' + text.trim() + '\n\n';
+
+ text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/detab.js b/showdown/src/subParsers/detab.js
new file mode 100644
index 00000000..1fad02d9
--- /dev/null
+++ b/showdown/src/subParsers/detab.js
@@ -0,0 +1,33 @@
+/**
+ * Convert all tabs to spaces
+ */
+showdown.subParser('detab', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('detab.before', text, options, globals);
+
+ // expand first n-1 tabs
+ text = text.replace(/\t(?=\t)/g, ' '); // g_tab_width
+
+ // replace the nth with two sentinels
+ text = text.replace(/\t/g, '¨A¨B');
+
+ // use the sentinel to anchor our regex so it doesn't explode
+ text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {
+ var leadingText = m1,
+ numSpaces = 4 - leadingText.length % 4; // g_tab_width
+
+ // there *must* be a better way to do this:
+ for (var i = 0; i < numSpaces; i++) {
+ leadingText += ' ';
+ }
+
+ return leadingText;
+ });
+
+ // clean up sentinels
+ text = text.replace(/¨A/g, ' '); // g_tab_width
+ text = text.replace(/¨B/g, '');
+
+ text = globals.converter._dispatch('detab.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/ellipsis.js b/showdown/src/subParsers/ellipsis.js
new file mode 100644
index 00000000..640309ca
--- /dev/null
+++ b/showdown/src/subParsers/ellipsis.js
@@ -0,0 +1,15 @@
+showdown.subParser('ellipsis', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.ellipsis) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('ellipsis.before', text, options, globals);
+
+ text = text.replace(/\.\.\./g, '…');
+
+ text = globals.converter._dispatch('ellipsis.after', text, options, globals);
+
+ return text;
+});
diff --git a/showdown/src/subParsers/emoji.js b/showdown/src/subParsers/emoji.js
new file mode 100644
index 00000000..838b3ccc
--- /dev/null
+++ b/showdown/src/subParsers/emoji.js
@@ -0,0 +1,27 @@
+/**
+ * Turn emoji codes into emojis
+ *
+ * List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis
+ */
+showdown.subParser('emoji', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.emoji) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('emoji.before', text, options, globals);
+
+ var emojiRgx = /:([\S]+?):/g;
+
+ text = text.replace(emojiRgx, function (wm, emojiCode) {
+ if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {
+ return showdown.helper.emojis[emojiCode];
+ }
+ return wm;
+ });
+
+ text = globals.converter._dispatch('emoji.after', text, options, globals);
+
+ return text;
+});
diff --git a/showdown/src/subParsers/encodeAmpsAndAngles.js b/showdown/src/subParsers/encodeAmpsAndAngles.js
new file mode 100644
index 00000000..b6f69d1d
--- /dev/null
+++ b/showdown/src/subParsers/encodeAmpsAndAngles.js
@@ -0,0 +1,23 @@
+/**
+ * Smart processing for ampersands and angle brackets that need to be encoded.
+ */
+showdown.subParser('encodeAmpsAndAngles', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals);
+
+ // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:
+ // http://bumppo.net/projects/amputator/
+ text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, '&');
+
+ // Encode naked <'s
+ text = text.replace(/<(?![a-z\/?$!])/gi, '<');
+
+ // Encode <
+ text = text.replace(/
+ text = text.replace(/>/g, '>');
+
+ text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/encodeBackslashEscapes.js b/showdown/src/subParsers/encodeBackslashEscapes.js
new file mode 100644
index 00000000..1c0876d1
--- /dev/null
+++ b/showdown/src/subParsers/encodeBackslashEscapes.js
@@ -0,0 +1,21 @@
+/**
+ * Returns the string, with after processing the following backslash escape sequences.
+ *
+ * attacklab: The polite way to do this is with the new escapeCharacters() function:
+ *
+ * text = escapeCharacters(text,"\\",true);
+ * text = escapeCharacters(text,"`*_{}[]()>#+-.!",true);
+ *
+ * ...but we're sidestepping its use of the (slow) RegExp constructor
+ * as an optimization for Firefox. This function gets called a LOT.
+ */
+showdown.subParser('encodeBackslashEscapes', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals);
+
+ text = text.replace(/\\(\\)/g, showdown.helper.escapeCharactersCallback);
+ text = text.replace(/\\([`*_{}\[\]()>#+.!~=|:-])/g, showdown.helper.escapeCharactersCallback);
+
+ text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/encodeCode.js b/showdown/src/subParsers/encodeCode.js
new file mode 100644
index 00000000..debda4d4
--- /dev/null
+++ b/showdown/src/subParsers/encodeCode.js
@@ -0,0 +1,23 @@
+/**
+ * Encode/escape certain characters inside Markdown code runs.
+ * The point is that in code, these characters are literals,
+ * and lose their special Markdown meanings.
+ */
+showdown.subParser('encodeCode', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('encodeCode.before', text, options, globals);
+
+ // Encode all ampersands; HTML entities are not
+ // entities within a Markdown code span.
+ text = text
+ .replace(/&/g, '&')
+ // Do the angle bracket song and dance:
+ .replace(//g, '>')
+ // Now, escape characters that are magic in Markdown:
+ .replace(/([*_{}\[\]\\=~-])/g, showdown.helper.escapeCharactersCallback);
+
+ text = globals.converter._dispatch('encodeCode.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/escapeSpecialCharsWithinTagAttributes.js b/showdown/src/subParsers/escapeSpecialCharsWithinTagAttributes.js
new file mode 100644
index 00000000..80ff99dd
--- /dev/null
+++ b/showdown/src/subParsers/escapeSpecialCharsWithinTagAttributes.js
@@ -0,0 +1,26 @@
+/**
+ * Within tags -- meaning between < and > -- encode [\ ` * _ ~ =] so they
+ * don't conflict with their use in Markdown for code, italics and strong.
+ */
+showdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals);
+
+ // Build a regex to find HTML tags.
+ var tags = /<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,
+ comments = /-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;
+
+ text = text.replace(tags, function (wholeMatch) {
+ return wholeMatch
+ .replace(/(.)<\/?code>(?=.)/g, '$1`')
+ .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);
+ });
+
+ text = text.replace(comments, function (wholeMatch) {
+ return wholeMatch
+ .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);
+ });
+
+ text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/githubCodeBlocks.js b/showdown/src/subParsers/githubCodeBlocks.js
new file mode 100644
index 00000000..e5a2f1d4
--- /dev/null
+++ b/showdown/src/subParsers/githubCodeBlocks.js
@@ -0,0 +1,46 @@
+/**
+ * Handle github codeblocks prior to running HashHTML so that
+ * HTML contained within the codeblock gets escaped properly
+ * Example:
+ * ```ruby
+ * def hello_world(x)
+ * puts "Hello, #{x}"
+ * end
+ * ```
+ */
+showdown.subParser('githubCodeBlocks', function (text, options, globals) {
+ 'use strict';
+
+ // early exit if option is not enabled
+ if (!options.ghCodeBlocks) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);
+
+ text += '¨0';
+
+ text = text.replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g, function (wholeMatch, delim, language, codeblock) {
+ var end = (options.omitExtraWLInCodeBlocks) ? '' : '\n';
+
+ // First parse the github code block
+ codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);
+ codeblock = showdown.subParser('detab')(codeblock, options, globals);
+ codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
+ codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing whitespace
+
+ codeblock = '' + codeblock + end + '
';
+
+ codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);
+
+ // Since GHCodeblocks can be false positives, we need to
+ // store the primitive text and the parsed text in a global var,
+ // and then return a token
+ return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
+ });
+
+ // attacklab: strip sentinel
+ text = text.replace(/¨0/, '');
+
+ return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);
+});
diff --git a/showdown/src/subParsers/hashBlock.js b/showdown/src/subParsers/hashBlock.js
new file mode 100644
index 00000000..ab166c34
--- /dev/null
+++ b/showdown/src/subParsers/hashBlock.js
@@ -0,0 +1,8 @@
+showdown.subParser('hashBlock', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashBlock.before', text, options, globals);
+ text = text.replace(/(^\n+|\n+$)/g, '');
+ text = '\n\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n';
+ text = globals.converter._dispatch('hashBlock.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/hashCodeTags.js b/showdown/src/subParsers/hashCodeTags.js
new file mode 100644
index 00000000..93a2c116
--- /dev/null
+++ b/showdown/src/subParsers/hashCodeTags.js
@@ -0,0 +1,18 @@
+/**
+ * Hash and escape elements that should not be parsed as markdown
+ */
+showdown.subParser('hashCodeTags', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);
+
+ var repFunc = function (wholeMatch, match, left, right) {
+ var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;
+ return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';
+ };
+
+ // Hash naked
+ text = showdown.helper.replaceRecursiveRegExp(text, repFunc, ']*>', '
', 'gim');
+
+ text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/hashElement.js b/showdown/src/subParsers/hashElement.js
new file mode 100644
index 00000000..80ad42d4
--- /dev/null
+++ b/showdown/src/subParsers/hashElement.js
@@ -0,0 +1,19 @@
+showdown.subParser('hashElement', function (text, options, globals) {
+ 'use strict';
+
+ return function (wholeMatch, m1) {
+ var blockText = m1;
+
+ // Undo double lines
+ blockText = blockText.replace(/\n\n/g, '\n');
+ blockText = blockText.replace(/^\n/, '');
+
+ // strip trailing blank lines
+ blockText = blockText.replace(/\n+$/g, '');
+
+ // Replace the element text with a marker ("¨KxK" where x is its key)
+ blockText = '\n\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\n\n';
+
+ return blockText;
+ };
+});
diff --git a/showdown/src/subParsers/hashHTMLBlocks.js b/showdown/src/subParsers/hashHTMLBlocks.js
new file mode 100644
index 00000000..43e38b50
--- /dev/null
+++ b/showdown/src/subParsers/hashHTMLBlocks.js
@@ -0,0 +1,98 @@
+showdown.subParser('hashHTMLBlocks', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);
+
+ var blockTags = [
+ 'pre',
+ 'div',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'blockquote',
+ 'table',
+ 'dl',
+ 'ol',
+ 'ul',
+ 'script',
+ 'noscript',
+ 'form',
+ 'fieldset',
+ 'iframe',
+ 'math',
+ 'style',
+ 'section',
+ 'header',
+ 'footer',
+ 'nav',
+ 'article',
+ 'aside',
+ 'address',
+ 'audio',
+ 'canvas',
+ 'figure',
+ 'hgroup',
+ 'output',
+ 'video',
+ 'p'
+ ],
+ repFunc = function (wholeMatch, match, left, right) {
+ var txt = wholeMatch;
+ // check if this html element is marked as markdown
+ // if so, it's contents should be parsed as markdown
+ if (left.search(/\bmarkdown\b/) !== -1) {
+ txt = left + globals.converter.makeHtml(match) + right;
+ }
+ return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
+ };
+
+ if (options.backslashEscapesHTMLTags) {
+ // encode backslash escaped HTML tags
+ text = text.replace(/\\<(\/?[^>]+?)>/g, function (wm, inside) {
+ return '<' + inside + '>';
+ });
+ }
+
+ // hash HTML Blocks
+ for (var i = 0; i < blockTags.length; ++i) {
+
+ var opTagPos,
+ rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\b[^>]*>)', 'im'),
+ patLeft = '<' + blockTags[i] + '\\b[^>]*>',
+ patRight = '' + blockTags[i] + '>';
+ // 1. Look for the first position of the first opening HTML tag in the text
+ while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {
+
+ // if the HTML tag is \ escaped, we need to escape it and break
+
+
+ //2. Split the text in that position
+ var subTexts = showdown.helper.splitAtIndex(text, opTagPos),
+ //3. Match recursively
+ newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');
+
+ // prevent an infinite loop
+ if (newSubText1 === subTexts[1]) {
+ break;
+ }
+ text = subTexts[0].concat(newSubText1);
+ }
+ }
+ // HR SPECIAL CASE
+ text = text.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,
+ showdown.subParser('hashElement')(text, options, globals));
+
+ // Special case for standalone HTML comments
+ text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {
+ return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
+ }, '^ {0,3}', 'gm');
+
+ // PHP and ASP-style processor instructions (...?> and <%...%>)
+ text = text.replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,
+ showdown.subParser('hashElement')(text, options, globals));
+
+ text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/hashHTMLSpans.js b/showdown/src/subParsers/hashHTMLSpans.js
new file mode 100644
index 00000000..545aa922
--- /dev/null
+++ b/showdown/src/subParsers/hashHTMLSpans.js
@@ -0,0 +1,64 @@
+/**
+ * Hash span elements that should not be parsed as markdown
+ */
+showdown.subParser('hashHTMLSpans', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);
+
+ function hashHTMLSpan (html) {
+ return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';
+ }
+
+ // Hash Self Closing tags
+ text = text.replace(/<[^>]+?\/>/gi, function (wm) {
+ return hashHTMLSpan(wm);
+ });
+
+ // Hash tags without properties
+ text = text.replace(/<([^>]+?)>[\s\S]*?<\/\1>/g, function (wm) {
+ return hashHTMLSpan(wm);
+ });
+
+ // Hash tags with properties
+ text = text.replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g, function (wm) {
+ return hashHTMLSpan(wm);
+ });
+
+ // Hash self closing tags without />
+ text = text.replace(/<[^>]+?>/gi, function (wm) {
+ return hashHTMLSpan(wm);
+ });
+
+ /*showdown.helper.matchRecursiveRegExp(text, ']*>', '
', 'gi');*/
+
+ text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);
+ return text;
+});
+
+/**
+ * Unhash HTML spans
+ */
+showdown.subParser('unhashHTMLSpans', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);
+
+ for (var i = 0; i < globals.gHtmlSpans.length; ++i) {
+ var repText = globals.gHtmlSpans[i],
+ // limiter to prevent infinite loop (assume 10 as limit for recurse)
+ limit = 0;
+
+ while (/¨C(\d+)C/.test(repText)) {
+ var num = RegExp.$1;
+ repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);
+ if (limit === 10) {
+ console.error('maximum nesting of 10 spans reached!!!');
+ break;
+ }
+ ++limit;
+ }
+ text = text.replace('¨C' + i + 'C', repText);
+ }
+
+ text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/hashPreCodeTags.js b/showdown/src/subParsers/hashPreCodeTags.js
new file mode 100644
index 00000000..87113f3d
--- /dev/null
+++ b/showdown/src/subParsers/hashPreCodeTags.js
@@ -0,0 +1,19 @@
+/**
+ * Hash and escape elements that should not be parsed as markdown
+ */
+showdown.subParser('hashPreCodeTags', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);
+
+ var repFunc = function (wholeMatch, match, left, right) {
+ // encode html entities
+ var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;
+ return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
+ };
+
+ // Hash
+ text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}]*>\\s*]*>', '^ {0,3}
\\s*
', 'gim');
+
+ text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/headers.js b/showdown/src/subParsers/headers.js
new file mode 100644
index 00000000..b08c4d7a
--- /dev/null
+++ b/showdown/src/subParsers/headers.js
@@ -0,0 +1,126 @@
+showdown.subParser('headers', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('headers.before', text, options, globals);
+
+ var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),
+
+ // Set text-style headers:
+ // Header 1
+ // ========
+ //
+ // Header 2
+ // --------
+ //
+ setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm,
+ setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm;
+
+ text = text.replace(setextRegexH1, function (wholeMatch, m1) {
+
+ var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
+ hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
+ hLevel = headerLevelStart,
+ hashBlock = '' + spanGamut + ' ';
+ return showdown.subParser('hashBlock')(hashBlock, options, globals);
+ });
+
+ text = text.replace(setextRegexH2, function (matchFound, m1) {
+ var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
+ hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
+ hLevel = headerLevelStart + 1,
+ hashBlock = '' + spanGamut + ' ';
+ return showdown.subParser('hashBlock')(hashBlock, options, globals);
+ });
+
+ // atx-style headers:
+ // # Header 1
+ // ## Header 2
+ // ## Header 2 with closing hashes ##
+ // ...
+ // ###### Header 6
+ //
+ var atxStyle = (options.requireSpaceBeforeHeadingText) ? /^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm : /^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;
+
+ text = text.replace(atxStyle, function (wholeMatch, m1, m2) {
+ var hText = m2;
+ if (options.customizedHeaderId) {
+ hText = m2.replace(/\s?\{([^{]+?)}\s*$/, '');
+ }
+
+ var span = showdown.subParser('spanGamut')(hText, options, globals),
+ hID = (options.noHeaderId) ? '' : ' id="' + headerId(m2) + '"',
+ hLevel = headerLevelStart - 1 + m1.length,
+ header = '' + span + ' ';
+
+ return showdown.subParser('hashBlock')(header, options, globals);
+ });
+
+ function headerId (m) {
+ var title,
+ prefix;
+
+ // It is separate from other options to allow combining prefix and customized
+ if (options.customizedHeaderId) {
+ var match = m.match(/\{([^{]+?)}\s*$/);
+ if (match && match[1]) {
+ m = match[1];
+ }
+ }
+
+ title = m;
+
+ // Prefix id to prevent causing inadvertent pre-existing style matches.
+ if (showdown.helper.isString(options.prefixHeaderId)) {
+ prefix = options.prefixHeaderId;
+ } else if (options.prefixHeaderId === true) {
+ prefix = 'section-';
+ } else {
+ prefix = '';
+ }
+
+ if (!options.rawPrefixHeaderId) {
+ title = prefix + title;
+ }
+
+ if (options.ghCompatibleHeaderId) {
+ title = title
+ .replace(/ /g, '-')
+ // replace previously escaped chars (&, ¨ and $)
+ .replace(/&/g, '')
+ .replace(/¨T/g, '')
+ .replace(/¨D/g, '')
+ // replace rest of the chars (&~$ are repeated as they might have been escaped)
+ // borrowed from github's redcarpet (some they should produce similar results)
+ .replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g, '')
+ .toLowerCase();
+ } else if (options.rawHeaderId) {
+ title = title
+ .replace(/ /g, '-')
+ // replace previously escaped chars (&, ¨ and $)
+ .replace(/&/g, '&')
+ .replace(/¨T/g, '¨')
+ .replace(/¨D/g, '$')
+ // replace " and '
+ .replace(/["']/g, '-')
+ .toLowerCase();
+ } else {
+ title = title
+ .replace(/[^\w]/g, '')
+ .toLowerCase();
+ }
+
+ if (options.rawPrefixHeaderId) {
+ title = prefix + title;
+ }
+
+ if (globals.hashLinkCounts[title]) {
+ title = title + '-' + (globals.hashLinkCounts[title]++);
+ } else {
+ globals.hashLinkCounts[title] = 1;
+ }
+ return title;
+ }
+
+ text = globals.converter._dispatch('headers.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/horizontalRule.js b/showdown/src/subParsers/horizontalRule.js
new file mode 100644
index 00000000..e8e98e2c
--- /dev/null
+++ b/showdown/src/subParsers/horizontalRule.js
@@ -0,0 +1,15 @@
+/**
+ * Turn Markdown link shortcuts into XHTML tags.
+ */
+showdown.subParser('horizontalRule', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('horizontalRule.before', text, options, globals);
+
+ var key = showdown.subParser('hashBlock')('
', options, globals);
+ text = text.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm, key);
+ text = text.replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm, key);
+ text = text.replace(/^ {0,2}( ?_){3,}[ \t]*$/gm, key);
+
+ text = globals.converter._dispatch('horizontalRule.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/images.js b/showdown/src/subParsers/images.js
new file mode 100644
index 00000000..e3d8e061
--- /dev/null
+++ b/showdown/src/subParsers/images.js
@@ -0,0 +1,104 @@
+/**
+ * Turn Markdown image shortcuts into tags.
+ */
+showdown.subParser('images', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('images.before', text, options, globals);
+
+ var inlineRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
+ crazyRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,
+ base64RegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
+ referenceRegExp = /!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,
+ refShortcutRegExp = /!\[([^\[\]]+)]()()()()()/g;
+
+ function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {
+ url = url.replace(/\s/g, '');
+ return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);
+ }
+
+ function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {
+
+ var gUrls = globals.gUrls,
+ gTitles = globals.gTitles,
+ gDims = globals.gDimensions;
+
+ linkId = linkId.toLowerCase();
+
+ if (!title) {
+ title = '';
+ }
+ // Special case for explicit empty url
+ if (wholeMatch.search(/\(\s*>? ?(['"].*['"])?\)$/m) > -1) {
+ url = '';
+
+ } else if (url === '' || url === null) {
+ if (linkId === '' || linkId === null) {
+ // lower-case and turn embedded newlines into spaces
+ linkId = altText.toLowerCase().replace(/ ?\n/g, ' ');
+ }
+ url = '#' + linkId;
+
+ if (!showdown.helper.isUndefined(gUrls[linkId])) {
+ url = gUrls[linkId];
+ if (!showdown.helper.isUndefined(gTitles[linkId])) {
+ title = gTitles[linkId];
+ }
+ if (!showdown.helper.isUndefined(gDims[linkId])) {
+ width = gDims[linkId].width;
+ height = gDims[linkId].height;
+ }
+ } else {
+ return wholeMatch;
+ }
+ }
+
+ altText = altText
+ .replace(/"/g, '"')
+ //altText = showdown.helper.escapeCharacters(altText, '*_', false);
+ .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
+ //url = showdown.helper.escapeCharacters(url, '*_', false);
+ url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
+ var result = '';
+
+ return result;
+ }
+
+ // First, handle reference-style labeled images: ![alt text][id]
+ text = text.replace(referenceRegExp, writeImageTag);
+
+ // Next, handle inline images: ![alt text](url =x "optional title")
+
+ // base64 encoded images
+ text = text.replace(base64RegExp, writeImageTagBase64);
+
+ // cases with crazy urls like ./image/cat1).png
+ text = text.replace(crazyRegExp, writeImageTag);
+
+ // normal cases
+ text = text.replace(inlineRegExp, writeImageTag);
+
+ // handle reference-style shortcuts: ![img text]
+ text = text.replace(refShortcutRegExp, writeImageTag);
+
+ text = globals.converter._dispatch('images.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/italicsAndBold.js b/showdown/src/subParsers/italicsAndBold.js
new file mode 100644
index 00000000..11842da5
--- /dev/null
+++ b/showdown/src/subParsers/italicsAndBold.js
@@ -0,0 +1,70 @@
+showdown.subParser('italicsAndBold', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);
+
+ // it's faster to have 3 separate regexes for each case than have just one
+ // because of backtracing, in some cases, it could lead to an exponential effect
+ // called "catastrophic backtrace". Ominous!
+
+ function parseInside (txt, left, right) {
+ /*
+ if (options.simplifiedAutoLink) {
+ txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);
+ }
+ */
+ return left + txt + right;
+ }
+
+ // Parse underscores
+ if (options.literalMidWordUnderscores) {
+ text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) {
+ return parseInside (txt, '', '');
+ });
+ text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) {
+ return parseInside (txt, '', '');
+ });
+ text = text.replace(/\b_(\S[\s\S]*?)_\b/g, function (wm, txt) {
+ return parseInside (txt, '', '');
+ });
+ } else {
+ text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
+ return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
+ });
+ text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
+ return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
+ });
+ text = text.replace(/_([^\s_][\s\S]*?)_/g, function (wm, m) {
+ // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)
+ return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
+ });
+ }
+
+ // Now parse asterisks
+ if (options.literalMidWordAsterisks) {
+ text = text.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g, function (wm, lead, txt) {
+ return parseInside (txt, lead + '', '');
+ });
+ text = text.replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g, function (wm, lead, txt) {
+ return parseInside (txt, lead + '', '');
+ });
+ text = text.replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g, function (wm, lead, txt) {
+ return parseInside (txt, lead + '', '');
+ });
+ } else {
+ text = text.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g, function (wm, m) {
+ return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
+ });
+ text = text.replace(/\*\*(\S[\s\S]*?)\*\*/g, function (wm, m) {
+ return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
+ });
+ text = text.replace(/\*([^\s*][\s\S]*?)\*/g, function (wm, m) {
+ // !/^\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)
+ return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
+ });
+ }
+
+
+ text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/lists.js b/showdown/src/subParsers/lists.js
new file mode 100644
index 00000000..d9556ff9
--- /dev/null
+++ b/showdown/src/subParsers/lists.js
@@ -0,0 +1,203 @@
+/**
+ * Form HTML ordered (numbered) and unordered (bulleted) lists.
+ */
+showdown.subParser('lists', function (text, options, globals) {
+ 'use strict';
+
+ /**
+ * Process the contents of a single ordered or unordered list, splitting it
+ * into individual list items.
+ * @param {string} listStr
+ * @param {boolean} trimTrailing
+ * @returns {string}
+ */
+ function processListItems (listStr, trimTrailing) {
+ // The $g_list_level global keeps track of when we're inside a list.
+ // Each time we enter a list, we increment it; when we leave a list,
+ // we decrement. If it's zero, we're not in a list anymore.
+ //
+ // We do this because when we're not inside a list, we want to treat
+ // something like this:
+ //
+ // I recommend upgrading to version
+ // 8. Oops, now this line is treated
+ // as a sub-list.
+ //
+ // As a single paragraph, despite the fact that the second line starts
+ // with a digit-period-space sequence.
+ //
+ // Whereas when we're inside a list (or sub-list), that line will be
+ // treated as the start of a sub-list. What a kludge, huh? This is
+ // an aspect of Markdown's syntax that's hard to parse perfectly
+ // without resorting to mind-reading. Perhaps the solution is to
+ // change the syntax rules such that sub-lists must start with a
+ // starting cardinal number; e.g. "1." or "a.".
+ globals.gListLevel++;
+
+ // trim trailing blank lines:
+ listStr = listStr.replace(/\n{2,}$/, '\n');
+
+ // attacklab: add sentinel to emulate \z
+ listStr += '¨0';
+
+ var rgx = /(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,
+ isParagraphed = (/\n[ \t]*\n(?!¨0)/.test(listStr));
+
+ // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,
+ // which is a syntax breaking change
+ // activating this option reverts to old behavior
+ if (options.disableForced4SpacesIndentedSublists) {
+ rgx = /(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm;
+ }
+
+ listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {
+ checked = (checked && checked.trim() !== '');
+
+ var item = showdown.subParser('outdent')(m4, options, globals),
+ bulletStyle = '';
+
+ // Support for github tasklists
+ if (taskbtn && options.tasklists) {
+ bulletStyle = ' class="task-list-item" style="list-style-type: none;"';
+ item = item.replace(/^[ \t]*\[(x|X| )?]/m, function () {
+ var otp = '';
+ return otp;
+ });
+ }
+
+ // ISSUE #312
+ // This input: - - - a
+ // causes trouble to the parser, since it interprets it as:
+ // - a
+ // instead of:
+ // - - - a
+ // So, to prevent it, we will put a marker (¨A)in the beginning of the line
+ // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser
+ item = item.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g, function (wm2) {
+ return '¨A' + wm2;
+ });
+
+ // m1 - Leading line or
+ // Has a double return (multi paragraph) or
+ // Has sublist
+ if (m1 || (item.search(/\n{2,}/) > -1)) {
+ item = showdown.subParser('githubCodeBlocks')(item, options, globals);
+ item = showdown.subParser('blockGamut')(item, options, globals);
+ } else {
+ // Recursion for sub-lists:
+ item = showdown.subParser('lists')(item, options, globals);
+ item = item.replace(/\n$/, ''); // chomp(item)
+ item = showdown.subParser('hashHTMLBlocks')(item, options, globals);
+
+ // Colapse double linebreaks
+ item = item.replace(/\n\n+/g, '\n\n');
+ if (isParagraphed) {
+ item = showdown.subParser('paragraphs')(item, options, globals);
+ } else {
+ item = showdown.subParser('spanGamut')(item, options, globals);
+ }
+ }
+
+ // now we need to remove the marker (¨A)
+ item = item.replace('¨A', '');
+ // we can finally wrap the line in list item tags
+ item = '' + item + ' \n';
+
+ return item;
+ });
+
+ // attacklab: strip sentinel
+ listStr = listStr.replace(/¨0/g, '');
+
+ globals.gListLevel--;
+
+ if (trimTrailing) {
+ listStr = listStr.replace(/\s+$/, '');
+ }
+
+ return listStr;
+ }
+
+ function styleStartNumber (list, listType) {
+ // check if ol and starts by a number different than 1
+ if (listType === 'ol') {
+ var res = list.match(/^ *(\d+)\./);
+ if (res && res[1] !== '1') {
+ return ' start="' + res[1] + '"';
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Check and parse consecutive lists (better fix for issue #142)
+ * @param {string} list
+ * @param {string} listType
+ * @param {boolean} trimTrailing
+ * @returns {string}
+ */
+ function parseConsecutiveLists (list, listType, trimTrailing) {
+ // check if we caught 2 or more consecutive lists by mistake
+ // we use the counterRgx, meaning if listType is UL we look for OL and vice versa
+ var olRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?\d+\.[ \t]/gm : /^ {0,3}\d+\.[ \t]/gm,
+ ulRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?[*+-][ \t]/gm : /^ {0,3}[*+-][ \t]/gm,
+ counterRxg = (listType === 'ul') ? olRgx : ulRgx,
+ result = '';
+
+ if (list.search(counterRxg) !== -1) {
+ (function parseCL (txt) {
+ var pos = txt.search(counterRxg),
+ style = styleStartNumber(list, listType);
+ if (pos !== -1) {
+ // slice
+ result += '\n\n<' + listType + style + '>\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '' + listType + '>\n';
+
+ // invert counterType and listType
+ listType = (listType === 'ul') ? 'ol' : 'ul';
+ counterRxg = (listType === 'ul') ? olRgx : ulRgx;
+
+ //recurse
+ parseCL(txt.slice(pos));
+ } else {
+ result += '\n\n<' + listType + style + '>\n' + processListItems(txt, !!trimTrailing) + '' + listType + '>\n';
+ }
+ })(list);
+ } else {
+ var style = styleStartNumber(list, listType);
+ result = '\n\n<' + listType + style + '>\n' + processListItems(list, !!trimTrailing) + '' + listType + '>\n';
+ }
+
+ return result;
+ }
+
+ /** Start of list parsing **/
+ text = globals.converter._dispatch('lists.before', text, options, globals);
+ // add sentinel to hack around khtml/safari bug:
+ // http://bugs.webkit.org/show_bug.cgi?id=11231
+ text += '¨0';
+
+ if (globals.gListLevel) {
+ text = text.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
+ function (wholeMatch, list, m2) {
+ var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';
+ return parseConsecutiveLists(list, listType, true);
+ }
+ );
+ } else {
+ text = text.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
+ function (wholeMatch, m1, list, m3) {
+ var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';
+ return parseConsecutiveLists(list, listType, false);
+ }
+ );
+ }
+
+ // strip sentinel
+ text = text.replace(/¨0/, '');
+ text = globals.converter._dispatch('lists.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/blockquote.js b/showdown/src/subParsers/makeMarkdown/blockquote.js
new file mode 100644
index 00000000..143e5a8f
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/blockquote.js
@@ -0,0 +1,22 @@
+showdown.subParser('makeMarkdown.blockquote', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ var children = node.childNodes,
+ childrenLength = children.length;
+
+ for (var i = 0; i < childrenLength; ++i) {
+ var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);
+
+ if (innerTxt === '') {
+ continue;
+ }
+ txt += innerTxt;
+ }
+ }
+ // cleanup
+ txt = txt.trim();
+ txt = '> ' + txt.split('\n').join('\n> ');
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/codeBlock.js b/showdown/src/subParsers/makeMarkdown/codeBlock.js
new file mode 100644
index 00000000..bf8cf173
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/codeBlock.js
@@ -0,0 +1,7 @@
+showdown.subParser('makeMarkdown.codeBlock', function (node, globals) {
+ 'use strict';
+
+ var lang = node.getAttribute('language'),
+ num = node.getAttribute('precodenum');
+ return '```' + lang + '\n' + globals.preList[num] + '\n```';
+});
diff --git a/showdown/src/subParsers/makeMarkdown/codeSpan.js b/showdown/src/subParsers/makeMarkdown/codeSpan.js
new file mode 100644
index 00000000..da904295
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/codeSpan.js
@@ -0,0 +1,5 @@
+showdown.subParser('makeMarkdown.codeSpan', function (node) {
+ 'use strict';
+
+ return '`' + node.innerHTML + '`';
+});
diff --git a/showdown/src/subParsers/makeMarkdown/emphasis.js b/showdown/src/subParsers/makeMarkdown/emphasis.js
new file mode 100644
index 00000000..283cd02b
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/emphasis.js
@@ -0,0 +1,15 @@
+showdown.subParser('makeMarkdown.emphasis', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ txt += '*';
+ var children = node.childNodes,
+ childrenLength = children.length;
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ txt += '*';
+ }
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/header.js b/showdown/src/subParsers/makeMarkdown/header.js
new file mode 100644
index 00000000..9a1b0c52
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/header.js
@@ -0,0 +1,17 @@
+showdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {
+ 'use strict';
+
+ var headerMark = new Array(headerLevel + 1).join('#'),
+ txt = '';
+
+ if (node.hasChildNodes()) {
+ txt = headerMark + ' ';
+ var children = node.childNodes,
+ childrenLength = children.length;
+
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ }
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/hr.js b/showdown/src/subParsers/makeMarkdown/hr.js
new file mode 100644
index 00000000..555451f1
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/hr.js
@@ -0,0 +1,5 @@
+showdown.subParser('makeMarkdown.hr', function () {
+ 'use strict';
+
+ return '---';
+});
diff --git a/showdown/src/subParsers/makeMarkdown/image.js b/showdown/src/subParsers/makeMarkdown/image.js
new file mode 100644
index 00000000..b5fa0393
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/image.js
@@ -0,0 +1,18 @@
+showdown.subParser('makeMarkdown.image', function (node) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasAttribute('src')) {
+ txt += '![' + node.getAttribute('alt') + '](';
+ txt += '<' + node.getAttribute('src') + '>';
+ if (node.hasAttribute('width') && node.hasAttribute('height')) {
+ txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');
+ }
+
+ if (node.hasAttribute('title')) {
+ txt += ' "' + node.getAttribute('title') + '"';
+ }
+ txt += ')';
+ }
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/links.js b/showdown/src/subParsers/makeMarkdown/links.js
new file mode 100644
index 00000000..6b23255a
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/links.js
@@ -0,0 +1,20 @@
+showdown.subParser('makeMarkdown.links', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes() && node.hasAttribute('href')) {
+ var children = node.childNodes,
+ childrenLength = children.length;
+ txt = '[';
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ txt += '](';
+ txt += '<' + node.getAttribute('href') + '>';
+ if (node.hasAttribute('title')) {
+ txt += ' "' + node.getAttribute('title') + '"';
+ }
+ txt += ')';
+ }
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/list.js b/showdown/src/subParsers/makeMarkdown/list.js
new file mode 100644
index 00000000..7882e1b5
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/list.js
@@ -0,0 +1,33 @@
+showdown.subParser('makeMarkdown.list', function (node, globals, type) {
+ 'use strict';
+
+ var txt = '';
+ if (!node.hasChildNodes()) {
+ return '';
+ }
+ var listItems = node.childNodes,
+ listItemsLenght = listItems.length,
+ listNum = node.getAttribute('start') || 1;
+
+ for (var i = 0; i < listItemsLenght; ++i) {
+ if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {
+ continue;
+ }
+
+ // define the bullet to use in list
+ var bullet = '';
+ if (type === 'ol') {
+ bullet = listNum.toString() + '. ';
+ } else {
+ bullet = '- ';
+ }
+
+ // parse list item
+ txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);
+ ++listNum;
+ }
+
+ // add comment at the end to prevent consecutive lists to be parsed as one
+ txt += '\n\n';
+ return txt.trim();
+});
diff --git a/showdown/src/subParsers/makeMarkdown/listItem.js b/showdown/src/subParsers/makeMarkdown/listItem.js
new file mode 100644
index 00000000..bccd2a07
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/listItem.js
@@ -0,0 +1,25 @@
+showdown.subParser('makeMarkdown.listItem', function (node, globals) {
+ 'use strict';
+
+ var listItemTxt = '';
+
+ var children = node.childNodes,
+ childrenLenght = children.length;
+
+ for (var i = 0; i < childrenLenght; ++i) {
+ listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ // if it's only one liner, we need to add a newline at the end
+ if (!/\n$/.test(listItemTxt)) {
+ listItemTxt += '\n';
+ } else {
+ // it's multiparagraph, so we need to indent
+ listItemTxt = listItemTxt
+ .split('\n')
+ .join('\n ')
+ .replace(/^ {4}$/gm, '')
+ .replace(/\n\n+/g, '\n\n');
+ }
+
+ return listItemTxt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/node.js b/showdown/src/subParsers/makeMarkdown/node.js
new file mode 100644
index 00000000..67ab5852
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/node.js
@@ -0,0 +1,120 @@
+
+
+showdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {
+ 'use strict';
+
+ spansOnly = spansOnly || false;
+
+ var txt = '';
+
+ // edge case of text without wrapper paragraph
+ if (node.nodeType === 3) {
+ return showdown.subParser('makeMarkdown.txt')(node, globals);
+ }
+
+ // HTML comment
+ if (node.nodeType === 8) {
+ return '\n\n';
+ }
+
+ // process only node elements
+ if (node.nodeType !== 1) {
+ return '';
+ }
+
+ var tagName = node.tagName.toLowerCase();
+
+ switch (tagName) {
+
+ //
+ // BLOCKS
+ //
+ case 'h1':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\n\n'; }
+ break;
+ case 'h2':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\n\n'; }
+ break;
+ case 'h3':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\n\n'; }
+ break;
+ case 'h4':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\n\n'; }
+ break;
+ case 'h5':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\n\n'; }
+ break;
+ case 'h6':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\n\n'; }
+ break;
+
+ case 'p':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\n\n'; }
+ break;
+
+ case 'blockquote':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\n\n'; }
+ break;
+
+ case 'hr':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\n\n'; }
+ break;
+
+ case 'ol':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\n\n'; }
+ break;
+
+ case 'ul':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\n\n'; }
+ break;
+
+ case 'precode':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\n\n'; }
+ break;
+
+ case 'pre':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\n\n'; }
+ break;
+
+ case 'table':
+ if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\n\n'; }
+ break;
+
+ //
+ // SPANS
+ //
+ case 'code':
+ txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);
+ break;
+
+ case 'em':
+ case 'i':
+ txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);
+ break;
+
+ case 'strong':
+ case 'b':
+ txt = showdown.subParser('makeMarkdown.strong')(node, globals);
+ break;
+
+ case 'del':
+ txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);
+ break;
+
+ case 'a':
+ txt = showdown.subParser('makeMarkdown.links')(node, globals);
+ break;
+
+ case 'img':
+ txt = showdown.subParser('makeMarkdown.image')(node, globals);
+ break;
+
+ default:
+ txt = node.outerHTML + '\n\n';
+ }
+
+ // common normalization
+ // TODO eventually
+
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/paragraph.js b/showdown/src/subParsers/makeMarkdown/paragraph.js
new file mode 100644
index 00000000..f899d597
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/paragraph.js
@@ -0,0 +1,17 @@
+showdown.subParser('makeMarkdown.paragraph', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ var children = node.childNodes,
+ childrenLength = children.length;
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ }
+
+ // some text normalization
+ txt = txt.trim();
+
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/pre.js b/showdown/src/subParsers/makeMarkdown/pre.js
new file mode 100644
index 00000000..621701a9
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/pre.js
@@ -0,0 +1,6 @@
+showdown.subParser('makeMarkdown.pre', function (node, globals) {
+ 'use strict';
+
+ var num = node.getAttribute('prenum');
+ return '' + globals.preList[num] + '
';
+});
diff --git a/showdown/src/subParsers/makeMarkdown/strikethrough.js b/showdown/src/subParsers/makeMarkdown/strikethrough.js
new file mode 100644
index 00000000..0676b86c
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/strikethrough.js
@@ -0,0 +1,15 @@
+showdown.subParser('makeMarkdown.strikethrough', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ txt += '~~';
+ var children = node.childNodes,
+ childrenLength = children.length;
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ txt += '~~';
+ }
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/strong.js b/showdown/src/subParsers/makeMarkdown/strong.js
new file mode 100644
index 00000000..05ae9bca
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/strong.js
@@ -0,0 +1,15 @@
+showdown.subParser('makeMarkdown.strong', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (node.hasChildNodes()) {
+ txt += '**';
+ var children = node.childNodes,
+ childrenLength = children.length;
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals);
+ }
+ txt += '**';
+ }
+ return txt;
+});
diff --git a/showdown/src/subParsers/makeMarkdown/table.js b/showdown/src/subParsers/makeMarkdown/table.js
new file mode 100644
index 00000000..1fb1f94a
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/table.js
@@ -0,0 +1,70 @@
+showdown.subParser('makeMarkdown.table', function (node, globals) {
+ 'use strict';
+
+ var txt = '',
+ tableArray = [[], []],
+ headings = node.querySelectorAll('thead>tr>th'),
+ rows = node.querySelectorAll('tbody>tr'),
+ i, ii;
+ for (i = 0; i < headings.length; ++i) {
+ var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),
+ allign = '---';
+
+ if (headings[i].hasAttribute('style')) {
+ var style = headings[i].getAttribute('style').toLowerCase().replace(/\s/g, '');
+ switch (style) {
+ case 'text-align:left;':
+ allign = ':---';
+ break;
+ case 'text-align:right;':
+ allign = '---:';
+ break;
+ case 'text-align:center;':
+ allign = ':---:';
+ break;
+ }
+ }
+ tableArray[0][i] = headContent.trim();
+ tableArray[1][i] = allign;
+ }
+
+ for (i = 0; i < rows.length; ++i) {
+ var r = tableArray.push([]) - 1,
+ cols = rows[i].getElementsByTagName('td');
+
+ for (ii = 0; ii < headings.length; ++ii) {
+ var cellContent = ' ';
+ if (typeof cols[ii] !== 'undefined') {
+ cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);
+ }
+ tableArray[r].push(cellContent);
+ }
+ }
+
+ var cellSpacesCount = 3;
+ for (i = 0; i < tableArray.length; ++i) {
+ for (ii = 0; ii < tableArray[i].length; ++ii) {
+ var strLen = tableArray[i][ii].length;
+ if (strLen > cellSpacesCount) {
+ cellSpacesCount = strLen;
+ }
+ }
+ }
+
+ for (i = 0; i < tableArray.length; ++i) {
+ for (ii = 0; ii < tableArray[i].length; ++ii) {
+ if (i === 1) {
+ if (tableArray[i][ii].slice(-1) === ':') {
+ tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';
+ } else {
+ tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');
+ }
+ } else {
+ tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);
+ }
+ }
+ txt += '| ' + tableArray[i].join(' | ') + ' |\n';
+ }
+
+ return txt.trim();
+});
diff --git a/showdown/src/subParsers/makeMarkdown/tableCell.js b/showdown/src/subParsers/makeMarkdown/tableCell.js
new file mode 100644
index 00000000..b318ff13
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/tableCell.js
@@ -0,0 +1,15 @@
+showdown.subParser('makeMarkdown.tableCell', function (node, globals) {
+ 'use strict';
+
+ var txt = '';
+ if (!node.hasChildNodes()) {
+ return '';
+ }
+ var children = node.childNodes,
+ childrenLength = children.length;
+
+ for (var i = 0; i < childrenLength; ++i) {
+ txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);
+ }
+ return txt.trim();
+});
diff --git a/showdown/src/subParsers/makeMarkdown/txt.js b/showdown/src/subParsers/makeMarkdown/txt.js
new file mode 100644
index 00000000..a231bc4a
--- /dev/null
+++ b/showdown/src/subParsers/makeMarkdown/txt.js
@@ -0,0 +1,43 @@
+showdown.subParser('makeMarkdown.txt', function (node) {
+ 'use strict';
+
+ var txt = node.nodeValue;
+
+ // multiple spaces are collapsed
+ txt = txt.replace(/ +/g, ' ');
+
+ // replace the custom ¨NBSP; with a space
+ txt = txt.replace(/¨NBSP;/g, ' ');
+
+ // ", <, > and & should replace escaped html entities
+ txt = showdown.helper.unescapeHTMLEntities(txt);
+
+ // escape markdown magic characters
+ // emphasis, strong and strikethrough - can appear everywhere
+ // we also escape pipe (|) because of tables
+ // and escape ` because of code blocks and spans
+ txt = txt.replace(/([*_~|`])/g, '\\$1');
+
+ // escape > because of blockquotes
+ txt = txt.replace(/^(\s*)>/g, '\\$1>');
+
+ // hash character, only troublesome at the beginning of a line because of headers
+ txt = txt.replace(/^#/gm, '\\#');
+
+ // horizontal rules
+ txt = txt.replace(/^(\s*)([-=]{3,})(\s*)$/, '$1\\$2$3');
+
+ // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer
+ txt = txt.replace(/^( {0,3}\d+)\./gm, '$1\\.');
+
+ // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)
+ txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\$2');
+
+ // images and links, ] followed by ( is problematic, so we escape it
+ txt = txt.replace(/]([\s]*)\(/g, '\\]$1\\(');
+
+ // reference URIs must also be escaped
+ txt = txt.replace(/^ {0,3}\[([\S \t]*?)]:/gm, '\\[$1]:');
+
+ return txt;
+});
diff --git a/showdown/src/subParsers/metadata.js b/showdown/src/subParsers/metadata.js
new file mode 100644
index 00000000..d6017232
--- /dev/null
+++ b/showdown/src/subParsers/metadata.js
@@ -0,0 +1,49 @@
+/**
+ * Parse metadata at the top of the document
+ */
+showdown.subParser('metadata', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.metadata) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('metadata.before', text, options, globals);
+
+ function parseMetadataContents (content) {
+ // raw is raw so it's not changed in any way
+ globals.metadata.raw = content;
+
+ // escape chars forbidden in html attributes
+ // double quotes
+ content = content
+ // ampersand first
+ .replace(/&/g, '&')
+ // double quotes
+ .replace(/"/g, '"');
+
+ content = content.replace(/\n {4}/g, ' ');
+ content.replace(/^([\S ]+): +([\s\S]+?)$/gm, function (wm, key, value) {
+ globals.metadata.parsed[key] = value;
+ return '';
+ });
+ }
+
+ text = text.replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/, function (wholematch, format, content) {
+ parseMetadataContents(content);
+ return '¨M';
+ });
+
+ text = text.replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/, function (wholematch, format, content) {
+ if (format) {
+ globals.metadata.format = format;
+ }
+ parseMetadataContents(content);
+ return '¨M';
+ });
+
+ text = text.replace(/¨M/g, '');
+
+ text = globals.converter._dispatch('metadata.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/outdent.js b/showdown/src/subParsers/outdent.js
new file mode 100644
index 00000000..5e26714a
--- /dev/null
+++ b/showdown/src/subParsers/outdent.js
@@ -0,0 +1,17 @@
+/**
+ * Remove one level of line-leading tabs or spaces
+ */
+showdown.subParser('outdent', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('outdent.before', text, options, globals);
+
+ // attacklab: hack around Konqueror 3.5.4 bug:
+ // "----------bug".replace(/^-/g,"") == "bug"
+ text = text.replace(/^(\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width
+
+ // attacklab: clean up hack
+ text = text.replace(/¨0/g, '');
+
+ text = globals.converter._dispatch('outdent.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/paragraphs.js b/showdown/src/subParsers/paragraphs.js
new file mode 100644
index 00000000..dfb804d6
--- /dev/null
+++ b/showdown/src/subParsers/paragraphs.js
@@ -0,0 +1,70 @@
+/**
+ *
+ */
+showdown.subParser('paragraphs', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('paragraphs.before', text, options, globals);
+ // Strip leading and trailing lines:
+ text = text.replace(/^\n+/g, '');
+ text = text.replace(/\n+$/g, '');
+
+ var grafs = text.split(/\n{2,}/g),
+ grafsOut = [],
+ end = grafs.length; // Wrap tags
+
+ for (var i = 0; i < end; i++) {
+ var str = grafs[i];
+ // if this is an HTML marker, copy it
+ if (str.search(/¨(K|G)(\d+)\1/g) >= 0) {
+ grafsOut.push(str);
+
+ // test for presence of characters to prevent empty lines being parsed
+ // as paragraphs (resulting in undesired extra empty paragraphs)
+ } else if (str.search(/\S/) >= 0) {
+ str = showdown.subParser('spanGamut')(str, options, globals);
+ str = str.replace(/^([ \t]*)/g, '
');
+ str += '
';
+ grafsOut.push(str);
+ }
+ }
+
+ /** Unhashify HTML blocks */
+ end = grafsOut.length;
+ for (i = 0; i < end; i++) {
+ var blockText = '',
+ grafsOutIt = grafsOut[i],
+ codeFlag = false;
+ // if this is a marker for an html block...
+ // use RegExp.test instead of string.search because of QML bug
+ while (/¨(K|G)(\d+)\1/.test(grafsOutIt)) {
+ var delim = RegExp.$1,
+ num = RegExp.$2;
+
+ if (delim === 'K') {
+ blockText = globals.gHtmlBlocks[num];
+ } else {
+ // we need to check if ghBlock is a false positive
+ if (codeFlag) {
+ // use encoded version of all text
+ blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals);
+ } else {
+ blockText = globals.ghCodeBlocks[num].codeblock;
+ }
+ }
+ blockText = blockText.replace(/\$/g, '$$$$'); // Escape any dollar signs
+
+ grafsOutIt = grafsOutIt.replace(/(\n\n)?¨(K|G)\d+\2(\n\n)?/, blockText);
+ // Check if grafsOutIt is a pre->code
+ if (/^]*>\s*]*>/.test(grafsOutIt)) {
+ codeFlag = true;
+ }
+ }
+ grafsOut[i] = grafsOutIt;
+ }
+ text = grafsOut.join('\n');
+ // Strip leading and trailing lines:
+ text = text.replace(/^\n+/g, '');
+ text = text.replace(/\n+$/g, '');
+ return globals.converter._dispatch('paragraphs.after', text, options, globals);
+});
diff --git a/showdown/src/subParsers/runExtension.js b/showdown/src/subParsers/runExtension.js
new file mode 100644
index 00000000..e8d0263d
--- /dev/null
+++ b/showdown/src/subParsers/runExtension.js
@@ -0,0 +1,20 @@
+/**
+ * Run extension
+ */
+showdown.subParser('runExtension', function (ext, text, options, globals) {
+ 'use strict';
+
+ if (ext.filter) {
+ text = ext.filter(text, globals.converter, options);
+
+ } else if (ext.regex) {
+ // TODO remove this when old extension loading mechanism is deprecated
+ var re = ext.regex;
+ if (!(re instanceof RegExp)) {
+ re = new RegExp(re, 'g');
+ }
+ text = text.replace(re, ext.replace);
+ }
+
+ return text;
+});
diff --git a/showdown/src/subParsers/spanGamut.js b/showdown/src/subParsers/spanGamut.js
new file mode 100644
index 00000000..29891df3
--- /dev/null
+++ b/showdown/src/subParsers/spanGamut.js
@@ -0,0 +1,49 @@
+/**
+ * These are all the transformations that occur *within* block-level
+ * tags like paragraphs, headers, and list items.
+ */
+showdown.subParser('spanGamut', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('spanGamut.before', text, options, globals);
+ text = showdown.subParser('codeSpans')(text, options, globals);
+ text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);
+ text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);
+
+ // Process anchor and image tags. Images must come first,
+ // because ![foo][f] looks like an anchor.
+ text = showdown.subParser('images')(text, options, globals);
+ text = showdown.subParser('anchors')(text, options, globals);
+
+ // Make links out of things like ` `
+ // Must come after anchors, because you can use < and >
+ // delimiters in inline links like [this]().
+ text = showdown.subParser('autoLinks')(text, options, globals);
+ text = showdown.subParser('simplifiedAutoLinks')(text, options, globals);
+ text = showdown.subParser('emoji')(text, options, globals);
+ text = showdown.subParser('underline')(text, options, globals);
+ text = showdown.subParser('italicsAndBold')(text, options, globals);
+ text = showdown.subParser('strikethrough')(text, options, globals);
+ text = showdown.subParser('ellipsis')(text, options, globals);
+
+ // we need to hash HTML tags inside spans
+ text = showdown.subParser('hashHTMLSpans')(text, options, globals);
+
+ // now we encode amps and angles
+ text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);
+
+ // Do hard breaks
+ if (options.simpleLineBreaks) {
+ // GFM style hard breaks
+ // only add line breaks if the text does not contain a block (special case for lists)
+ if (!/\n\n¨K/.test(text)) {
+ text = text.replace(/\n+/g, '
\n');
+ }
+ } else {
+ // Vanilla hard breaks
+ text = text.replace(/ +\n/g, '
\n');
+ }
+
+ text = globals.converter._dispatch('spanGamut.after', text, options, globals);
+ return text;
+});
diff --git a/showdown/src/subParsers/strikethrough.js b/showdown/src/subParsers/strikethrough.js
new file mode 100644
index 00000000..4517c67f
--- /dev/null
+++ b/showdown/src/subParsers/strikethrough.js
@@ -0,0 +1,18 @@
+showdown.subParser('strikethrough', function (text, options, globals) {
+ 'use strict';
+
+ function parseInside (txt) {
+ if (options.simplifiedAutoLink) {
+ txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);
+ }
+ return '' + txt + '';
+ }
+
+ if (options.strikethrough) {
+ text = globals.converter._dispatch('strikethrough.before', text, options, globals);
+ text = text.replace(/(?:~){2}([\s\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });
+ text = globals.converter._dispatch('strikethrough.after', text, options, globals);
+ }
+
+ return text;
+});
diff --git a/showdown/src/subParsers/stripLinkDefinitions.js b/showdown/src/subParsers/stripLinkDefinitions.js
new file mode 100644
index 00000000..d6dc0734
--- /dev/null
+++ b/showdown/src/subParsers/stripLinkDefinitions.js
@@ -0,0 +1,58 @@
+/**
+ * Strips link definitions from text, stores the URLs and titles in
+ * hash references.
+ * Link defs are in the form: ^[id]: url "optional title"
+ */
+showdown.subParser('stripLinkDefinitions', function (text, options, globals) {
+ 'use strict';
+
+ var regex = /^ {0,3}\[([^\]]+)]:[ \t]*\n?[ \t]*([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,
+ base64Regex = /^ {0,3}\[([^\]]+)]:[ \t]*\n?[ \t]*(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm;
+
+ // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
+ text += '¨0';
+
+ var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {
+
+ // if there aren't two instances of linkId it must not be a reference link so back out
+ linkId = linkId.toLowerCase();
+ if (text.toLowerCase().split(linkId).length - 1 < 2) {
+ return wholeMatch;
+ }
+ if (url.match(/^data:.+?\/.+?;base64,/)) {
+ // remove newlines
+ globals.gUrls[linkId] = url.replace(/\s/g, '');
+ } else {
+ globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive
+ }
+
+ if (blankLines) {
+ // Oops, found blank lines, so it's not a title.
+ // Put back the parenthetical statement we stole.
+ return blankLines + title;
+
+ } else {
+ if (title) {
+ globals.gTitles[linkId] = title.replace(/"|'/g, '"');
+ }
+ if (options.parseImgDimensions && width && height) {
+ globals.gDimensions[linkId] = {
+ width: width,
+ height: height
+ };
+ }
+ }
+ // Completely remove the definition from the text
+ return '';
+ };
+
+ // first we try to find base64 link references
+ text = text.replace(base64Regex, replaceFunc);
+
+ text = text.replace(regex, replaceFunc);
+
+ // attacklab: strip sentinel
+ text = text.replace(/¨0/, '');
+
+ return text;
+});
diff --git a/showdown/src/subParsers/tables.js b/showdown/src/subParsers/tables.js
new file mode 100644
index 00000000..1f3e9563
--- /dev/null
+++ b/showdown/src/subParsers/tables.js
@@ -0,0 +1,142 @@
+showdown.subParser('tables', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.tables) {
+ return text;
+ }
+
+ var tableRgx = /^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,
+ //singeColTblRgx = /^ {0,3}\|.+\|\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n(?: {0,3}\|.+\|\n)+(?:\n\n|¨0)/gm;
+ singeColTblRgx = /^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm;
+
+ function parseStyles (sLine) {
+ if (/^:[ \t]*--*$/.test(sLine)) {
+ return ' style="text-align:left;"';
+ } else if (/^--*[ \t]*:[ \t]*$/.test(sLine)) {
+ return ' style="text-align:right;"';
+ } else if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) {
+ return ' style="text-align:center;"';
+ } else {
+ return '';
+ }
+ }
+
+ function parseHeaders (header, style) {
+ var id = '';
+ header = header.trim();
+ // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility
+ if (options.tablesHeaderId || options.tableHeaderId) {
+ id = ' id="' + header.replace(/ /g, '_').toLowerCase() + '"';
+ }
+ header = showdown.subParser('spanGamut')(header, options, globals);
+
+ return '' + header + ' \n';
+ }
+
+ function parseCells (cell, style) {
+ var subText = showdown.subParser('spanGamut')(cell, options, globals);
+ return '' + subText + ' \n';
+ }
+
+ function buildTable (headers, cells) {
+ var tb = '\n\n\n',
+ tblLgn = headers.length;
+
+ for (var i = 0; i < tblLgn; ++i) {
+ tb += headers[i];
+ }
+ tb += ' \n\n\n';
+
+ for (i = 0; i < cells.length; ++i) {
+ tb += '\n';
+ for (var ii = 0; ii < tblLgn; ++ii) {
+ tb += cells[i][ii];
+ }
+ tb += ' \n';
+ }
+ tb += '\n
\n';
+ return tb;
+ }
+
+ function parseTable (rawTable) {
+ var i, tableLines = rawTable.split('\n');
+
+ for (i = 0; i < tableLines.length; ++i) {
+ // strip wrong first and last column if wrapped tables are used
+ if (/^ {0,3}\|/.test(tableLines[i])) {
+ tableLines[i] = tableLines[i].replace(/^ {0,3}\|/, '');
+ }
+ if (/\|[ \t]*$/.test(tableLines[i])) {
+ tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, '');
+ }
+ // parse code spans first, but we only support one line code spans
+ tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);
+ }
+
+ var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),
+ rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),
+ rawCells = [],
+ headers = [],
+ styles = [],
+ cells = [];
+
+ tableLines.shift();
+ tableLines.shift();
+
+ for (i = 0; i < tableLines.length; ++i) {
+ if (tableLines[i].trim() === '') {
+ continue;
+ }
+ rawCells.push(
+ tableLines[i]
+ .split('|')
+ .map(function (s) {
+ return s.trim();
+ })
+ );
+ }
+
+ if (rawHeaders.length < rawStyles.length) {
+ return rawTable;
+ }
+
+ for (i = 0; i < rawStyles.length; ++i) {
+ styles.push(parseStyles(rawStyles[i]));
+ }
+
+ for (i = 0; i < rawHeaders.length; ++i) {
+ if (showdown.helper.isUndefined(styles[i])) {
+ styles[i] = '';
+ }
+ headers.push(parseHeaders(rawHeaders[i], styles[i]));
+ }
+
+ for (i = 0; i < rawCells.length; ++i) {
+ var row = [];
+ for (var ii = 0; ii < headers.length; ++ii) {
+ if (showdown.helper.isUndefined(rawCells[i][ii])) {
+
+ }
+ row.push(parseCells(rawCells[i][ii], styles[ii]));
+ }
+ cells.push(row);
+ }
+
+ return buildTable(headers, cells);
+ }
+
+ text = globals.converter._dispatch('tables.before', text, options, globals);
+
+ // find escaped pipe characters
+ text = text.replace(/\\(\|)/g, showdown.helper.escapeCharactersCallback);
+
+ // parse multi column tables
+ text = text.replace(tableRgx, parseTable);
+
+ // parse one column tables
+ text = text.replace(singeColTblRgx, parseTable);
+
+ text = globals.converter._dispatch('tables.after', text, options, globals);
+
+ return text;
+});
diff --git a/showdown/src/subParsers/underline.js b/showdown/src/subParsers/underline.js
new file mode 100644
index 00000000..43491a64
--- /dev/null
+++ b/showdown/src/subParsers/underline.js
@@ -0,0 +1,32 @@
+showdown.subParser('underline', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.underline) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('underline.before', text, options, globals);
+
+ if (options.literalMidWordUnderscores) {
+ text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) {
+ return '' + txt + '';
+ });
+ text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) {
+ return '' + txt + '';
+ });
+ } else {
+ text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
+ return (/\S$/.test(m)) ? '' + m + '' : wm;
+ });
+ text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
+ return (/\S$/.test(m)) ? '' + m + '' : wm;
+ });
+ }
+
+ // escape remaining underscores to prevent them being parsed by italic and bold
+ text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);
+
+ text = globals.converter._dispatch('underline.after', text, options, globals);
+
+ return text;
+});
diff --git a/showdown/src/subParsers/unescapeSpecialChars.js b/showdown/src/subParsers/unescapeSpecialChars.js
new file mode 100644
index 00000000..961e08b0
--- /dev/null
+++ b/showdown/src/subParsers/unescapeSpecialChars.js
@@ -0,0 +1,15 @@
+/**
+ * Swap back in all the special characters we've hidden.
+ */
+showdown.subParser('unescapeSpecialChars', function (text, options, globals) {
+ 'use strict';
+ text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);
+
+ text = text.replace(/¨E(\d+)E/g, function (wholeMatch, m1) {
+ var charCodeToReplace = parseInt(m1);
+ return String.fromCharCode(charCodeToReplace);
+ });
+
+ text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);
+ return text;
+});
diff --git a/src/colors.ts b/src/colors.ts
index a1fa873b..0c28cb36 100644
--- a/src/colors.ts
+++ b/src/colors.ts
@@ -1,4 +1,3 @@
-/* eslint-disable prefer-const */
/**
* @license
* colors.ts - Colors and schemes for huetiful-js.
@@ -14,15 +13,14 @@ OF ANY KIND, either express or implied. See the License for the specific languag
governing permissions and limitations under the License.
*/
-import tailwindHues from "./color-maps/swatches/tailwind.ts";
+import tailwindHues from './color-maps/swatches/tailwind.ts';
import type {
SequentialScheme,
DivergingScheme,
QualitativeScheme,
- HueMap,
+ TailwindColorFamilies,
ScaleValues,
ColorDistanceOptions,
- ColorSpaces,
ColorToken,
HueColorSpaces,
InterpolatorOptions,
@@ -33,8 +31,8 @@ import type {
PairedSchemeOptions
} from './types';
-import * as filterBy from "./filterBy";
-import * as sortBy from "./sortBy";
+import * as filterBy from './filterBy';
+import * as sortBy from './sortBy';
import {
discoverPalettes as nativeDiscoverPalettes,
getFarthestHue as nativeMaxHue,
@@ -71,20 +69,19 @@ import {
getComplimentaryHue as nativeGetComplimentaryHue,
colorDeficiency as nativeColorDeficiency,
interpolator,
- interpolateSpline as nativeInterpolatorSpline,
-} from "./index";
+ interpolateSpline as nativeInterpolatorSpline
+} from './index';
-import { interpolatorConfig } from "./helpers";
+import { interpolatorConfig } from './helpers';
-class ColorArray extends Array {
+class ColorArray {
constructor(colors: ColorToken[]) {
- super();
this['colors'] = colors;
return this;
}
/**
- *
+ *
* Returns a spline based interpolator function with customizable interpolation methods (passed in as 'kind') and optional channel specific overrides.If a color has a falsy channel for example black has an undefined hue channel some interpolation methods may return NaN affecting the final result.
* @param colorspace The colorspace to perform the color space in. Prefer uniform color spaces for better results such as Lch or Jch.
* @param kind The type of the spline interpolation method. Default is basis.
@@ -343,17 +340,13 @@ console.log(filterByDistance(sample, "yellow", 0.1))
filterByDistance(
against: ColorToken,
startDistance = 0.05,
- endDistance?: number,
- mode?: ColorSpaces,
- weights?: [number, number, number, number]
+ endDistance?: number
): ColorArray {
this['colors'] = filterBy.filterByDistance(
this['colors'],
against,
startDistance,
- endDistance,
- mode,
- weights
+ endDistance
);
return this;
}
@@ -744,12 +737,8 @@ console.log(sortedDescending)
*/
// Todo: Add the mode param so that users can select mode to work with. The default is lch
- sortByHue(order: 'asc' | 'desc', colorspace = 'jch'): ColorArray {
- this['colors'] = sortBy.sortByHue(
- this['colors'],
- order,
- colorspace as HueColorSpaces
- );
+ sortByHue(order: 'asc' | 'desc', colorspace: HueColorSpaces): ColorArray {
+ this['colors'] = sortBy.sortByHue(this['colors'], order, colorspace);
return this;
}
@@ -1290,7 +1279,7 @@ function qualitative(scheme: QualitativeScheme): ColorToken[] {
*
* A wrapper function for the default Tailwind palette. If called with both parameters it return the hex code at the specified shade and value. Else, if called with the shade parameter as "all" it will return all colors from the shades in the palette map at the specified value (if value is undefined it will default to "500"). When called with the shade parameter only it will return all the colors from 100 to 900 of the specified shade.
* @param shade Any shade in the default TailwindCSS palette e.g amber,blue.
- * @param val Any value from 100 to 900 in increments of 100 e.g "200".
+ * @param value Any value from 100 to 900 in increments of 100 e.g "200".
* @returns color Returns a hex code string or array of hex codes depending on how the function is called.
* @example
*
@@ -1326,26 +1315,27 @@ console.log(red100)
// #fee2e2
*/
function colors(
- shade: keyof HueMap | string,
- val?: ScaleValues
+ shade: TailwindColorFamilies | 'all',
+ value?: ScaleValues
): ColorToken | ColorToken[] {
const { keys } = Object;
const defaultHue = 'all';
const hueKeys = keys(tailwindHues);
+ // @ts-ignore
shade = shade.toLowerCase();
// First do an AND check on hue and val params. If true return the hue at the specified value.
// If only the hue is defined return the whole array of hex codes for that color.
// If only the value is defined return that color value for every hue.
// @ts-ignore
if (shade === defaultHue) {
- return hueKeys.map((color) => tailwindHues[color][val || '500']);
- } else if (hueKeys.some((hue) => hue === shade) && val) {
- return tailwindHues[shade][val];
- } else if (shade && typeof val == 'undefined') {
+ return hueKeys.map((color) => tailwindHues[color][value || '500']);
+ } else if (hueKeys.some((hue) => hue === shade) && value) {
+ return tailwindHues[shade][value];
+ } else if (shade && typeof value == 'undefined') {
const keyVals = keys(tailwindHues[shade]);
return keyVals.map((key) => tailwindHues[shade][key]);
- } else if (typeof shade && typeof val == 'undefined') {
+ } else if (typeof shade && typeof value == 'undefined') {
throw Error(`Both shade and value cannot be undefined`);
}
}
@@ -1381,7 +1371,7 @@ console.log(red('900'));
*
*/
-function tailwindColors(shade: keyof HueMap) {
+function tailwindColors(shade: keyof TailwindColorFamilies) {
return (val?: ScaleValues): string | string[] => {
// This is a curried func that takes in the shade and returns a function that takes in a value from 100 thru 900
// @ts-ignore
@@ -1390,11 +1380,13 @@ function tailwindColors(shade: keyof HueMap) {
// We check if the shade is a valid Tailwind shade if not we return pure black.
let targetHue: object;
- if (keys(tailwindHues).indexOf(shade) != -1) {
+ if (keys(tailwindHues).indexOf(shade as string) != -1) {
targetHue = tailwindHues[shade];
} else {
throw Error(
- `${shade} is not a valid shade in the default Tailwind palette`
+ `${
+ shade as string
+ } is not a valid shade in the default Tailwind palette`
);
}
@@ -1474,8 +1466,11 @@ class Color {
}
via(origin: ColorToken, t?: number, options?: typeof interpolatorConfig) {
- const result =
- interpolator([origin, this['_color']], this['colorspace'], options);
+ const result = interpolator(
+ [origin, this['_color']],
+ this['colorspace'],
+ options
+ );
return nativeToHex(result(t));
}
@@ -1544,7 +1539,7 @@ class Color {
this['_color'] = setLuminance(this['_color'], this['_color']);
// @ts-ignore
return this;
- }
+ }
return getLuminance(this['_color']);
}
@@ -1642,6 +1637,11 @@ console.log(protanopia({ h: 20, w: 50, b: 30, mode: 'hwb' }))
}
}
+/**
+ * Wrapper function over the Color class that returns a new Color method chain.
+ * @param color The color token to bind.
+ * @returns A new Color class with all the utilities that take a single color as the first parameter bound to its prototype.
+ */
function color(color: ColorToken) {
return new Color(color);
}
@@ -1654,6 +1654,6 @@ export {
tailwindColors,
ColorArray,
load,
- Color as IColor,
- color,
+ Color,
+ color
};
diff --git a/src/converters.ts b/src/converters.ts
index 5bec95e7..b2c56e9e 100644
--- a/src/converters.ts
+++ b/src/converters.ts
@@ -1,4 +1,5 @@
-/**
+/* eslint-disable no-ternary */
+/*
* @license
* converters.ts - Converter functions for huetiful-js.
* Contains parts of chroma.js released under the same license.
@@ -21,17 +22,17 @@ import {
modeLch,
modeLch65,
modeLchuv,
- modeOklch
+ modeOklch,
+ formatHex
} from 'culori/fn';
import type {
ColorTuple,
- ColorSpaces,
+ Colorspaces,
ColorToken,
UniformColorSpaces
} from './types';
import 'culori/all';
-import 'culori/css';
-import { formatHex8, formatHex, colorsNamed } from 'culori/fn';
+import { formatHex8, colorsNamed } from 'culori/fn';
import { getModeChannel } from './helpers';
/**
@@ -39,7 +40,7 @@ import { getModeChannel } from './helpers';
* @param colorspace The mode converter to return.
* @returns The converter function in the mode colorspace.
*/
-function ucsConverter(colorspace:UniformColorSpaces) {
+function ucsConverter(colorspace: UniformColorSpaces) {
const ucsDefinitions = {
jch: modeJch,
lch: modeLch,
@@ -67,78 +68,67 @@ console.log(toHex({ l: 50, c: 31, h: 100, mode: "lch" }))
*/
function toHex(color: ColorToken): string {
// the result to return at the end of the function
- let src = {};
-
+ var output;
// if its of type string and not a CSS named color then its probably hex so we don't convert it
- if (
- typeof color === 'string' &&
- !Object.keys(colorsNamed).some((el) => el === color.toLowerCase())
- ) {
- return color;
+ if (typeof color === 'string') {
+ // @ts-ignore
+ if (!Object.keys(colorsNamed).some((el) => el === color.toLowerCase())) {
+ return color;
+ }
+ return formatHex(color);
+ } else if (typeof color === 'boolean') {
+ return (color !== true && '#ffffff') || '#000000';
+ } else if (typeof color === 'number') {
+ output = num2rgb(color, true) as string;
} else {
- // If our color is an array
- if (Array.isArray(color)) {
- // capture the mode
- const mode: string = color[0];
-
- // set mode to a substring which trims the string at an index that is the reslt of length - 3
-
- // Gets the channel key from the passed in mode
- // Store the channels excluding alpha
- const channels = (colorArr: [string, number, number, number?]) => {
- // Remove the mode element
- colorArr.shift();
-
- return (colorArr.length === 4 && colorArr.slice(0, 3)) || colorArr;
- };
-
- /**
- * Returns a color object with normalized RGB values or just maps value to keys and return the resultant object
- * @param src The object to manipulate
- * @param mode The color space.
- * @param colorArr The array of the color's channel values excluding the alpha/opacity channel
- * @returns A color object
- */
- const channelMapper = (
- src = {},
- mode: string,
- colorArr: [number, number, number]
- ): number[] => {
- src['mode'] = mode;
- // If our mode is rgb...
- if (src['mode'] === 'rgb') {
- // if our rgb values are [0,255] we normalize them to [0,1]
- // for Culori to make sense of the channel values else it defaults o white
- if (colorArr.some((ch) => Math.abs(ch) > 1)) {
- colorArr.map(
- (ch, key) => (src[getModeChannel(mode, key)] = ch / 255)
- );
- }
- } else {
- colorArr.map((ch, key) => (src[getModeChannel(mode, key)] = ch));
- }
+ // Get the mode variable
+ const mode = Array.isArray(color)
+ ? (color[0] as ColorTuple[0])
+ : (color['mode'] as Colorspaces);
+ const alpha =
+ Array.isArray(color) && color.length === 5
+ ? (color[color.length - 1] as ColorTuple[4])
+ : (color['alpha'] as number);
+
+ var channelKeys = getModeChannel(mode).split('');
+ var colorTupleToObj = (colorTuple: number[]) => {
+ var channels = colorTuple.slice(0, 3);
+
+ if (
+ ['rgb', 'lrgb'].indexOf(mode) !== -1 &&
+ channels.some((ch: number) => 1 < Math.abs(ch))
+ ) {
// @ts-ignore
- return src;
+ channels = channels.map((ch) => ch / 255);
+ }
+
+ let output = {
+ [channelKeys[0]]: channels[0],
+ [channelKeys[1]]: channels[1],
+ [channelKeys[2]]: channels[2],
+ mode: mode,
+ alpha: alpha
};
- src['alpha'] = color[4] || 1;
- // @ts-ignore
- src = channelMapper(src, getModeChannel(mode), channels(src, color));
- // @ts-ignore
- src = (src['alpha'] < 1 && formatHex8(src)) || formatHex(src);
- }
- // if its a number use num2rgb
- else if (typeof color === 'number') {
- src = num2rgb(color, true);
- } else {
- // @ts-ignore
- src = formatHex8(color);
+ return output;
+ };
+ if (mode) {
+ // coerce color tuple to object
+ if (Array.isArray(color)) {
+ // @ts-ignore
+ output = colorTupleToObj(color.slice(1));
+ } else {
+ output = colorTupleToObj(
+ toColorTuple(color, mode as Colorspaces).slice(1) as number[]
+ );
+ }
}
- // @ts-ignore
- return src;
}
+
+ return (output['alpha'] < 1 && formatHex8(output)) || formatHex(output);
}
+// Ported from chroma-js with slight modifications
/**
*
* Returns the RGB color equivalent of any number between 0 and 16,777,215.
@@ -164,8 +154,8 @@ function num2rgb(num: number, hex = false): ColorToken {
b: b / 255,
mode: 'lrgb'
};
-
- return (hex && toHex(output)) || output;
+ // @ts-ignore
+ return (hex && formatHex(output)) || output;
} else {
throw Error('unknown num color: ' + num);
}
@@ -244,13 +234,15 @@ function temp2Color(kelvin: number, hex = false): ColorToken {
b: b / 255,
mode: 'rgb'
};
- return (hex && toHex(result)) || result;
+
+ // @ts-ignore
+ return (hex && formatHex(result)) || result;
}
/**
*
- * Returns an array of channel values in the mode color space.
- * @param color Any recognizable color token.
+ * Returns an array of channel values in the mode color space. It does not mutate the values of the passed in color token.
+ * @param color Expects the color to be in hexadecimal represantation or as a plain color object.
* @param mode The mode color space to return channel values for
* @returns An array of channel values with the colorspace as first element and the alpha channel if its explicitly defined in the passed in color.
* @example
@@ -268,25 +260,16 @@ console.log(toColorTuple(rgbColor,'rgb'));
*/
-function toColorTuple(color: ColorToken, mode: ColorSpaces) {
+function toColorTuple(color: string | object, mode: Colorspaces) {
// @ts-ignore
const colorObject: ColorToken = converter(mode)(color);
- if (toHex(color)) {
- // @ts-ignore
+ var arr = Object.keys(colorObject)
+ .filter((ch) => ch !== 'mode')
+ .map((key) => colorObject[key]);
+ arr.unshift(mode);
- const arr: ColorTuple = Object.keys(colorObject)
- .filter((ch) => ch !== 'mode')
- .map((key) => colorObject[key]);
- arr.unshift(mode);
- return arr;
- } else {
- throw Error(
- `${color} is not a valid color token. Try something like 'purple' or ['lch',85,60,143.5]`
- );
-
- // throw Error(`mode is not a valid color space`)
- }
+ return arr;
}
-export { ucsConverter, num2rgb, rgb2num, temp2Color, toColorTuple, toHex };
+export { num2rgb, rgb2num, temp2Color, toColorTuple, ucsConverter, toHex };
diff --git a/src/filterBy.ts b/src/filterBy.ts
index 40d3de3c..3d34e697 100644
--- a/src/filterBy.ts
+++ b/src/filterBy.ts
@@ -11,12 +11,11 @@ OF ANY KIND, either express or implied. See the License for the specific languag
governing permissions and limitations under the License.
*/
-import { differenceEuclidean } from 'culori/fn';
+import { differenceHyab } from 'culori/fn';
import { toHex } from './converters';
-import type { ColorToken, ColorSpaces, HueColorSpaces, Factor } from './types';
+import type { ColorToken, HueColorSpaces, Factor } from './types';
import { getLuminance, getContrast, getChannel } from './utils';
import {
- checkArg,
matchChromaChannel,
matchLightnessChannel,
filteredArr,
@@ -38,7 +37,7 @@ import {
function baseFilterBy(
factor: Factor,
cb: (color: ColorToken) => number,
- colors: Array | object,
+ collection: ColorToken[] | object | object,
start: string | number,
end?: number,
colorspace?: HueColorSpaces
@@ -57,7 +56,7 @@ function baseFilterBy(
(typeof start === 'string' && sym && normalVal.toString().concat(sym)) ||
start;
end = normalize(end, obj[factor](colorspace));
- return filteredArr(factor, cb)(colors as Array, start, end);
+ return filteredArr(factor, cb)(collection as Array, start, end);
}
/**
@@ -90,7 +89,7 @@ console.log(filterByContrast(sample, 'green', '>=3'))
*/
function filterBySaturation(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
startSaturation = 0.05,
endSaturation = 1,
colorspace?: HueColorSpaces
@@ -102,7 +101,7 @@ function filterBySaturation(
return baseFilterBy(
factor,
getChannel(modeChannel),
- colors,
+ collection,
startSaturation,
endSaturation,
colorspace
@@ -139,14 +138,14 @@ filterByLuminance(sample, 0.4, 0.9)
*/
function filterByLuminance(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
startLuminance = 0.05,
endLuminance = 1
): ColorToken[] {
return baseFilterBy(
'luminance',
getLuminance,
- colors,
+ collection,
startLuminance,
endLuminance
);
@@ -183,7 +182,7 @@ filterByLightness(sample, 20, 80)
*/
function filterByLightness(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
startLightness = 5,
endLightness = 100,
colorspace?: HueColorSpaces
@@ -193,7 +192,7 @@ function filterByLightness(
return baseFilterBy(
factor,
getChannel(matchLightnessChannel(colorspace)),
- colors,
+ collection,
startLightness,
endLightness,
colorspace
@@ -229,7 +228,7 @@ filterByHue(sample, 20, 80)
*/
function filterByHue(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
startHue = 0,
endHue = 360,
colorspace?: HueColorSpaces
@@ -237,7 +236,7 @@ function filterByHue(
return baseFilterBy(
'hue',
getChannel(`${colorspace}.h`),
- colors,
+ collection,
startHue,
endHue
);
@@ -245,12 +244,10 @@ function filterByHue(
/**
*
- * Returns an array of colors with the specified distance range. The distance is tested against a comparison color (the 'against' param) and the specified distance ranges.
+ * Returns an array of colors with the specified distance range. The distance is tested against a comparison color (the 'against' param) and the specified distance ranges. Uses the differenceHyab metric for calculating the distances.
* @param colors The array of colors to filter.
* @param startDistance The minimum end of the distance range.
* @param endDistance The maximum end of the distance range.
- * @param weights The weighting values to pass to the Euclidean function. Default is [1,1,1,0].
- * @param colorspace The color space to calculate the distance in .
* @returns Array of filtered colors.
* @example
* import { filterByDistance } from 'huetiful-js'
@@ -271,23 +268,17 @@ console.log(filterByDistance(sample, "yellow", 0.1))
*/
function filterByDistance(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
against: ColorToken,
startDistance = 0.05,
- endDistance?: number,
- colorspace?: ColorSpaces,
- weights?: [number, number, number, number]
+ endDistance?: number
): ColorToken[] {
- const cb = (against) => (color) =>
- differenceEuclidean(
- checkArg(colorspace, 'lchuv') as typeof colorspace,
- checkArg(weights, [1, 1, 1, 0]) as typeof weights
- )(against, color);
+ const cb = (against) => (color) => differenceHyab()(against, color);
return baseFilterBy(
'distance',
cb(toHex(against)),
- colors,
+ collection,
startDistance,
endDistance
);
@@ -324,7 +315,7 @@ console.log(filterByContrast(sample, 'green', '>=3'))
*/
function filterByContrast(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
against: ColorToken,
startContrast = 1,
endContrast = 21
@@ -334,7 +325,7 @@ function filterByContrast(
return baseFilterBy(
'contrast',
cb(against),
- colors,
+ collection,
startContrast,
endContrast
);
diff --git a/src/generators.ts b/src/generators.ts
index b751cbf8..a5c84415 100644
--- a/src/generators.ts
+++ b/src/generators.ts
@@ -50,8 +50,7 @@ import {
matchChromaChannel,
matchLightnessChannel,
max,
- min,
- normalize
+ min
} from './helpers';
import { toHex, ucsConverter } from './converters';
@@ -283,55 +282,45 @@ function hueShift(
(start2: number, end2: number) =>
((n - start1) / (end1 - start1)) * (end2 - start2) + start2;
- color = ucsConverter(colorspace)(toHex(color));
+ color = ucsConverter(colorspace)(color as string);
let {
- samples: samples,
+ samples: iterations,
hueStep,
minLightness,
- maxLightness
- // easingFunc
+ maxLightness,
+ easingFunc
} = options || {};
- const l = matchLightnessChannel(colorspace).split('.')[1];
+ const [l, c] = [
+ matchLightnessChannel(colorspace).split('.')[1],
+ matchChromaChannel(colorspace).split('.')[1]
+ ];
// Pass default values in case the options object is overridden
- // easingFunc = checkArg(easingFunc, easingSmoothstep) as typeof easingFunc
- samples = (checkArg(samples, 6) as number) + 1;
+ easingFunc = checkArg(easingFunc, easingSmoothstep) as typeof easingFunc;
+ iterations = (checkArg(iterations, 6) as number) + 1;
hueStep = checkArg(hueStep, 5) as number;
- minLightness = normalize(
- checkArg(minLightness, 10) as number,
- matchLightnessChannel(colorspace)
- );
- maxLightness = normalize(
- checkArg(maxLightness, 90) as number,
- matchLightnessChannel(colorspace)
- );
+ (minLightness = checkArg(minLightness, 10) as number),
+ (maxLightness = checkArg(maxLightness, 90) as number);
// Pass in default values if any of the opts is undefined
const palette: ColorToken[] = [color];
-
// Maximum number of iterations possible.
//Each iteration add a darker shade to the start of the array and a lighter tint to the end.
- for (let i = 1; i < samples; i++) {
+ for (let i = 1; i < iterations; i++) {
//adjustHue checks hue values are clamped.
// Here we use lightnessMapper to calculate our lightness values which takes a number that exists in range [0,1].
const [colorShiftDown, colorShiftUp] = [
{
- l: lightnessMapper(i)(
- normalize(0.1, matchLightnessChannel(colorspace)),
- samples
- )(color[l], minLightness),
- c: color['c'],
- h: adjustHue(color['h'] - hueStep * i),
+ [l]: lightnessMapper(i)(0.1, iterations)(color[l], minLightness),
+ [c]: color[c],
+ h: adjustHue(color['h'] - hueStep * (i * easingFunc(i))),
mode: colorspace
},
{
- l: lightnessMapper(i)(
- normalize(0.15, matchLightnessChannel(colorspace)),
- samples
- )(color[l], maxLightness),
- c: color['c'],
- h: adjustHue(color['h'] + hueStep * i),
+ [l]: lightnessMapper(i)(0.15, iterations)(color[l], maxLightness),
+ [c]: color[c],
+ h: adjustHue(color['h'] + hueStep * (i * easingFunc(i))),
mode: colorspace
}
];
diff --git a/src/helpers.ts b/src/helpers.ts
index e0935ed8..56760108 100644
--- a/src/helpers.ts
+++ b/src/helpers.ts
@@ -1,6 +1,6 @@
/* eslint-disable no-ternary */
/**
- * @internal
+ * @preserve
* @license
* helpers.ts - Helper functions for huetiful-js.
* Contains colors from TailwindCSS released under the MIT permissive licence.
@@ -23,7 +23,7 @@ import type {
HueColorSpaces,
Order,
Options,
- ColorSpaces
+ Colorspaces
} from './types';
import modeRanges from './color-maps/samples/modeRanges';
@@ -86,7 +86,7 @@ console.log(getModeChannel("okhsl", 2));
// l
*/
-function getModeChannel(colorspace: ColorSpaces | string, index?: number) {
+function getModeChannel(colorspace: Colorspaces | string, index?: number) {
const result = colorspace.substring(colorspace.length - 3);
return (index && result.charAt(index)) || result;
@@ -118,7 +118,7 @@ function expressionParser(
const [mode, channel] = modeChannel.split('.');
// @ts-ignore
- color = ucsConverter(mode)(color);
+ color = ucsConverter(mode.toString().toLowerCase())(color);
const cb = (value: string) => parseFloat(value);
// Match an operator against the first truthy case and perform the relevant math operation
@@ -161,8 +161,10 @@ function matchChromaChannel(colorspace: HueColorSpaces | string): string {
// Matches any string with c or s
colorspace = checkArg(colorspace, 'jch') as HueColorSpaces;
const reChroma = /(s|c)/i;
+ // @ts-ignore
const ch = reChroma.exec(colorspace)['0'];
+ // @ts-ignore
if (reChroma.test(colorspace)) {
return `${colorspace}.${ch}`;
} else {
@@ -191,8 +193,10 @@ function matchLightnessChannel(colorspace: HueColorSpaces | string): string {
// Matches any string with c or s
colorspace = checkArg(colorspace, 'jch') as HueColorSpaces;
const reLightness = /(j|l)/i;
+ // @ts-ignore
const ch = reLightness.exec(colorspace)['0'];
+ // @ts-ignore
if (reLightness.test(colorspace)) {
// @ts-ignore
return `${colorspace}.${ch}`;
@@ -353,7 +357,7 @@ function normalize(value: number, modeChannel: string): number {
if (!range) {
if (inRange(value, 0, 1)) {
value = end * value;
- } else if (inRange(value, 1, 100)) {
+ } else if (inRange(value, 1, 150)) {
value = end * (value / 100);
} else {
throw Error(
@@ -450,11 +454,11 @@ function colorObjArr(factor: Factor, callback) {
* @param colors The array or object of colors to iterate over. If an object is passed, its values are expected to be valid color tokens.
*/
return (
- colors: ColorToken[] | object
+ collection: ColorToken[] | object | object
): Array<{ factor: Factor; color: ColorToken }> => {
const cb = colorObj(factor, callback);
// @ts-ignore
- return Object.keys(colors).map((color) => cb(colors[color]));
+ return Object.keys(collection).map((color) => cb(colors[color]));
};
}
@@ -515,12 +519,6 @@ function max(array: number[]): number {
);
}
-
-
-
-
-
-
/**
* @internal
* Gets the digits in the expression string
@@ -528,12 +526,11 @@ function max(array: number[]): number {
* @returns The matched digits, if any, as a string.
*/
function matchDigits(s: string): string {
- s = s.toString()
+ s = s.toString();
var reDigits = /[0-9]*\.?[0-9]+/;
- return reDigits.test(s) && reDigits.exec(s)['0'] || undefined
+ return (reDigits.test(s) && reDigits.exec(s)['0']) || undefined;
}
-
/**
* @internal
* Matches the comparison symbols used in the expression string.
@@ -544,7 +541,7 @@ function matchComparator(s: string): string {
s = s.toString();
var reComparator = /^(>=|<=|<|>)/;
- return reComparator.test(s) && (reComparator.exec(s)['0']) || undefined
+ return (reComparator.test(s) && reComparator.exec(s)['0']) || undefined;
}
/**
@@ -560,9 +557,9 @@ function sortedArr(
order: Order,
colorObj = false
) {
- return (colors: ColorToken[]) => {
+ return (collection: ColorToken[] | object) => {
const results: ColorToken[] | Array<{ factor: number; color: ColorToken }> =
- colorObjArr(factor, callback)(colors);
+ colorObjArr(factor, callback)(collection);
// Assign the value of colorObj to results variable
// Sort the array using our customSort helper function
@@ -587,7 +584,7 @@ function sortedArr(
*/
function filteredArr(factor: Factor, cb?: callback) {
return (
- colors: ColorToken[],
+ collection: ColorToken[] | object,
start: number | string,
end?: number
): ColorToken[] => {
@@ -597,7 +594,7 @@ function filteredArr(factor: Factor, cb?: callback) {
result = colorObjArr(
factor,
cb
- )(colors)
+ )(collection)
.filter((color) => inRange(color[factor], start, end))
.map((color) => color['color']);
@@ -614,7 +611,7 @@ function filteredArr(factor: Factor, cb?: callback) {
return colorObjArr(
factor,
cb
- )(colors)
+ )(collection)
.filter((el) => test(el[factor], parseFloat(val)))
.map((el) => el['color']);
};
@@ -666,5 +663,6 @@ export {
checkArg,
getModeChannel,
interpolatorConfig,
- matchComparator,matchDigits
+ matchComparator,
+ matchDigits
};
diff --git a/src/sortBy.ts b/src/sortBy.ts
index e8565bb5..fb549fc7 100644
--- a/src/sortBy.ts
+++ b/src/sortBy.ts
@@ -14,7 +14,7 @@ governing permissions and limitations under the License.
import type {
Factor,
ColorToken,
- ColorSpaces,
+ Colorspaces,
ColorDistanceOptions,
HueColorSpaces,
callback,
@@ -24,20 +24,18 @@ import {
checkArg,
sortedArr,
matchLightnessChannel,
- matchChromaChannel,
-} from "./helpers";
-import { wcagContrast, differenceEuclidean } from "culori/fn";
-import { getLuminance, getChannel } from "./utils";
-
-
+ matchChromaChannel
+} from './helpers';
+import { wcagContrast, differenceEuclidean } from 'culori/fn';
+import { getLuminance, getChannel } from './utils';
function baseSortBy(
factor: Factor,
cb: callback,
order: Order,
- colors: ColorToken[]
+ collection: ColorToken[] | object
) {
- return sortedArr(factor, cb, order)(colors);
+ return sortedArr(factor, cb, order)(collection);
}
/**
@@ -89,7 +87,7 @@ console.log(sortedDescending)
*/
function sortBySaturation(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
order: 'asc' | 'desc',
mode?: HueColorSpaces
): ColorToken[] {
@@ -97,7 +95,7 @@ function sortBySaturation(
'saturation',
getChannel(matchChromaChannel(mode)),
order,
- colors
+ collection
);
}
@@ -151,10 +149,10 @@ console.log(sortedDescending)
*/
function sortByLuminance(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
order: 'asc' | 'desc'
): ColorToken[] {
- return baseSortBy('luminance', getLuminance, order, colors);
+ return baseSortBy('luminance', getLuminance, order, collection);
}
/**
@@ -207,7 +205,7 @@ sortByLightness(sample,'desc')
*/
// For lightness use a different color space
function sortByLightness(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
order?: Order,
colorspace?: HueColorSpaces
): ColorToken[] {
@@ -215,7 +213,7 @@ function sortByLightness(
'lightness',
getChannel(matchLightnessChannel(colorspace)),
order,
- colors
+ collection
);
}
@@ -268,7 +266,7 @@ console.log(sortedDescending)
// Todo: Add the mode param so that users can select mode to work with. The default is lch
function sortByHue(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
order?: Order,
colorspace?: HueColorSpaces
): ColorToken[] {
@@ -279,7 +277,7 @@ function sortByHue(
'lightness',
getChannel(`${checkArg(colorspace, 'jch')}.h`),
order,
- colors
+ collection
)
);
}
@@ -304,14 +302,14 @@ console.log(sortByContrast(sample, 'yellow', 'desc'))
*/
function sortByContrast(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
against: ColorToken,
order?: Order
): ColorToken[] {
// @ts-ignore
const cb = (against: ColorToken) => (color: ColorToken) =>
wcagContrast(color as string, against as string);
- return baseSortBy('contrast', cb(against), order, colors);
+ return baseSortBy('contrast', cb(against), order, collection);
}
/**
@@ -346,14 +344,14 @@ console.log(
*/
function sortByDistance(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
against: ColorToken,
order?: 'asc' | 'desc',
options?: ColorDistanceOptions
): ColorToken[] {
var { mode, weights } = options || {};
- const cb = (against: string, mode: ColorSpaces) => (color: string) => {
+ const cb = (against: string, mode: Colorspaces) => (color: string) => {
// @ts-ignore
return differenceEuclidean(
checkArg(mode, 'lchuv') as typeof mode,
@@ -365,7 +363,7 @@ function sortByDistance(
'contrast',
cb(against as string, checkArg(mode, 'lchuv') as typeof mode),
order,
- colors
+ collection
);
}
diff --git a/src/types.d.ts b/src/types.d.ts
index a1dd170a..9c8e51a4 100644
--- a/src/types.d.ts
+++ b/src/types.d.ts
@@ -1,7 +1,22 @@
-export type UniformColorSpaces = 'lch' | 'jch';
+/*
+ * @preserve
+ * @license
+ * types.d.ts - Type declarations for huetiful-js.
+ * Contains colors from TailwindCSS released under the MIT permissive licence.
+Copyright 2023 Dean Tarisai.
+This file is licensed to you under the Apache License, Version 2.0 (the 'License');
+you may not use this file except in compliance with the License. You may obtain a copy
+of the License at http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software distributed under
+the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+OF ANY KIND, either express or implied. See the License for the specific language
+governing permissions and limitations under the License.
+*/
+
+// Color token types
export type ColorTuple = [string, number, number, number, number?];
-export type ColorObject = { mode: ColorSpaces; alpha?: number };
+export type ColorObject = { mode: Colorspaces; alpha?: number };
export type ColorOptions = {
alpha?: number;
lightness?: number;
@@ -9,7 +24,6 @@ export type ColorOptions = {
colorspace?: HueColorSpaces;
luminance?: number;
saturation?: number;
- illuminant?: 'D50' | 'D65';
lightMode?: ColorToken;
darkMode?: ColorToken;
@@ -19,7 +33,7 @@ export type ColorOptions = {
};
export type ColorDistanceOptions = {
weights?: [number, number, number, number];
- mode?: ColorSpaces;
+ mode?: Colorspaces;
};
/**
@@ -112,13 +126,6 @@ type Options = {
maxLightness?: number;
};
-type ViewingConditions = {
- adaptingLuminance?: number;
- backgroundLuminance?: number;
- discounting?: boolean;
- surroundType?: 'dim' | 'dark' | 'average';
- whitePoint?: Illuminant;
-};
export type PairedSchemeOptions = Omit<
Options,
'earthtones' | 'maxLightness' | 'minLightness'
@@ -221,46 +228,39 @@ type FactorMapper = (
colorObj?: boolean
) => (colors: ColorToken[]) => ColorToken[];
-export type ColorSpaces =
+export type UniformColorSpaces =
+ | 'lch'
+ | 'jch'
+ | 'dlch'
+ | 'lch'
+ | 'lch65'
+ | 'lchuv'
+ | 'oklch';
+export type Colorspaces =
| 'a98'
| 'cubehelix'
| 'dlab'
- | 'dlch'
- | 'hsi'
- | 'hsl'
- | 'hsv'
- | 'hwb'
| 'jab'
- | 'jch'
| 'lab'
| 'lab65'
- | 'lch'
- | 'lch65'
- | 'lchuv'
| 'lrgb'
| 'luv'
- | 'okhsl'
- | 'okhsv'
| 'oklab'
- | 'rgb';
+ | 'rgb'
+ | HueColorSpaces;
export type HueColorSpaces =
- | 'jch'
+ | UniformColorSpaces
| 'hsl'
| 'hsv'
| 'hsi'
- | 'oklch'
- | 'lch'
| 'hwb'
| 'okhsl'
- | 'okhsv'
- | 'lch65'
- | 'lchuv'
- | 'dlch';
+ | 'okhsv';
export type ScaleValues =
- | '100'
| '50'
+ | '100'
| '200'
| '300'
| '400'
@@ -270,265 +270,24 @@ export type ScaleValues =
| '800'
| '900';
-export type HueMap = {
- indigo: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
- gray: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- zinc: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- neutral: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- stone: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- red: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- orange: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- amber: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- yellow: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- lime: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- green: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- emerald: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- teal: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- sky: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- blue: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- violet: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- purple: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- fuchsia: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- pink: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-
- rose: {
- '50': string;
- '100': string;
- '200': string;
- '300': string;
- '400': string;
- '500': string;
- '600': string;
- '700': string;
- '800': string;
- '900': string;
- };
-};
-
-type ColorTemp = 'warm' | 'cool' | 'daylight' | 'incadescent' | 'fluorescent';
+export type TailwindColorFamilies =
+ | 'indigo'
+ | 'gray'
+ | 'zinc'
+ | 'neutral'
+ | 'stone'
+ | 'red'
+ | 'orange'
+ | 'amber'
+ | 'yellow'
+ | 'lime'
+ | 'green'
+ | 'emerald'
+ | 'teal'
+ | 'sky'
+ | 'blue'
+ | 'violet'
+ | 'purple'
+ | 'fuchsia'
+ | 'pink'
+ | 'rose';
diff --git a/src/utils.ts b/src/utils.ts
index 7658b512..fff09386 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -57,7 +57,7 @@ function getHueFamily(color: ColorToken, mode?: HueColorSpaces): HueFamily {
return Object.keys(hueTempMap)
.map((hue) => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
-
+
// @ts-ignore
var [hueVals, minVal, maxVal] = [
customConcat(hueTempMap[hue]),
@@ -153,9 +153,8 @@ function contrastPredicate(color) {
}
function huePredicate(colorSpace: string) {
- return (color: ColorToken) => {
- return getChannel(`${checkArg(colorSpace, 'jch')}.h`)(color);
- };
+ return (color: ColorToken) =>
+ getChannel(`${checkArg(colorSpace, 'jch')}.h`)(color);
}
function chromaPredicate(colorspace) {
return (color: ColorToken) =>
@@ -165,7 +164,7 @@ function chromaPredicate(colorspace) {
// The baseFunc for getting specifified factor extremums
function baseFunc(
factor: Factor,
- colors: ColorToken[],
+ collection: ColorToken[] | object,
cb: callback,
order?: Order,
colorObj?: boolean
@@ -176,7 +175,7 @@ function baseFunc(
cb,
order as Order,
colorObj
- )(colors).filter((el) => el[factor] !== undefined);
+ )(collection).filter((el) => el[factor] !== undefined);
return (colorObj && result[0]) || result[0][factor];
}
@@ -199,7 +198,7 @@ console.log(getNearestContrast(["b2c3f1", "#a1bd2f", "#f3bac1"], "green", true))
// { contrast: 2.4061390502133424, name: '#a1bd2f' }
*/
function getNearestContrast(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
against: ColorToken,
colorObj?: boolean
) {
@@ -232,7 +231,7 @@ console.log(getFarthestContrast(["b2c3f1", "#a1bd2f", "#f3bac1"], "green", true)
*/
function getFarthestContrast(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
against: ColorToken,
colorObj?: boolean
): number | { factor: number; name: ColorToken } {
@@ -262,7 +261,7 @@ console.log(getNearestChroma(sample, 'lch'))
// 22.45669293295522
*/
function getNearestChroma(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
colorspace?: HueColorSpaces,
colorObj = false
): number | { factor: number; color: ColorToken } {
@@ -292,7 +291,7 @@ console.log(getFarthestChroma(sample, 'lch'))
// 67.22120855010492
*/
function getFarthestChroma(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
colorObj = false
): number | { factor: number; color: ColorToken } {
return baseFunc('saturation', colors, chromaPredicate, 'desc', colorObj);
@@ -315,7 +314,7 @@ console.log(getNearestHue(sample, 'lch'))
// 12.462831644544274
*/
function getNearestHue(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
colorspace?: HueColorSpaces | string,
colorObj = false
): number | { factor: number; color: ColorToken } {
@@ -338,7 +337,7 @@ console.log(getFarthestHue(sample, 'lch'))
// 273.54920266436477
*/
function getFarthestHue(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
colorspace?: HueColorSpaces,
colorObj = false
): number | { factor: number; color: ColorToken } {
@@ -588,7 +587,7 @@ function alpha(color: ColorToken, value?: number | string): number {
}
/**
- *
+ *
* Gets the contrast between the passed in colors.
* @param color
* @param against
@@ -652,7 +651,7 @@ console.log(getNearestLightness(sample, true))
*/
function getNearestLightness(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
colorspace?: HueColorSpaces,
colorObj = false
): number | { factor: number; color: ColorToken } {
@@ -686,7 +685,7 @@ console.log(getFarthestLightness(sample, true))
*/
function getFarthestLightness(
- colors: ColorToken[],
+ collection: ColorToken[] | object,
colorspace?: HueColorSpaces,
colorObj = false
): number | { factor: number; color: ColorToken } {
@@ -741,7 +740,7 @@ function brighten(
colorspace
): ColorToken {
const src = toLab(toHex(color));
- const ch = matchLightnessChannel(colorspace).split('.')[1]
+ const ch = matchLightnessChannel(colorspace).split('.')[1];
let result = src;
if (typeof value == 'number') {
result[ch] -= 18 * easingSmootherstep(Math.abs(value) / 100);
@@ -886,7 +885,7 @@ function colorDeficiency(deficiencyType?: DeficiencyType) {
// Store the keys of deficiency types
const deficiencies: string[] = ['red', 'blue', 'green', 'monochromacy'];
// Cast 'red' as the default parameter
- deficiencyType = checkArg(deficiencyType, 'red') as DeficiencyType
+ deficiencyType = checkArg(deficiencyType, 'red') as DeficiencyType;
if (
typeof deficiencyType === 'string' &&
@@ -905,35 +904,36 @@ function colorDeficiency(deficiencyType?: DeficiencyType) {
*
* @param collection The collection of colors to search for nearest colors
* @param color The color to use for distance comparison
- * @param samples The number of colors to return, if the value is above the colors in the available sample, the entire collection is returned with colors ordered in ascending order.
+ * @param num The number of colors to return, if the value is above the colors in the available sample, the entire collection is returned with colors ordered in ascending order using the differenceHyab metric.
* @returns An array of colors.
* @example
*
- *
+ * let cols = colors('all', '500')
+ *
+console.log(getNearestColor(cols, 'blue', 3));
+ // [ '#a855f7', '#8b5cf6', '#d946ef' ]
*/
function getNearestColor(
- collection: ColorToken[] | 'tailwind' | 'material',
+ collection: ColorToken[] | 'tailwind',
color: ColorToken,
- samples = 1
+ num = 1
): ColorToken | ColorToken[] {
const cb = (collection, color) => {
//
- return nearest(collection as ColorToken[], differenceHyab())(
- color as string,
- samples
- );
+ return nearest(
+ collection as ColorToken[],
+ differenceHyab(),
+ (color) => color as string
+ )(color as string, num);
};
let result: ColorToken;
- switch (collection) {
- case 'tailwind':
- result = cb(colors('all'), color);
- break;
- // @ts-ignore
- case typeof collection !== 'string' && collection.length:
- result = cb(collection, color);
- break;
+ if (collection === 'tailwind') {
+ result = cb(colors('all'), color);
+ } else {
+ result = cb(collection, color);
}
+
return result;
}
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 00000000..332d51e7
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,1074 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: ['./templates/*.html'],
+ presets: [],
+ darkMode: 'media', // or 'class'
+ theme: {
+ accentColor: ({ theme }) => ({
+ ...theme('colors'),
+ auto: 'auto'
+ }),
+ animation: {
+ none: 'none',
+ spin: 'spin 1s linear infinite',
+ ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
+ pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
+ bounce: 'bounce 1s infinite'
+ },
+ aria: {
+ busy: 'busy="true"',
+ checked: 'checked="true"',
+ disabled: 'disabled="true"',
+ expanded: 'expanded="true"',
+ hidden: 'hidden="true"',
+ pressed: 'pressed="true"',
+ readonly: 'readonly="true"',
+ required: 'required="true"',
+ selected: 'selected="true"'
+ },
+ aspectRatio: {
+ auto: 'auto',
+ square: '1 / 1',
+ video: '16 / 9'
+ },
+ backdropBlur: ({ theme }) => theme('blur'),
+ backdropBrightness: ({ theme }) => theme('brightness'),
+ backdropContrast: ({ theme }) => theme('contrast'),
+ backdropGrayscale: ({ theme }) => theme('grayscale'),
+ backdropHueRotate: ({ theme }) => theme('hueRotate'),
+ backdropInvert: ({ theme }) => theme('invert'),
+ backdropOpacity: ({ theme }) => theme('opacity'),
+ backdropSaturate: ({ theme }) => theme('saturate'),
+ backdropSepia: ({ theme }) => theme('sepia'),
+ backgroundColor: ({ theme }) => theme('colors'),
+ backgroundImage: {
+ none: 'none',
+ 'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))',
+ 'gradient-to-tr':
+ 'linear-gradient(to top right, var(--tw-gradient-stops))',
+ 'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',
+ 'gradient-to-br':
+ 'linear-gradient(to bottom right, var(--tw-gradient-stops))',
+ 'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',
+ 'gradient-to-bl':
+ 'linear-gradient(to bottom left, var(--tw-gradient-stops))',
+ 'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))',
+ 'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))'
+ },
+ backgroundOpacity: ({ theme }) => theme('opacity'),
+ backgroundPosition: {
+ bottom: 'bottom',
+ center: 'center',
+ left: 'left',
+ 'left-bottom': 'left bottom',
+ 'left-top': 'left top',
+ right: 'right',
+ 'right-bottom': 'right bottom',
+ 'right-top': 'right top',
+ top: 'top'
+ },
+ backgroundSize: {
+ auto: 'auto',
+ cover: 'cover',
+ contain: 'contain'
+ },
+ blur: {
+ 0: '0',
+ none: '0',
+ sm: '4px',
+ DEFAULT: '8px',
+ md: '12px',
+ lg: '16px',
+ xl: '24px',
+ '2xl': '40px',
+ '3xl': '64px'
+ },
+ borderColor: ({ theme }) => ({
+ ...theme('colors'),
+ DEFAULT: theme('colors.gray.200', 'currentColor')
+ }),
+ borderOpacity: ({ theme }) => theme('opacity'),
+ borderRadius: {
+ none: '0px',
+ sm: '0.125rem',
+ DEFAULT: '0.25rem',
+ md: '0.375rem',
+ lg: '0.5rem',
+ xl: '0.75rem',
+ '2xl': '1rem',
+ '3xl': '1.5rem',
+ full: '9999px'
+ },
+ borderSpacing: ({ theme }) => ({
+ ...theme('spacing')
+ }),
+ borderWidth: {
+ DEFAULT: '1px',
+ 0: '0px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px'
+ },
+ boxShadow: {
+ sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
+ DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
+ md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
+ lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',
+ xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',
+ '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',
+ inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',
+ none: 'none'
+ },
+ boxShadowColor: ({ theme }) => theme('colors'),
+ brightness: {
+ 0: '0',
+ 50: '.5',
+ 75: '.75',
+ 90: '.9',
+ 95: '.95',
+ 100: '1',
+ 105: '1.05',
+ 110: '1.1',
+ 125: '1.25',
+ 150: '1.5',
+ 200: '2'
+ },
+ caretColor: ({ theme }) => theme('colors'),
+ colors: ({ colors }) => ({
+ inherit: colors.inherit,
+ current: colors.current,
+ transparent: colors.transparent,
+ black: colors.black,
+ white: colors.white,
+ slate: colors.slate,
+ gray: colors.gray,
+ zinc: colors.zinc,
+ neutral: colors.neutral,
+ stone: colors.stone,
+ red: colors.red,
+ orange: colors.orange,
+ amber: colors.amber,
+ yellow: colors.yellow,
+ lime: colors.lime,
+ green: colors.green,
+ emerald: colors.emerald,
+ teal: colors.teal,
+ cyan: colors.cyan,
+ sky: colors.sky,
+ blue: colors.blue,
+ indigo: colors.indigo,
+ violet: colors.violet,
+ purple: colors.purple,
+ fuchsia: colors.fuchsia,
+ pink: colors.pink,
+ rose: colors.rose
+ }),
+ columns: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ '3xs': '16rem',
+ '2xs': '18rem',
+ xs: '20rem',
+ sm: '24rem',
+ md: '28rem',
+ lg: '32rem',
+ xl: '36rem',
+ '2xl': '42rem',
+ '3xl': '48rem',
+ '4xl': '56rem',
+ '5xl': '64rem',
+ '6xl': '72rem',
+ '7xl': '80rem'
+ },
+ container: {},
+ content: {
+ none: 'none'
+ },
+ contrast: {
+ 0: '0',
+ 50: '.5',
+ 75: '.75',
+ 100: '1',
+ 125: '1.25',
+ 150: '1.5',
+ 200: '2'
+ },
+ cursor: {
+ auto: 'auto',
+ default: 'default',
+ pointer: 'pointer',
+ wait: 'wait',
+ text: 'text',
+ move: 'move',
+ help: 'help',
+ 'not-allowed': 'not-allowed',
+ none: 'none',
+ 'context-menu': 'context-menu',
+ progress: 'progress',
+ cell: 'cell',
+ crosshair: 'crosshair',
+ 'vertical-text': 'vertical-text',
+ alias: 'alias',
+ copy: 'copy',
+ 'no-drop': 'no-drop',
+ grab: 'grab',
+ grabbing: 'grabbing',
+ 'all-scroll': 'all-scroll',
+ 'col-resize': 'col-resize',
+ 'row-resize': 'row-resize',
+ 'n-resize': 'n-resize',
+ 'e-resize': 'e-resize',
+ 's-resize': 's-resize',
+ 'w-resize': 'w-resize',
+ 'ne-resize': 'ne-resize',
+ 'nw-resize': 'nw-resize',
+ 'se-resize': 'se-resize',
+ 'sw-resize': 'sw-resize',
+ 'ew-resize': 'ew-resize',
+ 'ns-resize': 'ns-resize',
+ 'nesw-resize': 'nesw-resize',
+ 'nwse-resize': 'nwse-resize',
+ 'zoom-in': 'zoom-in',
+ 'zoom-out': 'zoom-out'
+ },
+ divideColor: ({ theme }) => theme('borderColor'),
+ divideOpacity: ({ theme }) => theme('borderOpacity'),
+ divideWidth: ({ theme }) => theme('borderWidth'),
+ dropShadow: {
+ sm: '0 1px 1px rgb(0 0 0 / 0.05)',
+ DEFAULT: ['0 1px 2px rgb(0 0 0 / 0.1)', '0 1px 1px rgb(0 0 0 / 0.06)'],
+ md: ['0 4px 3px rgb(0 0 0 / 0.07)', '0 2px 2px rgb(0 0 0 / 0.06)'],
+ lg: ['0 10px 8px rgb(0 0 0 / 0.04)', '0 4px 3px rgb(0 0 0 / 0.1)'],
+ xl: ['0 20px 13px rgb(0 0 0 / 0.03)', '0 8px 5px rgb(0 0 0 / 0.08)'],
+ '2xl': '0 25px 25px rgb(0 0 0 / 0.15)',
+ none: '0 0 #0000'
+ },
+ fill: ({ theme }) => ({
+ none: 'none',
+ ...theme('colors')
+ }),
+ flex: {
+ 1: '1 1 0%',
+ auto: '1 1 auto',
+ initial: '0 1 auto',
+ none: 'none'
+ },
+ flexBasis: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ '1/12': '8.333333%',
+ '2/12': '16.666667%',
+ '3/12': '25%',
+ '4/12': '33.333333%',
+ '5/12': '41.666667%',
+ '6/12': '50%',
+ '7/12': '58.333333%',
+ '8/12': '66.666667%',
+ '9/12': '75%',
+ '10/12': '83.333333%',
+ '11/12': '91.666667%',
+ full: '100%'
+ }),
+ flexGrow: {
+ 0: '0',
+ DEFAULT: '1'
+ },
+ flexShrink: {
+ 0: '0',
+ DEFAULT: '1'
+ },
+ fontFamily: {
+ sans: [
+ 'ui-sans-serif',
+ 'system-ui',
+ 'sans-serif',
+ '"Apple Color Emoji"',
+ '"Segoe UI Emoji"',
+ '"Segoe UI Symbol"',
+ '"Noto Color Emoji"'
+ ],
+ serif: [
+ 'ui-serif',
+ 'Georgia',
+ 'Cambria',
+ '"Times New Roman"',
+ 'Times',
+ 'serif'
+ ],
+ mono: [
+ 'ui-monospace',
+ 'SFMono-Regular',
+ 'Menlo',
+ 'Monaco',
+ 'Consolas',
+ '"Liberation Mono"',
+ '"Courier New"',
+ 'monospace'
+ ]
+ },
+ fontSize: {
+ xs: ['0.75rem', { lineHeight: '1rem' }],
+ sm: ['0.875rem', { lineHeight: '1.25rem' }],
+ base: ['1rem', { lineHeight: '1.5rem' }],
+ lg: ['1.125rem', { lineHeight: '1.75rem' }],
+ xl: ['1.25rem', { lineHeight: '1.75rem' }],
+ '2xl': ['1.5rem', { lineHeight: '2rem' }],
+ '3xl': ['1.875rem', { lineHeight: '2.25rem' }],
+ '4xl': ['2.25rem', { lineHeight: '2.5rem' }],
+ '5xl': ['3rem', { lineHeight: '1' }],
+ '6xl': ['3.75rem', { lineHeight: '1' }],
+ '7xl': ['4.5rem', { lineHeight: '1' }],
+ '8xl': ['6rem', { lineHeight: '1' }],
+ '9xl': ['8rem', { lineHeight: '1' }]
+ },
+ fontWeight: {
+ thin: '100',
+ extralight: '200',
+ light: '300',
+ normal: '400',
+ medium: '500',
+ semibold: '600',
+ bold: '700',
+ extrabold: '800',
+ black: '900'
+ },
+ gap: ({ theme }) => theme('spacing'),
+ gradientColorStops: ({ theme }) => theme('colors'),
+ gradientColorStopPositions: {
+ '0%': '0%',
+ '5%': '5%',
+ '10%': '10%',
+ '15%': '15%',
+ '20%': '20%',
+ '25%': '25%',
+ '30%': '30%',
+ '35%': '35%',
+ '40%': '40%',
+ '45%': '45%',
+ '50%': '50%',
+ '55%': '55%',
+ '60%': '60%',
+ '65%': '65%',
+ '70%': '70%',
+ '75%': '75%',
+ '80%': '80%',
+ '85%': '85%',
+ '90%': '90%',
+ '95%': '95%',
+ '100%': '100%'
+ },
+ grayscale: {
+ 0: '0',
+ DEFAULT: '100%'
+ },
+ gridAutoColumns: {
+ auto: 'auto',
+ min: 'min-content',
+ max: 'max-content',
+ fr: 'minmax(0, 1fr)'
+ },
+ gridAutoRows: {
+ auto: 'auto',
+ min: 'min-content',
+ max: 'max-content',
+ fr: 'minmax(0, 1fr)'
+ },
+ gridColumn: {
+ auto: 'auto',
+ 'span-1': 'span 1 / span 1',
+ 'span-2': 'span 2 / span 2',
+ 'span-3': 'span 3 / span 3',
+ 'span-4': 'span 4 / span 4',
+ 'span-5': 'span 5 / span 5',
+ 'span-6': 'span 6 / span 6',
+ 'span-7': 'span 7 / span 7',
+ 'span-8': 'span 8 / span 8',
+ 'span-9': 'span 9 / span 9',
+ 'span-10': 'span 10 / span 10',
+ 'span-11': 'span 11 / span 11',
+ 'span-12': 'span 12 / span 12',
+ 'span-full': '1 / -1'
+ },
+ gridColumnEnd: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13'
+ },
+ gridColumnStart: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13'
+ },
+ gridRow: {
+ auto: 'auto',
+ 'span-1': 'span 1 / span 1',
+ 'span-2': 'span 2 / span 2',
+ 'span-3': 'span 3 / span 3',
+ 'span-4': 'span 4 / span 4',
+ 'span-5': 'span 5 / span 5',
+ 'span-6': 'span 6 / span 6',
+ 'span-7': 'span 7 / span 7',
+ 'span-8': 'span 8 / span 8',
+ 'span-9': 'span 9 / span 9',
+ 'span-10': 'span 10 / span 10',
+ 'span-11': 'span 11 / span 11',
+ 'span-12': 'span 12 / span 12',
+ 'span-full': '1 / -1'
+ },
+ gridRowEnd: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13'
+ },
+ gridRowStart: {
+ auto: 'auto',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13'
+ },
+ gridTemplateColumns: {
+ none: 'none',
+ subgrid: 'subgrid',
+ 1: 'repeat(1, minmax(0, 1fr))',
+ 2: 'repeat(2, minmax(0, 1fr))',
+ 3: 'repeat(3, minmax(0, 1fr))',
+ 4: 'repeat(4, minmax(0, 1fr))',
+ 5: 'repeat(5, minmax(0, 1fr))',
+ 6: 'repeat(6, minmax(0, 1fr))',
+ 7: 'repeat(7, minmax(0, 1fr))',
+ 8: 'repeat(8, minmax(0, 1fr))',
+ 9: 'repeat(9, minmax(0, 1fr))',
+ 10: 'repeat(10, minmax(0, 1fr))',
+ 11: 'repeat(11, minmax(0, 1fr))',
+ 12: 'repeat(12, minmax(0, 1fr))'
+ },
+ gridTemplateRows: {
+ none: 'none',
+ subgrid: 'subgrid',
+ 1: 'repeat(1, minmax(0, 1fr))',
+ 2: 'repeat(2, minmax(0, 1fr))',
+ 3: 'repeat(3, minmax(0, 1fr))',
+ 4: 'repeat(4, minmax(0, 1fr))',
+ 5: 'repeat(5, minmax(0, 1fr))',
+ 6: 'repeat(6, minmax(0, 1fr))',
+ 7: 'repeat(7, minmax(0, 1fr))',
+ 8: 'repeat(8, minmax(0, 1fr))',
+ 9: 'repeat(9, minmax(0, 1fr))',
+ 10: 'repeat(10, minmax(0, 1fr))',
+ 11: 'repeat(11, minmax(0, 1fr))',
+ 12: 'repeat(12, minmax(0, 1fr))'
+ },
+ height: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ full: '100%',
+ screen: '100vh',
+ svh: '100svh',
+ lvh: '100lvh',
+ dvh: '100dvh',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content'
+ }),
+ hueRotate: {
+ 0: '0deg',
+ 15: '15deg',
+ 30: '30deg',
+ 60: '60deg',
+ 90: '90deg',
+ 180: '180deg'
+ },
+ inset: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ full: '100%'
+ }),
+ invert: {
+ 0: '0',
+ DEFAULT: '100%'
+ },
+ keyframes: {
+ spin: {
+ to: {
+ transform: 'rotate(360deg)'
+ }
+ },
+ ping: {
+ '75%, 100%': {
+ transform: 'scale(2)',
+ opacity: '0'
+ }
+ },
+ pulse: {
+ '50%': {
+ opacity: '.5'
+ }
+ },
+ bounce: {
+ '0%, 100%': {
+ transform: 'translateY(-25%)',
+ animationTimingFunction: 'cubic-bezier(0.8,0,1,1)'
+ },
+ '50%': {
+ transform: 'none',
+ animationTimingFunction: 'cubic-bezier(0,0,0.2,1)'
+ }
+ }
+ },
+ letterSpacing: {
+ tighter: '-0.05em',
+ tight: '-0.025em',
+ normal: '0em',
+ wide: '0.025em',
+ wider: '0.05em',
+ widest: '0.1em'
+ },
+ lineHeight: {
+ none: '1',
+ tight: '1.25',
+ snug: '1.375',
+ normal: '1.5',
+ relaxed: '1.625',
+ loose: '2',
+ 3: '.75rem',
+ 4: '1rem',
+ 5: '1.25rem',
+ 6: '1.5rem',
+ 7: '1.75rem',
+ 8: '2rem',
+ 9: '2.25rem',
+ 10: '2.5rem'
+ },
+ listStyleType: {
+ none: 'none',
+ disc: 'disc',
+ decimal: 'decimal'
+ },
+ listStyleImage: {
+ none: 'none'
+ },
+ margin: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing')
+ }),
+ lineClamp: {
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6'
+ },
+ maxHeight: ({ theme }) => ({
+ ...theme('spacing'),
+ none: 'none',
+ full: '100%',
+ screen: '100vh',
+ svh: '100svh',
+ lvh: '100lvh',
+ dvh: '100dvh',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content'
+ }),
+ maxWidth: ({ theme, breakpoints }) => ({
+ ...theme('spacing'),
+ none: 'none',
+ xs: '20rem',
+ sm: '24rem',
+ md: '28rem',
+ lg: '32rem',
+ xl: '36rem',
+ '2xl': '42rem',
+ '3xl': '48rem',
+ '4xl': '56rem',
+ '5xl': '64rem',
+ '6xl': '72rem',
+ '7xl': '80rem',
+ full: '100%',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content',
+ prose: '65ch',
+ ...breakpoints(theme('screens'))
+ }),
+ minHeight: ({ theme }) => ({
+ ...theme('spacing'),
+ full: '100%',
+ screen: '100vh',
+ svh: '100svh',
+ lvh: '100lvh',
+ dvh: '100dvh',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content'
+ }),
+ minWidth: ({ theme }) => ({
+ ...theme('spacing'),
+ full: '100%',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content'
+ }),
+ objectPosition: {
+ bottom: 'bottom',
+ center: 'center',
+ left: 'left',
+ 'left-bottom': 'left bottom',
+ 'left-top': 'left top',
+ right: 'right',
+ 'right-bottom': 'right bottom',
+ 'right-top': 'right top',
+ top: 'top'
+ },
+ opacity: {
+ 0: '0',
+ 5: '0.05',
+ 10: '0.1',
+ 15: '0.15',
+ 20: '0.2',
+ 25: '0.25',
+ 30: '0.3',
+ 35: '0.35',
+ 40: '0.4',
+ 45: '0.45',
+ 50: '0.5',
+ 55: '0.55',
+ 60: '0.6',
+ 65: '0.65',
+ 70: '0.7',
+ 75: '0.75',
+ 80: '0.8',
+ 85: '0.85',
+ 90: '0.9',
+ 95: '0.95',
+ 100: '1'
+ },
+ order: {
+ first: '-9999',
+ last: '9999',
+ none: '0',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12'
+ },
+ outlineColor: ({ theme }) => theme('colors'),
+ outlineOffset: {
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px'
+ },
+ outlineWidth: {
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px'
+ },
+ padding: ({ theme }) => theme('spacing'),
+ placeholderColor: ({ theme }) => theme('colors'),
+ placeholderOpacity: ({ theme }) => theme('opacity'),
+ ringColor: ({ theme }) => ({
+ DEFAULT: theme('colors.blue.500', '#3b82f6'),
+ ...theme('colors')
+ }),
+ ringOffsetColor: ({ theme }) => theme('colors'),
+ ringOffsetWidth: {
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px'
+ },
+ ringOpacity: ({ theme }) => ({
+ DEFAULT: '0.5',
+ ...theme('opacity')
+ }),
+ ringWidth: {
+ DEFAULT: '3px',
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px'
+ },
+ rotate: {
+ 0: '0deg',
+ 1: '1deg',
+ 2: '2deg',
+ 3: '3deg',
+ 6: '6deg',
+ 12: '12deg',
+ 45: '45deg',
+ 90: '90deg',
+ 180: '180deg'
+ },
+ saturate: {
+ 0: '0',
+ 50: '.5',
+ 100: '1',
+ 150: '1.5',
+ 200: '2'
+ },
+ scale: {
+ 0: '0',
+ 50: '.5',
+ 75: '.75',
+ 90: '.9',
+ 95: '.95',
+ 100: '1',
+ 105: '1.05',
+ 110: '1.1',
+ 125: '1.25',
+ 150: '1.5'
+ },
+ screens: {
+ sm: '640px',
+ md: '768px',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px'
+ },
+ scrollMargin: ({ theme }) => ({
+ ...theme('spacing')
+ }),
+ scrollPadding: ({ theme }) => theme('spacing'),
+ sepia: {
+ 0: '0',
+ DEFAULT: '100%'
+ },
+ skew: {
+ 0: '0deg',
+ 1: '1deg',
+ 2: '2deg',
+ 3: '3deg',
+ 6: '6deg',
+ 12: '12deg'
+ },
+ space: ({ theme }) => ({
+ ...theme('spacing')
+ }),
+ spacing: {
+ px: '1px',
+ 0: '0px',
+ 0.5: '0.125rem',
+ 1: '0.25rem',
+ 1.5: '0.375rem',
+ 2: '0.5rem',
+ 2.5: '0.625rem',
+ 3: '0.75rem',
+ 3.5: '0.875rem',
+ 4: '1rem',
+ 5: '1.25rem',
+ 6: '1.5rem',
+ 7: '1.75rem',
+ 8: '2rem',
+ 9: '2.25rem',
+ 10: '2.5rem',
+ 11: '2.75rem',
+ 12: '3rem',
+ 14: '3.5rem',
+ 16: '4rem',
+ 20: '5rem',
+ 24: '6rem',
+ 28: '7rem',
+ 32: '8rem',
+ 36: '9rem',
+ 40: '10rem',
+ 44: '11rem',
+ 48: '12rem',
+ 52: '13rem',
+ 56: '14rem',
+ 60: '15rem',
+ 64: '16rem',
+ 72: '18rem',
+ 80: '20rem',
+ 96: '24rem'
+ },
+ stroke: ({ theme }) => ({
+ none: 'none',
+ ...theme('colors')
+ }),
+ strokeWidth: {
+ 0: '0',
+ 1: '1',
+ 2: '2'
+ },
+ supports: {},
+ data: {},
+ textColor: ({ theme }) => theme('colors'),
+ textDecorationColor: ({ theme }) => theme('colors'),
+ textDecorationThickness: {
+ auto: 'auto',
+ 'from-font': 'from-font',
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px'
+ },
+ textIndent: ({ theme }) => ({
+ ...theme('spacing')
+ }),
+ textOpacity: ({ theme }) => theme('opacity'),
+ textUnderlineOffset: {
+ auto: 'auto',
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px'
+ },
+ transformOrigin: {
+ center: 'center',
+ top: 'top',
+ 'top-right': 'top right',
+ right: 'right',
+ 'bottom-right': 'bottom right',
+ bottom: 'bottom',
+ 'bottom-left': 'bottom left',
+ left: 'left',
+ 'top-left': 'top left'
+ },
+ transitionDelay: {
+ 0: '0s',
+ 75: '75ms',
+ 100: '100ms',
+ 150: '150ms',
+ 200: '200ms',
+ 300: '300ms',
+ 500: '500ms',
+ 700: '700ms',
+ 1000: '1000ms'
+ },
+ transitionDuration: {
+ DEFAULT: '150ms',
+ 0: '0s',
+ 75: '75ms',
+ 100: '100ms',
+ 150: '150ms',
+ 200: '200ms',
+ 300: '300ms',
+ 500: '500ms',
+ 700: '700ms',
+ 1000: '1000ms'
+ },
+ transitionProperty: {
+ none: 'none',
+ all: 'all',
+ DEFAULT:
+ 'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter',
+ colors:
+ 'color, background-color, border-color, text-decoration-color, fill, stroke',
+ opacity: 'opacity',
+ shadow: 'box-shadow',
+ transform: 'transform'
+ },
+ transitionTimingFunction: {
+ DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)',
+ linear: 'linear',
+ in: 'cubic-bezier(0.4, 0, 1, 1)',
+ out: 'cubic-bezier(0, 0, 0.2, 1)',
+ 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)'
+ },
+ translate: ({ theme }) => ({
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ full: '100%'
+ }),
+ size: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ '1/12': '8.333333%',
+ '2/12': '16.666667%',
+ '3/12': '25%',
+ '4/12': '33.333333%',
+ '5/12': '41.666667%',
+ '6/12': '50%',
+ '7/12': '58.333333%',
+ '8/12': '66.666667%',
+ '9/12': '75%',
+ '10/12': '83.333333%',
+ '11/12': '91.666667%',
+ full: '100%',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content'
+ }),
+ width: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ '1/12': '8.333333%',
+ '2/12': '16.666667%',
+ '3/12': '25%',
+ '4/12': '33.333333%',
+ '5/12': '41.666667%',
+ '6/12': '50%',
+ '7/12': '58.333333%',
+ '8/12': '66.666667%',
+ '9/12': '75%',
+ '10/12': '83.333333%',
+ '11/12': '91.666667%',
+ full: '100%',
+ screen: '100vw',
+ svw: '100svw',
+ lvw: '100lvw',
+ dvw: '100dvw',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content'
+ }),
+ willChange: {
+ auto: 'auto',
+ scroll: 'scroll-position',
+ contents: 'contents',
+ transform: 'transform'
+ },
+ zIndex: {
+ auto: 'auto',
+ 0: '0',
+ 10: '10',
+ 20: '20',
+ 30: '30',
+ 40: '40',
+ 50: '50'
+ }
+ },
+ plugins: []
+};
Is an object whose properties have the value 'true' -when they will be absent when used in a 'with' statement.
-